16. óra: Algoritmus-leíró 'nyelvek'

Ha a feladat kicsit 'bonylódik', már nem elég pusztán az utasítások (beolvasás, kiíratás, stb.) ismerete, szükségessé válhat a program vezérlési szerkezetének elõzetes megtervezése. Végig kell gondolnunk, milyen változókat, és milyen vezérlési szerkezeteket (elágazás, ciklus) fogunk használni.

Erre a feladatra három algoritmusleíró 'nyelv' terjedt el:

  1. Mondatszerû leírás: Nagyjából emberi (de kötött) szavakkal, és a behúzásokkal írja le az algoritmust;
  2. Folyamatábra: Grafikus eszközökkel, téglalpokkal, rombuszokkal, stb. illusztrálja a program elágazásait, utasításait egy geomteriai jellegû ábrán. Szemléletes, de elég terjengõs;
  3. Stuktogram: Nagyjából a kettõ kombinációja, kicsit geometriai, kicsit szöveges... A legtömörebb, de gyakorlat kell az elkészítéséhez és az olvasásához.

Egy konkrét feladaton keresztül fogjuk megismerni mind a három leíró nyelvet.

Feladat: A program kérjen be két (pozitív egész) számot, majd adja ki a legkisebb közös többszörösüket.
A program neve legyen: lkkt.py

 

I. Mondatszerû leírás

Az algoritmust elõször mondatszerû leírással írjuk le. Ez talán a legjobban érthetõ, de talán a legterjengõsebb is.(A változókat az érthetség kedvéért színnel kiemeltem. A '|' az osztója jel; pl. ha x|y-t írunk, az azt jelenti, hogy 'x osztója az 'y'-nak.)

Be: a
Be: b
lkkt = a*b
i = lkkt
Ciklus amíg i>=a:
    Ha a|i és b|i, akkor:
        lkkt=i
    elágazás vége.
    i = i-1
ciklus vége.
Ki: lkkt

Magyarázat:
- 1-2. sor: Beovassuk a két pozitív egészt az a ill. b változókba.
- 3. sor: A két szám szorzatát 'kinevezzük' legkisebb közös többszörösnek. (Nem biztos, hogy ez a legkisebb, de közös többszörös, az biztos.)
- 4. sor: Az i változó kezdõértéke az aktuális lkkt (vagyis az a*b).
- 5. sor: Indul egy ciklus, a bennmaradás feltétele, hogy i nagyobb-egyenlõ-e még, mint a két szám közül az egyik - mondjuk a.
- 6. sor (a cikluson belül, amit azzal jelzünk, hogy beljebb kezdjük): Kezdõdik egy elágazás. A feltétel, hogy az i számot osztja-e az a is és a b is.
Ha igen, akkor új (egyre kisebb) közös többszöröst találtunk.
- 7. sor: Az i ciklusváltozót eggyel csökkentjük.
- 8. sor: A ciklus véget ér (mert a lehetséges ékkt-jelölt, az i már kisebb, mint az egyik szám.)
- 9. sor: Kiíratjuk az lkkt változó tartalmát. (Hiszen ott gyõjtöttük lefele menet azt, aki közös többszörös; és akkor hagytuk abba, amikor már nincs esély...)

 

II. Folyamatábra

Folyt. köv.

Folyt. köv.

Folyt. köv.

Folyt. köv.