Összetett adattípusok Tömb
Tömb típus A tömb meghatározott számú, azonos típusú elemekből álló összetett típus. Deklarálása: var azonosító : array [kezdőindex .. végindex] of típus; tömb mérete tömb elemeinek típusa Pl.: var x: array[1..10] of integer; {10 elemből álló integer típusú tömb} x[1], x[2],… x[10] - tömb elemeire való hivatkozás x[1] := 3,67; - tömb egy elemének való értékadása Azt a tömböt, ahol csak egy dimenzióban deklaráljuk a tömb elemeit, akkor vektornak nevezzük.
array [Indextípus] of Elemtípus; Szabályok: A tömbnek rögzített számú eleme van Az elemek típusai megegyeznek Indextípus csak sorszámozott típus lehet Indextípus minden értékére létezik egy jól meghatározott tömbelem Az elemek számát a tömbben Indextípus számossága határozza meg Index egy Indextípusú kifejezés Az elemek bármelyike közvetlenül elérhető az indexre való hivatkozással
Műveletek vektorokkal: 1. Vektor deklarálása: Var v:array[1..25] of integer; i,n: integer; vagy type vekt=array[1..25] of integer; var i, n:integer; v:vekt; 2.Vektor elemeinek elemzése, feldolgozása: ciklus segítségével végigmegyünk a vektoron -for ciklussal: for i:=1 to n do <v[i] feldolgozása> -while ciklussal: i:=1; while i<=n do begin i:=i+1; end;
-repeat ciklussal: i:=1; repeat <v[i] feldolgozása> i:=i+1; until i>n; 3. Vektor elemeinek beolvasása: -for ciklussal: write(‘n=’); readln(n); for i:=1 to n do begin write(‘ v[‘ ,i, ’]= ’); readln(v[i]); end;
-while cilkussal: write(‘n=’); readln(n); i:=1; while i<=n do begin write (‘ v[‘ ,i, ’]= ’); readln (v[i]); i:=i+1; end; -repeat cilkussal: repeat readln (v[i]); i:=i+1; until i>n;
4. Vektor elemeinek kiíratása: -for ciklussal: for i:=1 to n do write(v[i]:4); -while ciklussal: i:=1; while i<=n do begin i:=i+1; end; -repeat ciklussal: repeat until i>n;
Típusfeladatok vektorokkal: 1. Olvassunk be egy vektort, majd írassuk ki fordított sorrendben a beolvasott elemeket, tehát először kiírassuk az x[n]- dik, majd az x[n-1]-dik elemet és végül legutoljára az x[1]. Ez nem azt jelenti hogy a vektort megfordítottuk, csak azt hogy fordítva írattuk ki az elemeket. (forditottvektor.pas) 2. Határozzuk meg a vektor legkisebb elemét! (min.pas) 3. Határozzátok meg a vektor legnagyobb elemét! (max.pas) 4. Határozzátok meg párhuzamosan egy vektor legnagyobb és legkisebb értékét ! 5. Határozzátok meg egy vektor eleminek összegét! 6. Számoljátok meg egy vektor pozitív és negatív elemeit! (pozitiv&negativ) 7. Írassátok ki egy vektor páros elemeit. (paros.pas)
Gyakran előforduló problémák tömbök esetében: 1.Adott két azonos típusú tömb x és y. Cseréljétek fel a két tömb elemeit egymással. y[1]:=x[n] y[2]:=x[n-1] következtetés: a tömb indexeinek összege …. mindig n+1, ezért felírható: y[n]:=x[1] y[i]:=x[n+1-i] for i:=1 to n do y[i]:=x[n+1-i] feladat: Cseréljétek fel két tömb elemeit.
2. Vektor elemeinek felcserélése önmagában: Adott egy x vektor. Felszeretnénk cserélni a vektor elemeit ugyanabban a vektorban. megoldás: -ezt csakis úgy lehet megvalósítani, hogy egy segédváltozó segítségével a tömb közepéig minden elemet felcserélünk egymással, az elsőt az utolsóval és így tovább. -ha a teljes sorozatot vennénk, akkor a közepétől megint minden elem visszacserélődik: pl. legyen egy 6 elemű tömb v: v1 v2 v3 v4 v5 v6 1.lépés: 5 8 9 7 3 1 2.lépés: 1 8 9 7 3 5 3.lépés: 1 3 9 7 8 5 4.lépés: 1 3 7 9 8 5 5.lépés: 1 3 9 7 8 5 5 8 9 7 3 1
Tehát: for i:=1 to n div 2 do begin seged:=x[i]; x[i]:=x[n+1-i]; x[n+1-i]:=seged; end; feladat: Cseréljétek fel egy vektor elemeit.
3. Egy adott tulajdonságú elem keresése a vektorban: Legyen x egy vektor és egy adott tulajdonságú elem, amit keresünk a vektorban. megoldás: be kell vezessünk egy logikai változót, melynek kezdeti értéke hamis(false, 0). Ez a logikai változó keres rá az adott tulajdonságú elemre, illetve visszajelez hogy van-e ilyen elem vagy nincs. talalt:=false; i:=1; while (i<=n) and (not talalt) do if x[i]=y then talalt:=true else i:=i+1; Feladat: 1.Nézzük meg, hogy van-e a vektorban negatív szám 2. Keressétek ki egy vektorból a prímszámokat.
Feladatok: 1. Adottak egy osztály tanulói. Kérjétek be mindenik tanuló osztályzatát és adjátok majd meg az osztály átlagát. (ATLAG_1) 2. Írjatok egy programot mely kiírja hogy egy ismert osztályzat milyen minősítésnek felel meg. (OSZT_1) 3. Ismerjük a tanulók számát és a tantárgyak számát, akkor adjuk meg külön külön mindenik tanuló átlagát (ATLAG_2) 4. Ismervén egy személy fizetését, adjátok meg a bankjegyek számát (CIMLETEZ) 5. Írjatok egy Programot mely megszámolja hogy egy mátrixban hány a pozitív, hány a negatív és hány nulla van (Pozineg) 6. Írjatok egy programot, mely véletlenszerűen megadja egy lottóhúzás nyerőszámait. (Lotto5) 7. Számoljátok meg hány páros, páratlan és hány 3-mal osztható szám van egy vektorban! (ciklus7) 8. Adjuk meg egy osztály tanulóinak névsorát és az általuk megtakarított pénzt fejenként. Összegezzétek a tanulók által megtakarított pénzt, készítsetek kimutatást. (ciklus51)