A legelső C program elkészítése



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.

  1. Alapadatok, a rendszer előkészítése
    1. Az IDE kiválasztása (elöljáróban)
  2. Az első C program megírása, és lefordítása
    1. Az első C program váza
  3. A változók
    1. Egy változó/szöveg kiíratása
    2. Egy változó beolvasása
  4. 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.

  • 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.

  • Code::Blocks
    Egy modern felületű, kellemesen használható IDE.

  • 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.

  • 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.

  • 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.

  • 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.

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ő:

  1. 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)
  2. 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.