Algoritmusok
Algoritmus: Utasítások véges számú és pontos leírása Folyamatok elemi részekre bontása. Utasítások véges számú és pontos leírása Utasítások meghatározott sorrendben legyenek
Algoritmus leíró eszközök: Mondattal (szöveges) Mondatszerűen (vázlat jellegű) Pszeudokód Grafikus (rajzos, képek) Folyamatábrával (különböző geometriai idomok használata) Struktogram Az egész algoritmus egy téglalapban helyezkedik el, ezen belül az utasítások és vezérlőszerkezetek szintén téglalapokat foglalnak el. Az ábrát felülről lefelé haladva kell olvasni
Pl. Szöveges feladat matematika órán Adatok felírása, kigyűjtése Képlet felírása Behelyettesítés a képletbe Elvégezni a műveleteket Szöveges válasz írása, mértékegység jelölése
Folyamatábra (flowchart): Alapelemeit Neumann dolgozta ki. Az egyes szerkezeti elemek között nyilakkal jelöljük a végrehajtási sorrendet. Folyamatábra alakzatok: Téglalap: Valamilyen értékadó utasítás, vagy eljárás. Rombusz, vagy lapos hatszög: Egy, vagy többágú kiválasztás. Paralelogramma: Adatáramlás. Kör: Vezérlő utasítások.
Folyamatábra részei Szekvencia (műveletek egymás után) Program kezdete Program vége Műveletvégzés Eldöntés, elágazás Adat bemenet és kimenet Szekvencia (műveletek egymás után)
Struktogramm: Az egyes szerkezeti elemeket különböző téglalapba foglalható ábrákkal jelöljük. A szerkezetek egymásba ágyazhatók, de vonalaik nem keresztezhetik egymást.
Az algoritmus utasítások leíró eszközei Szekvencia: sorban egymás után való végrehajtás. Elágazás (szelekció): elágazik, de továbbra is előre megy. Ciklus (iteráció): elágazik, és ismétli a ciklusmagban megadott tevékenységet.
Szekvencia: sorban egymás után való végrehajtás Cél Rajt Utasítás 1 Utasítás n
Elágazás (szelekció): elágazik, de továbbra is előre megy. A feltételtől függően (igaz, hamis) folytatódik tovább az algoritmus: ha igaz a feltétel akkor végrehajtja az IGAZ-ágat, ha nem, akkor ha nincs KÜLÖNBEN-ág, akkor a következő utasításra lép, ha van KÜLÖNBEN ág, akkor a HAMIS-ágat hajtja végre. Az egyik ág végrehajtása után a program végrehajtása az elágazás utáni utasításon folytatódik. Elágazás ha nincs KÜLÖNBEN-ág: Feltétel HAMIS Utasítás 1 Utasítás 2 Utasítás (ha) IGAZ
Elágazás ha van KÜLÖNBEN-ág: HAMIS Utasítás (különben) Feltétel Utasítás 1 Utasítás 2 Utasítás (ha) IGAZ HA feltétel AKKOR utasítás 1 … utasítás 1n [KÜLÖNBEN utasítás 2 … utasítás 2n] ELÁGAZÁS VÉGE
Kétágú döntés CLS INPUT „Írd be a korodat:", kor IF kor > 18 THEN PRINT "Már nagykorú vagy!" ELSE PRINT "Még fiatalkorú vagy!" END IF igaz hamis Feltétel A tevékenység B tevékenység C tevékenység
Több érték közüli választás CLS INPUT "add meg az osztályzatod:", osztalyzat SELECT CASE osztalyzat CASE 1 PRINT „megbuktál!!" CASE 2 PRINT "elégséges" CASE 3 PRINT "közepes" CASE 4 PRINT "jó" CASE 5 PRINT "jeles" END SELECT Feltétel 1 A tevékenység Feltétel 2 B tevékenység Feltétel 3 C tevékenység D tevékenység
Ciklus (iteráció): HAMIS Feltétel Utasítás 1 Utasítás 2 Ciklusmag IGAZ elágazik, és ismétli a ciklusmagban megadott tevékenységet. Elöltesztelő: Feltétel HAMIS Utasítás 1 Utasítás 2 Ciklusmag IGAZ Ha a feltétel igaz akkor végrehajtódik a ciklusmag és visszalép a feltételhez az algoritmus, ha nem, akkor kilép a ciklusból és a következő utasításra lép. (A ciklusmagnak kell olyan tevékenységet tartalmaznia, mely hatással van a feltételre, különben „végtelen” ciklussá válhatna.) CIKLUS AMÍG feltétel ciklusmag CIKLUS VÉGE DO WHILE feltétel ciklusmag LOOP
Elöl tesztelős ciklus REM "addig kér számokat, míg a számok összege nem lesz nagyobb 1000-nél" CLS szam = 0 osszeg = 0 DO WHILE osszeg < 1000 INPUT "Adj meg egy számot:", szam osszeg = osszeg + szam LOOP PRINT "A számok összege:", osszeg END
Ciklus (iteráció): IGAZ Feltétel Utasítás 1 Ciklusmag Utasítás 2 HAMIS elágazik, és ismétli a ciklusmagban megadott tevékenységet. Hátultesztelő: IGAZ Feltétel Utasítás 1 Ciklusmag Utasítás 2 HAMIS Végrehajtódik a ciklusmag és ha hamis a kilépési feltétel akkor visszalép a feltételhez az algoritmus, ha igaz, akkor kilép a ciklusból és a következő utasításra lép. Legalább egyszer végrehajtódik a ciklusmag. A ciklusmagnak kell olyan tevékenységet tartalmaznia, mely hatással van a feltételre, különben „végtelen” ciklussá válhat. CIKLUS ciklusmag AMÍG feltétel CIKLUS VÉGE DO ciklusmag LOOP UNTIL feltétel
Hátul tesztelős ciklus REM "addig kér számokat, míg 0-át nem írunk, kiszámítja a beírt szamok átlagát" CLS szam = 0 darabszam = 0 osszeg = 0 DO INPUT "Add meg a következő számot:", szam darabszam = darabszam + 1 osszeg = osszeg + szam LOOP UNTIL szam = 0 darabszam = darabszam - 1 atlag = osszeg / darabszam PRINT "A beírt számok átlaga:", atlag
Ciklus (iteráció): IGAZ Cv=vé? Ciklusmag Utasítás HAMIS elágazik, és ismétli a ciklusmagban megadott tevékenységet. Számlálásos: CIKLUS cv:=ké-TŐL vé-IG [lk-ZEL] ciklusmag CIKLUS VÉGE FOR cv=ké TO vé [STEP lk] ciklusmag NEXT cv IGAZ Cv=vé? Cv:=ké, vé, lk Ciklusmag Utasítás HAMIS Az elöltesztelős ciklus egy speciális esete a számlálásos ciklus, ahol a belépési feltétel a végrehajtási darabszámtól függ. rövidítések: cv=ciklus változó, ké=kezdeti érték, vé=végérték, lk=lépésköz. A változó felveszi a kezdeti értéket, majd ellenőrzi, hogy túllépte e a végértéket, ha nem akkor végrehajtja a ciklusmagot. A ciklus vége növeli lépésköznyivel a ciklusváltozó értékét. Ha nem érte el a végértéket, akkor újra végrehajtódik a ciklusmag, ha igen akkor kilép a ciklusból és a következő utasításra lép. A lépésköz lehet negatív is.
Számlálós (növekményes) ciklus Kiíratjuk a számokat 1-100-ig 10-es lépésközzel (tízesével) CLS FOR i = 1 TO 100 STEP 10 PRINT i NEXT i Egymásba ágyazott ciklus Teleíratjuk a képernyő első 20 sorát # karakterekkel! CLS FOR i = 1 TO 20 LOCATE i, 1 FOR j = 1 TO 80 PRINT ’’# ”; NEXT j NEXT i 5-15 sorok, 20-60 oszlopok által határolt téglalapot kitöltjük # karakterrel CLS FOR i = 5 TO 15 FOR j = 20 TO 60 LOCATE i, j PRINT "#" NEXT j NEXT i