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
javac
Program.jar
MacOS
Program.java
Linux
C: Hordozható forráskód
Program.c
TurboC (tc)
Program.exe (dos)
VisualC (vc)
Program.exe (win)
Gcc
Program.app (mac, linux)
Fordító
Futtatható program
C nyelv
Amerikai Szabványügy Hivatal (ANSI), 1983
1989, ANSI X3.159-1989 a végleges szabvány
X3J11 bizottság a C nyelv szabványosítására
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 classes
C nyelv
components templates
interpreted
exceptions
C++
.NET
C#
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 <windows.h> LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
#include <stdio.h> void main() { printf(„Hello, szoveges mod"); }
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() { printf("Hurra, programozunk!\n"); }
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(…);
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>,
); <- A kurzort pozicionálja a képernyőn (x<80, y<25)
gotoxy(40,12);
wait (); <- 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 */ //Fejlec #include <stdio.h> #include <progi1.h> //Program torzse void main() { //Udvozlet gotoxy(20,5);
printf(’’Udvozollek a programban\n\n”); idezet(); //egy kis agytrening osszead(123,321); //bucsuzas printf(’’Program vege, viszontlatasra.\n’’); } //vege
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:
Lehet egyszerű nevet adni:
Betük: a-z, A-Z Számok: 0-9 _
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
%d – egész %f – tizedesszám %s – szöveg %c – karakter
%5.2f
teljes hossz
tizedes számok
%% – kiír: %
\... – speciális karakter
\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...