Programzás I. - 1. gyakorlat Alapok Tar Péter 1 Pannon Egyetem Műszaki Informatikai Kar Számítástudomány Alkalmazása Tanszék Utolsó frissítés: September 15, 2007 1 tar@dcs.vein.hu Tar Péter (PE-MIK-DCS) Programzás I. - 1. gyakorlat September 15, 2007 1 / 23
1 Bevezetés 2 Alapfogalmak 3 C programok fordítása 4 Az első programunk 5 A printf parancs 6 Feladat Tar Péter (PE-MIK-DCS) Programzás I. - 1. gyakorlat September 15, 2007 2 / 23
Ajánlott irodalom Brian W. Kernighan & Dennis M. Ritchie: A C programozási nyelv. 2. kiadás, Műszaki Könyvkiadó, 2003 Benkő Tiborné, Benkő László, Tóth Bertalan: Programozzunk C nyelven, Computer Books, Budapest, 1996 Tar Péter (PE-MIK-DCS) Programzás I. - 1. gyakorlat September 15, 2007 3 / 23
Mi a programozó feladata? Programozás során a programozónak egy előre meghatározott feladatot kell előre meghatározott szempontok szerint megoldania. Ez több mindenben megjelenhet, pl.: Futási idő Kód mérete Elkészülés ideje Programozás és a kódolás között lényeges különbség van, a kódolási ismeretek szükségesek, de nem elégségesek egy programozási feladat hatékony megoldásához! Tar Péter (PE-MIK-DCS) Programzás I. - 1. gyakorlat September 15, 2007 4 / 23
Állásinterjú Kérdés állásinterjún Milyen nyelven tud Ön programozni? Coder válasza Három: C, Java, PHP Programozó válasza Adjon két hetet, egy könyvet, és bármiben. Tar Péter (PE-MIK-DCS) Programzás I. - 1. gyakorlat September 15, 2007 5 / 23
A tárgy célja Alapvető programozási tudás kialakítása. 2 A C programozási nyelv alapjainak elsajátítása. 2 Erre nagyobb hangsúlyt a Programozás Alapjai című tantárgy fektet Tar Péter (PE-MIK-DCS) Programzás I. - 1. gyakorlat September 15, 2007 6 / 23
Algoritmus (Algorithm) I. Az algoritmus egyértelmű utasítások előre meghatározott sorozata egy probléma megoldására Példa Menj el a buszmegállóig. Várd meg a buszt. Szállj fel a buszra. Példa Oldd meg az x 2 + 2x + 1 = 4 egyenletet. Példa Határozd meg az x 2 + 2x 3 = 0 diszkriminánsát. Vizsgáld meg a diszkriminánst. Ha nem negatív, Számítsd ki a gyököket. Tar Péter (PE-MIK-DCS) Programzás I. - 1. gyakorlat September 15, 2007 7 / 23
Algoritmus (Algorithm) II. Algoritmus tervezés A valós élet problémáinál ez nagyon nehéz feladat Számos tervezési technika létezik ennek megoldására a a Ezzel a témakörrel részletesebben a Programozás Alapjai és a Szoftvertechnológia című tárgyak foglalkoznak. Algoritmus kódolás Az algoritmusok implementálásához szükséges valamilyen programozási nyelv ismerete. Egyes feladatok bizonyos nyelveken könnyebben oldhatók meg. Tar Péter (PE-MIK-DCS) Programzás I. - 1. gyakorlat September 15, 2007 8 / 23
Programozási nyelvek (Programming Languages) I. A programozási nyelv egy szabályrendszer algoritmusok leírására, melyek segítségével a programozó a számítógép által értelmezhető algoritmusokat készít. Egy nyelvnek is több változata lehet, ügyelni kell, hogy mindig a megfelelő verziót használjuk: Elavult eljárások használatának elkerülése. Korszerű technikák által biztosított lehetőségek kihasználása. 3 A tárgy keretein belül a C programnyelv ANSI C változatával fogunk megismerkedni. 3 Ezek ismertetésével részletesbben a Programozás II. és a Korszerű Programozási Technikák című tárgyak foglalkoznak Tar Péter (PE-MIK-DCS) Programzás I. - 1. gyakorlat September 15, 2007 9 / 23
Programozási nyelvek (Programming Languages) II. Alacsony szintű nyelvek - Assembly Nehézkes a kódolás. Gyors működés (gépközeli utasítások). Magas szintű nyelvek Emberközeli, az utasítások értelmes szavak. Osztályai: Egyszerű magas szintű nyelvek (Pl.: Basic) Strukturált nyelvek (Pl.: Pascal, C) Objektum-orientált nyelvek (Pl.: C++, Java) Tar Péter (PE-MIK-DCS) Programzás I. - 1. gyakorlat September 15, 2007 10 / 23
Állománytípusok Forráskód (Source code) Szöveges állomány, amelyet a programozó az adott programozási nyelv szabályai szerint ír. Emberek számára értelmezhető formátummal rendelkezik. Bájtkód (Byte code) Már nem szöveges állomány, sem az emberek sem a számítógép nem képes közvetlenül, interpreter nélkül megérteni. Gépi kód (Object code) A számítógép nyelvén írt program, bináris állomány. Fontos jellemzője, hogy nem platformfüggetlen. Tar Péter (PE-MIK-DCS) Programzás I. - 1. gyakorlat September 15, 2007 11 / 23
Fordító és Értelmező Fordító (Compiler) Olyan program, amely a programozó által megírt forráskódból, az adott programozási nyelv szabályai alapján gépi kódot. Ennek használatával készíthetünk futtatható programokat. A fordító minden esetben az egész forrásfájlt egyben forítja le, ezért ügyelni kell arra, hogy futtatás előtt minden módosítás után újrafordítsuk a programjainkat. Ételmező (Interpreter) A program sorait egyesével értelmezi, és hajtja végre. A bájtkódok futtatásához is értelmezőre van szükségünk. Tar Péter (PE-MIK-DCS) Programzás I. - 1. gyakorlat September 15, 2007 12 / 23
Hibák Szintaktikai hiba Olyan hibák, amelyek hatására a fordító nem tudja értelmezni a forráskódot. (Pl.: elgépelés, hiányzó pontosvessző, rossz zárójelezés, stb.) Szemantikai hiba Olyan hibák, amelyek hatására a program helytelen működést eredményez. (Pl.: Hibás számítás, helytelen algoritmus használata, stb.) Ezek javítása sokkal nehezebb, mint a szintaktikai hibáké. Tar Péter (PE-MIK-DCS) Programzás I. - 1. gyakorlat September 15, 2007 13 / 23
A szoftverfejlesztés elemei 4 Programozás (Programming) Az algoritmusok, struktúrák és a program tervének megalkotása. Kódolás, Implementálás (Implementation) Az algoritmus leírása valamely programnyelv szabályai szerint. a a A tárgy keretében, és főleg a gyakorlatokon ezzel fogunk elsősorban foglalkozni. Hibaelhárítás (Debugging) Az előzőek során ejtett hibák keresése, megtalálása, majd javítása. Hibajavítás során először a szintaktikai, majd a szemantikai hibákat szüntetjük meg. Célszerű minden hiba javítása után újrafordítani a programot, és ellenőrizni, hogy elértük- a kívánt eredményt. 4 Ezek csak az alapvető motívumok, komolyabb szoftverfejlesztési technikákkal, módszertanokkal a Szoftvertechnológia és a Rendszerfejlesztés Korszerű Módszerei című tárgyak foglalkoznak Tar Péter (PE-MIK-DCS) Programzás I. - 1. gyakorlat September 15, 2007 14 / 23
C fordítók Számos C fordító létezik. gcc Visual C compiler Intel C compiler... Mi ezek közül a gcc-t fogjuk használni a forrásfájlok lefordítására. Tar Péter (PE-MIK-DCS) Programzás I. - 1. gyakorlat September 15, 2007 15 / 23
Fejlesztői környezetek (Developement Environment) Olyan szoftverek, amelyek különféle eszközök széles skálájával támogatják a programok tervezését, az implementálást és a hibakeresést egyaránt. Ilyenek például: gcc + bash + szövegszerkesztő Netbeans Eclipse Microsoft Visual Studio... Mi ezek közül a parancssori programozást, illetve az Eclipse-t fogjuk használni a gyakorlatok során. Tar Péter (PE-MIK-DCS) Programzás I. - 1. gyakorlat September 15, 2007 16 / 23
Fordítás gcc-vel Fordítás user@host:~$ gcc forras.c -o futtathato Ahol: forras.c A forráskódot tartalmazó fájl neve futtathato A futtatható fájl neve Futtatás user@host:~$./futtathato A gcc fordító részletes paraméterezési lehetőségeit a gcc help paranccsal kérdezhetjük le. Tar Péter (PE-MIK-DCS) Programzás I. - 1. gyakorlat September 15, 2007 17 / 23
Az első program Minden programozási nyelv tanulása esetén az első program, amelyet el szokás készíteni, egy Hello World! program. Ez C nyelven a következőképp néz ki: Forrás (helloworld.c) #include <s t d i o. h> int main (){ p r i n t f (" Hello World!\ n" ) ; return 0;} A kimenet user@host:~$ gcc helloworld.c -o helloworld user@host:~$./helloworld Hello world! user@host:~$ Tar Péter (PE-MIK-DCS) Programzás I. - 1. gyakorlat September 15, 2007 18 / 23
A Hello World program felépítése # include <stdio.h> Előre megírt függvények betöltése az include paranccsal történik. Ennek hatására az előfeldolgozó bemásolja a betöltött header fájlokat a forráskódba, a fordító ez után kezdi meg a működését. int main(... ) {... } Minden program elengedhetetlen része a main függvény. Futtatás során ez kezdi meg a működést, majd végeztével a program kilép. Részei: int Visszatérési érték main A függvény neve () Paraméterek helye {...} A végrehajtandó blokk Tar Péter (PE-MIK-DCS) Programzás I. - 1. gyakorlat September 15, 2007 19 / 23
A printf használata printf("hello World! \ n"); A printf függvény a standard outputra való kiiratásra alkalmas. printf("kiiratando szoveg: %s", sztring1);... A képernyőn megjelenítendő szöveg, amely speciális karaktereket és kifejezéseket tartalmazhat. sztring1 A behelyettesítendő változó neve. Példa speciális karakterekre: \n új sor \t tabulátor Tar Péter (PE-MIK-DCS) Programzás I. - 1. gyakorlat September 15, 2007 20 / 23
A printf speciális kifejezései A változók beillesztésére szolgáló kifejezés mindig % jellel kezdődik. Néhány példa, hogy melyik típus esetén melyik kifejezésre van szükség: %i,%d Előjeles decimális %u Előjel nélküli decimális %o Előjel nélküli oktális %x Előjel nélküli hexadecimális %f Lebegőpontos %c Karakter %s Karaktersorozat Teljes leírás user@host:~$ man 3 printf Tar Péter (PE-MIK-DCS) Programzás I. - 1. gyakorlat September 15, 2007 21 / 23
printf példa Forrás (printf.c) # include <s t d i o. h> int main (){ int a=0, b=5; p r i n t f ("A ket szam:%d, %d\n",a, b ) ; return 0; } Kimenet user@host:~$./printf A ket szam: 0, 5 user@host:~$ Tar Péter (PE-MIK-DCS) Programzás I. - 1. gyakorlat September 15, 2007 22 / 23
Feladat 1 Írjon programot, mely létrehoz két egész változót, majd a kimenetre kiírja az összeadásukat. (Példa a kimenetre: 5+3=8) 2 Fordítsa le. 3 Futtassa. 4 Módosítsa a műveletet kivonásra. 5 Fordítsa le. 6 Futtassa. Tar Péter (PE-MIK-DCS) Programzás I. - 1. gyakorlat September 15, 2007 23 / 23