PDA

View Full Version : Terne pitagoriche


noodles
15-07-2003, 18:19
Ho fatto un programma che calcola le terne pitagoriche. Il cateti non devono superare pero' la lunghezza di 500. Ve lo posto qua sotto:


#include<stdio.h>
int main(void)
{
int lato,lato1,ipo,var;

for (lato=1;lato<=500;++lato)
{ for (lato1=1;lato1<=500;lato1++)
{ var=(lato*lato)+(lato1*lato1);
for (ipo=1;ipo<=500000;ipo++)/*500000 è dato da 500^2*2 */
{
if (var==(ipo*ipo))
printf("%d\t%d\t%d\t%d\n", lato, lato1,
ipo, var);
}
}
}



}



Non riesco a capire dove sbaglio, vi posto una parte di output:

3 4 5 25
4 3 5 25
4 288 253820 82960
5 12 13 169

vi pare che la 3 terna vada bene?????
:confused: :confused:
come è possibile????

se metto una ulteriore if dopo if (var==(ipo*ipo)) in questo modo e includo anche <math.h>:
if (var==(ipo*ipo))
if (sqrt(var)==ipo)
printf("%d\t%d\t%d\t%d\n", lato, lato1,ipo, var);
il programma fuzniona bene.


(perdonate l'ignornaza, ma sto imparando)

cionci
15-07-2003, 22:44
Originally posted by "noodles"

Non riesco a capire dove sbaglio, vi posto una parte di output:

4 288 253820 82960

Vedi...secondo il confronto fra interi è giustissimo...
253820 * 253820 modulo 2^32 è esattamente 82960 !!!
Gli interi sono a 32 bit di conseguenza i numeri rappresentabili sono compresi fra -2^31 e (2^31)-1...

In pratica 253820*252820 è 15 volte multiplo di 2^32 e quindi e come se ricominciasse a contare 15 volte da 0...

Nel for + interno non farlo arrivare a 500000, ma solamente a var e avrai risolto questo problema...