Bevezetés a C programozásba Programozás I. Széchenyi István Egyetem, Gy r 2015. szeptember 5.
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 Információ: adat program
Számítógép lehet ségei 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
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 Memória ALU ROM 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
Adatok Számítógép érdekes tulajdonságai: Hogyan ábrázolja/kezeli az adatokat? Milyen átalakítások/m veletek végezhet k ezeken? Milyen alaptevékenységekre alkalmas? Hogyan adható meg a tevékenységek sorrendje? Adatok kezelése: konstansként (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 kezdetben deniálatlan
Fixpontos számábrázolás El jel nélküli eset 2013 10 = 2 10 3 + 0 10 2 + 1 10 1 + 3 10 0 2013 10 = 0000 0111 1101 1101 2 = 1 2 10 + 1 2 9 + 1 2 8 + 1 2 7 + 1 2 6 + 1 2 4 + 1 2 3 + 1 2 2 + 1 2 0 2013 10 = 3735 8 = 3 8 3 + 7 8 2 + 3 8 1 + 5 8 0 2013 10 = 7DD 16 = 7 16 2 + 13 16 1 + 13 16 0 2013 3 201 1 20 0 2 2 0 2013 D 125 D 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, 11111011101 2 11 = 2013 10 Minta 128 többletes karakterisztikával adott adatra: 01111011 10100000 00000000 10001011 2 = 2013 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 Másutt esetleg: els bájt a karakterlánc hossza '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: tömb struktúra (másutt: 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
M veletek Aritmetikai m veletek + összeadás - egyoperandusos: az operandus értékének 1-szerese, pl. -b kétoperandusos: kivonás * szorzás / osztás % maradék képzés Kétoperandusos m veleteknél az eredmény valós, ha legalább egy operandus valós, különben egész a / egészrész képzés. Pl. 6/4 == 1 6./4 == 1.5 6%4 == 2
M veletek Karakterlánc m veletek C-ben nincsenek másutt pl. a + összef zést jelöl Logikai m veletek logikai nem (NOT,!) logikai (megenged ) vagy (OR, ) logikai és (AND, &&) Eredményük igaz (1, vagy nem nulla) vagy hamis (0) lehet. Igazságtábla Boole-algebra, logikai kapuk a b!a a b a&&b 1 1 0 1 1 1 0 0 1 0 0 1 1 1 0 0 0 1 0 0
Relációk Kétoperandusos m veletek, eredményük logikai > nagyobb >= nagyobb vagy egyenl < kisebb <= kisebb vagy egyenl == egyenl (az = hozzárendelést jelöl!)!= nem egyenl Figyelem! Intervallumba esés ellen rzése: Helytelen A < x <= B Helyes A<x && x<=b!(a>=x x>b)
Relációk Karakterek (ASCII-kódjai) összehasonlíthatóak: '0' < '1' < '2' <... < '9' 'a' < 'b' < 'c' <... < 'z' 'A' < 'B' < 'C' <... < 'Z' Karakterláncok nem hasonlíthatók össze!
Matematikai függvények Aritmetikai adatokból újabb adatot állítanak el. Folyamat: függvényhívás. Pl. x abszolút értékének megállapítása y = abs(x); y az eredmény változó x a függvény (aktuális) paramétere abs a fv. neve
Matematikai függvények Fv. neve fabs(x) labs(x) abs(x) sin(x) cos(x) tan(x) pow(x, y) exp(x) log(x) log10(x) sqrt(x) Tevékenység abszolút érték szinusz koszinusz tangens hatványozás e x természetes és 10-es alapú logaritmus x
Kifejezések Kifejezés: adatokon végzend m veletek megadása. Kif. kiértékelése: a kif.-ben adott konstansokon/változókon m veletek végzése: kapott érték: kif. értéke kapott típus: kif. típusa Utóbbi az operandusoktól függ: egy-egy m velet eredményének típusa egyértelm a kif. m veleteit rendre egyenként kell végrehajtani a sorrend kötött, szabályai: 1 zárójelezés 2 precedencia szabály (prioritás) 3 balról jobbra
Kifejezések Matematikai alak {[(3 + 4) 2 + 5] 9 + 7} 8 Programnyelvi alak (((3 + 4) 2 + 5) 9 + 7) 8 Prioritási sorrend (csökken ) ( ) fv. hívás értékének meghatározása! egyoperandusos m veletek * / % + relációk && = hozzárendelés
Alaptevékenységek Input tevékenység adatok beolvasása változókba: C-ben ez nem alaptevékenység Output tevékenység konstansként, változóval vagy kifejezéssel adott adatok kiírása érték jelenik meg C-ben ez sem alaptevékenység Értékadó tevékenység kiértékelt kifejezés értékét tetsz leges, de adott változóba írja. A változó és a kifejezés típusának azonosnak, vagy legalább átalakíthatónak kell lennie (implicit típuskonverzió)! Aritmetikai típusok és karakterlánc között nincs átalakítás!
Vezérl tevékenységek Szekvenciális (szekvencia) Leírás sorrendjében történ végrehajtás Szelekciós Logikai kif. értékét l függ en elágazik, végrehajtásra kiválaszt tevékenységeket Iterációs Logikai kif. (feltétel) függ en tevékenységeket ismétel
Adatszerkezet, algoritmus Feladatmegoldáshoz megtervezend : Adatszerkezet, adatstruktúra: melyek a kiindulási adatok mi lesz a végeredmény milyen részeredmények kiszámítása szükséges milyen változókkal kezeljük ezeket milyen adatok lesznek konstansok,... Algoritmus: elvégzend tevékenységek ezek sorrendje Algoritmus + adatstruktúra = program Ha több megoldás lehetséges, akkor más adatszerkezet más algoritmus más algoritmus más adatszerkezet pl. takarékos er forrás használat gyors végrehajtás
Adatstruktúra megadása Táblázattal, tulajdonságok megadásával Funkció melyik adatot kezeli a változó, mire használjuk Azonosító a változó neve (utal a funkcióra) Típus Jelleg az adat, a változó típusa, tárolásmódja összetett változót jellemz információ megadása, pl. tömb dimenziói kiindulási adat (input) végeredmény (output) részeredmény (munka) A változó lehet többfunkciós/többjelleg, de típusa nem változhat!
Példa: téglalap területének, kerületének meghatározása Funkció Azonosító Típus Jelleg téglalap egyik oldala a valós input szomszédos oldal b valós input téglalap kerülete K valós output téglalap területe T valós output a b T=a*b K=2*(a+b) K T Szöveges algoritmus-megadás: 1 Beolvasandók a téglalap szomszédos oldalainak hosszai! 2 Kiszámítandó a téglalap területe és kerülete! 3 Megjelenítend ek a kiszámított értékek!
Folyamatábra elemei Start Stop Kezd pont és végpont jelei. Háromszöges változat: részalgoritmus leírására. Egy programban egyetlen kezd -, és egyetlen végpont lehet. Kezd pontban egyetlen kimen nyíl lehet, beérkez nem. Végpontban... Haladási irány jele. Csak szelekciónál ágazhat el. Végrehajtási sorrendet rögzíti.
Folyamatábra elemei v = kifejezés Értékadó tevékenység jele. Egy nyíl be, egy ki. Meghatározandó a kifejezés értéke és típusa, majd v változó felveszi ezt az értéket. Több értékadás összevonható. Be: v1, v2 Beolvasás (input tevékenység) jele. Egy nyíl be, egy ki. Beolvasandó v1, v2
Folyamatábra elemei Ki: k, v, kif Kiírás (output tevékenység) jele. Egy nyíl be, egy ki. Kijelzend a k konstans, v változó és kif kifejezés értéke. Ezek alapján a téglalap kerületének és területének meghatározása folyamatábrával: Start Be: a, b Deníció szerint lehet rövidíteni, így T és K elhagyható. T = a*b K = 2*(a+b) Ki: a*b, 2*(a+b) Ki: T, K Stop
Folyamatábra elemei Szelekció, elágazás jele. feltétel n Egy nyíl be, és pontosan kett ki. tevékenység1 i tevékenység2 Ha a feltétel teljesül (igaz), az i ágon folytatódik a végrehajtás, különben az n-en. Megengedett, hogy valamelyik ágon semmilyen tevékenység se legyen. Példa: másodfokú egyenlet megoldása: ax 2 + bx + c = 0 Funkció Azonosító Típus Jelleg együtthatók a, b, c valós input diszkrimináns d valós munka gyökök x1, x2 valós output
Folyamatábra elemei Start Be: a, b, c a == 0 i n Ki: "Az egyenlet nem másodfokú!" d = b*b + 4.*a*c d >= 0 n i Ki: "Nincs valós gyök!" x1 = (-b + sqrt(d)) / (2.*a) x2 = (-b - sqrt(d)) / 2. /a Ki: x1, x2 Stop
Folyamatábra elemei Iteráció (ciklus) feltétel n tevékenységek tevékenységek i i feltétel n a) előltesztelő b) hátultesztelő Az ismétlend tevékenységet ciklusmagnak nevezik. Ciklusmagnak hatással kell lennie a feltétel értékére végtelen ciklus? El ltesztel : lehet, hogy a ciklusmag egyszer sem hajtódik végre, hátultesztel : legalább egyszer biztosan
Folyamatábra elemei Léptet /növekményes ciklus CV = KE CV <= VE n CV = KE, VE, LE ciklusmag i ciklusmag CV = CV+LE a) előltesztelő b) növekményes El ltesztel speciális esete CV ciklusváltozó, KE kezd érték, VE végérték, LE lépésköz Ha LE negatív, akkor a feltétel: CV >= VE LE alapértelmezett értéke 1, elhagyható
Példa: maximális érték keresése Feladat: adott valós értékek közül a legnagyobb kikeresése. Funkció Azonosító Típus Jelleg valós értékek száma n egész input eddigi legnagyobb valós érték max valós input/munka aktuális valós érték a valós input ciklusváltozó i egész munka
Példa: maximális érték keresése Start Be: n n < 1 n Be: max i Ki: "Legalább egy értéknek lennie kell!" i = 1, n-1 Ki: "Maximum:", max Be: a Stop a > max n i max = a
Függvények Áttekinthet bb programok, kódismétlés elkerülése Az adatstruktúra a fv. nevével kezd dik Van visszatérési érték a típus annak típusa, a jelleg fv. v. t. érték Ezt a formális paraméterek követik (ha vannak) Ezek jellege paraméter Függvény hívása fvnév(aktuális paraméterlista) változó = fvnév(aktuális paraméterlista) Függvény deníció fvnév(formális paraméterlista)
Függvények Fv. kezdetének és végének jelölése: Visszatérési érték jelölése: Vissza: kifejezés
Felhasznált irodalom Marton László, Pukler Antal, Pusztai Pál Bevezetés a programozásba Novadat, Gy r, 1993. Dr. Szijártó Miklós Informatika I. elektronikus jegyzet L. Howard Pollard Computer Design and Architecture University of New Mexico, Englewood Clis, N.J. : Prentice Hall, c 1990.