TransWikia.com

warning: passing argument 2 makes integer from pointer without a cast

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.

One Answer

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

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP