A programozás alapjai (üzemmérnök informatikus) 2019 NZH megoldások
A VIK Wikiből
1. feladat: ProgAlap eredmények
def osztalyoz(pont): if (pont <= 39): return 1 if (pont <= 54): return 2 if (pont <= 69): return 3 if (pont <= 84): return 4 return 5 def main(): db = [0] * 5 sor = input() while sor != "": pont = int(sor) db[osztalyoz(pont)-1] += 1 sor = input() for jegy in range(1, 5+1): print('{} {:3} {}'.format(jegy, db[jegy-1], '*' * db[jegy-1])) print('átment {} fő'.format(sum(db[1:]))) main()
Pontozás:
- függvény (ha nem pont ez a paraméterezés/érték, mind elveszik): fejléc
- pont-jegy átalakítás, visszatérési érték előállítása
- főprogram, adatok kezelése: beolvasás végjelig, üres sor
- int átalakítás, ami a végjelre nem történik meg
- adatszerkezet (5 vagy 6 elemű lista)
- pontszám leképezése tömbelemre, számlálók növelése
- főprogram, eredmény kiírása: megfelelően paraméterezett for vagy while ciklus
- jegy és létszámok kiírása
- csillagok kiírása
- átment (elégséges...jeles): szummázás
2. feladat: A kapitány
def hany_osztoja_van(szam): db = 0 for oszto in range(1, szam + 1): if szam % oszto == 0: db += 1 return db def van_benne(szam, szamjegy): while szam > 0: if szam % 10 == szamjegy: return True szam //= 10 return False def main(): ev = 2018 while not (hany_osztoja_van(ev) == 8 and van_benne(ev, 7)): ev -= 1 print("Születés: {}, életkor: {}".format(ev, 2019-ev)) main()
Pontozás:
- hány osztója van függvény: fejléc, paraméterezés (egész szám) és visszatérési érték (egész szám minden ágon)
- számlálás algoritmusa (db kezdetben nulla, néha nő)
- osztókat számlál, modulót használ, 1-et és a számot is beleérti
- van benne adott számjegy: fejléc, paraméterezés (két egész szám), visszatérési érték (logikai típus minden ágon)
- True érték, ha van, False érték, ha sehol nincs
- összes számjegyet megvizsgálja
- ki tud venni egy számjegyet (modulo 10)
- évszám megkeresése: 2019-től visszafelé megy a ciklus az első találatig, nincs tárolás, nincs maxkeresés
- megáll a találatnál, és az év/egyéb változóban tényleg jó számot ír ki
- kiírja az eredményt, a születési évszámot és az életkort is
3. feladat: Egyformák, éppen a duplája
import random def szaz_veletlenszam(): szamok = [] for _ in range(100): szamok.append(random.randint(1, 1000)) return szamok def van_ismetlodes(szamok): for i in range(0, len(szamok) - 1): if szamok[i] == szamok[i + 1]: return True return False def egyik_masiknak_duplaja(szamok): db = 0 for i in range(0, len(szamok) - 1): for j in range(i + 1, len(szamok)): if szamok[i] * 2 == szamok[j] or szamok[i] == szamok[j] * 2: db += 1 return db def main(): sz = szaz_veletlenszam() if van_ismetlodes(sz): print("Van ismétlődés") else: print("Nincs ismétlődés") print(egyik_masiknak_duplaja(sz), "duplás pár van") main()
Pontozás:
- száz véletlenszám: random.randint vagy randrange helyes használata, van import random
- beteszi a számokat a listába
- van-e ismétlődés: egymás melletti számokat vizsgál, nem indexel túl
- ciklus végig a listán, végig is megy, ha nincs találat
- megáll a keresés az első találatnál
- egyik a másiknak duplája: megszámlálás algoritmusa (db = 0, if ... db + 1, return db)
- ciklus minden számhoz
- ciklus minden *további* számhoz, saját maga nem, előzőek nem
- figyelembe veszi, hogy a sorrend nem számít (pl. 50-100 és 100-50 is jó)
- főprogram: helyesen használja a függvényeit
4. feladat: Dráma!
# a mintamegoldás a tanult sztringkezelő függvényeket használja, # de ciklusokkal megírt keresés is teljesen jó. akár regex is. def atalakit(sor): kettospont = sor.find(':') if kettospont == -1: raise ValueError("Nincs kettőspont a sorban") nev = sor[:kettospont] szoveg = sor[kettospont+1:] szoveg = szoveg.strip() return "<" + nev + "> " + szoveg def main(): while True: sor = input() if sor == "": break try: ujformatum = atalakit(sor) print(ujformatum) except: pass main()
Pontozás:
- átalakítás: kettőspont megkeresése
- ha nincs kettőspont, kivétel dobása
- név kivágása, figyelve, hogy a kettőspont már ne kerüljön bele
- szöveg kivágása, ne kerüljön bele a kettőpont
- vezető szóközök levágása a szövegből. működjön, ha nincs szóköz.
- új, kacsacsőrös formátum összeállítása
- főprogram: beolvasás üres végjelig, sorig
- átalakító fv hívása
- kivétel elkapása, kezelése (elkapni kell, de teendő nincs)
- eredmény kiírása, ez a főprogramban kell legyen, nem az átalakítóban