Kontrollülesanne
Kursusel "Programmeerimise alused II" eeldame, et osaleja on suuteline iseseisvalt (materjalide abiga) ja mõistliku ajaga lahendama järgneva ülesande. Näidislahendus on toodud pärast ülesande teksti.
Ü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);
- (kasutades vastavat funktsiooni) 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äiteks fail kaugus.txt, kus on arvud
6.56
5.76
5.82
5.23
5.74
6.14
5.28
5.77
6.45
6.02
5.78
annab tulemuse (kasutaja sisend on kaldkirjas)
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.
Fail kaugus.txt
Järgnevalt on toodud üks võimalik lahendus.
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)) + ".")