Naloga

Napiši program za izračun dolžine strela s topom (ki brez trenja izstreljuje točkaste krogle v brezzračnem prostoru, a pustimo trivio). Program od uporabnika ali uporabnice zahteva, da mu ta vpiše hitrost izstrelka (to je, omenjene točkaste krogle) in kot, pod katerim je izstreljen. Program izračuna in izpiše, kako daleč bo letela krogla.

Pomoč za fizično nebogljene: \(s = \frac{v^2\sin 2\phi}{g}\), kjer je \(s\) razdalja, \(v\) hitrost izstrelka, \(\phi\) je kot, \(g\) pa osma črka slovenske abecede.

Naloga za bolj zagnane: napiši program, ki mu uporabnik v začetku vpiše razdaljo do mesta in hitrost, s katero izstreljuje top. Predpostavimo namreč, da top vedno izstreljuje z isto hitrostjo (in prav tako predpostavimo, da je mesto vedno enako daleč). Nato uporabnik vpisuje različne kote, računalnik pa mu odgovarja, ali bo krogla letela preblizu ali predaleč. "Ugibanje" se konča, ko uporabnik vnese pravi kot, to je, kot, pod katerim je potrebno izstreliti kroglo, da "zgreši" želeno razdaljo za manj kot sto metrov.

Preverite tole: krogla leti najdalj, če jo izstrelimo pod kotom 45 stopinj. Poskusite, kako daleč gre pod kotom 45 in kako daleč pod 46 stopinj - po 45 mora leteti dlje. In če pod kotom 50 stopinj leti nazaj (razdalja je negativna), ste ga gotovo nekje polomili. Kaj, točno, je narobe, vam lahko hitro sčveka kolega, ki je že rešil problem, vendar vam priporočam, da ga poskusite odkriti sami - za vajo v sledenju programu. Za namig pa malo preletite tole stran: http://en.wikipedia.org/wiki/Sine. Če ste na robu obupa, pa poglejte, kaj wikipedija pravi o kotih.

Ali program deluje pravilno, najpreprosteje preverite tako, da na roko izračunate, kako daleč leti krogla, ki jo izstrelite pod kotom 45 stopinj s hitrostjo 10 m/s in primerjate rezultat s tem, kar vrne program.

Rešitev

Rešitev topostrelske domače naloge je preprosta, težave bi lahko delala samo funkcija sin. Zamolčal sem, da le-ta sprejme kot v radianih, ne stopinjah. Ko sem pred leti prvič zastavil to nalogo, je bilo, priznam, ponesreči, vendar sem vas potem namerno pustil trpeti zaradi svoje pozabljivosti, saj je stvar dobila izrazit pedagoški smoter. ;) Morda ste odkrili, da je z vašim programom nekaj narobe, morda pa bo dobil uporabnik vašega programa kroglo na glavo. Če ste odkrili, da je nekaj narobe s sinusom, ste morda pogledali dokumentacijo funkcije. Kdor je šel po tej poti, je ravnal prav. Google je vaš prijatelj, ni pa edini: pogosto se izplača tudi potrpežljivo branje dokumentacije. Kdor je guglal z "error in sine function" ni prišel daleč; kar piše v (kratki) dokumentaciji funkcije sin, pa bi moralo zadoščati.

Rešitev naloge je lahko takšna:

from math import * g = 10 kot = float(input("Vnesi kot (v stopinjah)")) v = float(input("Vnesi hitrost (v m/s)")) kot_rad = radians(kot) razdalja = v ** 2 * sin(2 * kot_rad) / g print("Kroglo bo odneslo", razdalja, "metrov daleč")

Komentirati pa v tem kratkem programu skoraj ni kaj.