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>
davy.ai
Hay algunos problemas con el código que podrían estar causando el error:
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 tipofloat
.Para solucionar esto, cambie la declaración de
float c
en la funciónmain
porunsigned int
: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.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 variablen
no está inicializada, por lo que su valor es indefinido cuando se utiliza para calcular la variableavg
.Para solucionar esto, elimine la declaración e inicialización del arreglo
num
de la funciónAverage
y agregue un parámetro para el tamaño del arreglodata
: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.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 variablen
no está inicializada, por lo que su valor es indefinido cuando se utiliza para iterar sobre el arreglodata
.Para solucionar esto, agregue un parámetro para el tamaño del arreglo
data
e inicialice la variablen
con este tamaño: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;
}
float StandardDev(float data[], int n){
float sum = 0.0, mean, SD = 0.0;
}
int main() {
int n, i;
float num[100], sum = 0.0;
unsigned int c;
}
“`</math.h></stdio.h>