Imperatív paradigma
2. előadás
IMPERATÍV PROGRAMOZÁS © Bánsághi Anna
[email protected]
2. ELŐADÁS - IMPERATÍV PARADIGMA
2014 © Bánsághi Anna
1 of 70
Imperatív paradigma
2. előadás
TEMATIKA I. ALAPFOGALMAK, TUDOMÁNYTÖRTÉNET II. IMPERATÍV PROGRAMOZÁS Imperatív paradigma Procedurális paradigma Generikus paradigma III. STRUKTÚRÁLT PROGRAMOZÁS Moduláris paradigma Objektumorientált paradigma
2014 © Bánsághi Anna
2 of 70
Imperatív paradigma
2. előadás
II. IMPERATÍV PROGRAMOZÁS IMPERATÍV PARADIGMA 1. 2. 3. 4. 5. 6. 7.
2014 © Bánsághi Anna
Jelkészlet Lexikális elemek Utasítások, vezérlési szerkezetek Elemi és összetett típusok Érték- és referencia típusok Programozási tételek Adatfolyamok kezelése
3 of 70
Imperatív paradigma
2. előadás
1. JELKÉSZLET a nyelv ábécéje tetszőleges szimbólumok véges halmaza a szó az ábécé elemeiből képzett véges sorozat tetszőleges program az adott nyelv szintaktikai és szemantikai szabályait kielégítő szó a karakterek neve, szimbóluma, kódja karaktertáblában: ASCII kód 256 elemű karakterkészlet Asterisk Unicode 17 szint, szintenként 65 536 karakter
*
Asterisk
42 *
\u002A
egy programozási nyelv jelkészlete (ábécéje) valamely karakterkészlet részhalmaza
2014 © Bánsághi Anna
4 of 70
Imperatív paradigma
2. előadás
A KORAI NYELVEK JELKÉSZLETE angol ábécé betűi, számjegyek, néhány speciális karakter szóköz, zárójelek, aritmetikai operátorok jelei
A MAI NYELVEK JELKÉSZLETE különböző nemzetek speciális karakterei is (Unicode)
2014 © Bánsághi Anna
5 of 70
Imperatív paradigma
2. előadás
2. LEXIKÁLIS ELEMEK a nyelv szintaxisának és szemantikájának megfelelő karaktersorozatok két határolójel között
HATÁROLÓJELEK szóköz, tabulátor, sorvége < > = + - * / ( ) { } & | ; : , . ? << >> <= >= == ++ -- += -= *= /= |= &= || &&
2014 © Bánsághi Anna
6 of 70
Imperatív paradigma
2. előadás
LEXIKÁLIS ELEMEK CSOPORTOSÍTÁSA fenntartott szavak azonosítók literálok megjegyzések
2014 © Bánsághi Anna
7 of 70
Imperatív paradigma
2. előadás
FENNTARTOTT SZAVAK nem használhatók azonosítóként a múlt árnyai: Java-ban goto jövőbeni fejlesztésekhez
KULCSSZAVAK speciális jelentéssel bírnak a nyelv szintaxisának részei if for while class const break try yield
A KULCSSZAVAK EGYBEN FENNTARTOTT SZAVAK IS
2014 © Bánsághi Anna
8 of 70
Imperatív paradigma
2. előadás
AZONOSÍTÓK változók, konstansok, típusok, alprogramok nevei
NYELVFÜGGŐ KÉRDÉSEK melyek a megengedett karakterek mi a megengedett szintaxis melyek a kódolási konvenciók különböznek-e a kis- és a nagybetűk van-e hosszúsági korlát melyek a fenntartott szavak
2014 © Bánsághi Anna
9 of 70
Imperatív paradigma
2. előadás
AZONOSÍTÓK int összeg = 123; Könyv könyv = new Könyv("Pi élete");
// azonosítója // objektumvazonosító
const Color FEHÉR = new Color("white");
// konstans azonosítója
class Könyv {...}
// típus neve
int OldalakSzáma(Könyv könyv) {...}
// függvény neve
namespace Példa {...}
// névtér azonosítója
2014 © Bánsághi Anna
10 of 70
Imperatív paradigma
2. előadás
LITERÁLOK numerikus literálok (számok) karakterliterálok (karakterek) karaktersorozatok (szövegek)
2014 © Bánsághi Anna
11 of 70
Imperatív paradigma
2. előadás
NUMERIKUS LITERÁLOK '0'..'9' és 'A'..'F' számjegyek '+', '-', '.' kitevőrész, típusjelölés -52 0.4342 1.234E+2
egész és valós számok
2014 © Bánsághi Anna
12 of 70
Imperatív paradigma
2. előadás
KARAKTERLITERÁLOK karakterek és escape szekvenciák aposztrófok között akár közvetlen karakterkódolás is 'x' 'A' '\n' '\u2318'
KARAKTERLÁNCOK karaktersorozatok macskakörmök között "Akár japánul 世界您好 vagy {valtozo}"
2014 © Bánsághi Anna
13 of 70
Imperatív paradigma
2. előadás
MEGJEGYZÉSEK generált vagy a programozó által írt magyarázó szövegek a fordítóprogram nem veszi figyelembe növelik a karbantarthatóságot, dokumentáció generálható speciális jeltől a sor végéig terjedő: kutya.Eszik(étel); // Kutya::eszik metódus hívása
speciális jelek között: /** * Növeli az energiát * * @param étel Étel */ void Eszik(Étel étel) {...}
2014 © Bánsághi Anna
14 of 70
Imperatív paradigma
2. előadás
3. UTASÍTÁSOK, VEZÉRLÉSI SZERKEZETEK a vezérlésszervezés eszközei lexikális elemekből épülnek fel
2014 © Bánsághi Anna
15 of 70
Imperatív paradigma
2. előadás
EGYSZERŰ UTASÍTÁSOK értékadás kifejezés-utasítás
ÖSSZETETT UTASÍTÁSOK szekvencia és blokk utasítás elágazási szerkezetek ciklusszerkezetek
STRUKTÚRÁLATLAN UTASÍTÁSOK vezérlésátadás
2014 © Bánsághi Anna
16 of 70
Imperatív paradigma
2. előadás
ÉRTÉKADÁS általánosan
<értékadásjel>
konkrétan x = 123 y = x * 5 + 3 z = add(y, 10)
2014 © Bánsághi Anna
17 of 70
Imperatív paradigma
2. előadás
KIFEJEZÉS lexikális elemekből épül fel kiértékelés után eredményt ad vissza dinamikusan típusos nyelvek esetén: kifejezés = érték statikusan típusos nyelvek esetén: kifejezés = típus + érték változó- és konstans-kiértékelések aritmetikai, logikai, relációs kifejezések függvényhívások ezek kombinációival, egymásba ágyazásával építhetők fel
2014 © Bánsághi Anna
18 of 70
Imperatív paradigma
2. előadás
KIFEJEZÉSEK csoportosíthatók az argumentumaik száma (aritás) szerint nulláris, unáris, bináris, k-áris
OPERÁTOROK speciális, szimbólumokkal jelölt függvények + - * / ++ -- < > || &&
2014 © Bánsághi Anna
19 of 70
Imperatív paradigma
2. előadás
OPERÁTOROK HASZNÁLATA prefix,
kiértékelés balról jobbra
-*bb**4ac
postfix, kiértékelés lengyel formanak megfelelően
bb*4a*c*-
infix,
b*b-4*a*c
kiértékelés precedencia és asszociativitás szerint
mixfix
2014 © Bánsághi Anna
feltétel ? kifezés_1 (igaz ág) : kifejezés_2 (hamis ág)
20 of 70
Imperatív paradigma
2. előadás
PREFIX KIÉRTÉKELÉS - * 5 5 * * 4 3 2 - 25 * * 4 3 2 - 25 * * 4 3 2 - 25 * 12 2 - 25 * 12 2 - 25 24 - 25 24 1
2014 © Bánsághi Anna
21 of 70
Imperatív paradigma
2. előadás
POSTFIX KIÉRTÉKELÉS 5 5 * 4 3 * 2 * 25 4 3 * 2 * 25 4 3 * 2 * 25 12 2 * 25 12 2 * 25 24 25 24 1
2014 © Bánsághi Anna
22 of 70
Imperatív paradigma
2. előadás
KIFEJEZÉS-UTASÍTÁS értékadás mint operátor // asszociativitási szabály szerint egyenértékűek x = y = 7; x = (y = 7);
// egyenértékűek x = x + 2; x += 2;
2014 © Bánsághi Anna
23 of 70
Imperatív paradigma
2. előadás
SZEKVENCIA utasítások egymás utáni kötött sorrendű végrehajtása utasítások lezárása: pontosvessző, új sor
BLOKK UTASÍTÁS ahol szintaktikailag egyetlen utasítás állhat, ott használható a fordítóprogram számára egyetlen utasításnak minősül utasításcsoportosító, egymásba ágyazható
2014 © Bánsághi Anna
24 of 70
Imperatív paradigma
2. előadás
BLOKK UTASÍTÁS utasítások begin utasítások end
utasítások { utasítások }
2014 © Bánsághi Anna
25 of 70
Imperatív paradigma
2. előadás
VEZÉRLÉSÁTADÁS az utasítások kötött sorrendű végrehajtása megszakad utasítások goto cimke utasítások cimke: utasítások utasítások
goto feltétel nélküli vezérlésátadás break kiugrik a vezérlési szerkezetből continue ciklusfeltétel újrakiértékelése return visszatérés a hívóhoz
2014 © Bánsághi Anna
26 of 70
Imperatív paradigma
2. előadás
ELÁGAZÁSI SZERKEZETEK feltétel logikai értékétől függően valamilyen (blokk) utasítás végrehajtása
EGYIRÁNYÚ ELÁGAZÁS if logikai kifejezés then (blokk) utasítás
KÉTIRÁNYÚ ELÁGAZÁS if logikai kifejezés then egyik (blokk) utasítás else másik (blokk) utasítás end if
2014 © Bánsághi Anna
27 of 70
Imperatív paradigma
2. előadás
TÖBBIRÁNYÚ ELÁGAZÁS if egyik logikai kifejezés then egyik (blokk) utasítás else if másik logikai kifejezés then másik (blokk) utasítás else if harmadik logikai kifejezés then harmadik (blokk) utasítás else negyedik (blokk) utasítás end if
2014 © Bánsághi Anna
28 of 70
Imperatív paradigma
2. előadás
ESETKIVÁLASZTÁSOS ELÁGAZÁS szelektor diszkrét típusú értékétől függően osztályoz switch diszkrét típusú kifejezés case egyik érték : egyik (blokk) utasítás break case másik érték : case harmadik érték : másik (blokk) utasítás break default : harmadik (blokk) utasítás break endswitch
2014 © Bánsághi Anna
29 of 70
Imperatív paradigma
2. előadás
ELÁGAZÁSI SZERKEZETEK
NYELVFÜGGŐ KÉRDÉSEI milyen típusú elágazási szerkezeteket definiál a nyelv megadható-e esetkiválasztásos esetben alapértelmezett ág megadható-e azonos érték több ágon megadható-e több érték ugyanazon ágon vajon a vezérlés lecsorog a következő ágra, vagy csak az egyik ág hajtódik végre
2014 © Bánsághi Anna
30 of 70
Imperatív paradigma
2. előadás
CIKLUSSZERKEZETEK amíg egy adott feltétel teljesül, addig valamilyen (blokk) utasítás végrehajtása előre ismert lépésszámú elöltesztelő hátulteszteló iterátor
2014 © Bánsághi Anna
31 of 70
Imperatív paradigma
2. előadás
SZÁMLÁLÁSOS CIKLUS for inicializálás; ciklusfeltétel; ciklusváltozó frissítése ciklusmag
for( int i = 0; i < 10; ++i ) { Console.WriteLine(i); }
for( int i = 1, j = 2; i < 10 && j+i != 4; i += 3, ++j ) { Console.WriteLine("i: " + i); Console.WriteLine("j: " + j); }
for(;;) { Console.WriteLine("végtelen ciklus"); }
2014 © Bánsághi Anna
32 of 70
Imperatív paradigma
2. előadás
ELÖLTESZTELŐ CIKLUS a ciklusmag végrehajtása előtt ellenőrzi a ciklusfeltételt, ezért előfordulhat az is, hogy a ciklusmag egyszer sem fut le while ciklusfeltétel ciklusmag
int i = 0; // ciklusváltozó inicializálása while( i < 10 ) // ciklusfeltétel { Console.WriteLine(i); ++i; // ciklusváltozó növelése }
while( true ) { Console.WriteLine("végtelen ciklus"); }
2014 © Bánsághi Anna
33 of 70
Imperatív paradigma
2. előadás
HÁTULTESZTELŐ CIKLUS a ciklusmag végrehajtása után ellenőrzi a ciklusfeltételt, ezért a ciklusmag egyszer mindenképpen lefut do ciklusmag while ciklusfeltétel
int i = 0; do { Console.WriteLine(i); ++i; } while( i < 10 );
do { Console.WriteLine("végtelem ciklus"); } while( true );
2014 © Bánsághi Anna
34 of 70
Imperatív paradigma
2. előadás
BEJÁRÓ CIKLUS / ITERÁTOR az iterációs változó felveszi az iterált gyűjtemény aktuális elemének értékét, ezért a gyűjtemény elemei nem módosíthatók a ciklusmagon belül foreach iterációs változó in gyűjtemény ciklusmag
string ábécé = "abcdefghijklmnopqrstuvwxyz"; foreach( char karakter in ábécé ) { Console.WriteLine(karakter); }
2014 © Bánsághi Anna
35 of 70
Imperatív paradigma
2. előadás
VEZÉRLÉSÁTADÁS CIKLUSBAN for( int i = 0; i < 10; ++i ) { if( 3 == i ) break; // kilép a ciklusból Console.WriteLine(i); }
for( int i = 0; i < 10; ++i ) { if( 3 == i ) continue; // kilép az iterációból Console.WriteLine(i); }
2014 © Bánsághi Anna
36 of 70
Imperatív paradigma
2. előadás
CIKLUSSZERKEZETEK
NYELVFÜGGŐ KÉRDÉSEI milyen típusú ciklusszerkezeteket definiál a nyelv vajon a ciklusfeltétel kötelezően logikai értékű vajon a ciklusmag kötelezően blokk beállítható-e a ciklusváltozó alsó és felső értéke, lépésszáma definiált-e a ciklusváltozó értéke kilépéskor létezik-e break, continue
2014 © Bánsághi Anna
37 of 70
Imperatív paradigma
2. előadás
4. ELEMI ÉS ÖSSZETETT TÍPUSOK a nyelvek számtalan beépített típust definiálnak, hogy a memóriarekeszeknél összetettebb fogalmakkal dolgozhasson a programozó int i = 123 char c = 'a' string s = "rövid szöveg"
2014 © Bánsághi Anna
38 of 70
Imperatív paradigma
2. előadás
TÍPUSÉRTÉKEK ÉS TÍPUSMŰVELETEK a típus definiálása két részből áll meg kell adni a lehetséges típusértékek halmazát meg kell adni a típusértékeken végezhető műveleteket int int
i j
= 123 = i + 12
string s1 = "alma" string s2 = "fa" string s3 = s1.Concat( s2 )
2014 © Bánsághi Anna
// operátorral definiált (asszociatív) művelet
// alprogrammal definiált (men asszociatív) művelet
39 of 70
Imperatív paradigma
2. előadás
A TÍPUS TULAJDONSÁGAI kódolás a memóriában való ábrázolás méret a memóriában elfoglalt méret szerkezet az összetevőkre való hivatkozás összetett típusnál specifikáció a típusértékhalmaz és a típusműveletek halmaza reprezentáció a típus ábrázolása a memóriában, a típus megvalósítása programnyelvi eszközökkel
2014 © Bánsághi Anna
40 of 70
Imperatív paradigma
2. előadás
EDDIG LÁTOTT PÉLDÁK ÉRTÉKHALMAZ + MŰVELETHALMAZ = TÍPUS egész számok + összeadás, kivonás, összehasonlítás valós számok + összeadás, kivonás, szorzás, osztás, összehasonlítás igaz, hamis + negáció, konjunkció, diszjunkció, implikáció karakterláncok + konkatenáció, összehasonlítás
2014 © Bánsághi Anna
41 of 70
Imperatív paradigma
2. előadás
ERŐSEN TÍPUSOS NYELV változók típusa fordítási időben meghatározott csak az adott típus műveletei megengedettek int string return return
i = 8 s = "42" i + s s.Concat( i )
// fordítási hiba // fordítási hiba
GYENGÉN TÍPUSOS NYELV tetszőleges művelet megengedett tetszőleges típuson csak futási időben derül fény a hibára int string return return
2014 © Bánsághi Anna
i = 8 s = "42" i + s s.Concat( i )
// eredmény: 50 // eredmény: "428"
42 of 70
Imperatív paradigma
2. előadás
ELEMI TÍPUSOK szerkezet nélküliek, logikailag felbonthatatlanok
ÖSSZETETT TÍPUSOK meglévő típusokból tevődnek össze típuskonstrukciók segítségével
ABSZTRAKT ADATTÍPUSOK meglévő típusokból tevődnek össze típuskonstrukciókkal és új műveletek megvalósításával
2014 © Bánsághi Anna
43 of 70
Imperatív paradigma
2014 © Bánsághi Anna
2. előadás
44 of 70
Imperatív paradigma
2. előadás
ELEMI TÍPUSOK szinte minden programozási nyelv támogatja, mert nem is a nyelv, hanem a számítógépek processzorai valósítják meg
ELEMI TÍPUSOK MŰVELETEI értékadás transzformációs függvények rendezett halmazokon értelmezett függvények típuskonverzió
2014 © Bánsághi Anna
45 of 70
Imperatív paradigma
2. előadás
ÉRTÉKADÁS ekvivalens típusúak közötti érték-hozzárendelés, másolatkészítés int i = 12 int j = i i = "szöveg"
2014 © Bánsághi Anna
// fordítási hiba
46 of 70
Imperatív paradigma
2. előadás
TRANSZFORMÁCIÓS FÜGGVÉNYEK adott típust vagy annak direkszorzatát képezik a típusra
T ×⋯×T →T
típusonként változik ezen függvények, műveletek halmaza egészeken az összeadás, kivonás logikai értékeken a logikai műveletek ...
2014 © Bánsághi Anna
47 of 70
Imperatív paradigma
2. előadás
RENDEZETT HALMAZOKON ÉRTELMEZETT FÜGGVÉNYEK relációs operátorok < ≤ > ≥ = ≠ minimális és maximális elem meghatározása rákövetkező és megelőző elem meghatározása
2014 © Bánsághi Anna
48 of 70
Imperatív paradigma
2. előadás
TÍPUSKONVERZIÓ típus megváltoztatása (konvertálása) egy másik típusra
T1 → T2
implicit típuskonverzió: a futási idejű környezet végzi el float x x = 2.2 + 1 int i i = 2.2 + 1
// bővítő típuskonverzió: 2.2 + 1.0 // bővítő típuskonverzió: 2.2 + 1.0 // szűkítő típuskonverzió: i = 3
explicit típuskonverzió: a programozó hatásköre int x = 3 string s = "12" int y = x + (int)s
2014 © Bánsághi Anna
49 of 70
Imperatív paradigma
2. előadás
DISZKRÉT TÍPUSOK értékhalmaz rendezhető értékek műveletek rendezett halmazokon értelmezett függvények
2014 © Bánsághi Anna
50 of 70
Imperatív paradigma
2. előadás
EGÉSZ TÍPUSOK értékhalmaz műveletek
Z
+ - * div ^ mod unáris mínusz rendezett halmazokon értelmezett függvények reprezentáció általában 32 bites előjeles egészek
2014 © Bánsághi Anna
51 of 70
Imperatív paradigma
2. előadás
FELSOROLÁSI TÍPUSOK értékhalmaz az elemek felsorolásával adjuk meg szinek = {"kék", "zöld", "piros"}
műveletek rendezett halmazokon értelmezett függvények típuskonverzió egészekre és vissza
2014 © Bánsághi Anna
52 of 70
Imperatív paradigma
2. előadás
KARAKTER TÍPUSOK értékhalmaz
Ch
műveletek
rendezett halmazokon értelmezett függvények reprezentáció általában 16 bites Unicode karakterkódolás
2014 © Bánsághi Anna
53 of 70
Imperatív paradigma
2. előadás
LOGIKAI TÍPUSOK értékhalmaz
L = {igaz, hamis}
műveletek
logikai műveletek, úgymint ¬ ∧ ∨ → rendezett halmazokon értelmezett függvények reprezentáció hamis 0 igaz -1 (néha 1)
2014 © Bánsághi Anna
54 of 70
Imperatív paradigma
2. előadás
LOGIKAI KIFEJEZÉSEK KIÉRTÉKELÉSE lusta kiértékelésű operátorok bool A = false, B = true bool C = A ∧ B
// B-t nem értékeli ki a nyelv
mohó kiértékelésű operátorok bool A = false, B = true bool C = A ∧ B
2014 © Bánsághi Anna
// B-t is kiértékeli a nyelv
55 of 70
Imperatív paradigma
2. előadás
VALÓS TÍPUSOK értékhalmaz műveletek
R
+ - * / ^ √ unáris mínusz rendezett halmazokon értelmezett függvények reprezentáció lebegőpontos ábrázolás * ak -167,2 = -1 * 0,1672 * 103 e * M
előjelbit, mantissza, abszcissza, kitevő
2014 © Bánsághi Anna
56 of 70
Imperatív paradigma
2. előadás
ÖSSZETETT TÍPUSOK típuskonstrukciós eszközökkel, elemi és összetett típusokból épített új típusok T = (T1 , T2 , … , Tn )
ÖSSZETETT TÍPUSOK MŰVELETEI konstrukciós függvények: összetett típusérték létrehozása komponenseiből a new operátorral és konstruktorral szelekciós függvények: összetett típusérték komponenseinek kiválasztása a . operátorral önmagukban csak értékhalmazt definiálnak
2014 © Bánsághi Anna
57 of 70
Imperatív paradigma
2. előadás
REKORD értékhalmaz azonos vagy különböző típusú elemek direktszorzata
T = T1 × T2 × ⋯ × Tn szelektorok
adott (t1 , t2 , … , tn ) = t ∈ T esetén hozzáférés a ti komponenshez az si : T → Ti szelektorokkal úgy, hogy si (t) = ti (másik jelölés: t. si ) reprezentáció a komponensek megadásuk sorrendjében helyezkednek el a memóriában, bármely komponens elérhető a mezőnév alapján
2014 © Bánsághi Anna
58 of 70
Imperatív paradigma
2. előadás
REKORD PÉLDÁK térbeli pontok halmaza, ahol a 3 koordinátát 3 double típusú szám reprezentálja komplex számok halmaza, ahol a valós és a képzetes részt egy-egy int típusú szám reprezentálja dátumok halmaza, év, hónap és nap reprezentálására egy-egy int típusú szám telefonkönyv, ahol a nevet egy string, a telefonszámot egy int típusú adat reprezentálja
2014 © Bánsághi Anna
59 of 70
Imperatív paradigma
2. előadás
REKORD SZERKEZETE a rekordba helyezett értékeket nevezzük a rekord adattagjainak vagy mezőinek mezője lehet bármilyen, már deklarált típus (egyszerű, összetett, illetve más rekord is) a mező automatikusan létrejön, a megfelelő szelektorral külön lekérdezhető és módosítható
2014 © Bánsághi Anna
60 of 70
Imperatív paradigma
2. előadás
REKORD DEKLARÁLÁSA C#-BAN blokkon belül deklaráljuk a rekord mezőit struct { <mezőnév_1>; <mezőnév_2>; <mezőnév_3>; }
a rekordok új típusok lesznek, amelyek tetszőlegesen felhasználhatóak, ezért célszerű globálisan deklarálni őket
2014 © Bánsághi Anna
61 of 70
Imperatív paradigma
2. előadás
Valósítsuk meg a komplex számok típusát struct KomplexSzám { public int valós; public int képzetes; } public static void Main() { KomplexSzám c = new KomplexSzám(); c.valós = 0; c.képzetes = 1; Console.WriteLine( "Valós rész: {0}, képzetes rész: {1}", c.valós, c.képzetes ); }
2014 © Bánsághi Anna
62 of 70
Imperatív paradigma
2. előadás
TÖMB azonos típusú elemek véges sorozata értékhalmaz
{v : H → T } leképezés egy indexhalmazról a típusra szelektorok
adott i
∈ H esetén hozzáférés a i-edik elemhez a v(i) helyettesítést jelenti másik jelölés: v[i] reprezentáció
az elemek az indexelésnek megfelelő sorrendben helyezkednek el a memóriában, bármely elem elérhető az index alapján
2014 © Bánsághi Anna
63 of 70
Imperatív paradigma
2. előadás
TÖMB PÉLDÁK // 5 hosszú tömb deklarációja, melyben karakterek lesznek char[] karakterek = new char[5]; // 2x3-as kétdimenziós tömb deklarációja, melyben egész számok lesznek int[,] mátrix = new int[2,3]; // tömb definíciója és inicializációja egy lépésben int[] számok = new int[] { 3, 5, 8, 13 };
a tömbök hossza rögzített, nem lehet dinamikusan változtatni
2014 © Bánsághi Anna
64 of 70
Imperatív paradigma
2. előadás
Valósítsuk meg a komplex számok típusát, és hozzunk létre egy három elemű, komplex számokat tartalmazó tömböt struct KomplexSzám { public int valós; public int képzetes; } public static void Main() { KomplexSzám[] számok = new KomplexSzám[3]; for( int i = 0; i < számok.Length; ++i ) { számok[i].valós = i; számok[i].képzetes = 2*i; } foreach( KomplexSzám szám in számok ) { Console.WriteLine( "{0} + {1}*i", szám.valós, szám.képzetes ); } }
2014 © Bánsághi Anna
65 of 70
Imperatív paradigma
2. előadás
5. ÉRTÉK- ÉS REFERENCIA TÍPUSOK a típusokat csoportosíthatjuk aszerint is, hogy hogyan érhetők el a memóriában az értéktípusok változói közvetlenül érik el az értéküket az referencia típusok változói közvetetten, egy referencián keresztül érik el az értéküket
2014 © Bánsághi Anna
66 of 70
Imperatív paradigma
2. előadás
ÉRTÉKTÍPUS PÉLDA int i = 13; int j = i; i = 123;
// az értékadás után mi lesz j értéke?
értékadás előtt a memória állapota
értékadás után a memória állapota
2014 © Bánsághi Anna
67 of 70
Imperatív paradigma
2. előadás
REFERENCIA TÍPUS PÉLDA int[] t1 = new int[] { 13, 1, 3 }; int[] t2 = t1; t1[0] = 123;
// az értékadás után mi lesz t2[0] értéke?
értékadás előtt a memória állapota
értékadás után a memória állapota
2014 © Bánsághi Anna
68 of 70
Imperatív paradigma
2. előadás
A C# ÉRTÉK- ÉS REFERENCIA TÍPUSAI ÉRTÉKTÍPUS elemi és iterált típusok, rekord értéket tárol típusműveletek deklarálható típusos
2014 © Bánsághi Anna
REFERENCIA TÍPUS tömb és felhasználói típusok memóriacímet tárol típusműveletek deklarálható típusos
69 of 70
Imperatív paradigma
2. előadás
A C# REFERENCIA TÍPUSAI
2014 © Bánsághi Anna
70 of 70