Programozás alapjai (GKxB_INTM023) Széchenyi István Egyetem, Gy r 2018. szeptember 6.
Számítógép lehet ségei Tisztázandó kérdések: Mit tud a számítógép? (programnyelvek, programok,... ) A feladat melyik részét célszer számítógéppel megoldani? Egyedi feladat általános megoldás Számítógép: információfeldolgozó eszköz Beviteli (input) egységek Számítógép (háttértárakkal) Kimeneti (output) egységek
A Neumanni alapelvek Lényege: Részei: Soros utasítás végrehajtás Bináris (kettes) számrendszer használata Operatív tárban találhatóak az adatok és a program is (ld. még Harvard-architektúra) Elektronikus m ködés Általános felhasználhatóság Központi vezérl egység (automatikus m ködés) Központi egység (Central Processing Unit, CPU) Memória Aritmetikai/logikai egység (Arithmetic/Logic Unit, ALU) Vezérl egység (Control Unit, CU) I/O egységek Ld. Neumann-elvek
Sínrendszer számítógép funkcionális modellje Processzor ALU ROM Memória RAM CU Regisztertömb Sínvezérlő és meghajtó Órajelgenerátor és meghajtó Periféria vezérlő DMA vezérlő I/O Megszakítás vezérlő Prioritás vezérlő Perifériák
Számítógép lehet ségei Információ: adat program Adat Egy feladat adatai mindazok az információk, amelyekb l kiindulva, ezekkel m veleteket végezve, átalakítva a megoldásig eljuthatunk; és adat minden olyan információ, a megoldást megadó is, amely a kiinduló adatokból a m veletvégzés, az átalakítás során keletkezik. Program Program az az információ, amely leírja a számítógépnek, hogy hogyan m ködjön ahhoz, hogy a kiindulási adatokból a keresett megoldás el álljon. A program: utasításokból (információközlés, alaptevékenységek kérése) áll sorrend meghatározása
Adatok Adatok kezelése: konstansként (literálként, a megfelel helyre írva) változókkal Tárolt adat mennyisége szerint a változó: egyszer (egyszerre egy adat) összetett (adatcsoport)
Adatok Egyszer változók tulajdonságai név (azonosító) felhasználható karakterek, funkció, beszédes elnevezés típus hogyan tárolják a memóriában milyen m velet végezhet vele az adat jellege (numerikus, szöveges adatábrázolás) memóriaterület értéket tárolja típusnak megfelel en legtöbbször kezdetben deniálatlan
Fixpontos számábrázolás El jel nélküli eset 2018 10 = 2 10 3 + 0 10 2 + 1 10 1 + 8 10 0 2018 10 = 0000 0111 1110 0010 2 = 1 2 10 + 1 2 9 + 1 2 8 + 1 2 7 + 1 2 6 + 1 2 5 + 1 2 1 2018 10 = 3742 8 = 3 8 3 + 7 8 2 + 4 8 1 + 2 8 0 2018 10 = 7E2 16 = 7 16 2 + 14 16 1 + 2 16 0 2018 8 201 1 20 0 2 2 0 2018 2 126 E 7 7 0
Fixpontos számábrázolás Jellemz hosszok: 8, 16, 32, 64 bit (1, 2, 4, 8 bájt; jellemz en a bájt a legkisebb címezhet egység prexumok) V unsigned integer = N 1 i=0 b i 2 i Intervallum: [0; 2 N 1] Bitek száma Értékek száma 8 256 16 65 536 32 4, 29 10 9 64 1, 84 10 19
Fixpontos számábrázolás El jelek használata Kettes komplemens ábrázolás Egyes komplemens képzés, majd +1 Érték 1-szerese: kivonás 2 N -b l El jelbit el jelet jelz bit V two's complement = b N 1 2 N 1 + N 2 i=0 b i 2 i Intervallum: [ 2 N 1 ; 2 N 1 1] 1 0000 0000 0100 1100 1011 0100 256 76 180 Bitminta Érték 0111 1111 127 0111 1110 126.. 0000 0001 1 0000 0000 0 1111 1111 1 1111 1110 2.. 1000 0000 128
Lebeg pontos számábrázolás Valós számok ábrázolására számok normálalakja m 2 k, ahol m a mantissza, k a karakterisztika 1/2 m < 1 0, 1111110001 2 10 = 2018 10 Minta 128 többletes karakterisztikával adott adatra: 01111110 00100000 00000000 10001010 2 = 2018 10 IEEE754
Karakterek kódolása Karakterek bet k, számjegyek, írásjelek,... PC-világ: ASCII (American Standard Code for Information Interchange) 7 bites kód: az alsó 128 karakter mindig ua., a fels k kódlapfügg k (pl. 852) az els 32 érték vezérl jel bet k: ABC-sorrend, számjegyek érték szerint növekv en új karakterkódolási módok (ld. Unicode) Szöveg kódolása karakterlánc (sztring, karaktersorozat, karakterfüzér,... ) C nyelv: lánczáró 0 karakter méret: karakterek száma + 1 Pascal: els bájt a karakterlánc hossza (lánchossz limitált) 'J' 'a' 'n' 'i' '\0' 74 97 110 105 0 0100 1010 0110 0001 0110 1110 0110 1001 0000 0000 4A 61 6E 69 00
Összetett változók Adatcsoportot ír le. Típusai, pl.: tömb struktúra (Pascal: rekord) Tömb 4. tulajdonsága a dimenziója, az adatok elrendezése: egydimenziós (vektor, sor) kétdimenziós (mátrix, táblázat) Indexelés: elemek megszámozása 0 x < méret, x N T[0], T[1],..., T[10] T 0 1 2 3 4 5 6 7 8 9 10
Összetett változók Tömb minden típusból képezhet. Tömbelem mindenhol használható, ahol egyszer változó is. A karakterlánc egydimenziós tömb. s 'J' 'a' 'n' 'i' '\0' 0 1 2 3 4 Vegyük észre, hogy a bet k száma 4, és s[4] a lánczáró '\0'. Jelek tekinthet k: karakternek egész számértéknek
Programozási nyelvek Gépi kód Assembly pelda02.asm (Forrás: Agárdi Gábor: Gyakorlati Assembly) P e l d a 0 2 Segment ; S z e g m e n s d e f i n i c i o. assume c s : Pelda02, d s : P e l d a 0 2 ; Cs e s ds r e g i s z t e r e k b e a l l i ; t a s a a szegmens e l e j e r e. S t a r t : mov ax, P e l d a 0 2 ; A ds r e g i s z t e r b e a l l i t a s a. mov ds, a x mov ax, 0 b800h ; A kepernyomemoria szegmens mov es, a x ; c i m e t e s r e g i s z t e r b e t o l t i. mov d i, 1 1 4 6 ; A d i i n d e x r e g i s z t e r b e ; b e a l l i t j a az o f f s e t c i m e t. mov a l, " A " ; Al r e g i s z t e r b e az "A" b e t u ; a s c i i k o d j a t t o l t i. mov ah, 7 ; A b e t u s z i n e t f e k e t e a l a p o n ; f e h e r s z i n u r e a l l i t j a. mov e s : [ d i ], a x ; Az e s : d i a l t a l m u t a t o t t ; c i m r e i r j a ax t a r t a l m a t a z a z ; a f e k e t e a l a p o n f e h e r "A" ; b e t u t. mov ax, 4 c00h ; K i l e p e s a DOS b a. i n t 21 h P e l d a 0 2 Ends ; A szegmens v e g e. End S t a r t ; A program v e ge
Programozási nyelvek C C++ Dennis Ritchie, Bell Laboratories (1969-1973): C programnyelv UNIX operációs rendszer Szabványok: K&R (1978), ANSI (vagy C89, 1989), C99, C11. Tulajdonságok: általános célú, imperatív (parancsoló, a programnak hogyan kell m ködnie a megfelel állapotváltozások eléréséhez), strukturált (forrásfájlok, blokkok, ciklusok, stb. áttekinthet ség) Bjarne Stroustroup (1979): C with Classes Szabványok: C++ (1983), The C++ Programming Language (1985),..., ISO/IEC 14882:2017 Tulajdonságok, általános célú, procedurális, funkcionális, objektum-orientált, nagyrészt C kompatibilis
Programozási nyelvek Irodalom Brian W. Kernighan, Dennis M. Rithcie: A C programozási nyelv - Az ANSI szerint szabványosított változat Benk László, Benk Tiborné, Tóth Bertalan: Programozzunk C nyelven! - Kezd knek - középhaladóknak Bauer Péter: C programozás Bauer Péter, Hatwágner F. Miklós: Programozás I-II Bjarne Stroustrup: A C++ programozási nyelv I-II. kötet Szoftverek Microsoft Visual Studio QT Creator IDE GNU Compiler Collection Code::Blocks Geany
Programozási nyelvek Tiobe programozási nyelv népszer ségi index, 2018. szeptember
Programozási nyelvek #i n c l u d e <s t d i o. h> i n t main ( v o i d ) { i n t i ; f o r ( i =1; i <=10; i ++) p r i n t f ( "%d ", i ) ; p r i n t f ( "\n" ) ; r e t u r n 0 ; } c l a s s Szamok { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { f o r ( i n t i =1; i <=10; i ++) System. out. p r i n t ( i + " " ) ; System. out. p r i n t l n ( ) ; } } <?php f o r ( $ i =1; $ i <=10; $ i ++) e c h o $ i. ' ' ;?> v a r u z e n e t = "" ; f o r ( v a r i =1; i <=10; i ++) u z e n e t += i + " " ; a l e r t ( u z e n e t ) ;
Forrásfájltól a futtatásig 1 Forrásszöveg megszerkesztése (többnyire.c kiterjesztés, ASCII szövegfájl) / Ez a s o r egy m e g j e g y z e s / #i n c l u d e <s t d i o. h> i n t main ( v o i d ) { p r i n t f ( " Ez az e l s o C programunk! \ n" ) ; r e t u r n 0 ; }
Forrásfájltól a futtatásig 2 Összeállítás (build) gcc -Wall -o elso elso.c 3 Futtatás Linux terminál wajzy@wajzy-notebook:~/dokumentumok/gklb_intm023/ea01$./elso Ez az elso C programunk! wajzy@wajzy-notebook:~/dokumentumok/gklb_intm023/ea01$
Forrásfájltól a futtatásig Az összeállítási folyamat résztevékenységei 1 Fordítás (compiler) elso.c fordító elso.o Fordítás (compile) GCC-vel gcc -Wall -c elso.c Üzenetek típusai: hibaüzenetek (error) szintaktikai hiba, nem jön létre tárgymodul gyelmeztet üzenetek (warning) gyelmeztetés gyanús megoldásra, javaslattétel, létrejön a tárgymodul (object le)
Forrásfájltól a futtatásig Az összeállítási folyamat résztevékenységei 2 Kapcsoló-szerkesztés (link) gcc -o elso elso.o fv.-ek tárgykódja: statikus könyvtárakban (.lib, run-time library vagy standard library) elso.o indító program (.o) könyvtárak (.lib) kapcsolószerkesztő elso A kapcsoló-szerkeszt hibaüzenetei
Forrásfájltól a futtatásig Összeállítás gcc -Wall -o elso elso.c { elso.c Fordítás gcc -Wall -c elso.c } elso.o indító program könyvtárak } elso Kapcsoló-szerkesztés gcc -o elso elso.o
Forrásfájltól a futtatásig / Ez a s o r egy m e g j e g y z e s / #i n c l u d e <s t d i o. h> i n t main ( v o i d ) { p r i n t f ( " Ez az e l s o C programunk! \ n" ) ; r e t u r n 0 ; }
Forrásfájltól a futtatásig Megjegyzések: // után a sor végéig (csak C99 vagy újabb fordítókkal) /* és */ között akár több soron át Az el feldolgozó törli ket Direktívák: # kezdet sorok #include<... > beszerkeszti a fejfájl (header) tartalmát pl. konstansok, könyvtári függvények használatához (pl. /usr/include/stdio.h) Direktíva, megjegyzés: el feldolgozó (preprocessor) dolgozza fel elso.c előfeldolgozó fordító elso.o
Forrásfájltól a futtatásig A main függvény Függvény: adatok és végrehajtható utasítások csoportja. M ködésük paraméterekkel hangolható, értéket adhatnak vissza. Függvény deníció: teljes információt szolgáltat a függvényr l típus függvénynév(formális-paraméterlista) { függvény-test } A main speciális: a program belépési pontja (entry point) Állapotkódot ad vissza az OS-nek (0: minden OK) Visszatérési érték: return után ; utasítás (statement) végének jelzése
Forrásfájltól a futtatásig Szabványos folyamok Kimenet (stdout, képerny ), használata pl. printf-fel Bemenet (stdin, billenty zet), használata pl. scanf-fel Hiba (stderr, képerny ), használata pl. fprintf-fel (nem puerelt) A printf függvény hívása Célja: üzenetek megjelenítése Az idéz jelek közötti karakterláncot nyomtatja a szabvány kimenetre A \n ún. escape-szekvencia, nem nyomtatható karakterek megadására
Forrásfájltól a programfuttatásig Esc. szekv. Jelentés \a gyelmeztet jelzés (bell, cseng ) \b visszalépés (backspace) \f lapdobás (form feed) \n új sor (new line) \r kocsi vissza (carriage return) \t vízszintes tabulátor (horizontal tab, HTAB) \v függ leges tabulátor (vertical tab, VTAB) \\ fordított törtvonal (backslash) \? kérd jel \' aposztróf \" idéz jel \ooo oktális szám \xhh hexadecimális szám \0 zérus ASCII kódú karakter