Fizika, matek, informatika érettségi

Home Fizika Excel Access A weboldalról

Algoritmus, mondatszerű leírás

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
tevékenység
Egyébként
tevékenység
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
Ki: 'pozitív'
Különben
Ki: 'nem pozitív'
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:=2*(a+b)
t:=a*b
Eredmény "A kerület: ", k
Eredmény "A terület: ", t
Különben
Eredmény "Hibás oldalhossz!”
Ha vége
Vége

Az első 100 páros szám:
Minden i:=2; i<200; i:=i+2 végezd el
Ki: i
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
Ki: i Ciklus vége

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ége


A szükséges információk:

Pythonban í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ége


Pythonban í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