Első megoldás[]
Tesztelve a 3.6.1 verzióban.
# coding: utf-8
"""
2017. őszi közismereti érettségi, Hiányzások feladat
A megoldások sorrendjét a célszerűség diktálja.
"""
def f(i):
print('%d. feladat:' % i)
# Először megoldom azt a két feladatot, amihez nem kell beolvasni a forrást.
# Pythonosítom a 4. feladatban megadott pszeudokódot ékezetekkel:
def hetnapja(honap, nap):
napnev = \
["vasárnap", "hétfő", "kedd", "szerda", "csütörtök", "péntek", "szombat"]
napszam = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 335]
napsorszam = (napszam[honap - 1] + nap) % 7
return napnev[napsorszam]
f(5)
datum = [int(i) for i in input('Adja meg a hónap és a nap sorszámát vesszővel elválasztva: ').split(',')]
# A következő sorban alkalmazott Python-specifikus rövidítő megoldás a kicsomagolás.
print('Ez a nap ' + hetnapja(*datum) + '.')
# 1. feladat
text = open('naplo.txt').readlines() # Lista lesz.
# Elvégzem az egyetlen további adatbekérést, hogy egy menetben oldhassak meg mindent.
f(6)
nap_ora = input('Kérem a nap nevét és az óra sorszámát szóközel elválasztva: ').split(' ')
nap = nap_ora[0]
ora = int(nap_ora[1])
hianyzas_sorok = 0
igazolt = 0
igazolatlan = 0
adott_ora = 0
aktualis_nap = ''
hianyzok = dict()
for line in text:
if line.startswith('#'):
datum = [int(n) for n in line.split(' ')[1:]]
aktualis_nap = hetnapja(*datum)
else:
if len(line) > 1: # Hátha beolvasott üres sort.
hianyzas_sorok += 1
l = line.rsplit(' ', 1)
neve = l[0]
jelek = l[1]
igazolt += jelek.count('X')
igazolatlan += jelek.count('I')
if aktualis_nap == nap and jelek[ora-1] in 'IX':
adott_ora +=1
hianyzok[neve] = hianyzok.get(neve,0) + jelek.count('X') + jelek.count('I')
print('%s %d. órában összesen %d hiányzás történt.' % \
(nap.title(), ora, adott_ora))
f(2)
print('A naplóban %d bejegyzés van.' % hianyzas_sorok)
f(3)
print('Az igazolt hiányzások száma %d, az igazolatlanoké %d óra.' % \
(igazolt, igazolatlan))
f(7)
maxh = max(hianyzok.values())
print('A legtöbbet hiányzó tanulók: ' +
' '.join([k for k in hianyzok if hianyzok[k] == maxh]))
Második megoldás[]
Tesztelve a 3.6.1 verzióban.
# coding: utf-8
"""
2017. őszi közismereti érettségi, Hiányzások feladat
Ez a megoldás sqlite adatbázist használ.
https://docs.python.org/3/library/sqlite3.html
"""
import sqlite3
def f(i):
print('%d. feladat:' % i)
# Először megoldom azt a két feladatot, amihez nem kell beolvasni a forrást.
# Pythonosítom a 4. feladatban megadott pszeudokódot ékezetekkel:
def hetnapja(honap, nap):
napnev = \
["vasárnap", "hétfő", "kedd", "szerda", "csütörtök", "péntek", "szombat"]
napszam = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 335]
napsorszam = (napszam[honap - 1] + nap) % 7
return napnev[napsorszam]
f(5)
datum = [int(i) for i in input('Adja meg a hónap és a nap sorszámát vesszővel elválasztva: ').split(',')]
# A következő sorban alkalmazott Python-specifikus rövidítő megoldás a kicsomagolás.
print('Ez a nap ' + hetnapja(*datum) + '.')
# Előkészítem az adatbázist
conn = sqlite3.connect(':memory:') # A RAM-ban hoz létre adatbázist.
c = conn.cursor()
c.execute('CREATE TABLE naplo(nap text, neve text, jelek text, hiany integer)')
# 1. feladat
text = open('naplo.txt').readlines() # Lista lesz.
aktualis_nap = ''
for line in text:
if line.startswith('#'):
datum = [int(n) for n in line.split(' ')[1:]]
aktualis_nap = hetnapja(*datum)
else:
if len(line) > 1: # Hátha beolvasott üres sort.
l = line.rsplit(' ', 1)
neve = l[0]
jelek = l[1]
hiany = jelek.count('I') + jelek.count('X')
tup = (aktualis_nap, neve, jelek, hiany)
c.execute('INSERT INTO naplo VALUES(?, ?, ?, ?)', tup)
f(2)
c.execute('SELECT total_changes()')
print('A naplóban %d bejegyzés van.' % c.fetchone())
f(3)
c.execute("SELECT group_concat(jelek, '') FROM naplo")
s = c.fetchone()
igazolt = s[0].count('X')
igazolatlan = s[0].count('I')
print('Az igazolt hiányzások száma %d, az igazolatlanoké %d óra.' % \
(igazolt, igazolatlan))
f(6)
nap_ora = input('Kérem a nap nevét és az óra sorszámát szóközel elválasztva: ').split(' ')
nap = nap_ora[0]
ora = int(nap_ora[1]) # A string viszi az aposztrófját a lekérdezésbe, ezért kell int.
sql = "SELECT sum(case when instr('IX', substr(jelek, ?, 1))>0 then 1 else 0 end) FROM naplo WHERE nap=?"
c.execute(sql, (ora, nap))
print('%s %d. órában összesen %d hiányzás történt.' % \
(nap.title(), ora, c.fetchone()[0]))
f(7)
sql = "WITH osszes AS (select neve, sum(hiany) as ora from naplo group by neve), " + \
"maximum as (select max(ora) as m from osszes), " + \
"tagok AS (select neve from osszes inner join maximum on osszes.ora=maximum.m) " + \
"SELECT group_concat(neve, ' ') FROM tagok"
c.execute(sql)
print('A legtöbbet hiányzó tanulók: ' + c.fetchone()[0])
Harmadik megoldás videón[]
Érettségi feladatok programozásból |
---|
2004 Személyazonosító jel
2005 Lottó • Vigenère-tábla 2006 Telefonszámla • Fehérje • Zenei adók 2007 SMS-szavak • Foci 2008 SMS • Robot 2009 Lift • Automata • Útépítés 2010 Helyjegy • Telek • Anagramma 2011 Szójáték • Rejtvény • Pitypang 2012 Futár • Törtek • Szín-kép 2013 Választások • Számok • Közúti ellenőrzés 2014 IPv6 • Céllövészet • Nézőtér 2015 Expedíció • Latin táncok • Fej vagy írás 2016 Ötszáz • Zár • Telefonos ügyfélszolgálat 2017 Tesztverseny • Fürdő • Hiányzások 2018 Társalgó • Fogadóóra • Kerítés 2019 Céges autók • Tantárgyfelosztás • eUtazás 2020 Meteorológiai jelentés • Menetrend • Sorozatok 2021 Gödrök • Bányató |