Az algoritmus elemi lépések egymás utáni sorozata, melyek végrehajtása egy probléma megoldásához vezet. Az egyes részlépéseknek végrehajthatónak és egyértelműnek kell lennie. Ez biztosítja, hogy tetszőlegesen sokszor végrehajtva, mindig ugyanazt a részeredményt kapjuk.
Definiálhatjuk így: Az algoritmus egyértelműen végrehajtható tevékenységek vagy utasítások sorozata, amely véges sok lépés után befejeződik.
Az algoritmus jellemző tulajdonságai:
Egy adott problémára több algoritmust is lehet készíteni, amikben törekedni lehet ezekre:
Az algoritmus készítésének lépései:
Az algoritmusok rögzítésére, leírására több módszer is létezik, és majdnem mindnek saját jelrendszere van. Legismertebb módjai a mondatszerű leírás, a folyamatábra és a struktogram.
Az algoritmusokat folyamatos szövegként is rögzíthetjük, ilyenek találhatók a szakácskönyvekben is.
Az algoritmus másik szöveggel szemléltetett formája a mondatszerű leírás, amely már bonyolultabb problémák megoldását is jól szemlélteti. Az algoritmus egymást követő lépéseit rövid és tömör mondatokkal, illetve mondatszerű szerkezetek egymásutánjával írjuk le. A folyamatot alkotó utasításokat kicsit beljebb kezdjük, ezzel áttekinthetőbbé válik a leírás.
Az algoritmus alapvető lépéstípusait meghatározott szavakkal kell megfogalmaznunk, például:
Az adatbevitel formája: Be: adat vagy felsorolás
Feltétel megadás formája:
Ha feltétel, akkor
Egyébként
Elágazás vége.
Ha egy szám abszolút értékét kell meghatározni:
Be: szám
Ha szám>0, akkor
Különben
Elágazás vége
Példák:
Be: a,b
k := 2*(a+b)
t := a*b
Eredmény: "A kerület: ", k
Eredmény: "A terület: ", t
Vége
Be: a,b
k := 2*(a+b)
t := a*b
Eredmény: "A kerület: ", k
Eredmény: "A terület: ", t
Vége
Be a,b
Ha (a>0) és (b>0), akkor
Különben
Ha vége
Vége
Az első 100 páros szám:
Minden i:=2; i<200; i:=i+2 végezd el
Minden vége
Szokás a fenti példát az alábbi módon leírni:
Ciklus i:=2-től 200-ig, lépésköz:=2
Feladat: Kódold le a fenti leírással megadott algoritmusokat!
A rekurzióról szóló részben további példákat is találsz a mondatszerű leírással megadott algoritmusokra.
Nézzünk egy érettségi példát (2020. október, emelt szint), amiben egy függvény kell mondatszerű leírásból kódolni:
Függvény hetnapja(ev, ho, nap : Egész) : Szöveg
napok: Tömb(0..6: Szöveg)= (″v″, ″h″, ″k″, ″sze″,″cs″, ″p″, ″szo″)
honapok: Tömb(0..11: Egész)= (0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4)
Ha ho < 3 akkor ev := ev -1
hetnapja := napok[(ev + ev div 4 – ev div 100 + ev div 400 + honapok[ho-1] + nap) mod 7]
Függvény végeA szükséges információk:
div jelenti az osztás egészrészét, Pythonban // a műveletmod jelenti az osztás maradékát, Pythonban % a műveletPythonban így néz ki az átírás:
def hetnapja(ev, ho, nap):
napok=['v', 'h', 'k', 'sze', 'cs', 'p', 'szo']
honapok=[0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4]
if ho < 3:
ev = ev -1
return napok[(ev + ev//4 - ev//100 + ev//400 + honapok[ho-1] + nap) % 7]
Egy másik érettségi példában (2019. október, emelt szint) a bemenetként kapott két dátum közötti különbséget kellett megadni, napokban:
Feladat: Készítsen függvényt napokszama néven az alábbi algoritmus alapján. Az algoritmus a paraméterként megadott két dátumhoz (év, hónap, nap) megadja a közöttük eltelt napok számát! (A MOD a maradékos osztást, a DIV az egészrészes osztást jelöli.)
Függvény napokszama(e1:egész, h1:egész, n1: egész, e2:egész,
h2: egész, n2: egész): egész
h1 = (h1 + 9) MOD 12
e1 = e1 - h1 DIV 10
d1 = 365*e1 + e1 DIV 4 - e1 DIV 100 + e1 DIV 400 +
(h1*306 + 5) DIV 10 + n1 - 1
h2 = (h2 + 9) MOD 12
e2 = e2 - h2 DIV 10
d2 = 365*e2 + e2 DIV 4 - e2 DIV 100 + e2 DIV 400 +
(h2*306 + 5) DIV 10 + n2 - 1
napokszama:= d2-d1
Függvény végePythonban így néz ki az átírás:
def napokszama(e1,h1,n1,e2,h2,n2):
h1 = (h1 + 9) % 12
e1 = e1 - h1 // 10
d1 = 365*e1 + e1 // 4 - e1 // 100 + e1 // 400 + (h1*306 + 5) // 10 + n1 - 1
h2 = (h2 + 9) % 12
e2 = e2 - h2 // 10
d2 = 365*e2 + e2 // 4 - e2 // 100 + e2 // 400 + (h2*306 + 5) // 10 + n2 - 1
return d2-d1