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