A programozás egy tipikusan olyan dolog amihez sok gyakorlásra szükség van ahhoz hogy megfelelően el tudjuk sajátítani. Ehhez kezdetben, a hiányos fogalmi készlet miatt mankókra, vázakra lehet szükség - és hogy ezek hogy jönnek ki, azt elég lesz később felfedni, mikor már biztosan tudjuk használni őket.
- Alapadatok, a rendszer előkészítése
- Az első C program megírása, és lefordítása
- A változók
- Egy téglalap jellemzőinek kiszámítása
1, Alapadatok, a rendszer előkészítése
A C nyelvben előállított programjaink sokáig szöveges módú alkalmazások lesznek, melyekben szövegeket írhatunk ki illetve kérhetünk be - hasonlóan a Parancssorhoz:
Ezekre a programokra szintén jellemző, hogy egyetlen ikon nélküli .EXE fájl fogja a kész alkalmazást tartalmazni, amit közvetlenül elindíthatunk dupla kattintással (természetesen ez a megállapítás Windows alatt érvényes):
Ahhoz hogy ilyen alkalmazást állítsunk elő célszerű valamilyen IDE-t beszerezni. Az IDE egy olyan programcsomag, ami önmagában egy szövegszerkesztő, de minden más eszközt is tartalmaz, amivel a szövegfájlból előállítható lesz .EXE fájl.
1a, Az IDE kiválasztása (elöljáróban)
Ha most fogsz először programozni, személy szerint a Code::Blocks lesz az, amelyiket talán a legkönyebben meg lehet tanulni, ezen IDE-k közül.
Ettől eltekintve akár olyat is lehet választani, ami nem szerepel a listán - ugyanakkor ezzel nem biztos hogy megkönnyíted a saját dolgodat.
- Borland C++
Egy nagyon régi, de nagy tudású IDE - mivel DOS alapú legfeljebb Windows XP alatt fut el helyesen. - Code::Blocks
Egy modern felületű, kellemesen használható IDE. - Bloodshed Dev-C++
Egy nagyon kicsi és gyors IDE. Mivel kissé régi, Windows 8, illetve újabb rendszerek alatt kis barkácsolást igényelhet (leírás itt).Beállítása nem egyszerű, de ha sikerül egy nagyon kezes kis program - emiatt inkább csak haladóknak ajánlott.
- Borland/CodeGear/Embarcadero C++ Builder
Egy komplett programcsomag, amit a kezdőktől a profikig bárki tud hasznosítani. Hátránya hogy elég nagy. - Microsoft Visual
Studio
Egy komplett programcsomag, amit a kezdőktől a profikig bárki tud hasznosítani. Hátránya hogy elég nagy.Ha a szabvány C-vel szeretnénk megismerkedni, ez nem a mi csomagunk - amit használ nem a szabványos, így sok esetben más IDE-k alatt nem fut le a kód.
Kezdőknek nem ajánlott - az a C verzió amit használ nem a szabványos, így sok esetben más IDE-k alatt nem fut le a kód.
Habár néha produkál fura dolgokat, kezdők számára ez a leginkább ajánlott.
A mellékelt csomag a grafikai függvénytárakat, a fordítót, stb. tartalmazza - annyi a plusz hogy indítása a CbLauncher.exe állománnyal kell történjen.
Ha a szabvány C-vel szeretnénk megismerkedni, ez nem a mi csomagunk - amit használ nem a szabványos, így sok esetben más IDE-k alatt nem fut le a kód.
Ha ennyi adatból nem tudsz dönteni, akkor esetleg érdemes lehet szétnézni itt is - bár ez a cikk igazából későbbi fejezetekhez van szánva.
2, Az első C program megírása és lefordítása
Miután feltettük a kiválasztott IDE-t, itt az idő hogy elkészítsük az első programot. A leírás Code::Blocks (továbbiakban CB) alá fog szólni.
Megjegyzés: Némelyik böngészőből másolva, a CB hibát ír ki a példára - ez a másolás közben keletkezik - ilyenkor kézzel kell átgépelni a programokat. Az átgépeléskor célszerű a Space nyomkodása helyett, a Tab billentyűt használni - erre a CB direkt fel van készítve.
Tipp: Mivel a speciális karaktereket (AltGr + <betű>) használni fogjuk a programozás során, a CB beállításaiban távolítsuk el az összes (Ctrl + Alt + <bármi>) betűkombinációt. Ezek után már be tudjuk majd írni pl. a szögletes zárójelet stb. [Settings > Editor > Keyboard Shortcuts]
Ahhoz hogy a programunk megírását elkezdjük, nyitni kell egy új üres fájlt - ezt a menüben tehetjük meg: [File > New > Empty file], vagy a Ctrl+Shift+N kombinációval.
Ha ezzel megvagyunk, akkor mentsük el [Ctrl+Shift+S] az új üres fájlt - "valami.c" néven. Természetesen maga a név változtatható, de hogy .C-re végződjön az fontos. Ez után megkezdhetjük a programozást.
2a, Az első C program váza
Ezek a C programok eleinte egy kaptafára fognak menni, méghozzá az alábbi szerkezet szerint:
#include
<stdio.h> int main() { /* ide kerülhet a kód */ return 0; } |
A programunkba bármikor tehetünk megjegyzéseket, a /* ... */ jelek között, illetve egysoros megjegyzést is a //... segítségével.
A megjegyzésbe írt szakasz nem fog számítani programozási szempontból - magunknak könnyíthetjük meg a program olvasását vele.
Ha ezt a sémát bemásoljuk a CB-be, akkor a programunk máris lefuttatható a Build and Run [F9] segítségével (kék karikával van jelölve a képen alább).
Természetesen, ez a program még nem csinál semmit - csak elindul és kilép, de már is van egy saját készítésű .EXE fájlunk.
Tipp: Ha a vírusirtó beriaszt, annak két oka van - az egyik hogy a CB nem hivatalos helyről lett beszerezve, és így káros kódokat is tartalmazhat - a másik hogy szar a vírusirtó. Ha biztosak vagyunk abban hogy az eredeti oldalról szedtük le, telepítőkészlettel - akkor legjobb esetben kikapcsolhatjuk a vírusirtót.
Megjegyzés:
A programunknak nem része ez a két sor:
Process returned 0 (0x0) execution time : 0.056 s
Press any key to continue.
Ha továbbadjuk a .EXE fájlt, ez nem fog megjelenni - ez csak
addig van amíg CB alól dolgozunk. Ezen felül a program nem fogja megvárni hogy
leüssünk egy billentyűt a kilépéshez CB nélkül, erre később még lesz megoldás.
3, A változók
A változók a programozás alapjai, hogy miért ez nem sokára kiderül.
A feladat az alábbi, add össze a négyet és a hatot. Mennyi az eredmény? 6
Itt nem is igazán a feladat a lényeg, hanem az hogy össze tudd adni a két számot, meg kell jegyezni fejben - ez főleg akkor igaz ha szóban hangzanak el:
Melyik volt az első összeadandó szám? 4
A programozásban a változók ezt a célt szolgálják - adatok megjegyzését.
Habár fejben nem töprengünk azon hogy milyen jellegű az adat, a programozás során kell. Ezt a jelleget típusnak nevezzük, és ezek közül válaszhatunk (egyelőre):
- int: egész szám
- float: valós szám
- char: egyetlen billentyű/betű
- char*: szöveg
Vagyis ezen két szám összeadásához kézenfekvő az int használata, de akkor sem követünk el hibát ha a float típust használjunk.
A változó úgy épül fel, hogy van egy típusa, egy neve és egy pillanatnyi értéke.
Ez az érték bármikor megváltozhat, de csak ha mi utasítást adunk rá - és főként a változó nevével lesz elérhető.
A változó felvétele az alábbi módon történhet:
int
szam; int szam2 = 9; |
Egy ilyen felvételt nevezünk változódeklarációnak - az hogy szam2 csakis a deklaráció sorától létezik. Változódeklaráció történhet a program bármelyik sorában, ahol kódot tartalmazhat.
A változó neve, csak angol ABC-ből, az aláhúzásjelből ("_"), és számokból állhat, de nem kezdődhet számmal - egyébként a CB hibát fog jelezni.
Mint az a példából látható, megadhatunk kezdőértéket is, ha gondoljuk - ha nem adunk meg akkor az teljesen véletlenszerű lesz.
A változó értéke bármikor átírható, illetve akár számításokhoz is használható:
szam =
4; szam2 = 5; int osszeg = szam + szam2 + 1; //4 + 5 + 1 |
Egyszerre akár többet is fel lehet venni egy lépésben:
int
szam1, szam2, szam3; int szam1 = 2, szam2 = 5, szam3; |
Tipp: Gyakori hiba hogy az utasítást záró pontosvessző lemarad - ha a CB hibát jelez, keressük meg a hiányzó pontosvesszőket.
3a, Egy változó/szöveg kiíratása
Tipp: A különböző utasítások, stb. beírását nagyon meggyorsíthatja az automata kiegészítés és így az elgépeléstől is védve leszünk:
- Ctrl+Shift+Space: az begépelt utasítás által bekért adatok megjelenítése
- Ctrl+Space: a rendelkezésre álló változók/utasítások/stb... listája
- Ctrl+J: különféle előre begépelt, ismétlődő mintázatok (később pl. for ciklus)
A listában a nyilakkal lehet kiválasztani a szükséges elemet, illetve az elején lévő további betűk begépelésével. Ha megvan a keresett elem az <ENTER> billentyű beírja a hozzá tartozó dolgokat.
A változók kiíratásához egy utasítást fogunk kiadni, a printf nevezetűt.
Íme egy gyakori kezdőknek szánt program:
#include
<stdio.h> int main() { printf("Az alma zold."); return 0; } |
Ez kiírja azt a szöveget hogy "Az alma zold". Itt több megfigyelés is tehető:
- A C-ben a szöveg mindig "..." jelek között van, míg a szám nem. (egyetlen betű esetén sima '...' jelek között lesz)
- A szövegben nem használtam ékezetet - kipróbálható, nem fog helyesen megjelenni
Ez a program már többet tud elődjénél - de nem sokkal - pl. jó lenne ha valamilyen adatot ki is írna.
Erre természetesen lehetőség van, csak azt kell megadni a printf-nek hogy hova helyettesítse be az adatot:
- int esetén: %d jellel
- float esetén: %f jellel
- char esetén: %c jellel
- char* esetén: %s jellel
A százalékjel beszúrása emiatt a formula miatt most már csak a %% jellel tehető meg.
#include
<stdio.h> int main() { int szam1 = 5, szam2 = 6; printf("A ket szam erteke %d es %d.", szam1, szam2); return 0; } |
A helyettesítés helyének megadása után, csak fel kell sorolni a helyettesítendő adatokat - ez a példa így működik:
Esetenként speciális karakterekre is szükségünk lehet, mint a sortörés ("\n"), vagy a tabulátor ("\t"), esetleg egy hangjelzésre ("\a"). Ezek bárhol beékelhetőek a szövegbe - lásd példa.
#include
<stdio.h> int main() { int szam1 = 5, szam2 = 6; printf("Az elso szam erteke: %d\nA masodik szam erteke: %d.", szam1, szam2); return 0; } |
Természetesen mivel most már a \ jel is foglalt, kiírásához kettő kell (\\). A dupla idézőjel is speciális karakter, így hát a szövegbe ékelése a \" módon történhet.
3b, Egy változó beolvasása
Természetesen nem érdemes olyan adatokra programot írni, amik előre meg lettek adva, ezért gyakran szükséges hogy begépelhessünk futás alatt adatokat.
Erre szolgál a scanf, ahol először meg kell adni az adat jellegét - a printf módjára szövegesen, míg végül a változót amibe kérjük - viszont itt kell elé egy & jel. Ennek hiányában a program összeomlik - hogy miért kell a későbbi fejezetekből kiderül.
Megjegyzés: Nem megfelelő helyettesítés szintén összeomlást idézhet elő - pl. int típushoz, %f használata a %d helyett
Íme egy példa, amivel hosszas leírás tehető feleslegessé:
#include
<stdio.h> int main() { int szam1, szam2; printf("Az elso szam erteke: "); scanf("%d", &szam1); printf("A masodik szam erteke: "); scanf("%d", &szam2); printf("A ket szam erteke %d es %d.", szam1, szam2); return 0; } |
Miután kiíródik "Az elso szam erteke: " sor, a program arra vár hogy mi írjuk be a számot - ezt egy villogó aláhúzásjellel ("_") jelzi, amit a továbbiakban kurzornak nevezünk.
Ha beírtuk a számot, és <ENTER>-t ütöttünk, kijön a következő sor - "A masodik szam erteke: ". Ekkor megadhatjuk azt is, az előző módjára.
Ha jól lett bemásolva a program, akkor eljutunk eddig - nem lép ki hamarabb, és a CB sem jelez hibát - akkor kiírja a két szám értékét.
Ezek alapján most már egy jó kis program tervezhető - erről szól a 4, rész.
4, Egy téglalap jellemzőinek kiszámítása
Most már mindent tudunk hogy megírjunk egy téglalap adatait számoló programot - íme:
#include
<stdio.h> int main() { int a_oldal, b_oldal, ter, ker; printf("Teglalap adatainak szamitasa\n\n"); printf("Kerem az 'a' oldalt [mm]: "); scanf("%d", &a_oldal); printf("Kerem a 'b' oldalt [mm]: "); scanf("%d", &b_oldal); ter = a_oldal * b_oldal; ker = 2 * (a_oldal + b_oldal); printf("\nA teglalap kerulete: %d\nA teglalap terulete: %d", ker, ter); return 0; } |
Már csak egy probléma van a programmal - ha CB nélkül indítjuk el azonnal kilép a kiírás után, és nem lehet elolvasni az eredményt - míg ilyenkor megvárja amíg elolvassuk és lenyomhatunk egy billentyűt a kilépéshez.
Ugyanezen minta eléréséhez a return 0; sor elé szúrjunk be egy getchar(); sort is. Ennek hatására, a CB nélkül is így fog viselkedni:
/* ... lásd
fentebb ... */ printf("\nA teglalap kerulete: %d\nA teglalap terulete: %d", ker, ter); getchar(); return 0; } |
Természetesen a módosítások érvénybe léptetéséhez mentsünk, illetve nyomjuk meg az indítás gombot még egyszer. Ezek után csak annyi a dolgunk hogy terjesszük a programot:
- ez történhet .EXE fájl által - ekkor előjöhet a másik gépen is a vírusirtós gebasz
- vagy történhet .C fájl által - ekkor a másik gépen kell CB, vagy más IDE
A megoldás rajtunk múlik, de a program működik és ez a lényeg.
Tipp: Ha ez volt az első komolyabb programunk, akkor
érdemes megszokni azt hogy minden futtatás előtt nyomjuk meg a
Ctrl+Shift+S kombinációt. Mint a cikk elején erről
szó volt a CB sem 100%-ig stabil és ha összeomlik, így csak a munkánk 10%-át
kell újraírni az még mindig kevesebb mint a 100%.
Ez most még nem nagy dolog hiszen kimásolod újra és kész, de mikor már magadtól
írod meg, akkor tényleg gondot okozhat ha elveszik a kódod.