Kezdőoldal » Számítástechnika » Programozás » Miért nem működik?

Miért nem működik?

Figyelt kérdés

Feladat: x^2+y^2=z^4 Az első találatot kell csak kiírnia a programnak. Pl.: 15^2+20^2=5^4; 225+400=625

(A gond, hogy nem akar belemenni az if-be. Miért?)


#include <iostream>

#include <math.h>


using namespace std;


int main()

{

double result=0;

double e=0, E=0;

int z=0;

cout << "A program megtalalja az egyenlet (x^2+y^2=z^4) valtozoinak erteket." << endl;

for (int x=10; x<=20; x++)

for (int y=10; y<=20; y++)

{

result=pow(x,2)+pow(y,2);

e=exp(log(result)/4);

E=e-int(e);

if (E==1)

{

for (int z=1; z<=10; z++)

{

if (z==e)

{

cout << "x=" << x << endl;

cout << "y=" << y << endl;

cout << "z=" << e << endl;

cout << x << "^2+" << y << "^2=" << e << "^4" << endl;

cout << pow(x,2) << "+" << pow(y,2) << "=" << pow(e,4) << endl;

return 0;

}

}

}

}

}



2015. máj. 20. 20:20
 1/6 anonim ***** válasza:
Az egyik int, a másik double, ennek az egyenlőségét teszteled, ami alapból problémás. A kód többi részét nem is néztem.
2015. máj. 20. 20:22
Hasznos számodra ez a válasz?
 2/6 anonim ***** válasza:
Lebegőpontos számokat így sosem hasonlítunk.
2015. máj. 20. 20:27
Hasznos számodra ez a válasz?
 3/6 A kérdező kommentje:

Nem nagyon értek az ilyesmihez. Ilyen téren kezdőnek számítok. Tehát azt mondod elég néhány integer-t double-ra állítani és működni fog?

Kipróbáltam és sajnos így sem akar működni. :(

2015. máj. 20. 20:47
 4/6 anonim ***** válasza:

Túlbonyolítod a feladatot..


e=exp(log(result)/4);

4. gyököt lehet egyszerűbben is vonni:

pow(result, 0.25)


Lebegőpontos számok összehasonlításakor adj meg mindig egy epszilon tűrést, mert a számítási pontatlanságok miatt lehet hogy te amit 1-nek hiszel az valójában 0.999999 lett és akkor már nem egyenlő.


Ez itt mi akar lenni?

>E=e-int(e);

>if (E==1)

Mikor lesz az E == 1? Szerintem soha.

Nem tudom hogy mit akartál itt csinálni, de gondold újra.

2015. máj. 20. 21:12
Hasznos számodra ez a válasz?
 5/6 A kérdező kommentje:

Azt mondjuk én sem értettem, hogy az E miért lett 1, de amikor kipróbáltam a programot és beírtam egy cout-ot (cout << E;) az 1-et dobott ki 0 helyett.

E=e-int(e); pedig az akart lenni, hogy csak az egész számokra legyen érvényes a program és ne számolja bele a nem egész számokat.

2015. máj. 20. 22:20
 6/6 anonim ***** válasza:

A pow-ot gyokvonasra is hasznalhatod. Pl. pow(z, 0.25) az negyedik gyok.


Vagyis valami ilyent irhatsz:


for (int x = 1; x <= 20; ++x)

for (int y = x; y <= 20; ++y)

{

double z = std::pow(x * x + y * y, 0.25);


if (std::abs(z - std::round(z)) < 1E-6)

{

ird ki az eredmenyeket es pusztulj

}

}

2015. máj. 22. 15:12
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, 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!