Kezdőoldal » Számítástechnika » Programozás » Java nyelven írtam egy program...

Java nyelven írtam egy programot, aminek a Pitagoraszi számhármasokat kellene kiírni, viszont a for ciklusaimmal gond van, mi lehet a baj?

Figyelt kérdés

A kód:

Scanner bill=new Scanner(System.in);


int szám;


System.out.print("Hány db Pitagoraszi számhármast írjon ki? ");

szám=bill.nextInt();

System.out.println("Az első "+szám+"db Pitagoraszi számhármas: \n");


int a,b,c;

int an,bn,cn; //a²,b²,c²

a=3;

b=4;

c=5;

int n;

n=0;


while (a!=0)

{

an=(int)Math.pow(a, 2); //a²

bn=(int)Math.pow(b, 2); //b²

cn=(int)Math.pow(c, 2); //c²


for (a=3; ; a++)

{

for (b = a+1; bn<=an+1; b++)

{

for (c = b+1; cn<=an+bn; c++)

{

if (an+bn==cn)

{

n++;

System.out.println(n+".: ");

System.out.println(+a+" "+b+" "+c);


if (n==szám)

return;

}

}

}

}

}


// a probléma szinte biztos, hogy a 2. és 3. for ciklus-ban van:

for (b = a+1; bn<=an+1; b++)

{

for (c = b+1; cn<=an+bn; c++)

...

Méghozzá "bn<=an+1" és "cn<=an+bn" -el nem stimmel valami, de nem látom át..



2012. febr. 23. 23:48
 1/7 anonim ***** válasza:
n-nek hol adsz kezdőértéket?
2012. febr. 24. 00:13
Hasznos számodra ez a válasz?
 2/7 anonim ***** válasza:

ehh. már látom.

Jaja, az nem stimmel, hogy b,c-t módosítgatod és közben konstans a feltétel.

2012. febr. 24. 00:17
Hasznos számodra ez a válasz?
 3/7 anonim ***** válasza:
Elég csúnyán kódolsz. Szerintem először nézd át újból az alapokat és ha megértetted, akkor térj vissza a feladathoz.
2012. febr. 24. 00:20
Hasznos számodra ez a válasz?
 4/7 A kérdező kommentje:
Ő, tudom ez csak ilyen sokadszorra dühből írt program :D tudom hogy ott a probléma az utolsó két for ciklusban de egyszerűen nem látom át, a végleges program nem így fog kinézni :)
2012. febr. 24. 17:01
 5/7 anonim ***** válasza:

Attól még, hogy a ciklusok során lépteted a b és c változókat, bn és cn értéke nem változik meg. Emiatt a ciklusok bennmaradási feltétele (pl. bn<=an+1) sem változik, így sosem lépsz ki a ciklusból.


Javítás: ne használd egyáltalán az an/bn/cn változókat, egyszerűen mindig számold ki helyben. És ne pow-val, felesleges (meg bizonyos esetben káros is, most hagyjuk), a négyzete ugye nem más, mint a*a. :-)

2012. febr. 24. 18:47
Hasznos számodra ez a válasz?
 6/7 _Jessy_ ***** válasza:

pl itt az egyik:

for (a=3; ; a++)

{ ...

ez csak csákknorisznak menne, hacsak nincs valahol másutt egy break; :D

2012. febr. 24. 19:39
Hasznos számodra ez a válasz?
 7/7 A kérdező kommentje:

Köszönöm az eddigi tanácsokat, a pow-okat átírtam, a felesleges változókat eltüntettem most így néz ki az alprogram:

void pitagorasz()

{

Scanner bill=new Scanner(System.in);

int a,b,c;

int n=0;


while (szám!=0)

{

for (a=3;a<100 ; a++)

{

for (b=4;b<100 ; b++)

{

for (c=5;c<100 ; c++)

{

if ((a*a)+(b*b)==(c*c))

{

n++;

System.out.println(+a+" "+b+" "+c);

if (n==szám)

return;

}

}

}

}

}

}


Most addig minden jó, hogy kiírja a megadott számú pitagoraszi számhármasokat, de a for ciklus feltételét még mindig nem tudom hogy hogy adjam meg :) mert így jelenleg hogy <100 van feltételnek írva, így ugye úgy dolgozik hogy az összes int típusban lehetségeset kiírja.

2012. febr. 25. 23:04

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!