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.")
>) 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()ésmin()függvényeket, amelyek egyetlen sorban elvégzik ugyanezt a munkát!
💻 Feladatok
- 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 alen()függvénnyel kaphatsz meg), hogy megkapd az átlagot! Írasd ki az átlagot a képernyőre! - 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)! - 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ítettmin()függvényt használd, hanem írd meg a saját ciklusodat!)