Delphi programozás III. A Delphi for ciklusa II. A Delphi újabb verziói egy olyan for ciklust vezettek be, amely a régebbi Delphi-verziókban vagy pl. a Turbo Pascalban még nem voltak ismertek. A for-element-in-collection formájú utasítást a C# foreach utasításához lehetne leginkább hasonlítani. Az utasítással tömböket, stringeket, halmazokat és kollekciókat járhatunk be. Az alábbi alapvető formákat lehet használni: for Element in ArrayExpr do Stmt; for Element in StringExpr do Stmt; for Element in SetExpr do Stmt; for Element in CollectionExpr do Stmt; A következő feltételek érvényesek: A ciklusváltozó típusának meg kell egyeznie a konténer elemeinek típusával. A ciklus egyesével végigmegy az elemeken, és a ciklusváltozóba teszi az aktuális elemet. A ciklusváltozót nem lehet módosítani a ciklusban. Ha mégis megpróbáljuk, akkor fordítási hibát kapunk. String bejárása Írjunk programot, amely megszámolja egy adott stringben található e betűk számát! A kis- és nagybetű egyaránt számít. A feladatot oldjuk meg a hagyományos módszerrel és a for-element-incollection forma használatával is. program ForInString; var s : string; c : char; sum : integer; // Szamoljuk meg a szovegben levo E es e betuk szamat s:='ez egy probaszoveg'; Writeln('A szoveg: ',s); for i:=1 to Length(s) do Verzió: 02 1/5 2009.02.27.
if (Upcase(s[i]) = 'E') then sum:=sum + 1; Writeln('Az e betuk szama a szovegben: ',sum); for c in s do if (Upcase(c) = 'E') then sum:=sum + 1; Writeln('Az e betuk szama a szovegben: ',sum); Tömb bejárása Adott egy egész számokat tartalmazó tömb. Számoljuk ki az elemek összegét! A feladatot oldjuk meg a hagyományos módszerrel és a for-element-in-collection forma használatával is. program ForInArray; var tomb : array[1..8] of integer = (1,2,3,4,5,6,7,8); a : integer; sum : integer; // Adjuk ossze egy szamokat tartalmazo tomb elemeit for i:=low(tomb) to High(tomb) do sum:=sum + tomb[i]; Writeln('Az osszeg: ',sum); for a in tomb do sum:=sum + a; Verzió: 02 2/5 2009.02.27.
Writeln('Az osszeg: ',sum); Lista bejárása Töltsünk fel egy TStringList típusú listát stringekkel, majd járjuk be a listát. program ForInStringList; SysUtils, Classes; var list : TStringList; s : string; // Jarjuk vegig egy TStringList elemeit // Lista feltoltese list:=tstringlist.create; for i:=1 to 10 do list.add('szoveg ' + IntToStr(i)); for i:=0 to list.count - 1 do Writeln(list[i]); Writeln; for s in list do Writeln(s); list.free; Osztályok bejárása A Delphi helpje szerint a következő osztályok és leszármazottaik támogatják a for-in szintaxist: TList TCollection Verzió: 02 3/5 2009.02.27.
TStrings TInterfaceList TComponent TMenuItem TCustomActionList TFields TListItems TTreeNodes TToolBar Az előző példában láthattuk a TStringList típusú lista bejárását. A TStringList osztály ősei az alábbiak: System.TObject Classes.TPersistent Classes.TStrings TMemo sorainak bejárása Az alábbi példaprogramban egy TMemo típusú szerkesztőablak sorait járjuk be a Start gomb lenyomása után. A sorok tartalmát egy message boxban jelenítjük meg. A bejárást végző kódrészlet, amely a Start gomb lenyomása esetén hívódik meg: procedure TFormMain.ButtonStartClick(Sender: TObject); var s : string; for s in MemoSzoveg.Lines do ShowMessage(s); Verzió: 02 4/5 2009.02.27.
Dinamikus tömb bejárása Dinamikus tömbök bejárása is lehetséges az itt ismertetett módszerrel. Lássunk erre az esetre is egy példát, amelyben létrehozunk egy dinamikus tömböt, feltöltjük véletlenszámokkal, majd kiírjuk a tömb tartalmát: program ForInDynArray; var tomb : array of integer; a : integer; // Dinamikus tomb bejarasa Randomize; // Tomb meretenek beallitasa SetLength(tomb,10); // Tomb feltoltese veletlenszamokkal for i:=low(tomb) to High(tomb) do tomb[i]:=random(100); // Tomb elemeinek kiirasa for a in tomb do Write(a:5); Writeln; // Tomb torlese Finalize(tomb); Irodalom Developer Studio 2006 Reference, Delphi Language Guide Borland Software Corporation, 2005 Dr. Tamás Péter - Tóth Bertalan - Benkő Tiborné - Kuzmina Jekatyerina Programozzunk Delphi 5 rendszerben! ComputerBooks, Budapest, 2002 Verzió: 02 5/5 2009.02.27.