Megfigyelhető, hogy amikor több elem közötti összehasonlítás történik, akkor szükség van egyszerre több értékre is, főleg akkor, ha ezek az értékek jóval hamarabb, sokkal előbb lettek beolvasva, akár egy ismétlődő struktúrán belül ugyanazon segédváltozó segítségével. Vagy ha az elemeken végzett művelet késleltetve van, azaz nem a beolvasás pillanatában kell elvégezni. Lásd a szemléltetőt
Keressük meg egy osztályban hány első tanuló van, úgy, hogy nem ismerjük a legjobb médiát csak a diákok médiáit egyenként. A naplóban az utolsó tanuló felel. A tornasorban a középső álljon ki. Hogyan készűl a képen látható hajfonat? Hol törtük ketté az eredeti botot, hát a következőt? Rendelj hozzá tetszőlegesen egy koordináta rendszert.
Eddigi programjainkban egyedi változókkal dolgoztunk, mindegyik változónak külön neve volt. Pl var a,b,c,i,n:integer; Sok feladatot lehetetlen egyedi változókkal megoldanunk. Gondoljunk például egy névsor tárolására, melyben akár név is lehet. Ehhez szükségünk van olyan adattípusra, melyben több adatot tárolhatunk. Az eddig megismert típusok elemi típusok voltak. Ezekből az elemi típusokból adatszerkezeteket, összetett típusokat építhetünk. Ilyen összetett típus a tömb is.
var tömb_neve : array [ indexhatárok ] of alaptípus ; Az indexhatárok megadják a tömb méretét (hogy hány elemet tárolhatunk benne), az alaptípus pedig az elemek típusát (ez lehet pl. integer, string, char, boolean, byte, stb). Például: var a:array [1..7] of string;
const n:integer=100; {a n típusos konstans értéke megváltoztatható} const n=100; {a n szimbolikus konstans értéke nem változtatható meg} program Pelda25b; const tombmerete=10; var a:array[1..tombmerete] of integer; i:integer; begin
Ez létrehoz egy 7-elemű, stringekből álló tömböt. Ebben tárolhatunk például egy 7 elemből álló névsort. A tömb egyes elemeit az elemek indexén keresztül érhetjük el úgy, hogy a tömb neve után szögletes zárójelben megadjuk az elem indexét. A tömbünk tehát a következő elemekből áll: a[1], a[2],..., a[7]. A tömb beolvasása történhet például egy egyszerű ciklussal: for i:=1 to 7 do begin write('Add meg a(z) ',i,'. nevet: '); readln(a[i]); end; Hasonlóan történhet a tömb kiírása, feldolgozása is ciklusok segítségével. ? Hol találkoztál ilyen adatszerkezettel?
program Pelda25b; const tombmerete=10; var a:array[1..tombmerete] of integer; i:integer; begin for i:=1 to tombmerete do begin write(i,'. szam: '); readln(a[i]); end; writeln('A szamok forditott sorrendben:'); for i:=tombmerete downto 1 do write(a[i]:6); writeln; end. deklarálás beolvasás kiíratás type ShortInt = ; Byte = ; Integer = ; Word = ; Char = #0..#255; {karakteres konstansok} Boolean = (false, true); Így az alábbi tömbdeklarációk mind megengedettek: type {itt definiálunk néhány típust a fentiekből} Lotto = 1..90; Honap = (jan, feb, mar, apr, maj, jun, jul, aug, szep, okt, nov, dec); Kimenet = (HighLevel, LowLevel, ThreeState); var {változókat deklarálunk} HanyszorHuztak : array[Lotto] of Word; HaviAtlag : array[Honap] of Real; Fajsuly : array[ ] of Double; Beirhato : array['A'..'Z'] of Boolean; Impedance : array[Kimenet] of Real; MikorErik : array[(alma, korte, szilva)] of Honap; BUFF : array[Byte] of Byte; {256 bájtos puffer} EBCDIC : array[Char] of Byte; {kódkonverziós táblához} Magyarul : array[Boolean] of String; {a logikai értékek magyar nevét tárolhatju k benne}
Készítsünk programot, melyben egy tömb elemeit véletlenszerűen kigenerálja majd kiírja a képernyőre. A tömb elemeinek értéke 1 és 100 közötti szám legyen. Ehhez a már régebben megismert random függvényt fogjuk használni. Mivel egy tömbről van szó, a generálást ciklus segítségével fogjuk elvégezni, hasonlóan ahogy az elemek kiírását is a képernyőre. Programunk így néz ki: program Pelda26; const n=20; {a tömb elemeinek a száma} var a: array[1..n] of integer; i: integer; begin randomize; for i:=1 to n do a[i]:=random(100)+1; for i:=1 to n do write(a[i],', '); writeln; end.
Programunk így néz ki: program Pelda26; const n=20; {a tömb elemeinek a száma} var a: array[1..n] of integer; i: integer; begin for i:=1 to n do a[i]:=i; for i:=1 to n do write(a[i],', '); writeln; end. program Pelda26; const n=20; var a: array[1..n] of integer; i: integer; begin a[1]:=1; a[n]:=n; a[2]:=2; a[3]:=3; for i:=???? to ??? do a[i]:=i; for i:=1 to n do write(a[i],', '); writeln; end. Vagy??! Indexelés (jövőórán!)
for i:=1 to n do write(a[i],', '); for i:=n downto 1 do write(a[i],', '); Irasd ki fordított sorrendben az elemeket, anélkül, hogy a downto-t használnád. Alkoss képlete. ', ‘ –mi ennek a szerepe a kiíratásban? Sorolj fel más elemelválasztókat is. Ha kicserélem a write utasítást writeln-ra mi fog történni?