Informatika2-2013/Gyakorlat01

A MathWikiből
(Változatok közti eltérés)
(Új oldal, tartalma: „== 1. gyakorlat == === C fordítás konzolban === ===== Első fordítás gcc-vel ===== Nyiss egy szövegszerkesztőt, és másold be egy új fájlba a "hello.c" kódj…”)
 
123. sor: 123. sor:
 
<br/>
 
<br/>
 
<br/>
 
<br/>
 
== 2. gyakorlat ==
 
 
===== 1. For ciklus =====
 
Segítségnek itt egy for ciklus példa: 0-tól 9-ig kiírjuk a számokat, vagyis a ciklusváltozó értékét (általában ''i''-nek vagy ''j''-nek nevezzük a ciklusváltozót, ami tipikusan minden körben növekszik eggyel, de persze máshogy is lehetne):
 
 
<c>
 
int i;
 
for (i=0; i<10; i++) {
 
    printf("A ciklusváltozo erteke: %d\n", i);
 
}
 
</c>
 
 
Egészítsd ki a következő kódot a megjegyzések helyén! Adjuk össze a számokat 1-tõl kezdve, egyesével, pl: 1 + 2 + 3 = 6. A programunk azt a számot adja ki, hogy az elsõ hány darab számot kell összeadni, hogy legalább 4212-t kapjunk.
 
 
<c>
 
#include<stdio.h>
 
 
int main(void) {
 
    /* változók deklarálása, értékadás */
 
    /* i-t is deklarálni kell ! */
 
   
 
    for (/* inicializálás */ ; /* feltétel */; /* minden ciklusmag végén */) {
 
        /* számolás */
 
    }
 
    /* kiírás */
 
    return 0;
 
}
 
</c>
 
 
===== 2. Do / while ciklusok =====
 
Szintaktika:
 
 
<c>
 
do {
 
    /* utasítások amik minden körben lefutnak */
 
} while (/* feltétel */);
 
</c>
 
 
<c>
 
while ( /* feltétel */ ) {
 
    /* utasítások amik minden körben lefutnak */
 
}
 
</c>
 
 
 
A következõ kód a felhasználótól egy ciklusban egész számokat kér be addig, amíg 0 értéket nem kap. Ekkor pedig kiírja a képernyőre a kapott nemnulla számok átlagát!
 
 
<c>
 
#include<stdio.h>
 
 
int main(void) {
 
    int i = 0;
 
    float sum = 0;
 
    int szam = 0;
 
 
    do{
 
        scanf("%d", &szam);
 
        sum += szam;
 
        i++;
 
    } while(szam != 0);
 
 
    i--;
 
    printf("%f", sum / i);
 
 
    return 0;
 
}
 
</c>
 
 
<b>Feladat</b>
 
 
Írjunk az elõzõ példa mintájára egy programot, ami a felhasználótól egész számokat kér be, amíg egymás után két azonos számot nem kap. Ha ez megtörtént, akkor írja ki, hogy hány számot adtunk be.
 
 
Most talán segít, ha már a cikluson kívül is kérünk be elõre számokat, és nem hátultesztelõs ciklust használunk, de azzal is kényelmesen meg lehet oldani, sõt for ciklussal is.
 
 
===== 3. Sakktábla =====
 
 
Rajzolj ki egy ''NxN''-es sakktábla mintát, ahol X-szel jelöljük a fekete mezőket, és üresen hagyjuk (egy szóköz) a fehéreket. Nem kell keretet adni a táblának. A sakktábla méretét (''N'') a felhasználótól kérd be!
 
 
Tipp: a ciklusokat egymásba is ágyazhatjuk, de ilyenkor nagyon kell figyelni a ciklusváltozókra!
 
 
Egymásba ágyazott ciklus példa:
 
<c>
 
#include<stdio.h>
 
 
int main(void) {
 
    int i;
 
    int j;
 
 
    for(i = 0; i < 10; i++) {
 
        printf("i: %d \n", i);
 
        for(j = 0; j < i; j++) {
 
            printf(" (%d, %d) ", i, j);
 
        }
 
        printf("\n");
 
    }
 
    printf("\n");
 
}
 
</c>
 
 
<!-- Még nem a teljes 2. gyakorlat -->
 

A lap 2013. február 15., 15:15-kori változata

Tartalomjegyzék

1. gyakorlat

C fordítás konzolban

Első fordítás gcc-vel

Nyiss egy szövegszerkesztőt, és másold be egy új fájlba a "hello.c" kódját:

#include <stdio.h>
int main() {
    int x = 2;
    printf("hello world! %d\n", x);
    return 0;
}

Nyiss egy konzolt és menj abba a könyvtárba (cd paranccsal) ahová elmentetted a "hello.c"-t.

Fordítsd le, készíts "hello" nevű futtatható fájlt:

gcc -o hello hello.c

Futtasd le a kapott programot!

Második fordítás gcc-vel

Mostantól használjuk a gcc warning-kapcsolóit, hogy lássuk a kisebb hibákat, figyelmeztetéseket is!

gcc -W -Wall -o hello hello.c

Rontsd el a "hello.c" kódot a következő módokon, majd mindig mentsd el és fordítsd le újra (és a következő elrontás előtt mindig állítsd vissza a helyes verziót):

  • törölsz egy pontosvesszőt a sor végéről
  • a printf-es sorban x helyett valami más betűt írsz
  • létrehozol egy y nevű egész típusú változót az x után, de nem használod a kódban
  • kitörlöd az utolsó } -t
  • törlöd a "return 0;" sort
  • töröld a legelsõ #include sort


CodeBlocks használata

Használat

  • A feladatokhoz hozzatok létre mindig egy új üres file-t (File / New / Empty file), ezt mindenképpen .c kiterjesztéssel mentsétek el pl: feladat1.c.
  • Fordítani a Build / Build-el tudtok, vagy a megfelelõ ikonnal, a lefordított programot a Build / Run -al indíthatjátok, vagy egyszerûbben F9-el fordíthattok majd utána azonnal indíthatjátok is a programot.


CodeLite használata

Beállítások

  • Indítsd el a CodeLite fejlesztői környezetet!
  • Állítsd át az indentálást (tabulálást/beljebbezést) a Settings -> Global Editor Preferences menüpont alatt a General -> Indentaiton résznél hogy ne használjon tab karaktereket
  • Hozz létre egy új Workspace-et és benne egy új projektet (mindenképp külön könyvtárban: Create the project under a separate directory legyen bepipálva), segítség itt az oldal vége felé

Használat

  • Minden feladat megoldását új projektbe kell tenni, hogy a main() függvények ne ütközzenek (egy projekten belül nem lehet több belőle).
  • A narancssárga az aktív projekt a workspace-en belül. Ha menüből kiválasztod a fordítást (Build -> Build project vagy F7 billentyű) akkor ez mindig az aktív projektet fogja lefordítani, ha épp másik file van megnyitva a szerkesztődben, akkor is! Ugyanígy a futtatásnál is (menüből Build -> Run vagy Ctrl-F7) az aktív projekt main() függvénye fog lefutni!


Feladatok

Minden feladatot új file-ba mentsd a CodeBlocks-ban (esetleg Codelite-ban új project-be)!

1. Feltételes print
Segítség

A következõ egy egyszerû feltétel, leteszteli hogy 'x' nulla vagy nem, majd kiírja a számot:

#include<stdio.h>
 
int main(void) {
    int x = -5;
 
    if(x == 0){
        printf("Nulla");
    } else{
        printf("Nem nulla");
    }
    printf("A szam: %d \n\n", x);
 
    return 0;
}

Egészítsd ki a következő kódot a megjegyzések helyén!

#include<stdio.h>
 
int main(void) {
    /* x és y változók deklarálása, értékadás */
 
    printf("X erteke: %d\n", x);
    printf("Y erteke: %d\n", y);
 
    printf("\n");
 
    /* egy feltételes utasítással (if, else if, else) érd el hogy mindig igaz állítás kerüljön a képernyőre */
    printf("%d nagyobb mint %d!\n", x, y);
    printf("%d nagyobb mint %d!\n", y, x);
    printf("%d ugyanannyi mint %d!\n", x, x);
 
    return 0;
}

Ha kész, módosítsd úgy a kódot, hogy ne legyen beleírva az elején az x és az y értéke, hanem a program a felhasználótól kérjen be egész számokat, a scanf() függvény segítségével! Példa egy z egész típusú változó bekérésére:

    int z;
    printf("Add meg z értékét: ");
    scanf("%d", &z);
    /* innentől z-nek van értéke (ha a felhasználó tényleg egész számot adott meg) */



Személyes eszközök