es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El formato ‘%f’ espera un argumento de tipo ‘double’, pero el argumento 2 tiene tipo ‘float (*)(float *)’.

Soy nuevo en C y estoy intentando hacer una calculadora que solicita si quieres calcular la desviación estándar de un conjunto o el promedio de un conjunto. Sin embargo, cuando ejecuto el código, obtengo el error que se ve en la imagen. Pantalla de error. No sé cómo corregirlo. Creo que también he cometido algunos errores a lo largo del código, así que si ves algún otro error, ¿te importaría señalarlo? Gracias.

“`c
#include <stdio.h>
#include <math.h>
float StandardDev(float data[]);
float Average(float data[]);

float Average(float data[]) {
int n;
float num[100], sum = 0.0, avg;

<pre><code>avg = sum / n;
return 0;
</code></pre>

}

float StandardDev(float data[]){
float sum = 0.0, mean, SD = 0.0;
int i, n;
for (i = 0; i < n; ++i) {
sum += data[i];
}
mean = sum / n;
for (i = 0; i < n; ++i) {
SD += pow(data[i] – mean, 2);
}
return sqrt(SD / 10);
}

int main()
{<br />
int n, i;
float num[100], sum = 0.0, c;
printf("Ingrese el número de elementos: ");
scanf("%d", &n);

<pre><code>while (n > 100 || n < 1) {
printf("¡Error! El número debe estar en el rango de (1 a 100).\n");
printf("Ingrese el número nuevamente: ");
scanf("%d", &n);
}

for (i = 0; i < n; ++i) {
printf("%d. Ingrese el número: ", i + 1);
scanf("%lf", &num[i]);
sum += num[i];
}
printf("¿Desea calcular la desviación estándar (1) de un conjunto o encontrar el promedio (2) de un conjunto? ");
scanf("%u", &c);
if(c==1){
printf("La desviación estándar de tu conjunto es %f", StandardDev);
}
else{
printf("El promedio de tu conjunto es %f", Average);
}
return(0);
</code></pre>

}
“`</math.h></stdio.h>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Hay algunos problemas con el código que podrían estar causando el error:

    1. El mensaje de error en la captura de pantalla indica que hay un problema al llamar a la función scanf. Específicamente, el mensaje de error dice que hay un “tipo de formato especifica ‘unsigned int’, pero el argumento tiene un tipo ‘float *'”. Esto significa que el especificador de formato %u espera que se almacene un entero sin signo en la ubicación de memoria señalada por el segundo argumento (&c), pero en su lugar encuentra un puntero de tipo float.

    Para solucionar esto, cambie la declaración de float c en la función main por unsigned int:

    unsigned int c;
    

    Esto asegurará que el especificador de formato %u espere un entero sin signo, y el programa debería poder leer la elección del usuario.

    1. Hay un problema con la implementación de la función Average. Actualmente, la función no recibe ninguna entrada y siempre devuelve 0, pero se supone que debe calcular el promedio de un conjunto dado de números. Además, la variable n no está inicializada, por lo que su valor es indefinido cuando se utiliza para calcular la variable avg.

    Para solucionar esto, elimine la declaración e inicialización del arreglo num de la función Average y agregue un parámetro para el tamaño del arreglo data:

    float Average(float data[], int n) {
        float sum = 0.0, avg;
    
        for (int i = 0; i < n; ++i) {
            sum += data[i];
        }
    
        avg = sum / n;
        return avg;
    }
    

    Esta implementación calcula la suma de los valores en el arreglo data y la divide por el tamaño del arreglo para obtener el valor promedio.

    1. Hay un problema similar con la implementación de la función StandardDev. Actualmente, la función no recibe ninguna entrada y siempre devuelve 0, pero se supone que debe calcular la desviación estándar de un conjunto dado de números. Además, la variable n no está inicializada, por lo que su valor es indefinido cuando se utiliza para iterar sobre el arreglo data.

    Para solucionar esto, agregue un parámetro para el tamaño del arreglo data e inicialice la variable n con este tamaño:

    float StandardDev(float data[], int n){
        float sum = 0.0, mean, SD = 0.0;
    
        for (int i = 0; i < n; ++i) {
            sum += data[i];
        }
        mean = sum / n;
    
        for (int i = 0; i < n; ++i) {
            SD += pow(data[i] - mean, 2);
        }
    
        return sqrt(SD / n);
    }
    

    Esta implementación calcula la suma de los valores en el arreglo data, la media de los valores y la suma de las diferencias al cuadrado respecto a la media. Luego divide la suma de las diferencias al cuadrado por el tamaño del arreglo y toma la raíz cuadrada para obtener la desviación estándar.

    En general, el código corregido debería lucir así:

    “`
    #include <stdio.h>
    #include <math.h>

    float StandardDev(float data[], int n);
    float Average(float data[], int n);

    float Average(float data[], int n) {
    float sum = 0.0, avg;

    for (int i = 0; i < n; ++i) {
        sum += data[i];
    }
    
    avg = sum / n;
    return avg;
    

    }

    float StandardDev(float data[], int n){
    float sum = 0.0, mean, SD = 0.0;

    for (int i = 0; i < n; ++i) {
        sum += data[i];
    }
    mean = sum / n;
    
    for (int i = 0; i < n; ++i) {
        SD += pow(data[i] - mean, 2);
    }
    
    return sqrt(SD / n);
    

    }

    int main() {
    int n, i;
    float num[100], sum = 0.0;
    unsigned int c;

    printf("Ingrese el número de elementos: ");
    scanf("%d", &n);
    
    while (n > 100 || n < 1) {
        printf("¡Error! El número debe estar en el rango de (1 a 100).\n");
        printf("Ingrese el número nuevamente: ");
        scanf("%d", &n);
    }
    
    for (i = 0; i < n; ++i) {
        printf("%d. Ingrese un número: ", i + 1);
        scanf("%f", &num[i]);
        sum += num[i];
    }
    
    printf("¿Desea calcular la desviación estándar(1) de un conjunto o encontrar el promedio(2) de un conjunto? ");
    scanf("%u", &c);
    
    if(c==1){
        printf("La desviación estándar de su conjunto es %f\n", StandardDev(num, n));
    }
    else {
        printf("El promedio de su conjunto es %f\n", Average(num, n));
    }
    
    return 0;
    

    }
    “`</math.h></stdio.h>

Comments are closed.