Informatika2-2013

A MathWikiből
(Változatok közti eltérés)
(2. Do / while ciklusok)
22. sor: 22. sor:
  
 
'''Konzultációk:''' ZH előtt vagy szükség esetén.
 
'''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:
 
<c>
 
#include <stdio.h>
 
int main() {
 
    int x = 2;
 
    printf("hello world! %d\n", x);
 
    return 0;
 
}
 
</c>
 
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:
 
 
<code>
 
gcc -o hello hello.c
 
</code>
 
 
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!
 
 
<code>
 
gcc -W -Wall -o hello hello.c
 
</code>
 
 
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
 
 
<br />
 
 
=== 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.
 
 
<br />
 
 
=== 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 [http://www.math.bme.hu/~kkovacs/codelite/codelite_install.html 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!
 
 
<br />
 
=== 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:
 
 
<c>
 
#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;
 
}
 
</c>
 
 
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>
 
 
<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., 16:14-kori változata


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.

Személyes eszközök