40 Ülesanne. Kaugushüpe
Noorte kaugushüppe võistlusel sai täita meistrivõistluste normatiivi. Juhtus aga, et mõõteseade muutis kõiki tulemusi ühe ja sama arvu sentimeetrite võrra. Õnneks olid tulemused faili salvestatud ja nüüd sai arvutades leida tegelikud tulemused.
Selleks, et edaspidi saaks selliseid olukordi kiiremini lahendada, otsustati tellida programm, mis lisaks tulemuste korrigeerimisele leiab ka normatiivi täitnud tegelike tulemuste arvu ning nende aritmeetilise keskmise.
Koostada funktsioon parandatud_tulemus
, mis võtab argumentideks vigase tulemuse (meetrites) ja mõõteparanduse (sentimeetrites). Funktsioon arvutab tegeliku tulemuse (meetrites) ning tagastab selle.
tegelikTulemus = viganeTulemus + mõõteparandus / 100
Koostada programm, mis küsib kasutajalt
- failinime,
- mõõteparanduse (nt 35 näitab, et igale tulemusele tuleb liita 35 sentimeetrit (e 0,35 meetrit)),
- meistrivõistluste normatiivi.
Programm peab
- lugema failist vigased tulemused (meetrites);
- funktsiooniga
parandatud_tulemus
arvutama tegelikud tulemused ja väljastama need ekraanile (ümardatuna kahe kümnendkohani pärast koma); - arvutama ja väljastama ekraanile normatiivi täitnud tegelike tulemuste arvu ja nende keskmise (ümardatuna kahe kümnendkohani pärast koma).
- Kui normatiivi täitjaid ei ole, siis keskmist ei arvutata ega väljastata.
Näide programmi tööst
Faili kaugus.txt
sisu:
6.56
5.76
5.82
5.23
5.74
6.14
5.28
5.77
6.45
6.02
5.78
Programmi töö:
Sisestage failinimi: kaugus.txt Sisestage parandus sentimeetrites: 35 Sisestage meistrivõistluste normatiiv meetrites: 6.45 Tegelikud tulemused 6.91 6.11 6.17 5.58 6.09 6.49 5.63 6.12 6.8 6.37 6.13 Normatiivi täitis 3. Täitnute keskmine on 6.73.
Näidislahendus
Sellele ülesandele anname ka näidislahenduse. Järgmistes ülesannetes pead ilma selleta hakkama saama.
Vaata ka lahenduse loomise videot.
def parandatud_tulemus(vigane_tulemus, parandus): return vigane_tulemus + parandus / 100 failinimi = input("Sisestage failinimi: ") mõõteparandus = int(input("Sisestage parandus sentimeetrites: ")) normatiiv = float(input("Sisestage meistrivõistluste normatiiv meetrites: ")) vigased_tulemused = [] f = open(failinimi) for rida in f: vigased_tulemused += [float(rida)] tegelikud_tulemused = [] print("Tegelikud tulemused") for tulemus in vigased_tulemused: tegelik_tulemus = parandatud_tulemus(tulemus, mõõteparandus) print(round(tegelik_tulemus, 2)) tegelikud_tulemused += [tegelik_tulemus] arv = 0 summa = 0 for tulemus in tegelikud_tulemused: if tulemus >= normatiiv: arv += 1 summa += tulemus print("Normatiivi täitis " + str(arv) + ".") if arv > 0: print("Täitnute keskmine on " + str(round(summa/arv, 2)) + ".")