Miért nem tizedes tört a végeredmény?
itt a program:
#include <cstdlib>
float Marci(int a, int b, int c, int d, int e);
int main()
{
int szam1;
int szam2;
int szam3;
int szam4;
int szam5;
std::cout << "Kerem, irjon be ot szamot, majd a program kiszamolja az atlagat!";
std::cin >> szam1;
std::cin >> szam2;
std::cin >> szam3;
std::cin >> szam4;
std::cin >> szam5;
std::cout << "Az eredmeny: " << Marci(szam1, szam2, szam3, szam4, szam5);
system("pause");
}
float Marci(int a, int b, int c, int d, int e)
{
float eredmeny;
eredmeny=(a+b+c+d+e)/5;
return eredmeny;
}
Futtatom, beírom a számokat: 1,2,3,4,6 amiknek az átlaga 3.2, de a programom 3-mat ír ki... Pedig float típusú az eredmény változója... Tudtok ötletet, hogy miért?
"(a+b+c+d+e)/5"
Itt minden int, így ennek az eredménye is int.
Megoldás:
"(a+b+c+d+e)/5.0"
Kezdj el tömböket és ciklust használni, mert ez így ocsmány.
Azért egész, mert:
-Elvégzi a zárójelet, eredménye egész szám
-Elvégzi az osztást, két egész esetén egészosztás
-Majd ezt kasztolja float-tá.
Megoldás: /5.0 vagy /5f vagy /(float)5.
Fontos információ sikkad itt el.
"Pedig float típusú az eredmény változója... "
Ugye erről a kifejezésről van szó: eredmeny=(a+b+c+d+e)/5;
Ha a fordító figyelembevenné, hogy milyen típusú az eredmeny a = jobb oldalán álló kifejezés kiértékelésekor az 1) nagyon csúnya, környezetfüggő nyelvtant eredményezne 2) brutálisan nehezen észrevehető hibalehetőségeket hozna be, amikor a kifejezés nem változik, mégis teljesen máshogy lenne kiértékelve.
A programozási nyelvek többnyire törekszenek a környezetfüggetlenségre. Mindig ilyen szellemben vizsgáld a kifejezéseket.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!