programozás alapjai - (gkxb intm023)rs1.sze.hu/~hatwagnf/prgalap/ea01.pdfezekkel m¶veleteket...

29

Upload: others

Post on 25-Oct-2019

4 views

Category:

Documents


0 download

TRANSCRIPT

  • 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