Stack Overflow en español Asked by Dylan Nuga on December 13, 2020
#include <stdio.h>
#include <stdbool.h>
void buscapareja1 (int n,int *a, int *b);
void buscapareja2 (int n, int a, int *b);
bool pitagoricos (int h, int *c1, int *c2);
int main() {
int hipo, cmenor, cmayor;
cmenor=1;
cmayor=1;
printf("introduce el primer número");
scanf( "%d", &hipo);
while (hipo != 0){
buscapareja1 (hipo, &cmenor, &cmayor);
if (pitagoricos (hipo, &cmenor, &cmayor)==true){
printf("Hipotenusa: %i n",hipo);
printf("Cateto menor %i n",cmenor);
printf("Cateto myor %i n", cmayor);
} else
{
printf("introduce el siguiente numero");
scanf( "%d", &hipo);
}
}
return 0;
}
void buscapareja1 (int n,int *a, int *b){
bool encontrado= false;
*a=1;
*b=1;
while (*a < n && encontrado==false){
buscapareja2 (n,a,b);
encontrado==pitagoricos(n,a,b);
if (encontrado=false){
*a=*a+1;
}
}
return;
}
void buscapareja2 (int n, int a, int *b){
bool encontrado= false;
*b=1;
while (*b < n && encontrado==false){
encontrado==pitagoricos(n,a,b);
if (encontrado=false){
*b=*b+1;
}
}
return;
}
bool pitagoricos (int h, int *c1, int *c2){
if (h*h==*c1**c1+*c2**c2)
{
return true;
} else
{
return false;
}
}
Cuando compilé el programa me salió este error:
[Warning]assignment makes integer from pointer without a cast
Y aquí me aparece este error:
note: expected ‘int’ but argument is of type ‘int *’.
Estos errores se repiten a lo largo del código ya que no entiendo muy bien como pasar punteros entre varias funciones.
El programa consiste en dada unos números enteros h
, hipotenusa, mostrar por pantalla los catetos que formen ternas pitagóricas si las tuviera.
En primer lugar, haces una comparación cuando en realidad tienes que hacer una asignación:
encontrado==pitagoricos(n,a,b);
Esto debería de ser:
encontrado=pitagoricos(n,a,b);
En segundo lugar la cabecera de la función:
void buscapareja2 (int n, int a, int *b);
Debería ser:
void buscapareja2 (int n, int *a, int *b);
Y en tercer lugar en el bucle tienes un fallo, y es que, en el caso de que se encuentre una combinación de catetos que haga a pitagóricos
devolver true
se queda en un bucle infinito porque no das la oportunidad de modificar el valor de la hipotenusa, es decir, no se ejecuta el scanf
.
La solución sería:
#include <stdio.h>
#include <stdbool.h>
void buscapareja1 (int n,int *a, int *b);
void buscapareja2 (int n, int *a, int *b);
bool pitagoricos (int h, int *c1, int *c2);
int main() {
int hipo, cmenor, cmayor;
cmenor=1;
cmayor=1;
printf("introduce el primer número: ");
scanf( "%d", &hipo);
while (hipo != 0){
buscapareja1 (hipo, &cmenor, &cmayor);
if (pitagoricos (hipo, &cmenor, &cmayor)==true){
printf("Hipotenusa: %i n",hipo);
printf("Cateto menor %i n",cmenor);
printf("Cateto myor %i n", cmayor);
} else {
printf("Nope!n");
}
printf("introduce el siguiente numero: ");
scanf( "%d", &hipo);
}
return 0;
}
void buscapareja1 (int n,int *a, int *b){
*a=1;
*b=1;
bool encontrado = false;
while (*a < n && encontrado==false){
buscapareja2 (n,a,b);
encontrado=pitagoricos(n,a,b);
if ( encontrado == false ) {
(*a)++;
}
}
return;
}
void buscapareja2 (int n, int *a, int *b){
bool encontrado= false;
*b=1;
while (*b < n && encontrado==false){
encontrado=pitagoricos(n,a,b);
if ( encontrado == false ) {
(*b)++;
}
}
return;
}
bool pitagoricos (int h, int *c1, int *c2){
return h*h==*c1**c1+*c2**c2;
}
Answered by lromeraj on December 13, 2020
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP