Programozás alapjai C nyelv 1. gyakorlat

Hasonló dokumentumok
Programozás alapjai C nyelv 1. gyakorlat

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

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

Információs Technológia

Assembly programozás: 2. gyakorlat

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.

Programozás I gyakorlat

Aritmetikai utasítások I.

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

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

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

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

5. Fejezet : Lebegőpontos számok

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

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. (GKxB_INTM023) Dr. Hatwágner F. Miklós augusztus 29. Széchenyi István Egyetem, Gy r

Programozás I gyakorlat

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

C programozás. 1 óra Bevezetés

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 C nyelv 7. gyakorlat. Függvények. Függvények(2)

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

Dr. Oniga István DIGITÁLIS TECHNIKA 2

Informatikai Rendszerek Alapjai

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

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

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

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

Harmadik gyakorlat. Számrendszerek

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

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

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

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

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

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

Java II. I A Java programozási nyelv alapelemei

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

Segédanyagok. Formális nyelvek a gyakorlatban. Szintaktikai helyesség. Fordítóprogramok. Formális nyelvek, 1. gyakorlat

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

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

2. Fejezet : Számrendszerek

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

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

Mintavételes szabályozás mikrovezérlő segítségével

Előző óra összefoglalása. Programozás alapjai C nyelv 3. gyakorlat. Karakter típus (char) Karakter konstansok. Karaktersorozatot lezáró nulla

Alapfogalmak. Dr. Kallós Gábor A Neumann-elv. Számolóeszközök és számítógépek. A számítógép felépítése

B I T M A N B I v: T M A N

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

Programozás alapjai C nyelv 10. gyakorlat. Standard függvények. Union

Digitális rendszerek. Utasításarchitektúra szintje

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

Fixpontos és lebegőpontos DSP Számrendszerek

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

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

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

Digitális technika VIMIAA hét

Digitális technika VIMIAA hét

C programozás. { Márton Gyöngyvér, 2009 } { Sapientia, Erdélyi Magyar Tudományegyetem }

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

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

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

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez

Írjon olyan programot a standard könyvtár alkalmazásával, amely konzolról megadott valós adatokból meghatározza és kiírja a minimális értékűt!

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 I gyakorlat. 10. Stringek, mutatók

Matematikai alapok. Dr. Iványi Péter

A C++ nyelvben a függvény nevek túlterhelésével biztonságosabbá tehetnénk az adatok kiírását és beolvasását.

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

Tamás Péter (D. 424) Mechatronika, Optika és Gépészeti Informatika Tanszék (D 407)

S z á m í t ó g é p e s a l a p i s m e r e t e k

7. gyakorlat Sorozatok, Fájlkezelés

10. gyakorlat Tömb, mint függvény argumentum

Készítette: Nagy Tibor István

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

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

Összeadás BCD számokkal

Adatszerkezetek 1. Dr. Iványi Péter

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Előfeldolgozó rendszer Tömbök. Dr. Bécsi Tamás 4. Előadás

Algoritmizálás és adatmodellezés tanítása 1. előadás

Adatbázis rendszerek Gy: Algoritmusok C-ben

Programozás alapjai 9.Gy: Struktúra 2.

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

1. Feladat: beolvas két számot úgy, hogy a-ba kerüljön a nagyobb

Struktúrák (struct) A struktúra szerkezetét meghatározó deklaráció általános formája:

Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések. 1. Mi a programozás?

Digitális technika VIMIAA01

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

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

sallang avagy Fordítótervezés dióhéjban Sallai Gyula

Programozott soros szinkron adatátvitel

Laborgyakorlat Logikai áramkörök számítógéppel segített tervezése (CAD)

Óbudai Egyetem. C programozási nyelv

Bevezetés Kiíratás Beolvasás Formázás Fájlkezelés Gyakorló feladatok C++ I/O. Bevezetés. Izsó Tamás február 20. Izsó Tamás C++ I/O / 1

C programozási nyelv

Programozás C++ -ban 2007/1

Műveletek lebegőpontos adatokkal

Bevezetés az informatikába

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Adatok ábrázolása, adattípusok

Átírás:

Programozás alapjai C nyelv 1. gyakorlat Szeberényi Imre BME IIT <szebi@iit.bme.hu> Történeti áttekintés Blaise Pascal (1623-1662), mechanikus 6 digites összeadó/kivonó gép Charles Babbage (1792-1871) Analitical Engine - a mai digitális számítógépek előfutára, Bár a tervek jók voltak, a kor technológiai színvonalán elkészítésükre nem volt esély. Ada Byron (1815-1852) Az első példaprogramok az Analitical Engine-re Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -1- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -2- Történeti áttekintés Hermann Hollerith (1860-1929) Elektromos, lyukkártya alapú gép népszámlálási adatok feldolgozására (1896-ban megalapítja a Tabulating Machine Company-t, melyet 1924-től IBM-ként ismerünk) Howard Aiken (IBM 1943) MARK I. telefonreléken alapuló gép 18m hosszú, 2.5m magas gép, kb 300 ms egész összeadási sebesség Történeti áttekintés Neumann János (1946) "Előzetes gondolatok egy számító berendezés logikai tervéről" című tanulmány EDVAC (1951) ezen alapuló gyakorlati megvalósítás 1951 Mikroprogramozás elve 1971 Intel 4004 1985 Intel iapx386... Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -3- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -4- Neumann modell jellemzői Utasítás és adat azonos közegben és formában van tárolva (tárolt program). Az utasításszámláló által címzett adat lesz a következő utasítás. Adat vagy utasítás? Csak annak értelmezésétől függ. Szekvenciális utasítás végrehajtás. Egydimenziós, lineáris címzésű memória. Neumann modell Operatív tár BE ALU KI Vezérlő egység Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -5- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -6-

Processzor Mai számítógép ALU Belső busz Busz interfész cím adat vezérlő jelek Regiszterek Vezérlő és utasítás dekódoló Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -7- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -8- Jellegzetes gépi utasítások Egyszerű műveletek, de gyors végrehajtás: adatok mozgatása (ld, st, in, out) aritmetikai műveletek (add, sub, mul, div) logikai műveletek (and, or, shift) vezérlésátadó műveletek (jp, jz, call, ret) veremkezelő műveletek (push, pop) Gépek programozása/használata Gépi kódban mindent a legutolsó műveletig Könyvtárak a közös feladatokra Monitorok - kötegelt feldolgozás Kezdeti op. rendszerek B/K, fájl Mai operációs rendszerek több felhasználó, több taszk, védelem, hálózat, valós idő,... Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -9- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -10- Szoftver komponensek Operációs rendszer feladatai 1. felhasználó számítógép 3. felhasználó file fájlkezelés Operációs rendszer feladatai felhasználói felület ütemezés 2. felhasználó operációs rendszer 4. felhasználó tárgazdálkodás hálózatkezelés védelem alkalmazói porgramok perifériakezelés Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -11- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -12-

Programozás kódolás Programozási paradigmák Fő lépései: specifikáció tervezés algoritmus választás adatszerkezet választás nyelv választása kódolás tesztelés dokumentálás Nagyon fontos a lépések folyamatos ellenőrzése, dokumentálása! Imperatív Deklaratív Objektum-orientált, Aspektus-orientált Üzenet-orientált, Függvény-orientált Adatfolyam-orientált, Esemény-orientált Szimbolikus... Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -13- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -14- Program, algoritmus Algoritmus + Adatstruktúra = program Algoritmus Tevékenységek és döntések egy sorozata Algoritmus megadása Szóban: Olvass be egy számot és írd ki hogy páros-e! Folyamatábrával Struktogrammal Mondatszerű leírással (pszeudokód) Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -15- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -16- Folyamatábra Stuktogram Start A be: A n A páros? i nem A páros? igen páratlan páros ki: páratlan ki: páros Stop Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -17- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -18-

Pszeudokód C programozási nyelv Egy kis történelem Olvassd be A-t Ha A páros akkor írd ki: páros különben írd ki: páratlan vége be: A Ha A páros akkor ki: páros különben ki: páratlan vége B, BCPL (1970) - típus nélküli nyelvek FORTRAN, ALGOL UNIX (1969) 1973-ban újraírják C nyelven (~8000 C sor + 700 sor assembly nyelven) A C nyelvet a legkülönbözőbb gépeken implementálták (mikro -> mainframe). Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -19- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -20- C nyelv jellemzői C nyelv jellemzői (2) Magas szintű nyelvekre jellemző adatszerkezetek és vezérlési struktúrák. Hatékony gépközeli megfogalmazás. Rendszerprogramozási nyelv. Függvényorientált, egyszintű. Rekurzív fv. hívási lehetőség. Kevésbé szigorú típusellenőrzés. Standard függvénykészlet, ami nem része a nyelvnek de elengedhetetlen. Nyelvi szinten közvetlenül nem támogatja a dinamikus adatszerkezeteket. Nyelvi szinten nem támogatja a konkurens programozást és az ahhoz tartozó szinkronizációs mechanizmusokat. Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -21- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -22- C nyelv jellemzői (3) Hagyományos C fordító Magas szintű nyelvek C forrás (.c) PP Előfeld. forrás C0 Közb. kód C nyelv Olvasható assembly Szerk. gépi kód (.obj) Ass Gépi nyelv (assembly) C1 Gépi nyelvek (assembly) Más obj. Könyvtár (.lib) Link Futtatható kód (.exe) Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -23- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -24-

Hagyományos C fordító (2) preprocesszor dolgozza fel Első program Közbülső kód minden olyan információt hordoz, ami a kódgeneráláshoz szükséges. C1 átírása egy új architektúrához 2-3 mérnökhónapba telik. Ezen kívül implementálni kell a könyvtári függvényeket, melyek többnyire C nyelven vannak megírva. #include <stdio.h> main() azonosító { printf( Hello Cicus!\n ); } könvtári függvény c:> cc elso.c c:> elso.exe c:> Hello Cicus! c:> Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -25- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -26- Nyelvek szabályainak megadása Erőteljes magyarázat Szintaxis diagram irányított gráf Leíró vagy metanyelv (pl. BNF) szabványokban, könyvekben (pl. K&R) Szintaxis diagram referencia kártyákon nem terminális szimbólum Terminális szimbólum tovább bontható nem bontható tovább Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -27- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -28- Szintaxis diagram példák BNF (Backus-Naur Form) előjeles dec. szám: + dec. szám - 0 1 2 3 <nem terminális> tovább bontható fogalom v. szimb. ::= definíció vagy kapcsolat dec. szám: dec. számjegy dec. számjegy: 4 5 6 Példa: <előjeles dec. szám> ::= + <dec. szám> 7 8 9 <dec. szám> -<dec. szám> Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -29- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -30-

EBNF (Extended BNF) EBNF példák <nem terminális> tovább bontható fogalom v. szimb. ::= definíció vagy kapcsolat < > + ismétlődés egyszer v. többször < > * ismétlődés nullaszor v. többször { } u.a. mint a * (gyakran használják) [ ] ismétlődés nullaszor v. egyszer ( ) csoportosítás, de a {}-t is használják a csillag használatakor Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -31- <előjeles dec. szám> ::= [ + - ] <dec. szám> <dec. szám> ::= <dec. számjegy> + <dec. számjegy> ::= 0 1 2 3 4 5 6 7 8 9 <dec. szám> ::= <dec. számjegy> [ <dec. szám> ] <azonosító> ::= <betű> { <betű> <számjegy> } <azonosító> ::= <betű> { <betű> <számjegy> } * <azonosító> ::= <betű> <betű> <számjegy> Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -32- C nyelv szintaktikája EBNF-hez hasonló, de más jelölésekkel: fordítási_egység: külső_deklaráció fordítási_egység külső_deklaráció külső_deklaráció: függvénydefiníció deklaráció függvénydefiníció: deklaráció_sp. opc deklarátor dekl_lista. opc összetett_ut. Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -33- összetett utasítás standard függvény hívása Első program újból #include <stdio.h> main() { printf( Hello Cicus!\n ); } fv. argumentum standard I/O-ra vonatkozó definiciók külső deklaráció Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -34- Két szám összege Változó, azonosító, típus Start a, b c:= a + b c Stop program = algoritmus + adatstruktúra Az adatokat változókban tároljuk Változókban tároljuk az adatokat. A változókat azonosítóval nevezzük el. A változó típusa meghatározza: az értékkészletet, a konstansokat, a művelethalmazt, néha belső tárolási formát is, bár ezt többnyire az implementáció határozza meg. Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -35- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -36-

C nyelv típusai Egyszerű típusok karakter, egész, valós, felsorolás Összetett vagy származtatott típusok tömb, struktúra, unió, függvény, mutató, bitmező Változók deklarálása A C nyelvben minden változót deklarálni kell. int AlMa; char ch; float x; Memóriában keletkezik egy egész típusú változó tárolására alkalmas hely Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -37- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -38- Két egész szám összege #include <stdio.h> main() { int a, b, c; formátum lista (string) változó scanf( %d %d, &a, &b); c = a + b; printf( c = %d\n, c); } formátum megadás következik Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -39- Egész típus (int) értékkészlet: egészek tárolására alkalmas [ INT_MIN, INT_MAX ] <limits.h>-ban definiált konstansok: decimális (12), oktális (012), hexa (0x12), előjeletlen (12u), hosszú (12L) művelethalmaz (operátorok): értékadó aritmetikai, logikai, bitenkénti, relációs belső ábrázolás: legtöbb implementációban kettes komplemens. Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -40- Egész típus (példák) register int a, b; long int hosszu; unsigned int ui; short int rovid; a = 123; ui = 123; b = 0123; hosszu = 0x23AL; rovid = 34; Adatok ábrázolása bit -> kétállapotú (igaz, hamis), (1, 0) (piros, zöld), (hideg, meleg) stb. n db bit -> 2 n különböző információ A jelentés (értelmezés) tőlünk függ. Előjeletlen egészekre kézenfekvő. Hogyan érdemes előjeles számokat ábrázolni? Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -41- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -42-

Előjeles egészek ábrázolása Előjeles abszolútértékes előjeles abszolútértékes eltolt nullpontú (egyes) komplemens kettes komplemens A továbbiakban 4 biten vizsgáljuk meg ezen módszerek lényegét. előjel abszolút érték Néhány példa: 0001 = +1 0010 = +2 1010 = -2 1111 = -7 0111 = +7 0000 = +0 1000 = -0 Összeadás egyszerű összeadóval: 0001 = +1 +1001 = -1 1010 = -2 Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -43- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -44- Néhány példa: 0000 = -8... 0110 = -2 0111 = -1 1000 = 0 1001 = +1 1010 = +2... 1111 = +7 Eltolt nullpontú Legyen pl. a nulla az 1000 érték! Összeadás egyszerű összeadóval: 0111 = -1 +1001 = +1 0000 = -8 Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -45- Komplemens v. egyes kompl. Ha X negatív, akkor abszolút értékét komplementáljuk (bitenként negáljuk), egyébként binárisan ábrázoljuk. Néhány példa: 0001 = +1 0101 = +5 0000 = 0 ~0001 1110 = -1 ~0101 1010 = -5 Összeadás egyszerű összeadóval: 1110 = -1 +0001 = +1 1111 = -0 Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -46- Kettes komplemens Ha X negatív, akkor abszolút értékét komplementáljuk majd hozzáadunk egyet, egyébként binárisan ábrázoljuk. Néhány példa: 0001 = +1 0101 = +5 0000 = 0 ~0001 1110 +0001 1111 = -1 ~0101 1010 +0001 1011 = -5 Összeadás egyszerű összeadóval: 1111 = -1 +0001 = +1 0000 = 0 Kettes komplemens (2) A legmagasabb helyiértékű bit előjel bitként viselkedik. A szám abszolút értékének kiszámításához az előző szabályt kell követni (komplemens +1) Példa: 1110 =? 0001 Def. szabály: +0001 0010 = -2 X, ha X nem negatív X 2 n - X, ha X negatív Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -47- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -48-

0101 = +5 +0101 = +5 1010 =?-6 ~1010 0101 +0001 0110 = 6 Eredmény hihetősége Két pozitív szám összege negatív lett! Miért? Kiléptünk a számábrázolási tartományból! (A +10 már nem ábrázolható 4 biten!) A legtöbb magas szintű nyelv nem jelzi az egész aritmetika túlcsordulását! Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -49- Feladat: Hány bites az int? Ötlet: Egy int értéket állítsunk 1-re! Szorozzuk addig kettővel, amíg az eredmény pozitív! Számoljuk meg, hogy hányszor tudtuk szorozni! Szorzás kettővel: 0001 0010 0100 1000 Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -50- Valós típus (float, double) értékkészlet: valós értékek tárolására [ FLT_MIN, FLT_MAX ], [DBL_MIN, DBL_MAX] <float.h>-ban definiált konstansok: 3., 3.14, 5e-2, -4.12f, 3.2L művelethalmaz: értékadó, aritmetikai, relációs belső ábrázolás: lebegőpontos Valós típus (példák) float f1, f2; double d1, d2; long double ld1, ld2; f1 = 3.; /* törtrész elmaradt */ f2 =.312; /* egészrész elmaradt */ d1 = 45.34; ld1 = 1e-23; /* tizedespont elmaradt */ Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -51- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -52- Valós számok ábrázolása Fixpontos ábrázolás Fixpontos ábrázolás (8 biten a példa kedvéért): Fixpontos ábrázolás Lebegőpontos ábrázolás előjel egészrész. Néhány példa: 0001.1000 = +1.5 0010.0100 = +2.25 1001.1100 = -1.75 0000.0001 = +0.0625 törtrész kettedespont Legkisebb absz: 0.0625 Legnagyobb absz: 7.9375 Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -53- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -54-

Lebegőpontos ábrázolás Lebegőpontos ábrázolás (8 biten a példa kedvéért): előjel (s) karakterisztika (k) eltolt nullp. kettedespont. mantissza (m) X = (-1) s * 2 k * m ahol: 1 <= m < 2 2 0 * 1.5 =+1.5 01001100 2 1 * 1.125=+2.25 01011001-2 0 * 1.75 =-1.75 11001110 2-4 * 1.00 =+0.0625 Lebegőpontos ábrázolás(2) Lebegőpontos ábrázolás (8 biten a példa kedvéért): X = (-1) s *2 k * m ahol: 1 <= m < 2, ezért m 1.xxx alakú (+1 bit) min(k) = -4, min(m) = 1+2-4 = 1.0625 min( X ) = 2-4 * (1+2-4 ) 0.0664 max(k) = 3, max(m) = 1.9735 max( X ) = 2 3 * 1.9735 15.788 ε = 2-4 Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -55- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -56- Valós számok halmaza A ábrázolás miatt nem csak egy alsó és felső határ keletkezik, hanem a folytonos számegyenes egymástól nem megkülönböztethető számokat tartalmazó darabokra esik szét. x-ε x x+ε -max -min 0 min max Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -57- IEEE szabvány Egyszeres pontosság 32 biten: s = 1 bit, k = 8 bit (eltolt nullpontú +127), m = 23 bit s k m' m = m-1 Speciális értékek: k = 255 m 0 --> Nem érvényes szám k = 255 m = 0 --> ± k = 0 m = 0 --> 0 0 < k < 255 m 0 --> X = (-1) s *2 k-126 * m k = 0 m 0 --> X = (-1) s *2-126 * m Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -58- IEEE szabvány (2) min(k) = -126, min(m) = 2-23 min( X ) = 2-126 * 2-23 = 2-149 1.4e-45 max(k) = 127, max(m) 2 max( X ) 2 127 * 2 = 2 128 = 3.4e+38 ε = 2-23 1.2e-7 Nem egyezik az FLT_MIN értékkel! (1.175e-38) Adatok beolvasása/kiírása Elvégzi adatok konvertálását a belső és külső ábrázolásnak megfelelően. A külső ábrázolás szöveges, a belső gépi. printf(formátum, adat1, adat2, adat3,...) scanf(formátum, cím1, cím2, cím3,...) printf("a=%d b=4.2%f", a, 9.84); formátum adat scanf("%d %f", &a &b); cím Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -59- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -60-

Print függvény (printf) A formátumlistából tudja, hogy milyen formában kell kiírnia a belső ábrázolású adatot. Nem nyelvi elem! Nincs lehetőség annak ellenőrzésére, hogy a formátumlista és a paraméterek száma/típusa összhangban van-e. Az inkonzisztencia veszélyes hibaforrás is lehet. Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -61- printf formátuma %[flags][size][.prec][lengt]type type: diouxxpfeeggcsn% d, i, u decimális egész (u - előjeletlen) o oktális egész x, X hexadecimális egész p pointer f lebegőpontos (±dd.pp) e, E tudományos lebegőpontos (±dd.ppe±xx) g, G e vagy f, amelyik a rövidebb c karakter s string n kiírt karakterek számát az arg-ba teszi (int *) Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -62- printf formátuma (2) %[flags][size][.prec][length]type length: hll h short, vagy unsigned short típushoz l long vagy unsigned long típushoz L long double típushoz Lebegőpontos formátumban a float és double értékek egyaránt kiírathatók. Integer formátumban bármely skalár típus kiíratható. printf formátuma (3) %[flags][size][.prec]type flags: -+#0 - balra igazítás + előjel a pozitív értékre is szóköz: pozitiv érték előjele szóköz lesz (alap); e és f formátumoknál mindig van tizedespont # oktális számok 0-val hexa számok 0x-szel 0 bevezető nullák kiírása Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -63- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -64- printf formátuma (4) %[flags][size][.prec]type size: Egész szám vagy * * Esetén a méretet az argumentumlista következő eleme adja, ami int típusú kell hogy legyen. Értelmezés: minimális mezőszélesség (ha nem fér bele, akkor nem csonkol!); Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -65- printf formátuma (5) %[flags][size][.prec]type prec: Egész szám vagy * * Esetén a méretet az argumentumlista következő eleme adja, ami int típusú kell hogy legyen. Értelmezés formátumfüggő: int formátum: a számjegek minimális száma e és f formátum: a tizedesjegyek száma; g formátum: lényeges számjegyek száma s formátum: karakterek maximális száma Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -66-

printf példák printf("a=%d b=%03x c=%3.1f", 1, 18, 9.86); printf("a=%d b=%03x", 1, 18, 9.84); printf("a=%d b=%03x c=3.1%f", 1, 18); int i = 2005; printf("%f", i); printf("%c", i); a=1 b=012 c=9.9 Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -67- Scan függvény (scanf) A formátumlistából tudja, hogy milyen belső formába kell konvertálnia a beolvasott adatot. A formátumlista nem speciális karaktereit megkövetelt inputként kezeli (illeszt). Az illeszkedést a visszatérési értékben jelzi. Nem nyelvi elem! Nincs lehetőség annak ellenőrzésére, hogy a formátumlista és a paraméterek száma/típusa összhangban van-e. Az inkonzisztencia nagyon veszélyes hibaforrás is lehet. Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -68- scanf formátuma %[*][size][lengt]type type: diouxxpfeeggcsn% d, u decimális egész (u - előjeletlen) i decimális egész (oktális, hexa) o oktális x, X hexadecimális p pointer f,e,e,g,g lebegőpontos szám c karakter s string scanf formátuma (2) [...] Karaktersorozat illesztés. A zárójelekben levő szereplő karakterek (illesztési halmaz) sorozatát beolvassa és a char * argumentumba teszi lezáró nullával. [A-Z] Karakter sorozat illesztés az intervallumba eső karakterekre (pl. nagybetűk). [^...] Karakter sorozat illesztés. A halmazra nem illeszkedő karaktersorozatot olvas be. []...-] ] és - jelek is a halmazban vannak. A ] jel csak elöl lehet, - csak a végén. n beolvasott karakterek számát az arg-ba teszi Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -69- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -70- scanf formátuma (3) %[*][size][length]type length: hll h short, vagy unsigned short típushoz l long, unsigned long, vagy double típushoz L long double típushoz Nagyon fontos a helyes méret megadása. Rossz megadás végzetes hibához vezethet. scanf formátuma (4) %[*][size][lengt]type *: A beolvasott érték nem tárolódik, azaz a címlistán nem tartozik hozzá cím. size: egész szám, ami a mező maximális méretét adja meg. Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -71- Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -72-

scanf működése A scanf megpróbálja az inputot illeszteni a formátumra, mint mintára. A nem %-kal kezdődő karaktereket mintának tekinti, aminek pontosan illeszkedni kell. Kivéve a whitespace karakterek, melyek tetszőleges számú whitespace karakterből álló sorozatot jelentenek az inputon. Visszatérési értékben jelzi, hogy hány beolvasást végzett el sikeresen. Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -73- scanf példák scanf("%d%d", &a, &b); // két decimális szám scanf("%d-%d", &a, &b); // dec.szám kötőjellel scanf("a=%d", &a); // a=decimális szám scanf("%*[a-z]=%d", &a); // AZON=dec.szám char c; scanf("%s", &c); double x; scanf("%f", &x); karakterbe olvas stringet double-be float-ot Megjegyzés: printf-fel lehet %f-fel double-t kírni. Miért? Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.09.19. -74-