Kihagyás

7. Alapvető algoritmusok (Programozási tételek)

Az algoritmus nem más, mint egy lépésről lépésre végrehajtható utasítássorozat egy probléma megoldására (gondolj rá úgy, mint egy nagyon pontos receptre a konyhában).

A programozás során újra és újra ugyanazokkal a tipikus problémákkal találkozunk: adjuk össze egy lista elemeit, keressük meg a legnagyobbat, vagy számoljuk meg, hányan mentek át a vizsgán. Ezekre a gyakori problémákra léteznek jól bevált, standard megoldási minták. Ezeket a mintákat hívjuk alapvető algoritmusoknak vagy programozási tételeknek.

Bár a Python nagyon sok beépített, kényelmi eszközt kínál (például egyetlen szóval megkereshetjük a legnagyobbat), ahhoz, hogy igazi programozóvá válj, először meg kell értened, mi történik a háttérben!

7.1. Összegzés algoritmusa

A probléma: Van egy listánk számokkal (például a heti költéseink), és szeretnénk megkapni ezek összegét. A megoldás logikája: Létrehozunk egy "gyűjtő" változót, aminek a kezdőértéke 0. Egy ciklussal végigmegyünk a listán, és a gyűjtőhöz mindig hozzáadjuk az aktuális elemet.

koltesek = [1200, 450, 8900, 320]

osszeg = 0  # Itt gyűjtjük az eredményt. A ciklus ELŐTT kell létrehozni!

for penz in koltesek:
    osszeg = osszeg + penz  # Hozzáadjuk a meglévő összeghez az új értéket

print(f"A heti teljes költés: {osszeg} Ft.")

7.2. Megszámolás algoritmusa

A probléma: Kíváncsiak vagyunk, hogy a listában HÁNY darab olyan elem van, ami megfelel egy bizonyos feltételnek (pl. hányan kaptak ötöst). A megoldás logikája: Hasonló az összegzéshez, de itt a gyűjtő változónkat (darab) csak akkor növeljük pontosan 1-gyel, ha az if feltétel igaz!

jegyek = [3, 5, 4, 5, 2, 5, 1, 4]

otosek_szama = 0  # Számláló változó

for jegy in jegyek:
    if jegy == 5:  # Csak akkor számoljuk, ha a jegy ötös
        otosek_szama = otosek_szama + 1

print(f"Összesen {otosek_szama} darab ötös született.")

7.3. Eldöntés algoritmusa

A probléma: Csak arra vagyunk kíváncsiak, hogy létezik-e legalább egyetlen olyan elem a listában, ami megfelel a feltételünknek (pl. van-e bukás az osztályban). A megoldás logikája: Létrehozunk egy logikai (bool) változót False (Hamis) kezdőértékkel. Ha a ciklus során találunk egy megfelelő elemet, a változót True-ra állítjuk, és a break paranccsal azonnal leállítjuk a keresést, hiszen felesleges tovább nézni.

jegyek = [4, 3, 5, 1, 4, 2]

van_bukas = False  # Alapból feltételezzük, hogy nincs

for jegy in jegyek:
    if jegy == 1:
        van_bukas = True
        break  # Megtaláltuk, kilépünk a ciklusból!

if van_bukas == True:
    print("Sajnos van olyan diák, aki megbukott.")
else:
    print("Mindenki átment a vizsgán!")

7.4. Kiválasztás algoritmusa

A probléma: Biztosan tudjuk, hogy az elem benne van a listában, de szükségünk van arra, hogy HÁNYADIK helyen (milyen indexen) található. A megoldás logikája: Egy while ciklussal lépkedünk a listában egészen addig, amíg meg nem találjuk a keresett értéket. Egy külön változóban vezetjük, hogy éppen hol járunk (index).

nevek = ["Anna", "Béla", "Cecil", "Dénes"]
keresett_nev = "Cecil"

index = 0
# Addig megyünk, amíg a lista aktuális eleme NEM egyenlő a keresett névvel
while nevek[index] != keresett_nev:
    index = index + 1

print(f"{keresett_nev} a lista {index}. indexén található.")

7.5. Maximum- és minimumkiválasztás

A probléma: Meg akarjuk találni a listában szereplő legnagyobb (vagy legkisebb) értéket. A megoldás logikája: Kinevezzük a lista legelső elemét (a 0. indexűt) a jelenlegi legnagyobbnak. Elindulunk a listán, és ha találunk olyat, ami ennél is nagyobb, akkor az lesz az új "legnagyobb". A végén ez a változó fogja tartalmazni a győztest.

homersekletek = [12, 15, 21, 18, 9, 22, 14]

# Kinevezzük az első elemet (12) a legnagyobbnak
legnagyobb = homersekletek[0] 

for homerseklet in homersekletek:
    if homerseklet > legnagyobb:
        legnagyobb = homerseklet  # Új bajnokot avatunk!

print(f"A héten mért legmagasabb hőmérséklet: {legnagyobb} fok volt.")
(Tipp: A minimumkiválasztás hajszálpontosan ugyanez, csak a relációs jelet (>) kell megfordítani kisebbre (<) az if elágazásban!)

A Python kényelme: Mint említettük, a Python tudja ezeket a műveleteket alapból is. Ha már profi vagy a logikában, a jövőben használhatod a beépített sum(), max() és min() függvényeket, amelyek egyetlen sorban elvégzik ugyanezt a munkát!


💻 Feladatok

  1. Osztályátlag (Összegzés): Készíts egy listát, amelyben 5 darab osztályzat szerepel (pl. [4, 5, 3, 5, 4]). Az összegzés algoritmusa segítségével add össze a jegyeket, majd az eredményt oszd el a lista hosszával (amit a len() függvénnyel kaphatsz meg), hogy megkapd az átlagot! Írasd ki az átlagot a képernyőre!
  2. Kánikula (Megszámolás): Adott a következő lista, amely egy hónap napi csúcshőmérsékleteit tartalmazza: [25, 28, 31, 32, 29, 27, 33, 30, 26, 35]. Számold meg és írasd ki, hány olyan nap volt, amikor a hőmérséklet meghaladta a 30 fokot (vagyis 30-nál nagyobb volt)!
  3. Legolcsóbb termék (Minimumkiválasztás): Egy elektronikai boltban a következő árakat találjuk (forintban): [125000, 89000, 210000, 75000, 320000]. Írj egy algoritmust, amely megkeresi és kiírja a képernyőre a legkisebb (legolcsóbb) értéket! (Ne a beépített min() függvényt használd, hanem írd meg a saját ciklusodat!)