Hernyák Zoltán Magasszintű Programozási Nyelvek I. A számítógép programozása 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
Fejlesztői környezetek Kezdjünk programozni! Fejlesztői környezetek Parancssori eszközök Forráskód begépelése tetszőleges editorral Parancssori fordító (compiler) indítása Parancssori szerkesztő (linker) indítása Parancssori nyomkövető (debugger) indítása 2
Fejlesztői környezetek Kezdjünk programozni! Fejlesztői környezetek IDE = Integrált Fejleszőti Környezet (Integrated Development Environment) Forráskód begépelése belső editorral Belső fordító aktivizálása menüpontból Belső linker aktivizálása menüpontból Belső debugger indítása, események követése a forráskód ablakban Beépített súgó olvasása aktivizálása (környezetérzékeny módon) 3
Kezdjünk programozni! Input adatok Program Output adatok 4 Billentyűzet Helyi file (.xml, .dat, .txt, …) Adatbázis (SQL) Input adatok Memória Processzor Program Képernyő Helyi file (.xml, .dat, .txt, …) Adatbázis (SQL) Output adatok 4
Adatok megjelenési formája Kezdjünk programozni! Adatok megjelenési formája Az adatoknak mindig van típusuk is! A program szövegében: Nevesített konstans Literál Változó 5
Típusrendszer Alapvető típusok Azok a típusok, melyeket a programozási nyelv eleve tartalmaz Alapvető építőkövek további típusok létrehozásához De már közvetlenül is felhasználhatóak Általában igazodnak a processzor és a memória szervezéséhez, az alapvető gépi kódú utasításokhoz 6
Típusrendszer Típusok Egészek Érték-típusok Valósak Logikai Karakter String Referencia- típusok Tömbök Osztályok 7
Típusrendszer Egész szám típusok Csak egész számokat jelölhetnek Különböznek méretben Hány byte-t foglalnak el a memóriában (1 byte, 2 byte, 4 byte, 8 byte, …) Előjeles számok is lehetnek, vagy csak nemnegatív számok Mekkora számokat jelölhetnek (az előzőekből meghatározható) 8
Típusrendszer Egész szám típusok C# Előjeles Előjel nélküli sbyte byte -128 ..127 sbyte byte 0 ..255 -32.768 .. 32.767 short ushort 0 .. 65.535 -2.147.483.648 .. int uint 0 .. 4.294.967.295 -9.223.372.036.854.775.808 .. long ulong 0 .. 18.446.744.073.709.551.615 9
Típusrendszer Valós szám típusok C# float double Egyéb típusok C# char ±1.5 * 10-45 .. 3.4 * 1038 7 szjegy double ±5.0 * 10-324 .. 1.7 * 10308 15 szjegy Egyéb típusok C# char 1 karakter 16 bites Unicode bool logikai true / false string szöveg Unicode karakterlánc DateTime dátum + idő 0001.01.01 –től eltelt idő 10
Típusrendszer Típus-alias nevek C# 11
Kezdjünk programozni! Literál Nincs neve Van értéke -> ez a típusát meghatározza Van típusa (implicit módon kerül meghatározásra, fordító végzi) A program szövegében ugyanazon érték használata esetén többször is ki kell írni a literált. kerulet = 2 * sugar * 3.14; 12
Típusrendszer Logikai literálok C# true = IGAZ false = HAMIS 13
Egész szám literálok C# Típusrendszer Egész szám literálok C# Egész számok megadása a program szövegében Alapvetően 10-es számrendszer, pl -14 Lehetőség 16-os számrendszer használatára ( pl: 0x1F ) Az egész literálok típusát a fordítóprogram határozza meg: A lehető legkisebb tárolási típus (int-el kezdve) Lehetőleg előjeles int uint long ulong 14
Egész szám literálok C# Típusrendszer Egész szám literálok C# A fordítóprogram típusmeghatározása befolyásolható típusjelekkel a szám végén. A típusjelek kis és nagybetűs változatban is használhatóak Mindkét jel esetén a sorrend nem számít L l = long -> long, ulong U u = unsigned -> uint, ulong mindkét betű -> ulong Pl: 123U 123u 123LU 123Lu 123uL 123ul 15
Valós szám literálok C# Típusrendszer Valós szám literálok C# Valós számok megadása a program szövegében Alapvetően 10-es számrendszer, pl -14 Tizedespont használata (tizedesvessző nem jó!) Vagy tizedestört alakban írjuk fel, vagy normál alakban Tizedestört: -12.2321 Normál alak: 1.123E-12 Típusa mindig double Típusjelekkel lehet eltérni tőle: F,f : float 12.21F D,d : double 12.32D 16
Típusrendszer Karakter literálok C# Egyetlen karakter megadása Aposztrófok között kell megadni Karakter értékének megadása ‘A’ Vezérlő karakter ‘\n’ Hexadecimális karakterkód ‘\x1F’ Unicode karakterkód ‘\u0F12’ ‘\U1F010F12’ 17
Típusrendszer Karakter literálok C# 18
Típusrendszer String literálok C# Közönséges szöveg idézőjelek között ”hello” Betű szerinti szöveg @”C:\hello.txt” A közönséges szöveg karakterliterálok sorozata ”C:\\Program\x20Files\World of Warcraft\\wow.exe” ”c:\\x20” ”C:\x20” A betű szerinti szövegben nincs speciális karakter-literál felismerés: @”c:\x20\n” @”c:\w20\w” 19
Kezdjünk programozni! Nevesített konstans Van neve (azonosító, azonosító névképzési szabályai) Van típusa (egész, tört, logikai, …) Van értéke (típusának megfelelően) Értéke a program futása során nem változhat meg A program szövegében az értékre a konstans nevével hivatkozhatunk const double Pi = 3.14; 20
Kezdjünk programozni! Változó Van neve (azonosító) Típusát deklarálni kell Értékét többször is meg lehet változtatni értékadó utasítás segítségével A program szövegében a neve a legutoljára ‘belehelyezett’ értéket jelöli (aktuális érték) Nincs kezdőértéke!! double sugar; sugar = 13.43; kerulet = 2 * sugar * 3.14; 21
Típusrendszer Numerikus kifejezések C# Konstansok, változók, literálok + OPERÁTOROK összeadás + kivonás - szorzás * osztás / maradékképzés % 22
Típusrendszer Összeadás, kivonás, szorzás long + int eredménye ?? Nincs minden variációra kidolgozva automatikus (implicit) típuskonverzió a számítás idejére mindig a nagyobb (tartalmazó) típus felé long + int long + long long int + double double + double double 23
Típusrendszer Osztás, maradékképzés Maradékképzés ( % ) csak két egész között lehet! 8%5 3 (az eredmény mindig int) Osztás két egész között = egész osztás 8 / 3 2 (az eredmény mindig int) Osztás ha valamelyik nem egész = tényleges osztás 8.1 / 3 2.7 (mindig double) 8.0 / 3 2.66666666666 9 / 3.3 2.72727272727 24
Típusrendszer Összehasonlító operátorok < > == <= >= != < > == <= >= != Infix bináris operátor operandus operátor operandus Eredménye logikai típusú adat (igaz vagy hamis) Példák: sugar <= 10 a_oldal > 0 szam != 2 25
Típusrendszer Logikai operátorok Tagadás ! ÉS && VAGY || true && false false true || false true !true false 10<sugar<20 hibás 10<sugar && sugar<20 jó 26
Típusrendszer Karakter és string operátorok Összefüzés + karakter + karakter string string + karakter string karakter + string string string + string string Valójában nincs ennyiféle összefüzés operátor, de van implicit típuskonverzió karakter string irányban 27
Típusrendszer Karakter és string operátorok Összehasonlító operátorok karakterek között <= >= == != < > Összehasonlító operátorok stringek között Egyenlőségvizsgálat == Nem-egyenlőség vizsgálata != (két string egyenlő, ha rendre megegyeznek a karakterek (kis-nagybetű is számít!) Az egyéb összehasonlítások: sok nyelvben függvényekkel vannak megvalósítva 28