Mi a hiba a forráskódban? Hatványozni szeretnék, de nem megy. Ez a kimenet: "Az eredmeny: 1. #INF Miért?
#include<iostream>
float hatvany(float x,int y);
float bemenetAl;
int bemenetKi;
int main()
{
float bemenetAl;
int bemenetKi;
std::cout << "Irjon be egy hatvanyalapot: ";
std::cin >> bemenetAl;
std::cout << "Irjon be egy hatvanykitevot(egesz): ";
std::cin >> bemenetKi;
bemenetAl=hatvany(bemenetAl,bemenetKi);
std::cout << "Az eredmeny: " << bemenetAl;
system("pause>>vold");
return 0;
}
float hatvany(float x,int y)
{bemenetAl = x;
bemenetKi = y;
while (bemenetKi!=0)
{
bemenetAl=bemenetAl*bemenetAl;
bemenetKi=bemenetKi-1;
}
return bemenetAl;}
Gondolom, ez a végtelen (azaz a számábrázolás korlátját meghaladó) eredmény hibaüzenete (infinite).
Az a hiba, hogy deklarálod a
float bemenetAl;
int bemenetKi;
globális változókat, és ezt használod mindenre. Így a hatvany függvényed tönkreteszi az eredeti változók értékét. Ezt hívják mellékhatásnak. A bemenetAl=bemenetAl*bemenetAl iszonyatos mértékben növeli a változó érétkét, mert minden lépésben a már megemelt értéket szorozza önmagával, nem az eredetivel.
A megoldás, hogy ne spórolj a változókkal, és máskor írd bele a kérdésedbe, milyen programnyelvről van szó.
Egyébként is helyes gyakorlat a változókat lokálisan, a kapcsos zárójelen belül deklarálni, mivel az segít átlátni, hogy ki kivel van, és a C alapú nyelvek erre nagyszerű lehetőséget adnak.
Tehát a hatvany függvényben kell két másik változó, és a szorzás valahogy így nézzen ki:
x=x*bemenetA1;
és a végén return x;
Gondolom azt szeretnéd, hogy a hatvány föggvény x^y-t számolja ki.
A te függvényed mindig négyzetre emeli a "bemenetAl"-t, azaz y=1-re x^2-t kapsz, y=2-re x^4-t, általánosságban pedig az eredmény x^(2^y). Nyílván ez sokkal gyorsabban túlcsordul.
Ha ezt a sort átírod:
bemenetAl=bemenetAl*bemenetAl;
a következőre:
bemenetAl=bemenetAl*x;
akkor már sokat javul az eredmény. Ekkore x^(y+1)-lesz az eredmény
Ha még kezdetben az bemenetAl értékét 1-re állítod, akkor pedig már teljesen jó lesz.
Eyébként mért kell lemásolni az y-t egy másik változóba? És az a másik változó (ill másik 2) mért nem lokális?
Az is elég zavaró, hogy ezek a változók lokális változóként a main függvénybenn is léteznek, így nem csoda, ha belekavarodsz.
Tehát azt ajánlom neked, hogy a bemenet* neveket hagy meg csak a main-en belül, és a main felül töröld ki. A hattvány fühhvényben pedig töröld ki a bemenetKi-t, és használd helyette az y-t. A bemenetAlt- pedig nevezd át peldalul eredmeny-re.
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!