menu
shopping_cart
0
KOSÁR

8. lecke

Valós változók

lightbulb_outlineA valós számok eltárolása

Az előző fejezet végén látott program egyelőre hibás kimenetet ad az osztás esetén:

#include<stdio.h>

int main()
{

    int a = 5,   b = 3,   e;

    e = a + b;   printf("osszeadas %d \n", e);
    e = a - b;   printf("kivonas %d \n", e);
    e = a * b;   printf("szorzas %d \n", e);
    e = a % b;   printf("maradekos osztas %d \n", e);
    e = a / b;   printf("osztas %d \n", e);

return 0;
}

muveletek.c c

Az utolsó művelet azért jelent meg a konzolablakon rosszul, mert az osztás eredménye valós szám, pontosan 5/3 = 1.66666... és ezt szerettük volna beletuszkolni egy egész szám változóba (int). Természetesen nem fér bele - csak úgy, ha lenyessük a kilógó részeket, a törtrészt, és csak az egészrészt mentjük el. A C az eredmény egész részét veszi egy valós számnak, ha azt egy egész szám változóba akarjuk menteni.

A most említett probléma megoldása az, hogy ha nem egész szám (int) változókat használunk, hanem valós változókat, amiben egy valós számot lehet eltárolni. Valós változót a double kulcsszóval lehet létrehozni. Hozzunk létre valós ”a”, ”b” és ”e” változókat és végezzük el a problémás osztást. Az eredményt írjuk a konzolablakra. A valós változó hely-jelölője a %lf

#include<stdio.h>

int main()
{

    double a = 5,   b = 3,   e;

    e = a / b;

    printf("osztas %lf \n", e);

return 0;
}

osztas_ok.c c

Azt gondolná az ember, hogy az ”a” és ”b” változók maradhatnak egész szám (int) típusúak, és csak az eredmény változót kell valós számként (double) létrehozni, mert csak az lesz valós szám. Sajnos a C a részeredményeket olyan típusúvá konvertálja amilyen típusokkal végeztük a műveletet, azaz ha az ”a” és ”b” változókat int-ként hozzuk létre, akkor mielőtt az osztás eredménye, az 1.666 bekerülne az e változóba előbb átkonvertálódik int-té, így az eredmény hibásan 1 lesz. Szóval ez nem jó eredményt ad:

#include<stdio.h>

int main()
{

    int a = 5,   b = 3;
    double e;

    e = a / b;   

    printf("osztas %lf \n", e);

return 0;
}

osztas_ok.c c

Minden változót double-ként kell tárolni, ha pontos eredményt szeretnénk kapni az osztás során.