Informatikai gyakorlatok 11. évfolyam Összetett adattípusok: rekord, tömb, feltöltés szövegfájlból Czigléczky Gábor 2009 TÁMOP 2.2.3-07/1-2F-2008-0011
Rekord (struktúra) 1. Eddig egyszerű típusú adatokkal foglalkoztunk, amelyek egyetlen adatot képesek eltárolni (kivéve a string, ami tulajdonképpen karakterek sorozata) Gyakran szükségünk van arra, hogy több összetartozó adatot egy helyen tároljunk, nem pedig külön változókban. Ennek egyik eszköze a struktúra (rekord) típus. A struktúra több, egyszerű típusú adatból épül fel, amelyeket mezőknek nevezünk.
típus_név változó_név; Rekord (struktúra) 2. Struktúra mező1 mező2 … mezőn Struktúra típus deklarációja: struct típus_név { public mező_típus1 mező_név1; public mező_típus2 mező_név2; … public mező_típusn mező_névn; } A public kulcsszó azt jelenti, hogy a mező értéke a program bármelyik részéből elérhető, módosítható. Ennek elhagyása vagy a private kulcsszó használata esetén csak a struktúrába írt metódusok használhatnák ezeket a mezőket. Struktúra típusú változó deklarációja: típus_név változó_név;
Rekord (struktúra) 3. Rekord orszag terulet Példa: tároljuk egy rekordban egy ország nevét és területét! struct Rekord { public string orszag; public int terulet; } Struktúra típusú változó deklarációja: Rekord x; Értékadás a rekord mezőinek: mezőszelektor (.) használatával: x.terulet = 15000;
Tömb (vektor) 1. A rekord típusú változó is csak egyetlen, logikailag összetartozó adatcsoportot tud tárolni. Több, azonos típusú adat tárolására a tömböt használhatjuk. Az egydimenziós tömböt vektornak, a kétdimenziós tömböt mátrixnak nevezzük. 0. elem 7 1. elem 33 2. elem 24 … MAX-1. elem 152
Tömb (vektor) 2. Vektor típusú változó deklarációja: bázistípus[] változó_név; Ez még csak egy üres hivatkozás, nem használható, amíg helyet nem foglalunk az elemek számára! Helyfoglalás MAX db elem számára: változó_név = new bázistípus[MAX]; Ilyenkor az elemek sorszáma (indexe) 0- tól MAX-1-ig terjedhet!
Tömb (vektor) 3. 7 const int MAX = 100; int[] v = new int[MAX]; Példa (deklaráció és helyfoglalás egyben): const int MAX = 100; int[] v = new int[MAX]; A tömb elemeinek elérése (indexelés): v[2] = 24; Elemek bejárása for ciklussal: for (int i=0; i<MAX; i++) { listbox1.Items.Add(v[i].ToString()); } 0. elem 7 1. elem 33 2. elem 24 … MAX-1. elem 152
Vektor és struktúra együtt Struktúra típus deklarációja: struct Rekord { public string orszag; public int terulet; } Struktúra típusú tömb deklarációja és helyfoglalás: Rekord[] v = new Rekord[MAX]; Értékadás indexeléssel és mezőszelektorral: v[i].terulet = 15000;
Beolvasás szöveges fájlból A „using” lista kibővítése: using System.IO; Fájl létezésének ellenőrzése: if (File.Exists(fájlnév)) { … } Fájltípus deklarációja és a fájl megnyitása: StreamReader f = File.OpenText(fájlnév); Olvasás, amíg nincs vége a fájlnak: while (!f.EndOfStream) { … } Sorok beolvasása (a cikluson belül): string sor = f.ReadLine(); Fájl bezárása: f.Close();
Kiírás szöveges fájlba Különbségek a beolvasáshoz képest: Fájltípus deklarációja és a fájl megnyitása: StreamWriter f = File.CreateText(fájlnév); Nem kell használni az f.EndOfStream tulajdonságot, mert íráskor nem a fájl végéig írunk, hanem addig, amíg el nem fogy a kiírandó adatmennyiség. Egy sor kiírása: f.WriteLine(sor); A fájl bezárása kötelező! f.Close();