Informatika3-2024/Gyakorlat1

A MathWikiből

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ó
  • online c fordító
    • Ha nagyon sürgõsen kell és nincs idõ semmit telepíteni

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

Így néz ki egy if, else if, else utasítás:

if (/* feltétel */) {
    /* parancsok */
} else if (/* feltétel */) {
    /* parancsok */
} else {
    /* parancsok */
}

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 úgy hogy 1-tõl 100-ig a páros számokat írja ki.

#include<stdio.h>
 
int main(void) {
    /* deklarációk és értékadások */
 
    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) float tipusú legyen, majd a kiírása:

    printf("%f", atlag);

Példa while ciklusra:

while ( /* feltétel */ ) {
    /* utasítások amik minden körben lefutnak */
}

Létezik do-while ciklus is, ami egyszer mindig lefuttatja a magját és csak utána kezdi teszteni a feltételt:

do {
    /* utasítások amik minden körben lefutnak */
} while (/* feltétel */);


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");
}


Extra feladatok

Ha eddig eljutottunk, vagy unalmasnak találtuk a fenti feladatokat, akkor leprogramozhatjuk a példákat az elsõ elõadásról. Vagy ránézhetünk ezekre a bonyolultabb feladatokra.

6. Relatív prímek

Írjunk programot mely bekér két pozitív egész számot (n, m), majd kiírja az n-el relatív prím számokat 0-tól m-ig.

7. Gyök

Írjunk programot mely bekér egy pozitív számot és visszaadja a gyökét 0.0001 pontossággal.

8. Barkóba

Írjunk programot mely a barkóba játékot szimulálja. A játékosnak gondolnia kell 0 és 100 között egy egész számra. A program feltesz egy kérdést a játékosnak, amire a játékos 0 (nem) vagy 1 (igen)-el válaszolhat. Majd addig tesz fel kérdéseket amíg biztosan meg tudja mondani hogy mi volt a gondolt szám, ekkor azt kíírja. (Hogyan tudjuk a leggyorsabban megtalálni a számot?)

Személyes eszközök