250 likes | 360 Views
Iteráció. Hernyák Zoltán Web: http://dragon.ektf.hu/aroan , E-Mail: aroan@aries.ektf.hu Magasszintű Programozási Nyelvek I. Eszterházy Károly Főiskola Számítástudományi tsz http://aries.ektf.hu. 1. Véletlenszám-előállítása. Kezdőérték. Köv. véletlen szám. Köv. véletlen szám.
E N D
Iteráció Hernyák Zoltán Web: http://dragon.ektf.hu/aroan, E-Mail: aroan@aries.ektf.hu Magasszintű Programozási Nyelvek I. Eszterházy Károly Főiskola Számítástudományi tsz http://aries.ektf.hu 1
Véletlenszám-előállítása Kezdőérték Köv. véletlen szám Köv. véletlen szám Köv. véletlen szám Köv. véletlen szám Ál-véletlen szám: a köv. véletlen számot az előzőből kapjuk valamilyen számítás végeredményeképp… 2
Véletlenszám-előállítása Véletlen számok használata Random rnd = new Random(); rnd változón keresztül lehet majd később véletlen számokat előállítani int a = rnd.Next(10,30); [10,30) intervallumbeli egész szám int a = rnd.Next(25); [0,25) intervallumbeli egész szám double d = rnd.NextDouble(); [0,1) intervallumbeli valós szám 3
"Rekordok" használata Rekordok használata • A rekord egy összetett, felhasználó által definiált adatszerkezet • A rekord mezőkből áll • Minden mező tetszőleges (más-más) típusú lehet • Vagyis a rekord egy inhomogén adatszerkezet • A mezők száma nem korlátos 4
"Rekordok" használata Első lépés – a típus leírása classAlkalmazott { publicstringNeve; publicintEletkora; publicintFizetese; publiccharBeosztasa; } A típus neve A mezők felsorolása Kötelező kulcsszó, jelentését a II. félévben (OOP tisztázzuk A mező típusa A mező neve 5
"Rekordok" használata Második lépés – változó deklarálása Alkalmazott alk; Harmadik lépés – változó kezdőértékadása alk = new Alkalmazott(); Memóriafoglalás A mezők kezdőértékeinek beállítása Alkalmazott alk = new Alkalmazott(); 6
"Rekordok" használata Negyedik lépés – a változó használata alk.Neve = ”Kis Barnabás”; alk.Eletkora = 35; alk.Fizetese = 140000; alk.Beosztasa = ‘F’; 7
"Rekordok" használata Mezőkhöz is lehet kezdőértéked megadni classKor { publicintx_koord = 0; publicinty_koord = 0; publicdouble sugar = 1.0; publicstringszine = ”fekete”; } Kor k = new Kor(); Console.WriteLine(k.sugar); 8
Enumeration Kötelező kulcsszó Az új típus neve enumNapok { Hetfo, Kedd, Szerda, Csutortok, Pentek, Szombat, Vasarnap } Változódeklaráció: típus + azonosító Napok nap = Napok.Hetfo; if (nap==Napok.Kedd) ... Console.WriteLine( nap ); 9
Enumeration Napok nap; string s = Console.ReadLine(); if (s==”Hetfo”) nap = Napok.Hetfo; … switch( s ) { case „Hetfo”: nap = Napok.Hetfo;break; case „Kedd” : nap = Napok.Kedd;break; ... default: Console.WriteLine(”HIBAS ERTEK!”); break; } 10
Enumeration string s = Console.ReadLine(); nap = (Napok)Enum.Parse(typeof(Napok),s); Bár ezzel vigyázni kell, mert ha nem megfelelő az ‘s’ string tartalma (nem felismerhető), akkor ez futás közbeni hibát fog okozni! 11
"Rekordok" használata enumSzinek { Piros, Fekete, Zold } classKor { publicintx_koord = 0; publicinty_koord = 0; publicdouble sugar = 1.0; publicSzinekszine = Szinek.Zold; } Kor k = new Kor(); Console.WriteLine(k.sugar); 12
Tömbök int[]jegyek = newint [35]; Int alapú tömb változónév Memória-foglalás 35 db int-nek 60 20 30 40 50 jegyek jegyek[0] jegyek[2] jegyek[34] jegyek[1] 13
Tömbök Tömbök • A tömb egy összetett, felhasználó által definiált adatszerkezet • A tömb elemekből áll • Minden elem ugyanazon típusú kell legyen (tömb alaptípusa) • Vagyis a tömb egy homogén adatszerkezet • Az elemek száma nem korlátos, de a tömb létrehozásakor meg kell adni a maximális elemszámot 14
Tömbök int [ ]jegyek = newint [35]; • Egydimenziós tömb – VEKTOR • jegyek [ 34 ] int [ , ]iskola = newint [10,40]; • Kétdimenziós tömb – MÁTRIX • Első index 0..9, második index 0..39 • 10x40 = 400 elem • iskola [ 9 , 39 ] 15
Tömbök int[]jegyek = newint [35]; for(int i=0; i<jegyek.Length; i++) { string s = Console.ReadLine(); jegyek[i] = int.Parse( s ); } int osszeg = 0; for(int i=0; i<jegyek.Length; i++) { osszeg += jegyek[i]; } 16
Tömbök int[]jegyek = newint [35]; int osszeg = 0; for(int i=0; i<jegyek.Length; i++) { osszeg += jegyek[i]; } int osszeg = 0; foreach(int a in jegyek) { osszeg += a; } 17
Tömbök int[]jegyek = newint [35]; int osszeg = 0; foreach(int a in jegyek) { osszeg += a; } 60 20 30 40 50 a 18
Tömbök int[]jegyek = newint [35]; int osszeg = 0; foreach(int a in jegyek) { a = 0; // hibás!!! } A kapcsolat a tömb elemei és a foreach iterációs változója között csak egyirányú, így a változó a foreach ciklus belsejében csak kiolvasható, értéke nem változhatható meg! for(int i=0;i<jegyek.Length;i++) { jegyek[i] = 0; } 19
Tömbök Kor[]korok = newKor[20]; for(int i=0;i<korok.Length;i++) korok[i] = new Kor(); for(int i=0;i<korok.Length;i++) korok[i].sugar = 20; foreach(Kor k in korok) k.sugar = 20; Ez viszont működik, mert nem magát a k változót változtatjuk (nem rá vonatkozik az értékadás), hanem a k valamely mezőjére foreach(Kor k in korok) k = new Kor(); Ez viszont továbbra sem működik az előző okok miatt! 20
Listák ArrayListlista = newArrayList(); Tetszőleges típusú elemekből alkotott listák változónév Memória-foglalás A lista inicializálása (kezdetben 0 elemű üres lista) for(int i=0; i<35; i++) { string s = Console.ReadLine(); int a = int.Parse( s ); lista.Add( a ); } 21
Listák ArrayListlista = newArrayList(); int osszeg = 0; for(int i=0; i<lista.Count; i++) { int a = (int)lista[i]; osszeg = osszeg + a; } int osszeg = 0; foreach(int x in lista) { osszeg = osszeg + x; } 22
Listák ArrayListlista = newArrayList(); int osszeg = 0; for(int i=0; i<lista.Count; i++) { int a = (int)lista[i]; … } Explicit típuskonverzió! Kötelező elem, e nélkül a lista elemek típusa egy Object nevű típus lesz, amely semelyik típussal nem kompatibilis implicite 23
Listák Listák • A lista egy előre definiált összetett adatszerkezet • A lista elemekből áll • Az elemek típusa lehet különböző is … • Ennek ellenére a lista egységes módon kezeli az elemeket (referencia-alapon) így a lista valójában egy homogén adatszerkezet • Az elemek száma nem korlátos, és nem kell előre definiálni a maximális elemek 24
Listák ArrayListlista = newArrayList(); lista.Add( ”Hello” ); lista.Add( ‘a’ ); lista.Add( 123 ); foreach(???? x in lista) { … } for(int i=0; i<lista.Count; i++) { ???? a = (????)lista[i]; …. } 25