Kierros 3, tehtävä 4

Pallon korkeus (200 p)

Tässä tehtävässä harjoitellaan erityisesti seuraavia asoita:

Tee Eclipseen uusi projekti, jonka nimi on tehtava3_4. Luo sitten tähän projektiin moduli pallonheitto ja kirjoita siihen ohjelma, joka ratkaisee seuraavan ongelman: Pallo heitetään korkeudelta h0 suoraan ylöspäin niin, että sen lähtönopeus on v0. Kirjoita ohjelma, joka laskee, kuinka korkealle pallo nousee ennen kuin se lähtee takaisin alaspäin ja minä ajanhetkenä pallo saavuttaa tämän korkeimman kohtansa. Sen lisäksi ohjelman pitää tulostaa pallon korkeus ja nopeus käyttäjän antaman aikavälin välein niin kauan, kunnes pallo on pudonnut takaisin maahan. Ilmanvastusta ym. seikkoja ei oteta huomioon, vaan oletetaan, että pallon nopeuteen vaikuttaa ainoastaan lähtönopeus ja maan vetovoiman aiheuttama kiihtyvyys g. Käytä ohjelmassa likiarvoa g = 9.81 m/(s*s)

Huomaa, että ohjelman ei tarvitse tulostaa, minä ajanhetkenä pallo osuu maahan (se vaatisi toisen asteen yhtälön ratkaisemista, mikä kyllä onnistuu Python-ohjelmassa helposti, mutta lisäisi tämän tehtävän työmäärää selvästi). Kun ohjelma tulostaa pallon nopeuden eri ajanhetkinä, niin positiivinen nopeus tarkoittaa pallon olevan matkalla ylöspäin ja negatiivinen nopeus pallon olevan matkalla alaspäin. Voit miettiä itse, mitä kaavoja tarvitset ongelman ratkaisemiseksi. Niitä varten, joiden fysiikan taidot ovat jo ruostuneet, on kuitenkin selitetty seuraavassa kappaleessa ongelman ratkaisuperiaatteet.

Ratkaisussa tarvittavia kaavoja (voit hypätä tämän kappaleen yli, jos haluat miettiä asian itse)

Pallon nopeus on aluksi v0, mutta palloon rupeaa heti vaikuttamaan maan vetovoiman aiheuttama kiihtyvyys alaspäin g. Tämän vuoksi pallon nopeus ajan t kuluttua on v0 - gt. Pallo saavuttaa suurimman korkeutensa siinä vaiheessa, kun sen nopeus on 0. Pallon korkeus saadaan integroimalla pallon nopeus muuttujan t suhteen ja lisäämällä näin saatuun kaavaan pallon lähtökorkeus h0. Näin pallon korkeudeksi ajanhetkellä t saadaan h0 + v0 * t - 0.5 * g * t ** 2, missä ** tarkoittaa potenssiin korotusta.

Pallon suurin korkeus saadaan sijoittamalla korkeuden kaavaan se aika, jolloin pallon nopeus on 0. Pallo taas putoaa maahan siinä vaiheessa, kun sen korkeus on em. kaavan perusteella 0. Tämän jälkeen kaava antaa pallolle negatiivisia korkeuksia, koska kaava ei ota huomioon sitä, että pallo ei voi jatkaa liikettään maanpinnan alapuolelle. Tässä tehtävässä ei tarvitse ratkaista, minä hetkenä pallo saavuttaa maanpinnan tason. Pallon korkeus ja nopeus tulostetaan käyttäjän antaman väliajan välein niin pitkään, kun korkeus ei ole negatiivinen.

Ohjelman palautuksesta ym.

Ole tarkka siitä, että ohjelmasi tulostus on täsmälleen (välimerkkejä myöten) alla olevan mallin mukainen. Muista erityisesti lisätä rivinvaihtomerkki raw_input-käskyissä käyttäjälle annettavan pyynnön loppuun. (Näin ohjelman tarkastus Goblinilla sujuu ilman ylimääräisiä ongelmia.) Käytä tulostuksen muotoilua siihen, että saat desimaaliluvut tulostettua siististi. Tulosta desimaaliluvut kahden desimaalin tarkkuudella ja varaa taulukossa ajalle, korkeudelle ja nopeudelle sopivan levyiset kentät niin, että tulostus on alla olevan mallin mukainen. Esimerkissä ajalle on käytetty 8 merkin levyistä, korkeudelle 12 merkin levyistä ja nopeudelle 13 merkin levyistä kenttää. Lisäksi kenttien välillä on yksi välilyönti.

Ohjelman ei tarvitse tarkistaa, että käyttäjän antamat syötteet ovat järkeviä (esimerkiksi että lähtökorkeus ja -nopeus ovat positiivisia). Palauta Gobliniin tiedosto pallonheitto.py.

Esimerkki ohjelman suorituksesta:

[ohjelman suoritus alkaa]
Anna korkeus, jolta pallo heitetaan (m).
1.7
Anna pallon lahtonopeus (m/s).
15
Anna aikavali (s).
0.5
Pallo saavuttaa huippukorkeutensa ajanhetkella 1.53 s,
ja sen korkeus silloin on 13.17 m.
Pallon korkeus ja nopeus eri ajanhetkina:
aika (s)  korkeus (m)  nopeus (m/s)
    0.00         1.70         15.00
    0.50         7.97         10.09
    1.00        11.79          5.19
    1.50        13.16          0.29
    2.00        12.08         -4.62
    2.50         8.54         -9.53
    3.00         2.55        -14.43
[ohjelman suoritus päättyy]

Värikoodit:
Sininen: Syöte käyttäjältä
Vihreä: Ohjelman tuloste
Punainen: Erityishuomatus: ei tulosteta