Kierros 3, tehtävä 2

Kappaleen putoaminen (150 p)

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

Tee Eclipseen uusi projekti, jonka nimi on tehtava3_2, ja tähän projektiin moduuli putoamisnopeus. Kirjoita moduuliin ohjelma, jonka avulla voit laskea, millä nopeudella kerrostalon katolta putoava jääkappale törmää jalkakäytävällä kulkevaan ihmiseen. Ohjelman tarkempi kuvaus on alla.

Kappale putoaa annetulta korkeudelta niin, että sen lähtönopeus on 0. Oletetaan, että kappaleen nopeuteen putoamisen aikana vaikuttaa vain maan vetovoiman aiheuttama kiihtyvyys (ilmanvastusta ym. seikkoja ei oteta huomioon). Kirjoita ohjelma, joka tulostaa kappaleen nopeuden eri kohdissa putoamisen aikana. Käyttäjä antaa haluamansa välimatkan, jonka putoamisen jälkeen uusi nopeus aina tulostetaan (katso esimerkkiajoja). Tulostus jatkuu niin kauan kuin pudottu matka on pienempi tai yhtäsuuri kuin alkuperäinen putoamiskorkeus. Huomaa, että nopeus tulostetaan aina, kun kappale on pudonnut määrätyn matkan, ei määrätyn ajan kulumisen jälkeen. Käytä ohjelmassa maan vetovoiman aiheuttamalle kiihtyvyydelle likiarvoa g = 9.81 m/(s*s). Ohjelma antaa kappaleen nopeuden sekä metreinä sekunneissa että kilometreinä tunnissa. Jälkimmäinen saadaan edellisestä kertomalla se 3,6:lla.

Tarvitset ohjelmassa neliöjuuren laskemista. Siihen on Pythonissa valmis funktio math-moduulissa. Saat moduulin funktiot käyttöön kirjoittamalla ohjelmaan ennen pääohjelman otsikkoa

import math
Esimerkiksi muuttujassa luku olevan arvon neliöjuuren saat tämän jälkeen kirjoittamalla
math.sqrt(luku)

Voit miettiä itse, mitä kaavoja tarvitse 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)

Putoavan kappaleen nopeus on aluksi 0, mutta kappaleeseen rupeaa heti vaikuttamaan maan vetovoiman aiheuttama kiihtyvyys alaspäin g. Tämän vuoksi pallon nopeus ajan t kuluttua on gt. Nyt tulostusta ei kuitenkaan haluta määrätyin aikavälein, vaan aina määrätyn putoamismatkan kuluttua. Pallon ajassa t kulkema matka saadaan integroimalla pallon nopeus muuttujan t suhteen. Näin kuljetuksi matkaksi ajanhetkellä t saadaan s = 0.5 * g * t ** 2, missä ** tarkoittaa potenssiin korotusta. Jos kuljettu matka s on tunnettu, saadaan siitä putoamiseen tähän mennessä käytetty aika ratkaisemalla annetusta yhtälöstä t. Näin saadaan t = sqrt(2 * s / g), missä sqrt tarkoittaa neliöjuurta. Kappaleen putoamisnopeus ajan t kuluttua saadaan kertomalla putoamiseen käytetty aika t kappaleen kiihtyvyydellä g. Näin putoamisnopeudeksi matkan s jälkeen saadaan v = sqrt(2 * s * g). Tätä kaavaa voi käyttää ohjelmassa suoraan kappaleen putoamisnopeuden määrittämiseen niin, että s:n arvo on aluksi nolla ja se kasvaa käyttäjän haluamalla välillä jokaisella kierroksella. Kaava antaa kappaleen nopeuden metreinä sekunnissa.

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 putoamismatkalle ja nopeuksille sopivan levyiset kentät niin, että tulostus on alla olevan mallin mukainen. Siinä putoamismatkalle on varattu 17:n, nopeudelle metreinä sekunnissa 12:n ja nopeudelle kilometreinä tunnissa 13:n merkin levyiset kentät. Lisäksi kenttien välillä on kaksi välilyöntiä.

Ohjelman ei tarvitse tarkistaa, että käyttäjän antamat syötteet ovat desimaalilukuja. Sen sijaan ohjelman pitää tarkistaa, että korkeus ja tulostusväli ovat positiivisia ja että tulostusväli ei ole suurempi kuin korkeus. Jos jokin näistä ehdoista ei pidä paikkaansa, ohjelma tulostaa "Kelvoton vali tai korkeus.", eikä tee muuta. Palauta Gobliniin tiedosto putoamisnopeus.py.

Esimerkkejä ohjelman suorituksesta:

[ohjelman suoritus alkaa]
Milta korkeudelta kappale pudotetaan (m)?
30
Anna tulostusvali (m):
2.5
putoamismatka (m)  nopeus (m/s)  nopeus (km/h)
             0.00          0.00           0.00
             2.50          7.00          25.21
             5.00          9.90          35.66
             7.50         12.13          43.67
            10.00         14.01          50.43
            12.50         15.66          56.38
            15.00         17.16          61.76
            17.50         18.53          66.71
            20.00         19.81          71.31
            22.50         21.01          75.64
            25.00         22.15          79.73
            27.50         23.23          83.62
            30.00         24.26          87.34
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa]
Milta korkeudelta kappale pudotetaan (m)?
5.25
Anna tulostusvali (m):
0.5
putoamismatka (m)  nopeus (m/s)  nopeus (km/h)
             0.00          0.00           0.00
             0.50          3.13          11.28
             1.00          4.43          15.95
             1.50          5.42          19.53
             2.00          6.26          22.55
             2.50          7.00          25.21
             3.00          7.67          27.62
             3.50          8.29          29.83
             4.00          8.86          31.89
             4.50          9.40          33.83
             5.00          9.90          35.66
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa]
Milta korkeudelta kappale pudotetaan (m)?
-5.0
Anna tulostusvali (m):
1.25
Kelvoton vali tai korkeus.
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa]
Milta korkeudelta kappale pudotetaan (m)?
14.0
Anna tulostusvali (m):
-0.5
Kelvoton vali tai korkeus.
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa]
Milta korkeudelta kappale pudotetaan (m)?
3.0
Anna tulostusvali (m):
3.5
Kelvoton vali tai korkeus.
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa]
Milta korkeudelta kappale pudotetaan (m)?
2.0
Anna tulostusvali (m):
2.0
putoamismatka (m)  nopeus (m/s)  nopeus (km/h)
             0.00          0.00           0.00
             2.00          6.26          22.55
[ohjelman suoritus päättyy]

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