1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy Károly Főiskola Számítástudományi tsz
2 Deklaráció A program írása közben azonosítókat használunk fel. -Eleve ismert azonosítók (pl ‘int’) -Általunk ‘kitalált’ azonosítók -Mielőtt egy azonosítót felhasználnánk a program szövegében, azt meg kell magyaráznunk előtte -Ezt DEKLARÁCIÓ-nak nevezzük
3 Adat-deklaráció A programunk futása során adatokkal dolgozunk -Literálok (programszövegbe illesztett adatok) -Nevesített literálok (konstansok) -Változók
4 Konstans-deklaráció const double Pi = 3.14; kulcsszó típus az új azonosító (a konstans neve) értékadó egyenlőség típusnak megfelelő kifejezés, kezdőérték
5 Konstans deklaráció példák const double Pi = 3.14; const string nev = ”Hernyák Zoltán”; const bool Igaz = true; const char dirSeparator = ‘\\’; const int maxLetszam = 34; const int maxBevetel = maxLetszam * 3000; const double Pi = 3.14; const string nev = ”Hernyák Zoltán”; const bool Igaz = true; const char dirSeparator = ‘\\’; const int maxLetszam = 34; const int maxBevetel = maxLetszam * 3000; A kezdőérték kifejezés is lehet! De csak konstansokból és literálokból felépített kifejezés!
6 Konstansok A konstansoknak van Típusuk (explicit módon megadva) Nevük (azonosító) Értékük (kezdőértékként megadva) A konstansokra a nevükkel hivatkozhatunk a kódban A konstansok nem szerepelhetnek értékadó utasítás bal oldalán, így értékük a program futása során nem változtatható meg
7 Változó-deklaráció double sugar; típusaz új azonosító (a változó neve) string jelszo = String.Empty; típusa változó nevekezdőérték (nem kötelező)
8 Változó-deklaráció A változóknak van Típusuk (explicit módon megadva) Nevük (azonosító) Aktuális értékük A változó aktuális értékére a nevével lehet hivatkozni Amíg a változó nem kapott explicit módon a program futása során értéker, addig definiálatlan-nak tekintjük
9 Változó-deklaráció Definiálatlan változó értékére nem hivatkozhatunk! Ha mégis, akkor: (1) Futás közbeni hiba keletkezik, (2) Nemdeterminisztikus programműködést eredményez, (3) Szintaktikai hibát jelez a fordítóprogram
10 Értékadó utasítás A változók értékét értékadó utasítás révén változtathatjuk meg. A változók értékét tetszőleges sokszor megváltoztathatjuk A változó mindig csak a legutolsó ‘belehelyezett’ értékre ‘emlékszik’ Ezt az értéket aktuális értéknek nevezzük
11 Értékadó utasítás változónév = kifejezés ; Egy már deklarált változó neve Futás közben értékelődik ki, így szerepelhet benne - konstans - literál - változó - operátorok - függvényhívások A végeredmény típusa kikövetkeztethető Így ismert a típusa is
12 Értékadó utasítás A kifejezés eredmény-típusa és a változó típusa -Meg kell egyezzen -Vagy konvertálható kell legyen -Léteznek implicit (automatikus) konverziók -char string !!!!!!!!!!! NINCS!!!!!! -egészeken belül a ‘nagyobb’ típus felé -egész lebegőpontos
13 Értékadó utasítás példák benzinAr = alapAr * 1.3; bevetel = eladottMenny * benzinAr; c = a * Math.Sin( alfa ); nev = ”Dr. ” + csaladnev + ‘ ‘ + keresztnev; x = y / 3; p = q % 4; benzinAr = alapAr * 1.3; bevetel = eladottMenny * benzinAr; c = a * Math.Sin( alfa ); nev = ”Dr. ” + csaladnev + ‘ ‘ + keresztnev; x = y / 3; p = q % 4;
14 Be-, és kiviteli utasítások A program bizonyos adatokat a futásához nem a program kódjában tárol, hanem külső helyről olvas be Ez lehet Billentyűzet Adatbázis-szerver, disk-file, XML, … Egér, joystick, kormány, … Digitalizáló-pad, … …
15 C# beviteli utasítás System.Console.ReadLine() fv, ez mindig string-et ad vissza string s = Console.ReadLine(); Más adattípusok esetén konvertálás szükséges ( futási hibát okozhatnak! ): int x = int.Parse( s ); double d = double.Parse( s ); double x = int.Parse( s ); int x = int.Parse( s ); double d = double.Parse( s ); double x = int.Parse( s ); Az egyéb típusok char, bool is működhetnek hasonló konvertálási eljárással!
16 C# kiviteli utasítás System.Console.WriteLine(…) fv Console.WriteLine(”Hello Vilag!”); Összetett kiírás formátum-string-el: Console.WriteLine(”X={0}, Y={1}, Osszeg={2}”,x,y,x+y);
17 Java kiviteli utasítás System.out.println("Hello World!"); System.out.println(”X=”+3+” Y=”+4); System.out.println("Hello World!"); System.out.println(”X=”+3+” Y=”+4); String összefűzés operátora Az egész literálok itt implicit módon típuskonvertálva vannak string-re
18 Példaprogram 2 egész szám összegének kiírására (demó) static void Main() { Console.WriteLine(”Kérem az A értékét:”); string s = Console.ReadLine(); int a = int.Parse( s ); Console.WriteLine(”Kérem a B értékét:”); s = Console.ReadLine(); int b = int.Parse( s ); int c = a+b; Console.WriteLine(”Összeg={0}”,c); } static void Main() { Console.WriteLine(”Kérem az A értékét:”); string s = Console.ReadLine(); int a = int.Parse( s ); Console.WriteLine(”Kérem a B értékét:”); s = Console.ReadLine(); int b = int.Parse( s ); int c = a+b; Console.WriteLine(”Összeg={0}”,c); }
19 Szekvencia vezérlési szerkezet … A program utasításait nem tetszőleges sorrendben fogja a rendszer végrehajtani, hanem abban a sorrendben, amelyben azok a forráskódban szerepelnek. Ez a végrehajtási elvet SZEKVENCIA- szabálynak nevezzük.
20 Újradeklarálás gond lenne… static void Main() { Console.WriteLine(”Kérem az A értékét:”); string s = Console.ReadLine(); int a = int.Parse( s ); Console.WriteLine(”Kérem a B értékét:”); s = Console.ReadLine(); int b = int.Parse( s ); int c = a+b; Console.WriteLine(”Összeg={0}”,c); } static void Main() { Console.WriteLine(”Kérem az A értékét:”); string s = Console.ReadLine(); int a = int.Parse( s ); Console.WriteLine(”Kérem a B értékét:”); s = Console.ReadLine(); int b = int.Parse( s ); int c = a+b; Console.WriteLine(”Összeg={0}”,c); }
21 Minden azonosítónak van hatásköre static void Main() { Console.WriteLine(”Kérem az A értékét:”); string s = Console.ReadLine(); int a = int.Parse( s ); Console.WriteLine(”Kérem a B értékét:”); s = Console.ReadLine(); int b = int.Parse( s ); int c = a+b; Console.WriteLine(”Összeg={0}”,c); } static void Main() { Console.WriteLine(”Kérem az A értékét:”); string s = Console.ReadLine(); int a = int.Parse( s ); Console.WriteLine(”Kérem a B értékét:”); s = Console.ReadLine(); int b = int.Parse( s ); int c = a+b; Console.WriteLine(”Összeg={0}”,c); }
22 Minden azonosítónak van hatásköre A hatáskör lehet lokális: - függvény belsejében deklarált azonosító - a hatáskör a deklaráció helyétől a befoglaló blokk végéig tart - ezen szakaszban az azonosító nem deklarálható újra - az ilyen azonosítókat a befoglaló blokkon kívül nem lehet felhasználni!
23 A főprogram: Egy Main() nevű függvényt kell készítenünk A program végrehajtása a Main() első utasításánál kezdődik, A Main() blokk belsejében lévő utasításokat a szekvencia-szabály szerint hajtja végre A program futása befejeződik, ha a végrehajtás eléri a Main() blokkjának végét static void Main() { … } static void Main() { … }