Informatika3-2024/Gyakorlat1

A MathWikiből
(Változatok közti eltérés)
36. sor: 36. sor:
 
* kitörlöd az utolsó } -t
 
* kitörlöd az utolsó } -t
 
* törlöd a "return 0;" sort
 
* törlöd a "return 0;" sort
 +
 +
== Feladatok ==
 +
 +
Minden feladathoz nyiss új projektet IDE-ben vagy írd új file-ba ha parancssorból dolgozol!
 +
 +
===== 1. Feltételes print =====
 +
Egészítsd ki a következő kódot a megjegyzések helyén!
 +
 +
<c>
 +
#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;
 +
}
 +
</c>
 +
 +
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):
 +
 +
<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! 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).
 +
 +
<c>
 +
#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;
 +
}
 +
</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>

A lap 2024. február 15., 00:09-kori változata

Tartalomjegyzék

C fordítás

Szabadon lehet bármilyen fordítót/IDE-t használni. Ha valakinek még nincs választása, ezeket tudom ajánlani:

  • gcc
    • Ha nagyon minimalisták akarunk lenni akkor lehet parancssorból fordítani és egy tetszõleges szövegszerkesztõben írni a programokat
    • Linux-ok nagy részén alapból telepítve van
    • Mac-en a "cc" parancs hasonlóan mûködik
    • Windows-on kicsit bonyolultabb vagy [cygwin https://www.cygwin.com/]-t, vagy a [w64devkit https://github.com/skeeto/w64devkit]-et ajánlom
  • codeblocks
    • Egyszerû opensource IDE
    • Van mind3 oprendszerre
    • Windows-on, ha még nincs C fordítónk akkor a codeblocks-#.#mingw-setup.exe-ot telepítsük ez egyben a codeblocks IDE és a mingw fordító

Ha megvan a fordítónk akkor próbáljuk meg lefordítani ezt a rövid C kódot:

#include <stdio.h>
int main() {
    int x = 2;
    printf("hello world! %d\n", x);
    return 0;
}
  • IDE-kben érdemes "Empty C project"-et létrehozni.
  • Ha a parancssoros gcc úton járunk akkor hozzunk létre egy új file-t hello.c néven, majd parancssorban: gcc hello.c -o hello
  • Parancssorban ezután a hello vagy hello.exe paranccsal tudjuk lefuttatni a lefordított programot. IDE-ben általában van egy Run parancs.
  • Aki parancssorban marad ajánlom a gcc -W -Wall hello.c -o hello fordítási módot, hogy lássunk figyelmeztetéseket is ne csak hibákat.

Szándékos hibák

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

Feladatok

Minden feladathoz nyiss új projektet IDE-ben vagy írd új file-ba ha parancssorból dolgozol!

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