Programozás I Keresztes Barna
A kurzusok időpontjai és tematikája Szept. 6 Bevezetés a C nyelvbe, első program Szept. 6 Vezérlési szerkezetek (for, if, while, switch) Szept. 13 - Operátorok, adattípusok, matematikai és stringfüggvények Szept. 20 Tömbök, ki- és bemenet Szept. 27 Függvények Okt. 4 25 Algoritmusok kurzus Nov. 8 Mutatók Nov. 15 Állománykezelés Nov. 22 Összefoglaló Nov. 29-től Algoritmusok kurzus
Órák: 7.30-10.00 / 10.00-12.30 Gyakorlat 12.30-14.30 Kurzus (Programozás és Algoritmusok felváltva) A kurzuson is kötelező a részvétel (2 hiányzás megengedett) 2 zárthelyi dolgozat lesz félév közben, 1 pótlás utolsó héten A ZH-k átlaga 35% kell legyen a vizsgán való részvételhez.
Bibliográfia Kernighan és Ritchie: A C programozasi nyelv (K&R book) Benkő László, Benkő Tiborné: Programozzunk C nyelven A powerpoint bemutatók nem publikusak!
C nyelv Dennis Ritchie fejleszti ki a Bell Labs-nál 1969-1973 között Szükség volt egy modern nyelvre az UNIX operációs rendszer megírásához Azóta a legsikeresebb programozási nyelv lett, minden számítástechnikai eszközt lehet vele programozni Egyik leggyorsabb programozási nyelv az egyszerűsége miatt könnyen lehet optimizálni a fordítóprogramokat
C nyelv Hordozhatóság Java: Hordozható programok Virtuális gép (JVM) Fordító Futtatható program Windows Program.java javac Program.jar MacOS Linux C: Hordozható forráskód TurboC (tc) Program.exe (dos) Program.c VisualC (vc) Program.exe (win) Gcc Fordító Program.app (mac, linux) Futtatható program
C nyelv Amerikai Szabványügy Hivatal (ANSI), 1983 X3J11 bizottság a C nyelv szabványosítására 1989, ANSI X3.159-1989 a végleges szabvány Az addigi programok lefordíthatóak legyenek A C forráskód hordozható legyen Nem hordozható, rendszerfüggő részek C nyelv szellemisége Újabb szabványok: C99, C11
További történet C nyelv bővítései C nyelv classes exceptions C++ templates C# components.net interpreted C, C++, C# mind ANSI standard nyelvek Egyéb C alapú nyelvek: Perl, Java, ECMAScript, PHP, Python, D, Go...
Miért szöveges (DOS) módban? Amikor ma minden program Windowsos?
Miért szöveges módban? Mert egyszerűbb A C nyelv nem Windowsos programok írására volt kifejlesztve (ámbár lehetőség van erre is) Windowsos környezetben futtatható programokra alkalmasabb a C++ és főleg a C# illetve a Java nyelvek
Miért szöveges módban? Szöveges üzemmód Windowsos változat #include <stdio.h> void main() { printf( Hello, szoveges mod"); } #include <windows.h> LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; int WINAPI WinMain (HINSTANCE hinstance, HINSTANCE hprevinstance, PSTR szcmdline, int icmdshow) { static char szappname[] = "HelloWin" ; HWND hwnd ; MSG msg ; WNDCLASSEX wndclass ; wndclass.cbsize = sizeof (wndclass) ; wndclass.style = CS_HREDRAW CS_VREDRAW ; wndclass.lpfnwndproc = WndProc ; wndclass.cbclsextra = 0 ; wndclass.cbwndextra = 0 ; wndclass.hinstance = hinstance ; wndclass.hicon = LoadIcon (NULL, IDI_APPLICATION) ; wndclass.hcursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrbackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ; wndclass.lpszmenuname = NULL ; wndclass.lpszclassname = szappname ; wndclass.hiconsm = LoadIcon (NULL, IDI_APPLICATION) ; RegisterClassEx (&wndclass) ; hwnd = CreateWindow (szappname, // class name "The Hello Program", // window caption WS_OVERLAPPEDWINDOW, // window style CW_USEDEFAULT, // initial x position CW_USEDEFAULT, // initial y position CW_USEDEFAULT, // initial x size CW_USEDEFAULT, // initial y size NULL, // parent window handle NULL, // window menu handle hinstance, // program instance handle NULL) ; // creation parameters ShowWindow (hwnd, icmdshow) ; UpdateWindow (hwnd) ; while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } return msg.wparam ; } LRESULT CALLBACK WndProc (HWND hwnd, UINT imsg, WPARAM wparam, LPARAM lparam) { HDC hdc ; PAINTSTRUCT ps ; RECT rect ; switch (imsg) { case WM_CREATE : PlaySound ("hellowin.wav", NULL, SND_FILENAME SND_ASYNC) ; return 0 ; case WM_PAINT : hdc = BeginPaint (hwnd, &ps) ; GetClientRect (hwnd, &rect) ; DrawText (hdc, "Hello, Windows!", -1, &rect, DT_SINGLELINE DT_CENTER DT_VCENTER) ; EndPaint (hwnd, &ps) ; return 0 ; case WM_DESTROY : PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hwnd, imsg, wparam, lparam) ; }
Miért szöveges üzemmódban? A C nyelv standard és alapszintű tehát sok eszközt lehet így programozni Ezekhez a hozzáférés általában szöveges módban történik (nincs grafikus kijelzőjük) Linux parancssorban és konfigurációs szkriptekben lehet C nyelvet használni
Miért szöveges üzemmódban Napjaink talán legfontosabb programozási felülete a szöveges módon alapszik
Programozás I 1. előadás: Bevezetés a C nyelvbe
A Visual C++ fejlesztőkörnyezet
Első program File -> New ->Project Projekt típusa: Win32 Console Application
Első program
Első program Project Project -> Add new item Ctrl+Shift+A
Első program
Első program
Program futtatása Csak lefordítás: F7 vagy Build->Build solution Létrehoz egy.exe futtatható állományt Lefordítás és futtatás: Ctrl+F5 vagy Debug-> Start without debugging Létrehoz egy futtatható állományt és lefuttatja
Első program #include <stdio.h> void main() { printf("hurra, programozunk!\n"); } Program fejléce Program törzse
Program törzse void main() a főfüggvény Ez minden programban benne kell legyen Mindig a main függvényt futtatja a program A függvény törzse { } zárójelek közt van printf( ); void main() { printf("hurra, programozunk!\n"); } Formázott nyomtatás a képernyőre Minden sor pontosvesszővel végződik!!!
Program fejléce #include <stdio.h> Itt adunk utasításokat a fordítónak Az include utasítással meghatározzuk, melyik könyvtárakat használja a programunk Ezek a könyvtárak tartalmazzák a felhasználható függvényeket A printf( ) függvény a stdio.h (standard input/output) könyvtárban van A standard könyvtárak nevét <...> közé, a többit... közé rakjuk
Könyvtárak További könyvtárak: math.h, time.h, stb... sin(x) cos(x) exp(x) sqrt(x) log(x)... localtime(t) gmtime(t) difftime(t1,t2)... Könyvtárakat írhatunk mi magunk is, ezekbe a saját függvényeinket rakhatjuk.
Gyakorlat Használjuk a progi1.h könyvtárat Adjuk hozzá a projekthez (Project->Add Existing item) #include progi1.h Függvények: osszead(3,8); idezet(); pingpong(); vasaroljkenyeret(); kopapirollo(); / kopapirollo(0);
Gyakorlat Függvények: gotoxy(<x>,<y>); <- A kurzort pozicionálja a képernyőn (x<80, y<25) gotoxy(40,12); wait (<t>); <- t ezredmásodpercre megállítja a programot wait(1000);
Kommentárok Hasznos megjegyzéseket tehetünk a programba Egysoros kommentár: // // Ez egy egysoros kommentár Többsoros kommentár: /* */ /* Ez egy tobbsoros kommentar */
Példa /* */ Komoly program Irta: Pityi Palko PTE PMMIK Webprogramozas Datum: 2012 szeptember 6 Verzioszam: 1.0 printf( Udvozollek a programban\n\n ); idezet(); //egy kis agytrening osszead(123,321); //bucsuzas printf( Program vege, viszontlatasra.\n ); } //vege //Fejlec #include <stdio.h> #include <progi1.h> //Program torzse void main() { //Udvozlet gotoxy(20,5);
Változók Tartalmazhatnak számokat (egesz, valos) karaktereket szövegeket stb Ez határozza meg a változó típusát Egy változónak egy típusa van Minden változót kell deklarálni használat előtt: tipus valtozonev ;
Változok Egész számok: int i; i=5; Valós számok: double pi; pi=3.14; Karakterek: char c; c= n ; Szövegek: char s[10]= szoveg ; maximális hossz
Változók Tartalmazhat: Betük: a-z, A-Z Számok: 0-9 _ Lehet egyszerű nevet adni: x, y, i, j, k, s Lehet beszédes nevet adni: eletkor, testsuly, fizetes
Változók Vigyázat: Kis- és nagybetü különbözik!!! Változónév nem kezdődhet számmal: 40rablo, 7torpe Tiltott nevek: asm, auto, break, case, catch, char, class, const, continue, default, do, double, else, enum, extern, float, for, goto, if, inline, int, long, register, return, short, signed, sizeof, static, struct, void, volatile, while,...
Műveletek változókkal int D,r; double T,K,pi; r = 5; pi = 3.14; D = r+r; 10 //d=2r K = 2*pi*r; T = pi*pi*r; //a=pi²r double int Különböző típusú változókkal is lehet műveletet végezni Az egyenlőségnél a baloldal kapja meg a jobboldal értékét
Formázott kiíratás: printf Gyakorlat #include <stdio.h> void main() { int x,y; \... Formázás x=100;y=50; printf( %d forintnak %d a fele,\negye meg a feszkes fekete fene!\n,x,y); } %... Helytartás
Formázott kiíratás: printf %... változó kiírása \... speciális karakter %d egész %f tizedesszám %s szöveg %c karakter %5.2f teljes hossz tizedes számok %% kiír: % \n újsor \t tab \v függőleges tab \a bip \r sor elejére \\ kiír: \ \ kiír:
Formázott beolvasás: scanf Egy változó beolvasása: scanf ( %d, &i ); scanf ( %s, &s );... közé a változó típusát kell rakni, mint a printf-nél %d, %f, %c, %s... Beolvasáskor a változó neve elé mindig & jelet kell tenni!
Gyakorlat: változó be- és kiíratása Írjunk egy ismerkedőprogramot a felhasználóval: Hogy hivnak? Pisti Szia, Pisti, orvendek az ismeretsegnek! Press any key to continue...