fel
le

Feladat - adatbekérés végjelig

Feladat: kérjünk be addig számokat, amíg egy speciális értéket (pl. 0-t) nem ír be a program kezelője. Döntsük el, hogy a beírt számok közül volt-e páros szám.

bool volt_paros = false;
bool vege_e = false;
while (vege_e == false)
{
  Console.Write("Kérek egy számot:");
  int x = int.Parse( Console.ReadLine() );
  if (x==0) vege_e = true;
  else if (x%2==0) volt_paros = true;
}

if (volt_paros==true) Console.WriteLine("Volt páros szám");
else Console.WriteLine("Egyik szám sem volt páros szám");
 

A break utasítás

A fenti kis kódban a vegee változó szerepe, hogy vezérelje a ciklus működését. Értékét kezdetben false-ra állítjuk, jelezvén hogy még nincs vége a ciklus működésének. Amikor a vége jel megérkezik (nulla), akkor értékét true-ra billentjük. Ekkor a ciklus futása leáll.

Hasonló működést érhetünk el a break utasítás segítségével is. Ez a speciális, ciklusok esetén használható utasítás azonnal megszakítja a ciklus futását, és függetlenül a ciklus vezérlő feltétel értékétől, függetlenül minden mástól azonnal (erőszakosan) befejezi a ciklus futását. A program futása ettől nem szakad meg, folytatódik a ciklusra rákövetkező utasítás végrehajtásával.

bool volt_paros = false;
while (true)
{
  Console.Write("Kérek egy számot:");
  int x = int.Parse( Console.ReadLine() );
  if (x==0) break;
  if (x%2==0) volt_paros = true;
}

if (volt_paros==true) Console.WriteLine("Volt páros szám");
else Console.WriteLine("Egyik szám sem volt páros szám");
 

Mivel a ciklusnak ez esetben nincs megfogalmazható vezérlő feltétele, így a while(true) módon egy végtelen ciklust indítunk. A ciklus tényleges kilépési feltétele a ciklus belsejében az if(x==0) módon került felírásra, a kilépésről a break gondoskodik.

Az ilyen ciklusokat szokás középen tesztelő ciklusnak nevezzük. Nem szép megoldás, ellentmond az algoritmus tárgyban hangsúlyozott struktúrált programozás elveinek - de egyes esetekben működőképesebb és áttekinthetőbb megoldáshoz juthatunk általa.

A continue utasítás

A break-hez hasonló utasítás a continue. Ennek használata esetén a ciklus futása nem szakad meg (fejeződik be) mint a break, sőt, ellenkezőleg. A continue hatására a ciklusmag maradék utasításai ebben a menetben már nem hajtódnak végre, de a ciklus futása folytatódik, mintha elértük volna a ciklusmagot lezáró kapcsos zárójelet, vagyis újra a vezérlő feltétel kiértékelése következik.

int paros_db = 0;
Console.WriteLine("Írj be pozitív számokat:");
while(true)
{
  Console.Write("Kérek egy számot:");
  int x = int.Parse( Console.ReadLine() );
  if (x<0)
  {
     Console.WriteLine("Ez nem pozitív");
     continue;
  }
  if (x%2==0) paros_db++;
}
if (paros_db>0) Console.WriteLine("Összesen {0} páros számot írtak be.");
else Console.WriteLine("Egyik szám sem volt páros szám");
 
Hernyák Zoltán
2013-01-24 10:47:26