A *típusalgoritmusok* olyan „minták”, amelyek nagyon sok feladatban ugyanúgy működnek: - összegzés - eldöntés - kiválasztás - keresés - megszámlálás - maximum-kiválasztás Mindenhol feltételezzük, hogy van egy listánk: `L[0..n-1]`. ## Összegzés (SUM) **Cél:** elemek összege (vagy pl. pontszámok, bevétel, stb.) >[!note] Pszeudó kód >``` >összeg ← 0 >for i = 0..n-1 > összeg ← összeg + L[i] > endfor > kiír(összeg) >``` >[!note] Python kód >```python >L = [3, 1, 4] >osszeg = 0 >for x in L: > osszeg += x >print(osszeg) # 8 >``` ## Eldöntés (DECISION / ANY) **Cél:** igaz/hamis kérdés: „Van-e olyan elem, ami … ?” >[!note] Pszeudó kód >``` > válasz ← HAMIS >for i = 0..n-1 > if L[i] teljesíti a feltételt then > válasz ← IGAZ > break > endif > endfor > kiír(válasz) >``` >[!note] Python kód - Van-e `L`-ben negatív szám? >```python >L = [2, 5, -1, 9] >valasz = False >for x in L: > if x < 0: > valasz = True > break print(valasz) # True >``` ##  Kiválasztás (SELECTION) **Cél:** _biztosan létezik_ legalább egy elem, ami teljesíti a feltételt, a feladatunk ezen elemek (vagy indexek) kigyűjtése. >[!note] Pszeudó kód - elemek kiválasztása >``` > kiválasztottak ← üres lista > for i = 0..n-1: > if L[i] teljesíti a feltételt then > a kiválasztottakhoz hozzáadjuk L[i]-t > endif >endfor >kiír(kiválasztottak) >``` >[!note] Pszeudó kód - indexek kiválasztása >``` > indexek ← üres lista > for i = 0..n-1: > if L[i] teljesíti a feltételt then > az indexekhez hozzáadjuk i-t > endif >endfor >kiír(indexek) >``` >[!note] Python kód - Páros számok kiválasztása >```python >L = [1, 2, 3, 4, 5, 6] >paros_szamok = [] >for x in L: > if x % 2 == 0: > paros_szamok.append(x) >print(paros_szamok) # [2, 4, 6] >``` >[!note] Python kód - Páros számok kiválasztása indexekkel >```python >L = [1, 2, 3, 4, 5, 6] >indexek = [] >for i in range(len(L)): > if L[i] % 2 == 0: > indexek.append(i) >print(indexek) # [1, 3, 5] >``` ## Keresés (SEARCH) **Cél:** megkeresni, van-e olyan elem, ami teljesíti a feltételt; ha igen, hol van (index), ha nem, akkor jelezni, hogy nincs ilyen elem. >[!note] Pszeudó kód - keresés >``` > index ← -1 > for i = 0..n-1: > if L[i] teljesíti a feltételt then > index ← i > break > endif >endfor >print(index) >``` >[!note] Python kód - 42 keresése >```python > L = [5, 42, 7] > target = 42 > index = -1 > for i in range(len(L)): > if L[i] == target: > index = i > break > > print(index) # 1 >``` ## Megszámlálás (COUNT) **Cél:** megszámolni hány elem teljesíti a feltételt. >[!note] Pszeudó kód - megszámlálás >``` > db ← 0 > for i = 0..n-1: > if L[i] teljesíti a feltételt then > db ← db + 1 > endif >endfor >print(db) >``` >[!note] Python kód - 3-mal osztható számok > >```python >L = [3, 6, 7, 9, 10] >db = 0 >for x in L: > if x % 3 == 0: > db += 1 >print(db) # 3 >``` ## Maximum-kiválasztás (MAX-SELECTION) **Cél:** a legnagyobb elem (és gyakran az indexe). >[!note] Pszeudó kód - maximum-kiválasztás >``` > max ← L[0] > maxIndex ← 0 > for i = 1..n-1 > if L[i] > max then > max ← L[i] > maxIndex ← i > endif > endfor > kiír(max, maxIndex) >``` >[!note] Python kód - maximum kiválasztás > >```python >L = [2, 10, 3, 10] >max_ertek = L[0] >max_index = 0 >for i in range(1, len(L)): > if L[i] > max_ertek: > max_ertek = L[i] > max_index = i > >print(max_ertek, max_index) # 10 1 >``` ## Feladatok A következő feladatok mind **egy ismert algoritmikus gondolkodási mintára** épülnek. A feladatok **NEM** mondják meg, melyik típusalgoritmust kell használni, ezt neked kell felismerned! ### Könnyű >[!task] Feladat > Egy osztályban minden tanuló matematika dolgozatot írt. Adott egy lista, amely a dolgozatok pontszámait tartalmazza.  Határozd meg, hogy összesen hány pontot értek el a tanulók! >[!task] Feladat >Egy jelszóellenőrző program vizsgálja a beírt jelszót.  A jelszó karakterei egy listában vannak eltárolva.  írj programot, amely megállapítja, hogy van-e benne számjegy! >[!task] Feladat >Egy futóversenyen a célba érkezési idők (másodpercben) sorban vannak eltárolva.  Írd ki, hogy hány versenyző ért célba 300 másodpercnél gyorsabban! ### Közepes >[!task] Feladat >Egy könyvtár adatbázisában egy lista tárolja a könyvek oldalszámát. Készíts programot, amely kigyűjti azokat a könyveket, amelyek legalább 500 oldalasak! >[!task] Feladat >Egy buszjegy-ellenőrző rendszerben egy lista tartalmazza az utasok bérletének érvényességi napjait (pozitív szám: még érvényes, 0 vagy negatív: lejárt). Írj programot, amely megállapítja, hogy volt-e olyan utas, akinek már lejárt a bérlete! >[!task] Feladat >Egy online bolt napi eladásait egy lista tartalmazza (forintban).  Határozd meg, hogy melyik napon volt a legnagyobb bevétel, és add meg annak értékét is! ### Nehéz >[!task] Feladat >Egy iskolai versenyen a diákok pontszámait egy lista tartalmazza.  Írj programot, amely visszaadja azoknak a diákoknak a sorszámát, akik legalább 80 pontot értek el! >[!task] Feladat >Egy meteorológiai állomás egy héten mért hőmérsékleteit tárolja egy listában.  Írj programot, amely megállapítja, hogy volt-e olyan nap, amikor a hőmérséklet fagypont alá esett, és ha igen, add meg az első ilyen nap indexét! >[!task] Feladat >Egy videojátékban a játékos minden pályán szerzett pontszámait egy lista tartalmazza. Számítsd ki: >- az összes pontszámot, és >- hogy hány pályán ért el a játékos 100 pontnál többet!