Triplas de Pitágoras. Um triângulo retângulo pode ter lados que são valores inteiros. O conjunto de três valores inteiros para os lados de um triângulo retângulo é chamado de tripla de Pitágoras. Esses três lados precisam satisfazer o relacionamento de que a soma dos quadrados de dois catetos é igual ao quadrado da hipotenusa. Ache todas as triplas de Pitágoras não superiores a 500 para cateto1, cateto2 e hipotenusa. Use um loop for triplamente aninhado que simplesmente teste todas as possibilidades. Este é um exemplo de computação por ‘força bruta’. Isso não é esteticamente atraente para muitas pessoas. Mas existem muitos motivos para essas técnicas serem importantes. Em primeiro lugar, com o poder da computação aumentando em um ritmo tão fenomenal, soluções que levariam anos, ou mesmo séculos, para serem produzidas com a tecnologia de alguns anos atrás agora podem ser produzidas em horas, minutos ou mesmo segundos. Os chips microprocessadores recentes podem processar um bilhão de instruções por segundo! Em segundo lugar, como você descobrirá em cursos de ciência da computação mais avançados, existem inúmeros problemas interessantes para os quais não existe uma técnica algorítmica conhecida além da simples força bruta. Investigamos muitos tipos de metodologias de solução de problemas neste livro. Consideraremos muitas técnicas de força bruta para diversos problemas interessantes.

Passo 1

Fala Galera!!! Tudo certo? Espero que sim!!! Bora para mais um exercício.

Vamos criar um programa que mostra os três lados do triângulo retângulo satisfazendo a relação que a soma dos quadrados dos dois lados é igual ao quadrado da hipotenusa e mostra o número total de triplos.

Passo 2

Escrevendo o programa:

#include

int main( void )

{

int count = 0;

/* número de triplos encontrados */

long int side1;

/* contador de valor side1 */

long int side2; /* contador de valor side2 */

long int hypotenuse;

/* contador de valores de hipotenusa */

long int hyptSquared;

/* hipotenusa ao quadrado */

long int sidesSquared;

/* soma dos quadrados dos lados */

/* valores de side1 variam de 1 a 500 */

for ( side1 = 1; side1

/* valores de side2 variam de lado1 atual a 500 */

for ( side2 = 1; side2

/* valores de hipotenusa variam de lado atual2 a 500 */

for ( hypotenuse = 1; hypotenuse

/* calcula o quadrado do valor da hipotenusa */

hyptSquared = hypotenuse * hypotenuse;

/* calcula a soma dos quadrados dos lados */

sidesSquared = side1 * side1 + side2 * side2;

/* se hipotenusa ao quadrado = lado1 ao quadrado + lado2 ao quadrado,

triplo pitagórico */

if ( hyptSquared == sidesSquared ) {

/* exibe o triplo */

printf( "%ld %ld %ld\n", side1, side2, hypotenuse );

++count; /* update count */

} /* end if */

} /* end for */

} /* end for */

} /* end for */

/* exibe o número total de triplos encontrados */

printf( "Foi encontrado um total de %d triplos.\n", count );

return 0; /* indicate successful termination */

} /* end main */

Passo 3

A saída será:

E assim finalizamos mais um exercício galera!!!! Até o próximo.

Resposta

/* Exercise 4.27 Solution */

#include

int main( void )

{

int count = 0;

/* número de triplos encontrados */

long int side1;

/* contador de valor side1 */

long int side2; /* contador de valor side2 */

long int hypotenuse;

/* contador de valores de hipotenusa */

long int hyptSquared;

/* hipotenusa ao quadrado */

long int sidesSquared;

/* soma dos quadrados dos lados */

/* valores de side1 variam de 1 a 500 */

for ( side1 = 1; side1

/* valores de side2 variam de lado1 atual a 500 */

for ( side2 = 1; side2

/* valores de hipotenusa variam de lado atual2 a 500 */

for ( hypotenuse = 1; hypotenuse

/* calcula o quadrado do valor da hipotenusa */

hyptSquared = hypotenuse * hypotenuse;

/* calcula a soma dos quadrados dos lados */

sidesSquared = side1 * side1 + side2 * side2;

/* se hipotenusa ao quadrado = lado1 ao quadrado + lado2 ao quadrado,

triplo pitagórico */

if ( hyptSquared == sidesSquared ) {

/* exibe o triplo */

printf( "%ld %ld %ld\n", side1, side2, hypotenuse );

++count; /* update count */

} /* end if */

} /* end for */

} /* end for */

} /* end for */

/* exibe o número total de triplos encontrados */

printf( "Foi encontrado um total de %d triplos.\n", count );

return 0; /* indicate successful termination */

} /* end main */