Informatika2-2012/Gyakorlat01

A MathWikiből
(Változatok közti eltérés)
(Feladatok)
a (5. Sakktábla)
 
(egy szerkesztő 7 közbeeső változata nincs mutatva)
54. sor: 54. sor:
 
Minden feladathoz nyiss új projektet a CodeLite-ban!
 
Minden feladathoz nyiss új projektet a CodeLite-ban!
  
===== Feltételes print =====
+
===== 1. Feltételes print =====
 
Egészítsd ki a következő kódot a megjegyzések helyén!
 
Egészítsd ki a következő kódot a megjegyzések helyén!
  
77. sor: 77. sor:
 
</c>
 
</c>
  
===== For ciklus =====
+
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:
 +
 
 +
<c>
 +
    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) */
 +
</c>
 +
 
 +
===== 2. 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):
 
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):
  
102. sor: 111. sor:
 
     }
 
     }
 
     return 0;
 
     return 0;
 +
}
 +
</c>
 +
 +
===== 3. Do / while ciklusok =====
 +
 +
Írj C kódot, ami a felhasználótól egy ciklusban egész számokat kér be addig, amíg 0 értéket nem kap. Ekkor pedig írja ki a képernyőre a kapott nemnulla számok átlagát!
 +
 +
Segítség a nem egész értékű változó (''atlag'') kiírásához:
 +
<c>
 +
    printf("%f", atlag);
 +
</c>
 +
 +
Oldd meg a feladatot ''do-while'' (hátultesztelő) és ''while'' (elöltesztelő) ciklussal is!
 +
 +
<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>
 +
 +
===== 4. Egyszerű gyökkeresés =====
 +
 +
Egészítsd ki a következő kódot, amely megkeresi az 5329 négyzetgyökét (lesz neki, és egész)!<br\>
 +
(Segítség: nem kell hogy haténkony legyen a kód, elég ha egyesével végigpróbálgatjuk a számokat hogy az-e a gyöke.)
 +
<c>
 +
#include<stdio.h>
 +
 +
int main(void) {
 +
    int szam = 5329;
 +
    int gyok;
 +
    /* szamolj valamilyen ciklusban, valoszinuleg egy feltetel is kell majd a cikluson belul */   
 +
 +
    printf("A %d gyoke %d\n", szam, gyok);
 +
    return 0;
 +
}
 +
</c>
 +
 +
===== 5. 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>
 
</c>

A lap jelenlegi, 2012. február 9., 11:05-kori változata

Tartalomjegyzék

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


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 feladathoz nyiss új projektet a CodeLite-ban!

1. Feltételes print

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) */
2. 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):

int i;
for (i=0; i<10; i++) {
    printf("A ciklusváltozo erteke: %d\n", i);
}

Egészítsd ki a következő kódot a megjegyzések helyén! Egy-egy külön változóban legyen a ciklusváltozó kezdőértéke (start_i) és utolsó értéke (end_i), adj nekik értéket!

A for ciklusban i legyen a ciklusváltozó, és az értéke hármasával növekedjen vagy csökkenjen (attól függően hogy start_i vagy end_i a nagyobb).

#include<stdio.h>
 
int main(void) {
    /* start_i és end_i változók deklarálása, értékadás */
    /* i-t is deklarálni kell ! */
 
    for (/* inic. */ ; /* feltétel */; /* minden ciklusmag végén */) {
        printf("%d\n", i);
    }
    return 0;
}
3. Do / while ciklusok

Írj C kódot, ami a felhasználótól egy ciklusban egész számokat kér be addig, amíg 0 értéket nem kap. Ekkor pedig írja ki a képernyőre a kapott nemnulla számok átlagát!

Segítség a nem egész értékű változó (atlag) kiírásához:

    printf("%f", atlag);

Oldd meg a feladatot do-while (hátultesztelő) és while (elöltesztelő) ciklussal is!

do {
    /* utasítások amik minden körben lefutnak */
} while (/* feltétel */);
while ( /* feltétel */ ) {
    /* utasítások amik minden körben lefutnak */
}
4. Egyszerű gyökkeresés

Egészítsd ki a következő kódot, amely megkeresi az 5329 négyzetgyökét (lesz neki, és egész)!
(Segítség: nem kell hogy haténkony legyen a kód, elég ha egyesével végigpróbálgatjuk a számokat hogy az-e a gyöke.)

#include<stdio.h>
 
int main(void) {
    int szam = 5329;
    int gyok;
    /* szamolj valamilyen ciklusban, valoszinuleg egy feltetel is kell majd a cikluson belul */    
 
    printf("A %d gyoke %d\n", szam, gyok);
    return 0;
}
5. 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:

#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");
}
Személyes eszközök