-
Programozás alapjai(GKxB_INTM023)
Dr. Hatwágner F. Miklós
Széchenyi István Egyetem, Gy®r
2019. augusztus 29.
-
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
Kimeneti(output)egységek
Számítógép(háttértárakkal)
Dr. Hatwágner F. Miklós 1. el®adás
-
A Neumanni alapelvek
Lényege:
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)
Részei:Központi egység (Central Processing Unit, CPU)
Aritmetikai/logikai egység (Arithmetic/Logic Unit, ALU)Vezérl® egység (Control Unit, CU)
Memória
I/O egységekLd. Neumann-elvek
Dr. Hatwágner F. Miklós 1. el®adás
http://hu.wikipedia.org/wiki/Harvard-architekt%C3%BArahttp://en.wikipedia.org/wiki/Von_Neumann_architecture
-
Sínrendszer¶ számítógép funkcionális modellje
Processzor
ALU
CU
Regiszter-tömb
Memória
ROM RAM
Sín- vezérlő és meghajtó
Órajel-generátor
és meghajtó
I/O
Perifériavezérlő
DMAvezérlő
Megszakításvezérlő
Prioritásvezérlő
Perifériák
Dr. Hatwágner F. Miklós 1. el®adás
-
Számítógép lehet®ségei
Információ:adatprogram
AdatEgy feladat adatai mindazok az információk, amelyekb®l kiindulva,ezekkel m¶veleteket végezve, átalakítva a megoldásig eljuthatunk; és adatminden 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 hogyanm¶ködjön ahhoz, hogy a kiindulási adatokból a keresett megoldásel®álljon.
A program:utasításokból (információközlés, alaptevékenységek kérése) állmeghatározza a végrehajtási sorrendet
Dr. Hatwágner F. Miklós 1. el®adás
-
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)
Dr. Hatwágner F. Miklós 1. el®adás
-
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 (kódolás és tárterület mérete)milyen m¶velet végezhet® veleaz adat jellege (numerikus, szöveges → adatábrázolás)
memóriaterületértéket tárolja típusnak megfelel®enlegtöbbször kezdetben de�niálatlan
Dr. Hatwágner F. Miklós 1. el®adás
-
Fixpontos számábrázolás
El®jel nélküli eset
201810 = 2 · 103 + 0 · 102 + 1 · 101 + 8 · 100
201810 = 0000 0111 1110 00102 =1 · 210 + 1 · 29 + 1 · 28 + 1 · 27 + 1 · 26 + 1 · 25 + 1 · 21
201810 = 37428 = 3 · 83 + 7 · 82 + 4 · 81 + 2 · 80
201810 = 7E216 = 7 · 162 + 14 · 161 + 2 · 160
Egészrész 10-zel osztás maradéka
2018 8201 120 02 20
Egészrész 16-tal osztás maradéka
2018 2126 E7 70
Dr. Hatwágner F. Miklós 1. el®adás
-
Fixpontos számábrázolás
Jellemz® hosszok: 8, 16, 32, 64 bit (1, 2, 4, 8 bájt; jellemz®ena bájt a legkisebb címezhet® egység → pre�xumok)Vunsigned integer =
∑N−1i=0 bi · 2i
Intervallum: [0; 2N − 1]
Bitek száma Értékek száma8 25616 65 53632 4, 29 · 10964 1, 84 · 1019
Dr. Hatwágner F. Miklós 1. el®adás
-
Fixpontos számábrázolás
El®jelek használataKettes komplemens ábrázolásEgyes komplemens képzés, majd +1Érték −1-szerese: kivonás 2N -b®lEl®jelbit ↔ el®jelet jelz® bitVtwo's complement = −bN−1 · 2N−1 +
∑N−2i=0 bi · 2i
Intervallum: [−2N−1; 2N−1 − 1]
1 0000 0000− 0100 1100
1011 0100
256− 76
180
Bitminta Érték0111 1111 1270111 1110 126
......
0000 0001 10000 0000 01111 1111 −11111 1110 −2
......
1000 0000 −128Dr. Hatwágner F. Miklós 1. el®adás
-
Lebeg®pontos számábrázolás
Racionális számok ábrázolására
számok normálalakja
m · 2k , ahol m a mantissza, k a karakterisztika1/2 ≤ m < 10, 1111110001 · 210 = 201810Minta 128 többletes karakterisztikával adott adatra:
01111110 00100000 00000000|100010102 = 201810
IEEE754
Dr. Hatwágner F. Miklós 1. el®adás
http://www.h-schmidt.net/FloatConverter/IEEE754.html
-
Karakterek kódolása
Karakterekbet¶k, számjegyek, írásjelek, . . .PC-világ: ASCII (American Standard Code for InformationInterchange)7 bites kód: az alsó 128 karakter mindig ua., a fels®kkódlapfügg®k (pl. 852)az els® 32 érték vezérl®jelbet¶k: ABC-sorrend, számjegyek érték szerint növekv®enúj karakterkódolási módok (ld. Unicode)
Szöveg kódolásakarakterlánc (sztring, karaktersorozat, karakterfüzér, . . . )�C� nyelv: lánczáró 0 karakter → méret: karakterek száma + 1Pascal: 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 00004A 61 6E 69 00
Dr. Hatwágner F. Miklós 1. el®adás
http://en.wikipedia.org/wiki/Asciihttp://en.wikipedia.org/wiki/Unicode
-
Ö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 ∈ NT[0], T[1], . . . , T[10]
T
0 1 2 3 4 5 6 7 8 9 10
Dr. Hatwágner F. Miklós 1. el®adás
-
Ö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
0 1 2 3 4
'J' 'a' 'n' 'i' '\0'
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
Dr. Hatwágner F. Miklós 1. el®adás
-
Programozási nyelvek
Gépi kód
Assembly
pelda02.asm (Forrás: Agárdi Gábor: Gyakorlati Assembly)
Pelda02 Segment ; S z e gme n s d e f i n i c i o .assume c s : Pelda02 , ds : Pe lda02 ; Cs es 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 , Pe lda02 ;A ds r e g i s z t e r b e a l l i t a s a .
mov ds , axmov ax , 0 b800h ;A kepernyomemor ia szegmens−mov es , ax ; c imet es r e g i s z t e r b e t o l t i .mov d i , 1146 ;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" betu
; a s c i i k od j a t t o l t i .mov ah , 7 ;A betu s z i n e t f e k e t e a l apon
; f e h e r s z i n u r e a l l i t j a .mov es : [ d i ] , ax ; Az es : d i a l t a l mutatot t
; c imre i r j a ax t a r t a lma t azaz; a f e k e t e a l apon f e h e r "A"; b e t u t .
mov ax , 4 c00h ; K i l e p e s a DOS−ba .i n t 21h
Pelda02 Ends ;A szegmens v e g e .End S t a r t ;A program vege
Dr. Hatwágner F. Miklós 1. el®adás
-
Programozási nyelvek
CDennis 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ó, aprogramnak 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)
C++Bjarne Stroustroup (1979): �C with Classes��Szabványok�: C++ (1983), �The C++ ProgrammingLanguage� (1985), . . . , ISO/IEC 14882:2017Tulajdonságok, általános célú, procedurális, funkcionális,objektum-orientált, nagyrészt C kompatibilis
Dr. Hatwágner F. Miklós 1. el®adás
-
Programozási nyelvek
IrodalomBrian W. Kernighan, Dennis M. Rithcie: A C programozásinyelv - Az ANSI szerint szabványosított változatBenk® László, Benk® Tiborné, Tóth Bertalan: ProgramozzunkC nyelven! - Kezd®knek - középhaladóknakBauer Péter: C programozásBauer Péter, Hatwágner F. Miklós: Programozás I-IIBjarne Stroustrup: A C++ programozási nyelv I-II. kötet
SzoftverekMicrosoft Visual StudioQT Creator IDEGNU Compiler CollectionCode::BlocksGeany
Dr. Hatwágner F. Miklós 1. el®adás
https://bookline.hu/product/home.action?_v=_&id=2371&type=22https://bookline.hu/product/home.action?_v=_&id=2371&type=22https://www.libri.hu/konyv/benko_laszlo.programozzunk-c-nyelven-1.htmlhttps://www.libri.hu/konyv/benko_laszlo.programozzunk-c-nyelven-1.htmlhttp://jegyzet.sze.hu/https://www.libri.hu/konyv/bjarne_stroustrup.a-c-programozasi-nyelv-i-ii-kotet.htmlhttp://it.sze.hu/hirek2/imaginehttps://www.qt.io/qt-features-libraries-apis-tools-and-ide/#idehttps://gcc.gnu.org/http://www.codeblocks.org/https://www.geany.org/
-
Programozási nyelvek
Tiobe programozási nyelv népszer¶ségi index, 2018. szeptember
Dr. Hatwágner F. Miklós 1. el®adás
https://www.tiobe.com/tiobe-index/
-
Programozási nyelvek
#i n c l u d e
i n t main ( v o i d ) {i n t i ;f o r ( i =1; i
v a r uzene t = "" ;f o r ( v a r i =1; i
-
Forrásfájltól a futtatásig
1 Forrásszöveg megszerkesztése (többnyire .c kiterjesztés, ASCIIszövegfájl)
/∗ Ez a s o r egy meg jegyzes ∗/#in c l u d e
i n t main ( vo id ) {p r i n t f ( "Ez az e l s o C programunk !\ n" ) ;r e t u r n 0 ;
}
Dr. Hatwágner F. Miklós 1. el®adás
/* Ez a sor egy megjegyzes */#include
int main(void) { printf("Ez az elso C programunk!\n"); return 0;}
HFMKattintson duplán a minta megtekintéséhez!
-
Forrásfájltól a futtatásig
2 Összeállítás (build)
gcc -Wall -o elso elso.c
Parancssori kapcsolók jelentése
-WallKönnyen elkerülhet®, sokak által megkérd®jelezhet®nek tartottmegoldásokra (potenciális hibákra) �gyelmeztet
-oA futtatható fájl nevét lehet utána megadni (ami itt elso)
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$
Dr. Hatwágner F. Miklós 1. el®adás
-
Forrásfájltól a futtatásig
Az összeállítási folyamat résztevékenységei1 Fordítás (compiler)
elso.c fordító elso.o
Fordítás (compile) GCC-vel
gcc -Wall -c elso.c
Parancssori kapcsolók jelentése-c
Csak fordítást eredményez, végrehajtható fájl nem jön létre
Üzenetek típusai:hibaüzenetek (error) → szintaktikai hiba, nem jön létretárgymodul�gyelmeztet® üzenetek (warning) → �gyelmeztetés gyanúsmegoldásra, javaslattétel, létrejön a tárgymodul (object �le)
Dr. Hatwágner F. Miklós 1. el®adás
-
Forrásfájltól a futtatásig
Az összeállítási folyamat résztevékenységei2 Kapcsoló-szerkesztés (link)
fv.-ek tárgykódja: statikus könyvtárakban (.lib, run-time libraryvagy standard library)
gcc -o elso elso.o
elso.oindító program (.o)
könyvtárak (.lib)elsokapcsoló-szerkesztő
A kapcsoló-szerkeszt® hibaüzenetei
Dr. Hatwágner F. Miklós 1. el®adás
-
Forrásfájltól a futtatásig
elso.c
elso.o}
}Fordításgcc -Wall -c elso.c
Kapcsoló-szerkesztésgcc -o elso elso.oelso
{
Öss
zeál
lítás
gcc
-Wal
l -o
elso
els
o.c
indítóprogram könyvtárak
Dr. Hatwágner F. Miklós 1. el®adás
-
Forrásfájltól a futtatásig
/∗ Ez a s o r egy meg jegyzes ∗/#in c l u d e
i n t main ( vo id ) {p r i n t f ( "Ez az e l s o C programunk !\ n" ) ;r e t u r n 0 ;
}
Dr. Hatwágner F. Miklós 1. el®adás
/* Ez a sor egy megjegyzes */#include
int main(void) { printf("Ez az elso C programunk!\n"); return 0;}
HFMKattintson duplán a minta megtekintéséhez!
-
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.cfordító
elso.oelőfeldolgozó
Dr. Hatwágner F. Miklós 1. el®adás
-
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 adhatnakvissza.
Függvény de�ní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
Dr. Hatwágner F. Miklós 1. el®adás
-
Forrásfájltól a futtatásig
Szabványos folyamok
Kimenet (stdout, ≈ képerny®), használata pl. printf-felBemenet (stdin, ≈ billenty¶zet), használata pl. scanf-felHiba (stderr, ≈ képerny®), használata pl. fprintf-fel (nempu�erelt)
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ánykimenetre
A \n ún. escape-szekvencia, nem nyomtatható karakterekmegadására
Dr. Hatwágner F. Miklós 1. el®adás
-
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
Dr. Hatwágner F. Miklós 1. el®adás