Fizika, matek, informatika érettségi

Home Fizika Excel Access A weboldalról

4. szint

X. Kalapácsvetés

A 2012. évi nyári olimpiai játékokon az atlétika férfi kalapácsvetés versenyszámát augusztus 3-án és 5-én rendezték a londoni Olimpiai Stadionban. A versenyt a Magyarországot képviselő Pars Krisztián nyerte meg. Ebben a feladatban az augusztus 3-án megrendezett selejtező eredményeit feldolgozva kell feladatokat megoldania. Megoldásában vegye figyelembe a következőket: A Selejtezo2012.txt UTF-8 kódolású forrásállomány tartalmazza soronként az atléták adatait és az általuk a selejtezőben elért eredményeket. A selejtezőben minden versenyzőnek három dobásra van lehetősége. Az adatokat pontosvesszővel választottuk el, az első sor az adatok fejlécét tartalmazza. A mezők leírása: Készítsen programot a következő feladatok megoldására és mentse Pars2012 néven!

Feladatok:
  1. Olvassa be a Selejtezo2012.txt állományban lévő adatokat, és tárolja el egy olyan adatszerkezetben, ami a további feladatok megoldására alkalmas! Az állományban legfeljebb 50 sor lehet.
  2. Határozza meg és írja ki a képernyőre, hogy hány atléta adatait tároltuk a forrásállományban!
  3. Határozza meg és írja ki a képernyőre, hány nemzet képviselői vettek részt a versenyben!
  4. Számolja meg és írja ki a képernyőre, hogy hány versenyző jutott tovább automatikusan a döntőbe 78 m feletti dobással az első vagy második dobásával!
  5. Készítsen függvényt (metódust stb.) az eredmény meghatározására Eredmény néven, ami a versenyző legnagyobb dobásának értékét adja vissza! (Ha nem volt érvényes dobása a versenyzőnek, akkor ez -1.0 lesz.)
  6. Határozza meg a selejtezőben legjobb eredményt (legnagyobb dobást) elért atléta adatait! Feltételezheti, hogy nem alakult ki holtverseny. Az adatokat írja a képernyőre!
  7. A program kérje be egy nemzet azonosítóját, majd írja ki az adott nemzethez tartozó versenyzők legjobb eredményét, eredmény szerinti csökkenő sorrendben. Ha nem volt versenyző a megadott azonosítóhoz, "Nincs adat." választ adjon.
  8. Készítsen UTF-8 kódolású szöveges állományt Dontos2012.txt néven a döntőbe jutott legjobb 12 eredményt elérő versenyző adataival, a kiadott minta szerint! Az első sorba a mezőnevek kerüljenek! Feltételezheti, hogy a 12.-13. helyen nem alakult ki holtverseny.
Letöltés: Selejtezo2012.txt

Minta:
1. feladat
Versenyzők száma: 42

2. feladat
Nemzetek száma: 32

4. feladat
Továbbjutott 3 versenyző.

6. feladat
A selejtező nyertese:
Név: Pars Krisztián
Csoport: B
Nemzet: Magyarország
Nemzetkód: HUN
Sorozat: 77,11;79,37;-
Eredmény: 79,37

7. feladat
Kérem egy nemzet kódját: USA
USA versenyzőinek eredményei: Kibwe Johnson 77.17; A. G. Kruger 72.13


A Dontos2012.txt mintája:
Helyezés;Név;Csoport;Nemzet;Nemzetkód;Sorozat;Eredmény
1;Pars Krisztián;B;Magyarország;HUN;77,11;79,37;-;79,37
2;Murofusi Kódzsi;A;Japán;JPN;77,18;78,48;-;78,48


(A 2021. május 12-ei informatikai ismeretek emelt szintű gyakorlati vizsga alapján.)


with open('Selejtezo2012.txt', encoding='utf8') as f:
    forras=f.read().splitlines()
adatok=[forras[i].split(';') for i in range(1,len(forras))]

print('1. feladat\nVersenyzők száma:',len(forras))

nemz=set([a[2][-4:-1] for a in adatok])
print('\n2. feladat\nNemzetek száma:',len(nemz))

def konvert(k):
    k1=''
    for b in k:
        if b==",":
            k1+='.'
        else:
            k1+=b
    return k1

def konvert1(k):
    k1=''
    for b in k:
        if b==".":
            k1+=','
        else:
            k1+=b
    return k1

tovabb=[]
for a in adatok:
    if a[3] not in ['X','-']:
        if float(konvert(a[3]))>78:
            tovabb.append(a)
    if a[4] not in ['X','-'] and a not in tovabb:
        if float(konvert(a[4]))>78:
            tovabb.append(a)
print('\n4. feladat\nTovábbjutott',len(tovabb),'versenyző.')

def eredmeny(v):
    legjobb=-1.0
    if v[3] not in ['X','-']:
        legjobb=float(konvert(v[3]))
    if v[4] not in ['X','-']:
        if float(konvert(v[4]))>legjobb:
            legjobb=float(konvert(v[4]))
    if v[5] not in ['X','-']:
        if float(konvert(v[5]))>legjobb:
            legjobb=float(konvert(v[5]))
    return legjobb
    
for a in adatok:
    a.append(eredmeny(a))
adatok.sort(key=lambda e:e[6], reverse=True)
ny=adatok[0]
print('\n6. feladat\nA selejtező nyertese:')
kiir='\tNév: '+ny[0]+'\n\tCsoport: '+ny[1]+'\n\tNemzet: '+ny[2][:-6]
kiir+='\n\tNemzetkód: '+ny[2][-4:-1]+'\n\tSorozat: '+ny[3]+';'+ny[4]+';'+ny[5]
kiir+='\n\tEredmény: '+konvert1(str(ny[6]))
print(kiir)

kod=input('\n7. feladat\nKérem egy nemzet kódját: ')
nl=[a[0]+' '+str(a[6]) for a in adatok if a[2][-4:-1]==kod]
if nl:
    print(f'{kod} versenyzőinek eredményei:','; '.join(nl))
else:
    print('Nincs adat.')

f=open('Dontos2012.txt ','w')
kiir='Helyezés;Név;Csoport;Nemzet;Nemzetkód;Sorozat;Eredmény'
for i in range(12):
    a=adatok[i]
    kiir+='\n'+str(i+1)+';'+a[0]+';'+a[1]+';'+a[2][:-6]+';'+a[2][-4:-1]+';'+a[3]+';'+a[4]+';'+a[5]+';'+konvert1(str(a[6]))
print(kiir,file=f)
f.close()