Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Programtervezési stratégiák. Top-down tervezés. Top-down tervezés. Bottom-up tervezés. 4.

Hasonló dokumentumok
A programozás alapjai előadás. A C nyelv típusai. Egész típusok. C típusok. Előjeles egészek kettes komplemens kódú ábrázolása

Információs Technológia

A C nyelv aritmetikai típusai. Struktúrák.

A C nyelv aritmetikai típusai. Struktúrák.

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

Informatikai Rendszerek Alapjai

Járműfedélzeti rendszerek II. 1. előadás Dr. Bécsi Tamás

Assembly programozás: 2. gyakorlat

3. gyakorlat. Kettes számrendszer: {0, 1} Tízes számrendszer: {0, 1, 2,..., 9} 16-os (hexadecimális számrendszer): {0, 1, 2,..., 9, A, B, C, D, E, F}

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

Típusok és konstansok

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3

Készítette: Nagy Tibor István

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

Programozás II. 2. Dr. Iványi Péter

LEBEGŐPONTOS SZÁMÁBRÁZOLÁS

Bevezetés az informatikába gyakorló feladatok Utoljára módosítva:

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

Java II. I A Java programozási nyelv alapelemei

Bevezetés az informatikába gyakorló feladatok Utoljára módosítva:

Segédlet az Informatika alapjai I. című tárgy számrendszerek fejezetéhez

Függvények. Programozás I. Hatwágner F. Miklós november 16. Széchenyi István Egyetem, Gy r

SZÁMRENDSZEREK KÉSZÍTETTE: JURÁNYINÉ BESENYEI GABRIELLA

Programozás I gyakorlat

Programozás alapjai C nyelv 1. gyakorlat

Programozás alapjai C nyelv 1. gyakorlat

Aritmetikai utasítások I.

Programozás 1. Dr. Iványi Péter

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Dr. Oniga István DIGITÁLIS TECHNIKA 2

5-6. ea Created by mrjrm & Pogácsa, frissítette: Félix

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Bemutatkozás. Bemutatkozás. Bemutatkozás. Bemutatkozás. 1. előadás. A tárgy címe: A programozás alapjai 1

Programozás I gyakorlat

1. előadás. Lineáris algebra numerikus módszerei. Hibaszámítás Számábrázolás Kerekítés, levágás Klasszikus hibaanalízis Abszolút hiba Relatív hiba

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 11. Széchenyi István Egyetem, Gy r

Kifejezések. Kozsik Tamás. December 11, 2016

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r

4. Fejezet : Az egész számok (integer) ábrázolása

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós augusztus 29. Széchenyi István Egyetem, Gy r

A programozás alapjai 1 Rekurzió

Programozás alapjai. 5. előadás

Programozás 3. Dr. Iványi Péter

Az Informatika Elméleti Alapjai

5. Fejezet : Lebegőpontos számok

Alprogramok, paraméterátadás

C programozási nyelv Pointerek, tömbök, pointer aritmetika

C programozás. 2 óra A C nyelv típusai

2018, Funkcionális programozás

Harmadik gyakorlat. Számrendszerek

Digitális technika VIMIAA01

Kifejezések. Kozsik Tamás. December 11, 2016

A C nyelv eredete, fő tulajdonságai

(jegyzet) Bérci Norbert szeptember 10-i óra anyaga. 1. Számrendszerek A számrendszer alapja és a számjegyek

Programozás alapjai 2.Gy: A C nyelv alapjai P R O

1. Alapok. Programozás II

1. Gyakorlat. Rövid elméleti összefoglaló. <tárolási osztály>típus <típus > változónév <= kezdőérték><, >;

3 A C programozási nyelv szintaktikai egységei

Bevezetés a programozásba. 8. Előadás: Függvények 2.

The Architecture of Computer Hardware and Systems Software: An InformationTechnology Approach 3. kiadás, Irv Englander John Wiley and Sons 2003

5. Gyakorlat. struct diak {

Vektorok. Octave: alapok. A fizika numerikus módszerei I. mf1n1a06- mf1n2a06 Csabai István

Java II. I A Java programozási nyelv alapelemei

5. Fejezet : Lebegőpontos számok. Lebegőpontos számok

2. Fejezet : Számrendszerek

OOP I. Egyszerő algoritmusok és leírásuk. Készítette: Dr. Kotsis Domokos

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Adattípusok. Dr. Seebauer Márta. Budapesti Műszaki Főiskola Regionális Oktatási és Innovációs Központ Székesfehérvár

Programozott soros szinkron adatátvitel

A C programozási nyelv II. Utasítások. A függvény.

Programozás BMEKOKAA146. Dr. Bécsi Tamás 2. előadás

11. gyakorlat Sturktúrák használata. 1. Definiáljon dátum típust. Olvasson be két dátumot, és határozza meg melyik a régebbi.

Bevezetés az informatikába Tételsor és minta zárthelyi dolgozat 2014/2015 I. félév

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

Bevezetés a programozásba Előadás: A const

Digitális technika VIMIAA01

Fixpontos és lebegőpontos DSP Számrendszerek

Digitális technika VIMIAA01

Komputeralgebra Rendszerek

1. Írjunk programot mely beolvas két egész számot és kinyomtatja az összegüket.

Máté: Számítógép architektúrák

Informatika terméktervezőknek

Algoritmizálás + kódolás C++ nyelven és Pascalban

ÁTVÁLTÁSOK SZÁMRENDSZEREK KÖZÖTT, SZÁMÁBRÁZOLÁS, BOOLE-ALGEBRA

Függvény pointer. Feladat: Egy tömbben soroljunk fel függvényeket, és hívjuk meg valahányszor.

Objektumorientált Programozás I.

Digitális technika VIMIAA02 1. EA Fehér Béla BME MIT

Digitális technika VIMIAA02 1. EA

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Máté: Számítógép architektúrák

Gyakorló feladatok. /2 Maradék /16 Maradék /8 Maradék

Programozás I. gyakorlat

Számítógép architektúrák

és az instanceof operátor

Átírás:

212. február 28. A PROGAMOZÁS ALAPJAI 1 Vitéz András egyetemi adjunktus BME Híradástechnikai Tanszék vitez@hit.bme.hu Miről lesz ma szó? Programtervezési stratégiák Top-down Bottom-up Függvények Szintaxis (deklaráció - definíció) Formális paraméterek Aktuális paraméterek Élettartam - láthatóság A C nyelv típusai Egész (fixpontos ábrázolású) típusok Egészek, mint bitminták tárolói Lebegőpontos típusok A számábrázolás pontossága Programtervezési stratégiák Top-down tervezés (lépésenkénti finomítás) Bottom-up tervezés (téglánkénti építkezés) Top-down tervezés A lépésenkénti finomítás elve: A feladat megoldását elodázom. Minden finomítási lépésben olyan építőelemeket használok, amelyek majd egy későbbi lépés eredményeként készülnek el. Végül már csak elemi tevékenységek maradnak. Ezeket kell kódolni. Top-down tervezés Előnyei: Lehetőség van a belső megoldások elrejtésére. Lehetetlen elhibázni. Bottom-up tervezés A téglánkénti építkezés elve: A legegyszerűbbtől kiindulva egyre bonyolultabb eszközöket hozok létre. Ezeket az újabb szinteken már építőkockaként használhatom. 1

Bottom-up tervezés Látszólagos előnyei: Lehetőség van ugyanazt az elemet több helyen felhasználni. Ha mégis hiányzik valami, utólag még meg lehet tervezni. Program Eljárás Függvény A C nyelvben minden szegmens függvény A felhasználás célja: Program Mindazon tevékenységek összessége, amit a végre akarunk hajtani. Program megvalósítása: a main() függvény Aktiválása: az operációs rendszer hívja A felhasználás célja: Eljárás Összetartozó utasítások sorozata, amit többször akarunk végrehajtani. 2

Eljárás megvalósítása: void típusú vagy fel nem használt visszatérési értékű függvény Aktiválása: kifejezés utasítással A felhasználás célja: Függvény Ugyanaz, mint az eljárás, de visszatérési érték is keletkezik. Függvény megvalósítása: tetszőleges (nem void) visszatérési értékű függvény <visszatérési érték típusa> <függvény azonosítója> (<formális paraméterek listája>) <blokk> Aktiválása: kifejezésben szerepeltethető Megjegyzés: a mellékhatás fontosabb lehet az értéknél! <visszatérési érték típusa> <függvény azonosítója> (<formális paraméterek listája>) <blokk> a függvény által kiszámított érték típusa alapértelmezésben int (ekkor elhagyható) <visszatérési érték típusa> <függvény azonosítója> (<formális paraméterek listája>) <blokk> a függvény egyedi azonosító neve 3

<visszatérési érték típusa> <függvény azonosítója> (<formális paraméterek listája>) <blokk> <visszatérési érték típusa> <függvény azonosítója> (<formális paraméterek listája>) <blokk> a paraméterek formális deklarációja, hogy a függvényben hivatkozni lehessen rájuk egyenként, vesszővel elválasztva a zárójelek üres lista esetén is kellenek { jelek között deklarációk és utasítások ha a típus nem void, return utasítás kell Függvény deklarációja Később látni fogjuk, hogy a függvény deklarációja elválasztható a definíciótól. Ha a feljécet különválasztjuk, a blokk helyére ;-t kell írnunk. Példa: double tavolsag (double a,double b) { if(a>b) return a-b; return b-a; Megjegyzés: Ha holnap is érteni akarjuk, akkor double tavolsag ( double a, /* Mi is ez? */ double b /* Hát ez? */){ if(a>b) return a-b; return b-a; /* A nagyból vonjuk ki a kicsit */ Még egy példa: int prim(int p){ int i; for(i=2;i*i<p+1;i++) if (p%i==) return ; return 1; 4

Aktuális paraméterek Aktuális paraméterek A C nyelvben csak érték szerinti paraméter átadás van! A hívás helyén a paramétereket a típusuknak megfelelő kifejezéssel kell aktualizálni. Példa: c=tavolsag(d+9.7,4.6); Aktuális paraméterek Aktuális paraméterek A paramétereket a függvényben típusuknak megfelelő változókként használhatjuk, melyek a hívás helyén kapott kezdeti értékkel rendelkeznek. Példa: unsigned factor(int n){ unsigned f; for(f=1;n>1;n--) f=f*n; return f; Ha referencia szerinti paraméter átadásra volna szükségünk, akkor formális paraméterként mutatót használunk, amit a hívás helyén a hivatkozni kívánt objektum címével aktualizálunk. Aktuális paraméterek Tömb és függvény mutatójának aktualizálásakor csak a nevet kell megadni & operátor nélkül. A formális paraméterek és a függvény blokkjának elején deklarált ú.n. automatikus változók csak a függvény végrehajtásának idején léteznek. Utána megsemmisülnek. Ezeket a függvény lokális változóinak nevezzük. A függvényen kívülről nem láthatók. A függvényeken kívül deklarált ú.n. fájl szintű változók a függvény globális változói. Ha egy globális és egy lokális név megegyezik, a lokális értelmezés az érvényes. Változók élettartama - láthatósága 5

Változók élettartama - láthatósága A függvény nem látja a többi függvény lokális változóit, akkor sem, ha a másik függvény végrehajtása még folyamatban van. A függvény a külvilággal a kapcsolatot csak paraméterein és a függvényértéken keresztül tartja. Ha csak nem kimondottan ez a feladata, nem lép interakcióba a felhasználóval. A függvények közötti kölcsönhatások biztonságos kézben tarthatóságának érdekében kerüljük a globális változók használatát! Komplex mintapélda Írjunk programot két egész szám közé eső prímek listázására! Olvassuk be az alsó és felső határt! Lépkedjünk végig a két határ közé eső számokon! Ha a vizsgált szám prím, írjuk ki! Komplex mintapélda Prímek listája Határok beolvasása Prímteszt (p) i 2 i alsó határ N i 2 > p+1 i felső határ N Vége i p IGEN Prímteszt (i) N i prím N i kiírása i növelése NEM Vissza i növelése Figyeljük meg a két i változót! Komplex mintapélda #include <stdio.h> int a,b; void beolvas(){ printf( Adj meg egy kisebb és egy nagyobb számot!\n ); scanf( %d%d,&a,&b); int prim(int p){ int i; for(i=2;i*i<p+1;i++) if (p%i==) return ; return 1; int main(){ int i; beolvas(); printf( Prímszámok %d és %d között:\n,a,b); for(i=a;i<b+1;i++) if(prim(i)) printf( %d\n,i); return ; A C nyelv típusai Egész (fixpontos ábrázolású) típusok -void - skalár: - aritmetikai: - egész: - integer -karakter - felsorolás - lebegőpontos -mutató - függvény - union - összetett: - tömb - struktúra A szabvány nem írja elő, de a gyakorlatban előjeles egészeket kettes komplemens kódban előjel nélküli egészeket bináris alakban ábrázolunk 6

Egész (fixpontos ábrázolású) típusok Előjel nélküli egészek bináris ábrázolása Egész (fixpontos ábrázolású) típusok Előjeles egészek kettes komplemens kódú ábrázolása ovf.... 11...11...1...1 11...1 max. 1 2... 11...11...1...1 11...1-1 1-2 2 + + max min.. 1...1 1... 1...11 1...1 1... 1...11 ovf. Az adott implementációhoz az értékkészletet a <limits.h> file adja meg. Miért kell ismernünk? Például ki akarjuk számolni 15 15! 3 3! 12! értékét. Legyen 2-es komplemens számábrázolásunk 4 bájton, ami 2 147 483 648-tól 2 147 483 647-ig teszi lehetővé a számok ábrázolását. Az eredmény 455, ami gond nélkül ábrázolható. Miért kell ismernünk? Például ki akarjuk számolni 15 15! 3 3! 12! értékét. A számláló 1 37 674 368 Nem ábrázolható A nevező 2 874 9 6 Nem ábrázolható Miért kell ismernünk? Például ki akarjuk számolni Ha viszont először egyszerűsítünk 15 15! 3 3! 12! 15! 15 14 13 3! 12! 3! 273 6 értékét. A művelet elvégezhető! 7

Előjeles integer típusok Előjeles integer típusok Szám-konstans alakja: minimális hossz [bit] típus-megadás alakja minimális érték <limits.h> -ban maximális érték <limits.h> -ban Típus Számrendszer Példák rövid 16 short short int signed short signed short int SHRT_MIN SHRT_MAX int decimális oktális 123-33 12 177777 normál 16 int signed int INT_MIN INT_MAX hexadeimális x1a x7fff xaa1bb hosszú 32 long long int signed long signed long int LONG_MIN LONG_MAX long - -L - -l vagy, ha az érték olyan nagy Előjel nélküli integer típusok Előjel nélküli integer típusok minimális hossz [bit] típus-megadás alakja minimális érték maximális érték <limits.h> -ban Szám-konstans alakja: Típus Példák rövid 16 unsigned short unsigned short int USHRT_MAX unsigned <mintha int lenne>u <mintha int lenne>u normál 16 unsigned unsigned int UINT_MAX unsigned long <mintha int lenne>lu <mintha int lenne>ul <mintha int lenne>lu <mintha int lenne>ul vagy, ha az érték olyan nagy hosszú 32 unsigned long unsigned long int ULONG_MAX Automatikus ábrázolási mód ha nincs megadva U vagy L A short típusmódosító Amelyikbe a szám-konstans előbb belefér: 1. int 2. unsigned int oktális és hexa esetén 3. long int 4. unsigned long int A short típusok csak az adat tárolási hosszát írják elő. Számításnál a... short típusú értéket automatikusan... int típusúvá alakítja, és azzal számol. 8

Karakter típusok Karakter típusok Ábrázolás: minimum 8 biten. Ez lesz a tárolás alapegysége Karakter-konstans alakja: Egyszerű karakterek Alakja Jelentése típus-megadás alakja minimális érték <limits.h> -ban maximális érték <limits.h> -ban a kis a betű signed char SCHAR_MIN SCHAR_MAX A nagy A betű unsigned char UCHAR_MAX : kettőspont char CHAR_MIN CHAR_MAX Karakter típusok Karakter típusok Karakter-konstans alakja: Karakter-konstans alakja: Különleges karakterek Különleges karakterek Alakja Jelentése Alakja Jelentése \ aposztróf \n új sor \ idézőjel \f lapdobás \\ backslash \t tabulátor \? kérdőjel \v függőleges tabulátor \a hangjelzés \b visszatörlés Karakter típusok Karakter típusok Karakter-konstans alakja: Karakter megadása kódjával Alakja Jelentése \ nullás kódú karakter \1 oktális szám A char típusok gyakorlatilag az egészekhez hasonlóan viselkednek. Számításnál a... char típusú értéket automatikusan... int típusúvá alakítja, és azzal számol. \x1 hexadecimális szám 9

Karakter típusok Számjegyeket ábrázoló karakterek kódolása A számjegy értéke és kódja nem ugyanaz! karakter '' '1' '2' '8' '9' értéke 1 2 8 9 hexadecimálisan 3 31 32 38 39 ASCII kódja decimálisan 48 49 5 56 57 oktálisan 6 61 62 7 71 binárisan 11 111 111 111 1111 Nem érdemes kódokat megjegyezni! Az értéket megkapjuk, ha a számjegy kódjából kivonjuk a '' kódját. Egészek, mint bitminták tárolói Egy előjel nélküli egészben tárolt kódot nem kell feltétlenül számként értelmeznünk. Tetszés szerinti bitmintát előállíthatunk, és manipulálhatunk. A következő előadáson megismerkedünk az ezt támogató számos hatékony operátorral. & << >> ^ ~! Lebegőpontos típusok Lebegőpontos ábrázolás Típus Konstans alakja Min. abs. érték Max. abs. érték Pontoság [dec. jegy] Az általunk használt rendszerben a double típus ábrázolása: előjel-abszolút értékes ábrázolás 64 biten float 12.3f.12F 12.F.5f 1E-3f 1.8e5f FLT_MIN <= 1e-37 FLT_MAX >= 1e37 FLT_DIG >= 6 63 62 52 51 s c m double 12.3.12 12..5 1E-3 1.8e5 DBL_MIN <= 1e-37 DBL_MAX >= 1e37 DBL_DIG >= 1 s előjel (1, ha a szám negatív) 1 biten c karakterisztika eltolt zéruspontú ábrázolás 11 biten m mantissza implicit bites ábrázolás 52(+1) biten long double 12.3L.12l 12.l.5L 1E-3l 1.8e5L <= mint double >= mint double >= mint double c 123 c 124 1 2 1 m 2 1 2s n 2 s. 2 n 4, ahol A véges számábrázolási pontosság következménye Mivel az ábrázolás matematikai értelemben nem pontos, műveletek eredményét egyenlőségre összehasonlítani NEM SZABAD A relatív számábrázolási pontosság következménye Mivel a karakterisztika átfogása nagy, megfeleldkezhetünk a pontosságról. Ha A sokkal nagyobb, mint a és b, akkor Például: 22 3 25 7 7 7 a A b A a b 1

A számábrázolás pontossága Egy egész típusban az ábrázolás korlátai között egész számokat teljes pontossággal ábrázolhatunk. A számegyenes tetszőleges pontját ábrázolhatjuk egész típusban, csak tudomásul kell vennünk, hogy az ábrázolás nem lesz pontos. A számábrázolás pontossága A véges hosszúságú mantissza miatt a lebegőpontos ábrázolás pontossága sem lesz korlátlan. A normalizálás miatt a legmagasabb helyiértékű bit és az utolsó ábrázolt bit távolsága rögzített. 248 234 256 2816 372 3328 3584 384 1/2 9/16 5/8 11/16 3/4 13/16 7/8 15/16 Ha mindig a legközelebbi egész értéket választjuk, az eltérés sohasem lesz nagyobb,5-nél. Azt mondjuk, hogy az egész típus abszolút ábrázolási pontossága,5 Az ábrázolás pontossága ilyenkor az utolsó ábrázolt bit helyiértékének a fele. (példánkban 128 illetve 1/32) Ez az érték a szám nagyságrendjétől függ, ezért ekkor nem beszélhetünk abszolút, csak relatív ábrázolási pontosságról. Azt mondjuk, hogy a lebegőpontos típus ábrázolási pontossága n bit 1 11 11 111 11 111 111 1111 11