Az előző cikkben már megnéztük az egyik legalapvetőbb programozási eszközt, a feltétel vizsgálatot. Most ehhez hasonlóan szeretnék bemutatni egy szintén nagyon alapvető elemet, az ismétléses utasítás végrehajtást. Gyakran találkozunk olyan feladattal, amikor van egy nagyobb bemeneti adathalmaz és annak minden elemén ugyanazt az utasítást kell végrehajtani.
Ha a mostani ismereteinkkel közelítenénk meg ezt a problémát és feltesszük, hogy ismerjük, hogy pontosan mennyi bemeneti adatunk van, akkor minden feldolgozási lépést leprogramoznánk minden bemenetre. Ez a módszer maximum 5-10 adat esetén még esetleg működőképes lehet, de el lehet képzelni, hogy több száz vagy akár még több adat esetén már kivitelezhetetlen. Pontosan ilyen problémákra találták ki az utasításismétlést, ami az alábbiak szerint épül fel:
- Meddig kell ismételni az utasításmagot
- Maga az utasításmag
Addig hajtja végre a program újra és újra ugyan azt a blokkot, ameddig a megadott feltétel teljesül. Tehát mondjuk, ha ötvenszer kell végrehajtani egy kiírató utasítást, akkor az valahogy így nézne ki:
i := 0
[i < 50]
{
Kiíratás
}
Ennek megvalósítására több szintaktikai eszköz létezik C-ben és Java-ban is, de ezek egyenértékűek, átjárhatóak. Én azt gondolom, hogy a legismertebb az úgynevezett FOR Ciklus, ami az alábbiak szerint épül fel:
for(inicializálás; feltételvizsgálat; paraméter kezelés)
{
utasításmag
}
- Egy FOR Ciklusnak 3 bemenete van:
- inicializálás – az első ciklus előtt egyszer fog megtörténni
- feltételvizsgálat – minden ciklus után egyszer fog megtörténni a paraméter kezelés után
- paraméter kezelés – minden ciklus után egyszer fog megtörténni a feltételvizsgálat előtt
- Utasítás mag – minden ciklusban végrehajtódik egyszer
Ez egy nagyon tömör és nagyon hatékony módszer, hogyha ugyanazokat az utasításokat kell egymás után többször is végrehajtanunk. A 3 bemeneti paraméter között nem kötelező, hogy szoros összefüggés legyen, de itt ténylegesen csak olyan adatokat szabad megadni, ami a végrehajtás számát befolyásolja. Illetve a mostani feltételvizsgálat hasonlóképen működik, mint a múltkor bemutatott feltételvizsgálat, lehet egyszerű vagy komplex. Ez a rész tetszőleges feltételt tartalmazhat, figyelhet eseményeket vagy határokat egy bemeneti adathalmazon. Amit még fontos kiemelni, hogy az inicializáló részben definiált változó, az utasításmagban is elérhető.
Az előbbi pszeudokód megvalósítása FOR Ciklussal:
for(int i=0; i<50; i++)
{
System.out.println(„Hello_” + i);
}
Nézzünk egy nagyon egyszerű gyakorlati példát:
Kérjünk be a felhasználótól számokat, vesszővel elválasztva, majd adjuk meg a számok átlagát.
Először beolvassuk az egész sort, majd vessző mentén feldaraboljuk, ekkor megkapjuk a számokat:
String[] numbersByUser = rawString.split(",")
Átmeneti változók az eredmény kiszámolásához:
double summary = 0;
double calculatedAvarage = 0;
FOR Ciklus:
-
- Inicializálás: int index=0;
- Feltételvizsgálat: index < numbersByUser.length; – az összes számon menjünk végig
- Paraméter kezelés: index++;
for(int index=0; index < numbersByUser.length; index++)
{
Utasításmag: A számokat szövegként kapjuk meg. Először átalakítjuk valódi számmá, majd hozzáadjuk a meglévő számokhoz:
summary = summary + Integer.parseInt(numbersByUser[index]);
Utasításmag vége:
}
Az számok összegét elosztjuk annyival, amennyi számot megadott a felhasználó:
calculatedAvarage = summary/numbersByUser.length;
Eredmény megjelenítése:
System.out.println(summary + "/" + numbersByUser.length + "=" + calculatedAvarage);
A teljes programot eléritek a szokásos helyen. Ez csak maga a számolás, ezen kívül még van benne szöveg beolvasás és kivételkezelés is, de ezek most nem részei a bejegyzésnek.
Ismételten csak azt tudom mondani, hogy mindenkinek ajánlom legalább a fenti kódrészlet megértését, mert a FOR Ciklus egy nagyon hatékony és elterjedt programozási eszköz, gyakorlatilag minden fontos nyelvben megtalálható. Kérdés esetén hagyjatok kommentet vagy írjatok bátran!
Szia, Bajor Tamás vagyok, a Programozz Te Is oldal alapítója és oktatója. Köszi, hogy itt vagy és éppen az én cikkem olvasására fordítod a drága idődet! Azért dolgozom minden nap, hogy neked segítsek a programozás világában minél profibban elmélyülni. A cikkek egyetlen írójaként rengeteg munkát és energiát fektetek mind az oldalba, mind pedig az oktatásba!
Arra kérlek, ha tetszett cikk amit olvastál vagy szívesen veszed az ingyenes anyagokat akkor dobj egy Like-ot a Facebook-on, ezzel is támogatva a munkámat. Neked ez egy apró kattintás, nekem pedig hatalmas segítség!