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
[email protected]
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
Ezzel a témakörrel részletesebben a Programozás Alapjai és a Szoftvertechnológia című tárgyak foglalkoznak. a
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) #i n c l u d e < s t d i o . h> i n t main ( ) { p r i n t f ( " H e l l o World ! \ n" ) ; return 0;}
A kimenet user@host:~$ user@host:~$ Hello world! user@host:~$ Tar Péter
gcc helloworld.c -o helloworld ./helloworld
(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:~$ Tar Péter
man 3 printf
(PE-MIK-DCS)
Programzás I. - 1. gyakorlat
September 15, 2007
21 / 23
printf példa Forrás (printf.c) # i n c l u d e < s t d i o . h> i n t main ( ) { i n t a =0, b =5; p r i n t f ( "A k e t 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