Informatika2-2013

A MathWikiből
(Változatok közti eltérés)
(Feladat)
(2. Do / while ciklusok)
216. sor: 216. sor:
 
</c>
 
</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.
 
Í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.

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


Tartalomjegyzék

Tárgykövetelmények (BMETE91AM25)

Eladó/gyakvezető: Wettl Ferenc, Kovács Kristóf, Pálovics Róbert

Jelenléti követelmények: A legalább elégséges félévközi jegy megszerzésének szükséges feltétele legalább 10 laborgyakorlaton való részvétel, melyet a gyakorlat eleji kis zárthelyikkel ellenőrzünk. Egy laborgyakorlatról való hiányzás kivételes esetben valamely párhuzamosan meghirdetett megfelelő gyakorlaton való igazolt részvétellel pótolható.

Félévközi számonkérések:

  • 2 db 25 pontos zárthelyi dolgozat
    • 1. zh: 8. hét; pótlás: 14. hét, témája: C programozási nyelv
    • 2. zh: 13. hét; pótlás: 14. hét, témája: Python programozási nyelv
  • 12 db 5 pontos programozási feladat megoldása.
  • 10 db 1 pontos röpdolgozat megoldása

A félév végi osztályzat: Az elégtelentől különböző félévközi jegy elérésének feltétele ­ a jelenléti követelmények teljesítésén túl, hogy a zárthelyi dolgozatok elérjék a 10 pontot, a 8 legjobb programozási feladat mindegyike legalább 2 pont legyen, és a röpdolgozatokból összegyűljön 4 pont. Ekkor a félévközi jegy a zárthelyik, a röpdolgozatok és a 8 legjobb programozási feladat összpontszáma alapján az alábbi módon adódik:

  • 38 ponttól 54 pontig: elégséges (2)
  • 55 ponttól 69 pontig: közepes (3)
  • 70 ponttól 84 pontig: jó (4)
  • 85 ponttól 100 pontig: jeles (5)

Konzultációk: ZH előtt vagy szükség esetén.

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) */



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

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

#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;
}
2. Do / while ciklusok

Szintaktika:

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


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!

#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;
}

Feladat

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

#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