Java nyelven írtam egy programot, aminek a Pitagoraszi számhármasokat kellene kiírni, viszont a for ciklusaimmal gond van, mi lehet a baj?
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..
ehh. már látom.
Jaja, az nem stimmel, hogy b,c-t módosítgatod és közben konstans a feltétel.
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. :-)
pl itt az egyik:
for (a=3; ; a++)
{ ...
ez csak csákknorisznak menne, hacsak nincs valahol másutt egy break; :D
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.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!