E N D
Egydimenziós tömbök(Vektorok) • 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, azaznem a beolvasás pillanatában kell elvégezni. Lásd a szemléltetőt
Elemekbejárása. • 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.
Tömbök (array of ...) • Eddigiprogramjainkbanegyediváltozókkaldolgoztunk, mindegyikváltozónakkülönneve volt. Pl • vara,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 100-200 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.
A tömb típusát a következő képpen kell megadnunk: 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;
Mikor használjuk a következő deklarálásokat vektorok esetén? • const n:integer=100; {a ntípusoskonstansértékemegváltoztatható} • const n=100; {a nszimbolikuskonstansértékenemváltoztatható meg} program Pelda25b;const tombmerete=10;var a:array[1..tombmerete] of integer; i:integer;begin
A vektor elemeinek a feltöltése! • 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?
type ShortInt = -128..127; Byte = 0..255; Integer = -32768..32767; Word = 0..65535; Char = #0..#255; {karakteres konstansok} Boolean = (false, true);type ShortInt = -128..127; Byte = 0..255; Integer = -32768..32767; Word = 0..65535; 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[-273..1000] 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árolhatjuk benne} Beolvasás. Kiítatás. deklarálás • 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 szamokforditottsorrendben:'); • for i:=tombmeretedownto 1 do write(a[i]:6);writeln;end. beolvasás kiíratás
Tömbelemeinekgenerálása • 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;beginrandomize; for i:=1 to n do a[i]:=random(100)+1; for i:=1 to n do write(a[i],', '); writeln;end.
Tömbelemeinekfeltöltése az elem indexével 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;begina[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!)
Elemek kiíratása • 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?