Kezdőoldal » Számítástechnika » Programozás » Mi a hiba a forráskódban?...

Mi a hiba a forráskódban? Hatványozni szeretnék, de nem megy. Ez a kimenet: "Az eredmeny: 1. #INF Miért?

Figyelt kérdés

#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;}



2014. jan. 11. 07:57
 1/3 anonim ***** válasza:

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;

2014. jan. 11. 09:24
Hasznos számodra ez a válasz?
 2/3 anonim ***** válasza:

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.

2014. jan. 11. 09:29
Hasznos számodra ez a válasz?
 3/3 anonim ***** válasza:
Az első vagyok. Kis javítás: most látom, hogy az x,y a paramétereid, ebben az esetben a szorzás nem úgy nézzen ki, hogy valami=valami*x, és a végén return valami.
2014. jan. 11. 09:33
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!