Programoz´as I. 2. el˝ oad´as C# bevezet˝ o
Sergy´an Szabolcs
[email protected] ´ Obudai Egyetem Neumann J´ anos Informatikai Kar
2012. szeptember 17.
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
1 / 52
Tartalom
1
Sz´am´ıt´og´epes m˝ uveletv´egz´es
2
Adatt´ıpusok
3
Oper´atorok
4
C# program
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
2 / 52
Tartalom
1
Sz´am´ıt´og´epes m˝ uveletv´egz´es
2
Adatt´ıpusok
3
Oper´atorok
4
C# program
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
3 / 52
Sz´am´ıt´og´epes m˝uveletv´egz´es C´el: annak modellez´ese, hogy az egyszer˝ u adatokat hogyan t´arolja, ´es a m˝ uveleteket hogyan v´egzi el a sz´am´ıt´ og´ep (r´eszletesebben: Sz´am´ıt´ og´epes architekt´ ur´ak) Haszn´alt elemek OPT (Operat´ıv t´ar: mem´ oria, cache, regisztert´er is lehetne. A legfontosabb: b´ajtszervez´es˝ u t´ar) ALU (Arithmetical and Logical Unit: Aritmetikai ´es Logikai Egys´eg; a m˝ uveletv´egz˝ o egys´eg. 2 bemeneten tud valamilyen m˝ uveletet v´egezni, 1 kimenet) CU (Control Unit: Vez´erl˝ oegys´eg) Most NEM haszn´aljuk a ”CPU” elnevez´est, mert abban lenne m´as is (buszok, regiszterek, t¨ obb fajta cache, stb.)
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
4 / 52
Az ALU sematikus m˝uk¨od´ese
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
5 / 52
Probl´em´ak a k¨ozvetlen mem´oriac´ımekkel Ha ´ıgy m˝ uk¨odne, egy nagyobb program meg´ır´asa szinte lehetetlen komplexit´as´ u lenne (a jelenlegi sz´am´ıt´ og´epek c´ımtere ´ori´asi) Fogalmunk sincs, hogy az oper´aci´ os rendszer hova helyezi el a programunkat (t¨obb program fut egyszerre) Neumann-elv: Az adatok ´es az utas´ıt´asok k¨ oz¨ os operat´ıv t´arban vannak → ugyanolyan bin´aris reprezent´aci´ oban! Neh´ez lenne karban tartani, hogy hol van adat, ´es hol van utas´ıt´as.
Megold´as A programok csak v´altoz´okat haszn´alnak, a v´altoz´ ok konkr´et mem´oriac´ıme nem ´erdekes.
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
6 / 52
Probl´em´ak a v´altoz´okkal A fenti p´eld´aban a mem´ oria b´ajtszervez´es˝ u: 1 rekesz = 1 byte, a t´arol´as bitekben t¨ort´enik Ha sz´amot akarunk t´arolni, akkor 8 bit csak a 0..255 intervallumban el´eg. Mi van, ha nagyobb sz´amokat akarunk t´arolni? Mi van, ha nem sz´amot akarunk t´arolni, hanem sz¨oveget? Mi van, ha nem sz¨oveget akarunk t´arolni, hanem egy k´epet vagy m´as bin´aris adatot?
Megold´as A v´altoz´ok bevezet´ese ¨onmag´aban nem el´eg. Tudnunk kell, hogy a v´altoz´o ´altal kijel¨olt ter¨ uleten mennyi adat van, ´es azt hogyan kell ´ertelmezni. → T´ıPUSOK
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
7 / 52
Tartalom
1
Sz´am´ıt´og´epes m˝ uveletv´egz´es
2
Adatt´ıpusok
3
Oper´atorok
4
C# program
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
8 / 52
Parancsok, adatok A sz´am´ıt´og´ep minden adatot ´es utas´ıt´ast bin´aris form´aban t´arol a mem´ori´aban A t´arolt bin´aris adat jelent´ese ´ertelmez´esf¨ ugg˝ o Az adatokat v´altoz´okban t´aroljuk A v´altoz´o deklar´aci´oja hat´arozza meg a t´arolt adat m´eret´et ´es ´ertelmez´es´et (t´ıpus´at)
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
9 / 52
V´altoz´okkal v´egezhet˝o tev´ekenys´egek Deklar´ aci´ o: A v´altoz´ o nev´enek ´es t´ıpus´anak megad´asa int sz´ am; ´ ek elhelyez´ese a v´altoz´ ´ ekad´ Ert´ as: Ert´ oban sz´ am = 25; sz´ am = 6 * 2 - 29; ´ ek lek´ Ert´ erdez´ ese: A v´altoz´ o tartalm´anak kiolvas´asa. Az ´ert´ek a kiolvas´as ut´an is megmarad a v´altoz´ oban. 5 * 10 - sz´ am + 2;
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
10 / 52
V´altoz´okkal v´egezhet˝o tev´ekenys´egek A tev´ekenys´egek sorrendje: 1 2 3
Deklar´aci´ o ´ ekad´as Ert´ ´ ek lek´erdez´ese Ert´
A fentiek k¨oz¨ ul b´armelyik tev´ekenys´eget is szeretn´enk v´egrehajtani, el˝obb a sorrendben ˝ot megel˝ oz˝ ot kell elv´egezni A deklar´aci´o ´es a kezdeti ´ert´ekad´as ¨ osszevonhat´ o egy utas´ıt´asba int sz´ am = 25;
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
11 / 52
Egyszer˝u adatt´ıpusok Mindent bin´arisan t´arolunk, az ¨ osszes adatt´ıpus m´erete a byte t¨obbsz¨or¨ose Sz´amok Eg´esz Val´ os (lebeg˝ opontos)
Karakterek, karaktersorozatok (string-ek) Logikai ´ert´ekek
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
12 / 52
Eg´esz (fixpontos) sz´amok K´et f˝o k´erd´es: t´arol´asi m´eret, el˝ ojeless´eg → e kett˝ot˝ol f¨ ugg az ´abr´azol´as ´ert´ektartom´anya Relat´ıv kicsi ´abr´azol´as tartom´any, de teljes pontoss´ag El˝ojeles ´abr´azol´asi m´od: kettes komplemens (ld. IRA) Bitek sz´ ama 8 16 32 64
Sergy´ an (OE NIK)
El˝ ojeltelen byte ushort uint ulong
Programoz´ as I.
El˝ ojeles sbyte short int long
2012. szeptember 17.
13 / 52
Eg´esz (fixpontos) sz´amok N´ ev sbyte byte short ushort int uint long
Le´ır´ as 8 bites el˝ojeles eg´esz 8 bites el˝ojel n´elk¨ uli eg´esz 16 bites el˝ojeles eg´esz 16 bites el˝ojel n´elk¨ uli eg´esz 32 bites el˝ojeles eg´esz 32 bites el˝ojel n´elk¨ uli eg´esz 64 bites el˝ojeles eg´esz
ulong
64 bites el˝ojel n´elk¨ uli eg´esz
Sergy´ an (OE NIK)
´ ektartom´ Ert´ any -128 : 127 0 : 255 -32.768 : 32.767 0 : 65535 -2.147.483.648 : 2.147.483.647 0 : 4.294.967.295 -9.223.372.036.854.775.808 : 9.223.372.036.854.775.807 0 : 18.446.744.073.709.551.615
Programoz´ as I.
2012. szeptember 17.
14 / 52
Eg´esz sz´amok speci´alis ´ert´ekei MinValue Az ´abr´azolhat´ o legkisebb sz´am byte.MinValue, int.MinValue, stb.
MaxValue Az ´abr´azolhat´ o legnagyobb sz´am short.MaxValue, long.MaxValue, stb.
T´ ulcsordul´as (a v´altoz´ o++ n¨ oveli a v´altoz´ o ´ert´ek´et) byte a = 255; a++; ← a v´altoz´ o ´ert´eke 0 lesz sbyte b = -128; b--; ← a v´altoz´ o ´ert´eke 127 lesz
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
15 / 52
Val´os (lebeg˝opontos) sz´amok ±m · 2k Normaliz´alt sz´am form´aj´aban t´aroljuk (el˝ ojel, mantissza, karakterisztika, r´eszletesebben: IRA) Nagy sz´amtartom´any, de nem pontos A sz´am´abr´azol´as form´aj´ab´ ol ad´ od´ oan nem csak abszol´ ut ´ert´ekben t´ ul nagy, de null´ahoz t´ uls´agosan k¨ ozeli sz´amokat sem tud ´abr´azolni A karakterisztika m´erete az ´abr´azolhat´ o sz´amtartom´any m´eret´et, a mantissza m´erete a pontoss´agot hat´arozza meg
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
16 / 52
Val´os (lebeg˝opontos) sz´amok
N´ ev
Le´ır´ as
float double decimal
32 bites lebeg˝ opontos 64 bites lebeg˝ opontos 128 bites nagypontoss´ag´ u
Sergy´ an (OE NIK)
´ ekes Ert´ jegy 7 15 28
Programoz´ as I.
´ ektartom´ Ert´ any ±1, 5 · 10−45 : ±3, 4 · 1038 ±5, 0 · 10−324 : ±1, 7 · 10308 ±1, 0 · 10−28 : ±7, 9 · 1028
2012. szeptember 17.
17 / 52
Null´aval val´o oszt´as Eg´esz sz´amt´ıpus haszn´alatakor fut´as idej˝ u hib´at dob: int a = 5; int b = 0; int c = a / b; Val´os sz´amt´ıpus haszn´alatakor hib´atlan: float x = 5; float y = 0; float z = x / y; Val´os sz´amt´ıpus eset´en az eredm´eny lehet: v´egtelen (pozit´ıv vagy negat´ıv), illetve ”Nem sz´am”
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
18 / 52
Val´os sz´amok speci´alis ´ert´ekei 0 K¨ ul¨ on +0 ´es −0 is ´abr´azolhat´ o, de ezek egyen´ert´ek˝ uek
±∞ A v´egtelen elfogadott, bizonyos m˝ uveletekhez haszn´alhat´o ´ert´ek Pozit´ıv sz´am / 0 → +∞, Negat´ıv sz´am / 0 → −∞ float.PositiveInfinity, double.NegativeInfinity – decimal nincs
Nem sz´am 0/0, illetve ∞/∞ eredm´enye float.NaN, double.NaN – decimal nincs
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
19 / 52
Val´os sz´amok speci´alis ´ert´ekei Epsilon A legkisebb ´abr´azolhat´ o pozit´ıv sz´am float.Epsilon, double.Epsilon – decimal nincs
Kezd˝o´ert´ek megad´asa K´ odban tizedespont haszn´aland´ o: double pi = 3.14; Minden ´ıgy megadott ´ert´ek t´ıpusa double
Jelz˝okarakterek kezd˝o´ert´ek megad´as´an´al float pi = 3.14f; decimal pi = 3.14M;
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
20 / 52
Karakterek Egy karakter t´arol´asa is bin´arisan t¨ ort´enik → kell lennie egy szab´alynak, hogy melyik k´ od melyik karakternek felel meg ASCII: kezdetben 7 bites. 0-31: vez´erl˝ o karakterek; 32-127: angol ABC kis- ´es nagybet˝ ui, sz´amok, ´ır´asjelek 8 bites ASCII: 128-255: rajzol´ o karakterek, speci´alis karakterek (¨a, ¸c), csak az orsz´agok egy r´esz´enek megfelel˝ o ˝ u ˝ (csak ˆ Hi´anyz´ o karakterek: ˝ o, O, ˝, U o, u ˆ) Nincs el´eg hely: jap´an, k´ınai, sz´ır, stb. Alternat´ıva: k´ odlapok (cp437, cp850/852, cp1250) K´ odlapok szabv´anyos´ıt´asa (ISO8859-1, -2, -15) Probl´ema: k´esz´ıt´es k´ odlapja ↔ feldolgoz´as k´ odlapja
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
21 / 52
Karakterek Alternat´ıva: felejts¨ uk el az 1 byte = 1 karakter szab´alyt Probl´ema: hogyan ´allap´ıtjuk meg egy karakterl´anc hossz´at? Eddig egyszer˝ u volt, de ezut´an . . . → mindent u ´jra kell ´ırni . . .
UNICODE k´odol´as: UTF-8, UTF-16, UTF-32 k´ odlapok UTF-8: Az angol ABC bet˝ uinek k´ odol´asa ugyanaz, a t¨obbi karakternek egyedi karakterje van, 2-4 byte / karakter UTF-16: 2 vagy 4 byte / karakter Az UTF-16 a C# nyelv ´es a .NET keretrendszer bels˝o k´odol´asa (a file-ok k´ odol´asa UTF-8 Minden karakteres t´ıpus, minden sz¨ ovegkezel˝ o f¨ uggv´eny ez alapj´an m˝ uk¨ odik
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
22 / 52
Karakterek, karakterl´ancok Karakter: char (megad´as: aposztr´ offal) char c = ’´ e’;
Karakterl´anc: string (megad´as: id´ez˝ ojellel) string s = "´ Arv´ ızi t¨ uk¨ orf´ ur´ og´ ep";
Speci´alis karakterek is megadhat´ oak (@ jellel kikapcsolhat´o) Jel¨ ol´ es \0 \a \b \f \n \r \t
Karakter Null karakter S´ıpsz´o Visszat¨orl´es Lapdob´as Soremel´es Kocsi vissza V´ızszintes tabul´ator
Sergy´ an (OE NIK)
Jel¨ ol´ es \v \x.... \u.... \U.... \’ \" \\
Programoz´ as I.
Karakter F¨ ugg˝oleges tabul´ator Hexadecim´alis k´od Unicode karakter Unicode karakter Aposztr´of Id´ez˝ojel Backslash
2012. szeptember 17.
23 / 52
Logikai t´ıpus N´ ev bool
Le´ır´ as Logikai adatt´ıpus
´ ektartom´ Ert´ any true vagy false (igaz vagy hamis)
Teljes´ıtm´eny okokb´ol ´altal´aban nem egy biten ´abr´azoljuk (r´eszletesebb ld. IRA)
Logikai m˝uveletek A H H I I
Sergy´ an (OE NIK)
B H I H I
A∧B H H H I
A∨B H I I I
Programoz´ as I.
A⊕B H I I H
¬A I I H H
2012. szeptember 17.
24 / 52
V´altoz´ok deklar´al´asa ´es haszn´alata int j = -10; Fontos szab´aly: azonos n´evvel int x = 10, y = 20; nem lehet egy v´altoz´ot k´etszer double pi = 3.14159; deklar´alni const int sz´ az = 100; char d = ’x’; A k¨ozvetlen¨ ul be´ırt char UnicodeP´ elda = ’u\0170’; ´ert´ekek m´as neve: string jegy = "jeles"; liter´al ´ string El´ er´ esiUt = "C:\\Program Files\\"; string El´ er´ esi´ Ut2 = @"C:\Program Files\"; string vers = @"Hov´ a mer¨ ult el sz´ ep szemed vil´ aga"; bool igaz = true;
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
25 / 52
Speci´alis liter´alok Eg´esz liter´al T´ıpusuk: int, uint, long vagy ulong (ebben a sorrendben) att´ol f¨ ugg˝ oen, hogy melyik t´ıpusban f´er el a megadott ´ert´ek Az eg´esz liter´al t´ıpusa is m´ odos´ıthat´ o a liter´al m¨ og´e ´ırt bet˝ ukkel U: uint vagy ulong (pl.: 255U) L: long vagy ulong (pl.: -356L) UL: ulong (pl.: 222UL)
Megadhat´ o hexadecim´alisan: 0xFF
Val´os liter´al, tudom´anyos megad´as: 1.23456E-2
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
26 / 52
T´ıpuskonverzi´ok A sz´amt´ıpusok k¨oz¨otti konverzi´ o mik´entje att´ ol f¨ ugg, hogy t¨ort´enik-e ´ert´ekveszt´es a konverzi´ o sor´an Egyszer˝ u ´ert´ekad´as haszn´alhat´ o, amennyiben biztos, hogy nincs ´ert´ekveszt´es: byte a = 5; int b = a;
long c = 5; float d = c;
float f = 3.2f; double g = f;
Amennyiben ´ert´ekveszt´es t¨ ort´enhet, akkor mindenk´epp jelezni kell a konverzi´ot, ez az u ´n. t´ıpusk´enyszer´ıt´es, ”kasztol´as” (typecasting): int a = 999; byte b = (byte)a;
Sergy´ an (OE NIK)
double d = 3.14; int c = (int)d;
Programoz´ as I.
int i1 = -1; uint i2 = (uint)i1;
2012. szeptember 17.
27 / 52
T´ıpuskonverzi´ok A stringg´e t¨ort´en˝o konvert´al´as a C# nyelven MINDEN v´altoz´on´al ugyan´ ugy t¨ort´enik: byte b = 250; string s1 = b.ToString();
float f = 3.14f; string s2 = f.ToString();
Stringb˝ol sz´amm´a tudunk konvert´alni: string s = "123"; byte b = byte.Parse(s);
string s2 = "123,456"; float f = float.Parse(s2);
Typecasting eset´en (ebben a f´el´evben sz´amok k¨ oz¨ott): c´ elv´ altoz´ o = (c´ elt´ ıpus)forr´ asv´ altoz´ o; Stringg´e konvert´al´asn´al: c´ elv´ altoz´ o = forr´ asv´ altoz´ o.ToString(); Stringb˝ol konvert´al´asn´al: c´ elv´ altoz´ o = c´ elt´ ıpus.Parse(stringv´ altoz´ o); Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
28 / 52
Tartalom
1
Sz´am´ıt´og´epes m˝ uveletv´egz´es
2
Adatt´ıpusok
3
Oper´atorok
4
C# program
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
29 / 52
Kifejez´esek A kifejez´esek (”expression”) adatokat szolg´altat´ o operandusokb´ol ´es rajtuk valamilyen m˝ uveletet v´egz˝ o oper´atorokb´ ol ´allnak Operandus: pl. b´armely v´altoz´ o vagy konkr´et megadott ´ert´ek Oper´ator: pl. + - / *
A kifejez´esek egym´asba is ´agyazhat´ ok Egy kifejez´es operandusa maga is lehet kifejez´es
T¨obb oper´ator eset´en ezek fontoss´ag sorrendje (precedenci´aja) hat´arozza meg a ki´ert´ekel´es sorrendj´et P´elda: az x + y * z kifejez´es ki´ert´ekel´es szempontj´ab´ol: x + (y * z) A sorrend z´ar´ ojelez´essel explicit m´ odon is meghat´arozhat´o
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
30 / 52
Oper´atorok Aritmetikai oper´atorok Oper´ ator + * / % ++ --
Kifejez´ es +x x + y -x x - y x*y x / y x % y x++ ++x x---x
Sergy´ an (OE NIK)
Jelent´ es El˝ ojelk´epz´es ¨ Osszead´ as vagy kombin´aci´o (sz´am/string ) El˝ ojelk´epz´es Kivon´as Szorz´as Oszt´as (eg´esz/t¨ ort oszt´as, null´aval oszt´as!) Marad´ekk´epz´es N¨ ovel´es eggyel x ki´ert´ekel´ese ut´an N¨ ovel´es eggyel x ki´ert´ekel´ese el˝ott Cs¨ okkent´es eggyel x ki´ert´ekel´ese ut´an Cs¨ okkent´es eggyel x ki´ert´ekel´ese el˝ott
Programoz´ as I.
2012. szeptember 17.
31 / 52
Oper´atorok Rel´aci´os (¨osszehasonl´ıt´o) oper´atorok Oper´ ator == != < > <= >=
Sergy´ an (OE NIK)
Kifejez´ es x == y x != y x < y x > y x <= y x >= y
Jelent´ es Egyenl˝ o? Nem egyenl˝ o? Kisebb? Nagyobb? Kisebb vagy egyenl˝o? Nagyobb vagy egyenl˝o?
Programoz´ as I.
2012. szeptember 17.
32 / 52
Oper´atorok Bin´aris logikai (bitenk´enti m˝uveletv´egz˝o) oper´atorok Oper´ ator ∼ & ^ | << >>
Sergy´ an (OE NIK)
Kifejez´ es ∼x x & y x ^ y x | y x << y x >> y
Jelent´ es Bitenk´enti nem m˝ uvelet ´ m˝ Bitenk´ent ES uvelet ´ O ´ VAGY m˝ Bitenk´enti KIZAR uvelet Bitenk´enti VAGY m˝ uvelet Eltol´as balra (x eltol´asa y helyi´ert´ekkel) Eltol´as jobbra (x eltol´asa y helyi´ert´ekkel)
Programoz´ as I.
2012. szeptember 17.
33 / 52
Oper´atorok Logikai (felt´etelvizsg´al´o) oper´atorok Oper´ ator ! && ||
Kifejez´ es !x x && y x || y
Sergy´ an (OE NIK)
Jelent´ es A kifejez´es ´ert´eke x ellentettje A kifejez´es akkor igaz, ha x ´es y is igaz A kifejez´es akkor igaz, ha x vagy y is igaz
Programoz´ as I.
2012. szeptember 17.
34 / 52
Oper´atorok ´ ekad´o oper´atorok Ert´ Oper´ ator = += -= *= /= %= &= ^ =
Kifejez´ es x = y x += y x -= y x *= y x /= y x %= y x &= y x ^ = y
|= <<= >>=
x |= y x <<= y x >>= y
Sergy´ an (OE NIK)
´ ekad´ Ert´ as t´ıpusa Egyszer˝ u (x ´ert´eke legyen egyenl˝o y-nal) ¨ Osszead´ assal (x = x + y) Kivon´assal (x = x - y) Szorz´assal (x = x * y) Oszt´assal (x = x / y) Marad´ekk´epz´essel (x = x % y) ´ m˝ Bitenk´enti ES uvelettel (x = x & y) ´ O ´ VAGY m˝ Bitenk´enti KIZAR uvelettel (x = x ^ y) Bitenk´enti VAGY m˝ uvelettel (x = x | y) Bitenk´enti eltol´assal balra (x = x << y) Bitenk´enti eltol´assal jobbra (x = x >> y) Programoz´ as I.
2012. szeptember 17.
35 / 52
Tartalom
1
Sz´am´ıt´og´epes m˝ uveletv´egz´es
2
Adatt´ıpusok
3
Oper´atorok
4
C# program
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
36 / 52
Implement´al´as (parancssorb´ol) 1
Algoritmus → C# forr´ask´ od 1 2
2
C# forr´ask´od → Futtathat´ o f´ajl (.exe) 1
2 3 3
Forr´ask´ od meg´ır´asa sz¨ ovegszerkeszt˝ oben Forr´ask´ od elment´ese f´ajln´ev.cs n´even Parancssori ablak megnyit´asa (vagy Visual Studio Command Prompt ind´ıt´asa) Bel´ep´es a forr´ask´ odot tartalmaz´ o k¨ onyvt´arba (cd) Forr´asf´ajl leford´ıt´asa (csc f´ajln´ev.cs)
Futtathat´o f´ajl1 v´egrehajt´asa 1 2
Parancssori ablak megnyit´asa Program futtat´asa (f´ajln´ev.exe)
1 Ez nem val´ odi futtathat´ o f´ ajl, hanem u ´n. k¨ oztes k´ od, melynek futtat´ as´ ahoz a .NET Framework megfelel˝ o verzi´ oja sz¨ uks´eges Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
37 / 52
C# program alapja class ProgramN´ ev { static void Main() { } }
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
38 / 52
Utas´ıt´asok Egy program alapvet˝oen utas´ıt´asok sorozat´ab´ ol ´all Egyszer˝ u utas´ıt´asok (statement) Az egyszer˝ u utas´ıt´asok lehetnek deklar´aci´ ok, kifejez´esek vagy el˝ore defini´alt utas´ıt´asok Az egyszer˝ u utas´ıt´asokat ; karakter z´arja le
¨ Osszetett utas´ıt´asok (compound statement) T¨ obb utas´ıt´as sorozata ¨ osszefoghat´ o egy ¨ osszetett utas´ıt´ass´a Az ¨ osszetett utas´ıt´asok v´eg´en nem szerepel ; karakter Az ¨ osszetett utas´ıt´as m´asik neve: blokk vagy k´ odblokk A k´ odblokkon bel¨ ul defini´alt v´altoz´ o csak a k´ odblokkon bel¨ ul l´atszik
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
39 / 52
Szekvencia Minden utas´ıt´ast ; z´ar le Az utas´ıt´asok ´ırhat´ok k¨ ul¨ on sorokba is: utas´ ıt´ as1; utas´ ıt´ as2; ... utas´ ıt´ asN; Az utas´ıt´asok ´ırhat´ok egy sorba: utas´ ıt´ as1; utas´ ıt´ as2; ... utas´ ıt´ asN;
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
40 / 52
Ki´ırat´as Console.Write("Sz¨ oveg") – Ki´ırja a Sz¨ oveg-et a konzolra Console.WriteLine("Sz¨ oveg") – Ki´ırja a Sz¨ oveg-et a konzolra ´es a kurzort a k¨ovetkez˝o sor elej´ere ugratja ´at Haszn´alatukhoz sz¨ uks´eges a program legelej´en a using System; utas´ıt´as using System; class Program { static void Main() { Console.WriteLine("Hello world!"); } } Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
41 / 52
Ki´ırat´as V´altoz´ok ´ert´ek´enek ki´ırat´asa using System; class Program { static void Main() { int a = 3; int b = 4; int c = 5; Console.WriteLine("A h´ armosz¨ og oldalai: a = {0}, b = {1}, c = {2}", a, b, c); } }
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
42 / 52
Beolvas´as Console.ReadLine() paranccsal Ha az s string t´ıpus´ u v´altoz´ oban szeretn´enk elt´arolni a beolvasott sz¨oveget, akkor: string s = Console.ReadLine(); Ha a beolvasott ´ert´eket nem karaktersorozatk´ent (string) szeretn´enk haszn´alni, akkor a sz¨ uks´eges konverzi´ ot is v´egre kell hajtani. Haszn´alat´ahoz sz¨ uks´eges a program elej´en a using System; utas´ıt´as
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
43 / 52
Beolvas´as P´elda using System; class Program { static void Main() { Console.Write("a = "); string s = Console.ReadLine(); int a = int.Parse(s); Console.Write("b = "); s = Console.ReadLine(); int b = int.Parse(s); Console.Write("c = "); s = Console.ReadLine(); int c = int.Parse(s); Console.WriteLine("A h´ armosz¨ og oldalai: a = {0}, b = {1}, c = {2}", a, b, c); } } Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
44 / 52
El´agaz´as (szelekci´o)
if (felt´ etel) utas´ ıt´ as1; [else utas´ ıt´ as2;]
if (felt´ etel) { utas´ ıt´ as1; utas´ ıt´ as2; } else { utas´ ıt´ as3; utas´ ıt´ as4; }
else ´ag elhagyhat´o T¨obb utas´ıt´as eset´en k¨ otelez˝ oa{ }
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
45 / 52
El´agaz´as (szelekci´o) if (felt´ etel1) utas´ ıt´ as1; else if (felt´ etel2) utas´ ıt´ as2; else if (felt´ etel3) utas´ ıt´ as3; ... ... else utas´ ıt´ asN; else ´ag elhagyhat´o T¨obb utas´ıt´as eset´en k¨ otelez˝ oa{ } else if ´agakb´ol tetsz˝ oleges sz´am´ u haszn´alhat´ o Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
46 / 52
R¨ovidz´ar-ki´ert´ekel´es Akkor fordul el˝o, amikor egy logikai kifejez´esben t¨obb logikai kifejez´est ´ / VAGY (&& / ||) oper´atorok haszn´alat´aval csatolunk ¨ossze az ES ´ oper´ator eset´en, ha az els˝ ES o kifejez´es hamis, akkor a m´asodikkal m´ar nem is ´erdemes foglalkozni, az eredm´eny mindenk´epp hamis lesz VAGY oper´ator eset´en, ha az els˝ o kifejez´es igaz, akkor a m´asodikkal m´ar nem is ´erdemes foglalkozni, az eredm´eny mindenk´epp igaz lesz C#-ban az ¨osszetett logikai kifejez´esek (pl. felt´etelek eset´en) ilyen m´odon t¨ort´enik
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
47 / 52
El´agaz´as (szelekci´o) switch (kifejez´ es) { case ´ ert´ ek1 : utas´ ıt´ as(ok)1; break; case ´ ert´ ek2 : utas´ ıt´ as(ok)2; break; ... [default : utas´ ıt´ as(ok)N; break;] } Ha a kifejez´ es ´ert´eke ´rt´ e ek1, akkor utas´ ıt´ as(ok)1, ert´ ´ ek2, akkor utas´ ıt´ as(ok)2, . . . hajt´ odik v´egre
Ha a kifejez´ es ´ert´eke egyik case ´agban megadottal sem egyezik meg, akkor a default ´agban megadott utas´ ıt´ as(ok)N hajt´odik v´egre
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
48 / 52
Ciklus (iter´aci´o)
while (felt´ etel) utas´ ıt´ as;
while (felt´ etel) { utas´ ıt´ asok; }
Am´ıg a felt´ etel igaz, a ciklusmagban tal´alhat´ o utas´ ıt´ asok u ´jra ´es u ´jra v´egrehajt´odnak Ha a ciklusmagban t¨obb utas´ıt´as is van, akkor k¨ otelez˝o a { }
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
49 / 52
Ciklus (iter´aci´o) do { utas´ ıt´ asok; } while (felt´ etel); Am´ıg a felt´ etel igaz, az utas´ ıt´ asok u ´jra ´es u ´jra v´egrehajt´odnak
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
50 / 52
Ciklus (iter´aci´o) for (inicializ´ al´ o_r´ esz; felt´ etel; m´ odos´ ıt´ o_r´ esz) { utas´ ıt´ asok; } Am´ıg a felt´ etel igaz, az utas´ ıt´ asok u ´jra ´es u ´jra v´egrehajt´odnak T¨obb utas´ıt´as eset´en k¨ otelez˝ oa{ } inicializ´ al´ o r´ esz: ciklusv´altoz´ o(k) inicializ´al´asa m´ odos´ ıt´ o r´ esz: ciklusv´altoz´ o(k) ´ert´ek´enek m´ odos´ıt´asa A z´ar´ojelek k¨oz¨otti h´arom r´esz k¨ oz¨ ul egyiket sem k¨otelez˝o megadni (v´egtelen ciklus)
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
51 / 52
Felhaszn´alt irodalom Kor´abbi ´evek OOP diasorai Nagy Tibor Istv´an diasorai Andrew Troelsen: A C# 2008 ´es a .NET 3.5. Szak Kiad´o, 2009
Sergy´ an (OE NIK)
Programoz´ as I.
2012. szeptember 17.
52 / 52