menu
shopping_cart
0
KOSÁR

15. lecke

A gondolkodó program

lightbulb_outlineGyakorló feladatok az IF programszerkezettel kapcsolatban.

Következzen most néhány érdekes IF programszerkezettel kapcsolatos feladat, amikor a program saját maga dönt.

Pozitiv / Negativ

Kérjünk be a felhasználótól egy egész számot és döntsük el, hogy az pozitív, negatív vagy nulla!

#include<stdio.h>

int main(){

    int szam;

    scanf("%d", &szam);

    if(szam < 0){ printf("Negativ"); }
    if(szam > 0){ printf("Pozitiv"); }
    if(szam == 0){ printf("Nulla"); }

return 0;
}

pozitivnegativ.c c -77 Negativ

A három feltétel közül csak 1 fog teljesülni.

Sumo verseny

A helyi Sumo edző megkért arra, hogy írj egy egyszerű programot, ami eldönti, hogy ki indulhat a felnőtteknek szánt versenyen. A versenyző 120 kiló súly felett indulhat, ez alatt pedig nem.

#include<stdio.h>

int main(){

    int suly;

    scanf("%d", &suly);

    if(suly >= 120){ 
        printf("Indulhat"); 
    }

    if(suly < 120){ 
        printf("NEM indulhat"); 
    }

return 0;
}

sumo.c c 135 Indulhat

Ez egy igen különleges helyzet, mert a két feltétel egymás "ellentettje".

IF-ELSE

Az előbb látott példában több IF programszerkezetet láttunk. Az a különleges helyzet állt elő, hogy ha az egyik igaz, például az első, akkor a második feltétel biztos hamis lesz – és fordítva. Az ilyen ellentétes dolgokat leírhatjuk két külön IF programszerkezettel is, ahogy fent láttad, de hát ki szeret annyit gépelni? Ennek leírására a C-ben létezik egy tömörebb nyelvi elem, az IF-ELSE programszerkezet:

if( feltétel ){ igazparancsok } else { hamisparancsok }

Az IF-ELSE szerkezet úgy működik, HA a feltétel igaz, AKKOR végrehajtja az első, úgynevezett igaz blokkban lévő parancsokat – KÜLÖNBEN a második hamis blokkban lévő parancsokkal dolgozik.

#include<stdio.h>

int main(){

    int suly;

    scanf("%d", &suly);

    if(suly >= 120){ 
        printf("Indulhat"); 
    } else { 
        printf("NEM indulhat"); 
    }

return 0;
}

sumo2.c c 50 NEM indulhat

Az "else" angol szó azt jelenti magyarul, hogy "különben". Ezért is szép a programozás, hogy szinte egy teljes magyar modatot írtunk le, csak használtunk benne zárójeleket is. A fenti kód így hangzik:

Ha a szumós 120 kg felett van, akkor indulhat - különben NEM indulhat.

Tehát Csak egyszer kell egy feltételt leírni az elején, a sima zárójelek között – az ellentettjének megfogalmazásán nem kell egy másodpercet sem gondolkodni, hanem csak be kell pötyögni az ”else” szót – a többi a fordító elintézi. Ez hasznos lesz számunkra később.

Adél és Béla pénze

Adél és Béla igen torkosak. Szeretnének venni banános nyaflatyot úgy, hogy összedobják a pénzüket, és elmennek a közeli cukrászdába. A banános nyaflaty ára 500 forint. Írj programot, ami megkérdezi, hogy mennyi Adél és Béla pénze, és kiírja, hogy meg tudják-e venni az édességet vagy sem!

#include<stdio.h>

int main(){

    int a,b;

    printf("Mennyi pénze van Adélnak?\n");
    scanf("%d", &a);

    printf("Mennyi lóvéja van Bélának?\n");
    scanf("%d", &b);

    if( a + b >= 500){
        printf("Meg tudjak venni!");
    } else{  
        printf("NEM tudjak megvenni!");
    }

return 0;
}

adelbela.c c 200 350 Meg tudjak venni!

És, Vagy

Az eddigi feltételeink nagyon egyszerűek voltak. Az élet viszont hozhat olyan szituációt, amikor 1 db feltétel megadása nem elegendő, hanem többet kell összekombinálni, hogy megszülessen a tökéletes program. Nem csak a korábban megismert operátorokat használhatjuk a feltételek leírása során

(<, >, <=, >=, ==, !=)

hanem ezeket is:

&&  ÉS
||  VAGY

Ha több feltételt akarunk összekapcsolni, és azt szeretnénk, hogy mindegyik teljesüljön, akkor használjuk az AltGr+C billentyűkombinációval elérhető && kiolvasva ÉS kapcsolatot, így ekkor az egyik ÉS a másik feltételnek is egyaránt teljesülnie kell.

Ha nem fontos, hogy a feltételek egyszerre teljesüljenek, akkor használjuk az AltGr + W billenyűkombinációval elérhető || kiolvasva VAGY kapcsolatot.

Fontos, hogy egyszerre maximum 2 dolgot tudunk összekapcsolni ezekkel a jelekkel, nem lehet végtelen hosszú logikai kapcsolatokat definiálni. Na lássunk egy példát:

Kristály kotyvasztás

Walter White a helyi kémikus egy furcsa kék vegyületet próbál kotyvasztani, amit csak lazán "kristály"-nak hív otthon. A kristály előállításához pontosan 3%-os bór oldalt kell, de jó a tiszta (100%) kénsav is. Ezen kívül kell még minimum 5g nátrium, amiből maximum 10 g-ot lehet belerakni attól függően, hogy mennyire erős végeredményt akarunk. Írjunk egy programot, ami az anyag beszállítónak segít eldönteni, a betáplált adatok alapján, hogy jók-e a mennyiségek egy adag elkészítéséhez!

A programba be kell majd írni a bór és a kénsav koncentrációját illetve a nátrium mennyiségét. Ezek mindegyike egy számadat, és az egyszerűség kedvéért tároljuk el őket egy int (egész szám) változóban. Nézzük, hogy milyen feltételeket tudunk kiolvasni a cseppet sem hétköznapi történetből:

  • bór = 3 %

  • kénsav = 100 %

  • nátrium >= 5 g

  • nátrium <= 10 g

Az első két anyagmennyiség között VAGY kapcsolat van, mert nem szükséges mindkét anyagból a pontos töménységet beszerezni, elég csak az egyiket, hisz így is elkészülhet a kristály. Bár az sem gond, ha mindkettő megvan. A nátrium tömegeket leíró feltételek között ÉS kapcsolat van, mert mindkét határnak egyszerre kell teljesülnie, hisz se az 5 g-os minimum se a 10 g-os maximum határt nem léphetjük át.

  • (bór = 3 % VAGY kénsav = 100 %)

  • (nátrium <= 5 g ÉS nátrium >= 10 g)

Az így alkotott két "feltételcsomag" között pedig ÉS kapcsolat van, mert szintén mindkettő hatását egyszerre akarjuk élvezni, tehát az egyik ÉS a másik feltételcsomagnak is teljesülnie kell.

(bór = 3 % VAGY kénsav = 100 %) ÉS (nátrium >= 5 g ÉS nátrium <= 10 g)

A rövidség kedvéért a programban a bór, a kénsav és nátrium anyagneveket b,k és n betűkkel jelöljük. A magyarul leírt logikai kapcsolatokat helyettesítsük a programkódban az && illetve || jelekkel. Megtanultuk, hogy vizsgálódáskor kettő darab egyenlőség jelet == kell használni. A feltételrendszer a programban így fog kinézni:

(b == 3 || k == 100) && (n >= 5 && n <= 10)

Az ÉS kapcsolatok körüli zárójelek elhagyhatók.

(b == 3 || k == 100) && n >= 5 && n <= 10
#include<stdio.h>

int main(){

    int b, k, n;

    printf("Add meg a bór töménységét!\n");
    scanf("%d", &b);

    printf("Add meg a kénsav töménységét!\n");
    scanf("%d", &k);

    printf("Add meg a a nátrium tömegét!\n");
    scanf("%d", &n);

    if( (b == 3 || k == 100) && n >= 5 && n <= 10 ){
        printf("Megfelelő mennyiség");
    } else {
        printf("NEM ELÉG");
    }

return 0;
}

kristaly.c c 3 12 7