Kandó Főmenü
Digitális kultúra  ·  középszintű érettségi
Forgalomszámlálás

Egy város közlekedéstervezési céllal kerékpárosforgalom-számlálót telepít az egyik főútjára. A próbaüzem reggel 6-tól 10-ig tart, amelynek során 15 percenként rögzítik a megelőző 15 percben áthaladó kerékpárosok számát. A rendszer még bizonytalan, ha technikai probléma – például áramszünet – történik a mérés során bármikor, akkor a rögzített érték abban az időintervallumban −1 lesz, különben az áthaladók száma nemnegatív egész szám. A rögzített mérési értékek száma 16, és értékük például a következő:

meres.txt
364839−1 3043−176 67827375 64736963
Piros = hibás mérés (−1)
6:15 → 1. sor  ·  6:30 → 2. sor  ·  6:45 → 3. sor  ·  7:00 → 4. sor
7:15 → 5. sor  ·  7:30 → 6. sor  ·  … és így tovább, 15 percenként
9:45 → 15. sor  ·  10:00 → 16. sor
1.A megadott 16 számot tárolja el a program forrásában egy megfelelő adatszerkezetben! A 16 szám rendelkezésre áll a meres.txt állományban, amelyből a program kódjába átmásolhatók.
2.A forgalomszámláló adatai alapján határozza meg az áthaladt összes kerékpáros számát, és írassa ki a minta szerint! Ügyeljen arra, hogy a számítás során a mérőhibás adatok ne befolyásolják az összeget!
3.Írassa ki a képernyőre a mintának megfelelően, hogy óránként hány kerékpáros haladt át a számlálón!
4.Határozza meg a legnagyobb mérési értéket és rögzítésének időpontját! Az eredményt írassa ki a mintának megfelelő formátumban! Több maximális érték esetén az elsőt jelenítse meg! A feladat szempontjából most egyformán helyesnek tekintjük a 07:00, 7:00, 7:0 írásmódot is.

A mérés kezdőadatai: 6:15-kor 36, 6:30-kor 48 kerékpáros, és így tovább. 7:00-kor és 7:45-kor −1 került rögzítésre, mert az előző negyedórában mérőhiba történt a számlálórendszerben. Az utolsó adatot, 63 kerékpárost 10:00-kor jegyezték fel.

Minta a szöveges kimenet kialakításához:
2. feladat
Összesen 838 kerékpárost számoltak.

3. feladat
Óránkénti mérések:
6 órától 123 kerékpáros
7 órától 149 kerékpáros
8 órától 297 kerékpáros
9 órától 269 kerékpáros

4. feladat
Az áthaladók maximális száma: 82; a rögzítés időpontja: 8:30.
Hogyan oldjuk meg lépésről lépésre?
Mielőtt belekezdenénk – alapfogalmak
Ezeket érdemes tudni a kód olvasásához
változó Egy névvel ellátott tároló, amibe értéket teszünk. Például osszeg = 0 azt jelenti: legyen egy "osszeg" nevű fiók, amelynek értéke most 0. Később ezt felülírhatjuk, növelhetjük stb.
lista Több érték együtt, sorban tárolva, szögletes zárójelben. Például meresi_adatok = [36, 48, 39, -1, ...]. Az elemeket 0-tól számozzuk: az első elem a 0. helyen van, a második az 1. helyen stb. Ezt a sorszámot indexnek nevezzük. Így a mi listánkban meresi_adatok[0] = 36 (a 6:15-ös adat), meresi_adatok[9] = 82 (a 8:30-as adat).
index (sorszám) A lista elemeinek sorszáma, 0-tól kezdve. A mi 16 elemű listánkban: lista[0]=36 (6:15), lista[1]=48 (6:30), lista[2]=39 (6:45) … lista[9]=82 (8:30) … lista[15]=63 (10:00). Az index és az időpont kapcsolata: (index + 1) × 15 perc = eltelt idő 6:00 óta.
print() Ez az utasítás kiírja a képernyőre azt, amit a zárójelbe írunk. Például print("Helló") → megjelenik: Helló. Az f-betűs változatban (print(f"Összesen {osszeg}...")) a kapcsos zárójelbe tett változó értékét automatikusan belehelyettesíti a szövegbe.
for ciklus Egy ismétlő utasítás: ugyanazt a műveletet hajtja végre többször, más-más értékkel. Például for i in range(4): négyszer fut le: i=0, i=1, i=2, i=3. Minden körben az i változó veszi fel a következő értéket.
if feltétel Egy döntési pont: a program csak akkor hajtja végre a következő sort, ha a feltétel igaz. Például if ertek != -1: azt jelenti: "csak akkor csináld, ha az érték nem -1". A != jel = "nem egyenlő".
1
Az adatok eltárolása listában
1. feladat

A feladat azt kéri, hogy a 16 számot tároljuk el a program kódjában egy megfelelő adatszerkezetben. A számok rendelkezésre állnak a meres.txt fájlban — onnan egyszerűen kimásoljuk őket, és egy listát hozunk létre belőlük. Ez egyetlen sorban megoldható.

1. feladat – lista létrehozása
meresi_adatok = [36, 48, 39, -1, 30, 43, -1, 76, 67, 82, 73, 75, 64, 73, 69, 63]
meresi_adatok = [...]Létrehozunk egy listát a 16 mérési értékkel. A szögletes zárójel jelzi, hogy lista. A számokat vesszővel választjuk el egymástól — pontosan abban a sorrendben, ahogy a meres.txt-ben szerepelnek (6:15-től 10:00-ig, 15 percenként).
-1 értékek a listábanA hibás mérések (-1) is belekerülnek a listába — a 4. és a 7. helyen (index 3 és 6). Ezeket majd a következő feladatokban szűrjük ki, nem most.
2
Összes kerékpáros megszámlálása
2. feladat – hibás (−1) értékek kizárásával

Össze kell adni az összes érvényes mérési értéket — vagyis amelyik nem −1. Ehhez végigmegyünk a listán, és egy if feltétellel kiszűrjük a hibás adatokat. Az összeghez az += operátorral adogatjuk hozzá az értékeket.

2. feladat – összesítés
osszeg = 0
for ertek in meresi_adatok:
    if ertek != -1:                             # a hibás (-1) értékeket kihagyjuk
        osszeg += ertek                         # hozzáadjuk az összeghez

print("2. feladat")
print(f"Összesen {osszeg} kerékpárost számoltak.")
# → 2. feladat:
# → Összesen 838 kerékpárost számoltak.
osszeg = 0Nulláról indul az összeg. Mint egy kasszafiók, amelybe majd berakjuk az értékeket egyenként.
for ertek in meresi_adatok:Végigmegy a lista összes elemén. Minden körben az ertek változó az aktuális szám: először 36, majd 48, 39, -1, 30 stb.
if ertek != -1:Feltétel: csak akkor adja hozzá, ha az érték nem egyenlő -1-gyel. A != jel azt jelenti: "nem egyenlő". A két hibás mérés (-1) így kimarad.
osszeg += ertekHozzáadja az aktuális értéket az összeghez. Az += rövidítés: osszeg = osszeg + ertek. A végén: 36+48+39+30+43+76+67+82+73+75+64+73+69+63 = 838.
print("2. feladat")Kiírja a feladat sorszámát — ez jelzi, melyik feladat eredménye következik.
print(f"Összesen {osszeg}...")Az f-string belehelyettesíti az osszeg változó értékét a szövegbe. Kimenet: Összesen 838 kerékpárost számoltak.
3
Óránkénti bontás
3. feladat – minden 4 adat = 1 óra

A 16 mérés 4 órára oszlik (6., 7., 8., 9. óra), és minden óra pontosan 4 adatot tartalmaz. Mivel a mérés a megelőző 15 percet rögzíti, a 6. óra adatai: 6:15, 6:30, 6:45, 7:00 (mind a hat és hét közötti forgalom). A listában ezek egymás után vannak: az első 4 a 6. óra, a következő 4 a 7. óra stb. Két egymásba ágyazott ciklust használunk: a külső az órákon megy végig, a belső az adott óra 4 negyedórájára.

Hogyan számolódik az index?
Pl. a 8. óra (i=2) 2. negyedórájához (j=1): 2 × 4 + 1 = 9 → lista[9] = 82 (ez a 8:30-as adat). A külső ciklus az órákon, a belső az adott óra 4 mérésén megy végig.
3. feladat – óránkénti bontás
print()
print("3. feladat")
print("Óránkénti mérések:")

for i in range(4):                              # i = 0, 1, 2, 3  →  6., 7., 8., 9. óra
    orankenti_osszeg = 0
    for j in range(4):                          # j = 0, 1, 2, 3  →  az óra 4 negyedórája
        ertek = meresi_adatok[i * 4 + j]        # pl. i=2, j=1 → index 9 → 82
        if ertek != -1:
            orankenti_osszeg += ertek
    print(f"{6 + i} órától {orankenti_osszeg} kerékpáros")

# → 3. feladat:
# → Óránkénti mérések:
# → 6 órától 123 kerékpáros  ...stb.
for i in range(4):Külső ciklus — négyszer fut le: i=0 (6. óra), i=1 (7. óra), i=2 (8. óra), i=3 (9. óra).
orankenti_osszeg = 0Minden új óránál nulláról indítjuk az összeget. Fontos, hogy ez a sorban belül van — különben az előző óra összege is benne maradna.
for j in range(4):Belső ciklus — az adott óra 4 negyedórájára megy végig: j=0, 1, 2, 3.
meresi_adatok[i * 4 + j]Kiszámolja, melyik listaelemhez tartozik az adott negyedóra. Pl. 8. óra (i=2), 2. negyedóra (j=1): 2×4+1 = 9 → lista[9] = 82.
if ertek != -1:A hibás -1-es értékeket itt is kizárjuk az összesítésből, ugyanúgy mint a 2. feladatnál.
print(f"{6 + i} órától...")A belső ciklus után írja ki az adott óra összegét. Ha i=0: 6+0=6 → "6 órától 123 kerékpáros". Ha i=2: 6+2=8 → "8 órától 297 kerékpáros".
4
Csúcsforgalom meghatározása
4. feladat – maximum keresés + időpont kiszámítása

Végigmegyünk az összes mérési értéken, és megkeressük a legnagyobbat — de nem elég tudni, mekkora, azt is meg kell jegyezni, hogy hányadik helyen van a listában (ez az index). Ebből a sorszámból számítjuk ki az időpontot: mivel a mérések 6:15-kor kezdődnek, az (index + 1) × 15 perc adja meg, hány perccel vagyunk 6:00 után. Az óra és a perc szétválasztásához egészosztást (//) és maradékot (%) használunk.

A // és % egyszerűen
Index 9 → (9 + 1) × 15 = 150 perc telt el 6:00 óta.
150 // 60 = 2 teljes óra  →  6 + 2 = 8. óra
150 % 60 = 30 maradék perc  →  :30
Eredmény: 8:30
4. feladat – csúcsforgalom
max_ertek = -1
max_index = 0

for i in range(len(meresi_adatok)):
    if meresi_adatok[i] > max_ertek:
        max_ertek = meresi_adatok[i]
        max_index = i

# Időpont kiszámítása az indexből
# (A mérések 6:15-kor kezdődnek → index 0 = 6:15, tehát +1 kell)
percek  = (max_index + 1) * 15                 # index 9 → (9+1)×15 = 150 perc
ora     = 6 + percek // 60                      # 150 // 60 = 2  →  6 + 2 = 8
perc    = percek % 60                           # 150 % 60 = 30
idopont = f"{ora}:{perc:02d}"                   # :02d → ha perc=0, akkor "8:00" (nem "8:0")

print()
print("4. feladat")
print(f"Az áthaladók maximális száma: {max_ertek}; a rögzítés időpontja: {idopont}.")
# → 4. feladat:
# → Az áthaladók maximális száma: 82; a rögzítés időpontja: 8:30.
max_ertek = -1Az eddigi legnagyobb értéket -1-ről indítjuk. Mivel minden valódi mérés ennél nagyobb, az első érvényes szám már felülírja majd.
max_index = 0Ide kerül a legnagyobb értékű elem sorszáma (indexe) a listában — ebből számítjuk ki majd az időpontot.
for i in range(len(...)):Végigmegy a lista összes elemén, miközben az i változó az aktuális sorszámot (0-tól 15-ig) tartalmazza.
if meresi_adatok[i] > max_ertek:Ha az aktuális elem nagyobb az eddigi maximumnál, frissítjük a maximumot és megjegyezzük a sorszámát. A végén i=9, mert lista[9]=82 a legnagyobb.
percek = (max_index + 1) * 15Index 9 → (9+1) × 15 = 150 perc telt el 6:00 óta. (+1 azért kell, mert a mérések 6:15-kor kezdődnek.)
ora = 6 + percek // 60// az egészosztás: 150 ÷ 60 = 2 teljes óra → 6 + 2 = 8. óra.
perc = percek % 60% a maradék: 150 - 2×60 = 30 perc maradt → :30.
f"{ora}:{perc:02d}"Az időpont szöveggé alakítása. A :02d legalább 2 jegyet ír ki: ha perc=0, akkor 8:00 jelenik meg, nem 8:0. Eredmény: "8:30".

A teljes megoldás

szamlalas.py
# 1. feladat – adatok eltárolása listában
meresi_adatok = [36, 48, 39, -1, 30, 43, -1, 76, 67, 82, 73, 75, 64, 73, 69, 63]

# 2. feladat – összes kerékpáros (hibás -1 értékek kizárásával)
osszeg = 0
for ertek in meresi_adatok:
    if ertek != -1:
        osszeg += ertek

print("2. feladat")
print(f"Összesen {osszeg} kerékpárost számoltak.")

# 3. feladat – óránkénti bontás
print()
print("3. feladat")
print("Óránkénti mérések:")
for i in range(4):
    orankenti_osszeg = 0
    for j in range(4):
        ertek = meresi_adatok[i * 4 + j]
        if ertek != -1:
            orankenti_osszeg += ertek
    print(f"{6 + i} órától {orankenti_osszeg} kerékpáros")

# 4. feladat – csúcsforgalom
max_ertek = -1
max_index = 0
for i in range(len(meresi_adatok)):
    if meresi_adatok[i] > max_ertek:
        max_ertek = meresi_adatok[i]
        max_index = i

percek  = (max_index + 1) * 15
ora     = 6 + percek // 60
perc    = percek % 60
idopont = f"{ora}:{perc:02d}"

print()
print("4. feladat")
print(f"Az áthaladók maximális száma: {max_ertek}; a rögzítés időpontja: {idopont}.")