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.

Mostrando promedio y varianza.

Estoy tratando de escribir un problema que calcula e imprime la media y la varianza de dos números. Debo crear una función para calcularlo y luego imprimir los resultados solo en la función principal. La forma que elegí fue usar un arreglo de 2 posiciones que tenga el valor de la media en la primera posición y el valor de la varianza en la segunda posición.
Creo que el problema está en asignar los valores al arreglo, eso es lo que no puedo hacer correctamente. ¿Alguien podría explicarme eso con algo de código? Si hay otra forma de hacerlo que no utilice el arreglo, también es válido.

int * estadisticas(float x, float y) {

    double media, varianza;
    int i;
    static int Arr[2];

    media = (x + y) / 2;
    varianza = ((x - media) * (x - media) + (y - media) * (y - media)) / 2;

    for (i = 0; i < 2; ++i) {
        if (i == 0) {
            Arr[i] = media;
        } else {
            Arr[i] = varianza;
        }
    }

    return Arr;
}

int main() {

    int num1, num2;
    int *resultado;

    num1 = 10;
    num2 = 5;

    resultado = estadisticas(num1, num2);
    printf("%lf -- %lf", resultado[0], resultado[1]);

    return 0;
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Hay un par de problemas con el código proporcionado:

    1. La función statistics devuelve un puntero a un int, pero la función main espera un int.
    2. El bucle for que asigna valores al array tiene un error en la condición. En lugar de i=0, debería ser i==0.

    Aquí hay una versión corregida del código:

    #include <stdio.h>
    
    void statistics(float x, float y, float *result) {
    
      double mean, var;
    
      mean = (x + y) / 2;
      var = ((x - mean) * (x - mean) + (y - mean) * (y - mean)) / 2;
    
      result[0] = mean;
      result[1] = var;
    }
    
    int main() {
    
      float num1, num2, result[2];
    
      num1 = 10;
      num2 = 5;
    
      statistics(num1, num2, result);
      printf("%f -- %f", result[0], result[1]);
    
      return 0;
    }
    

    En esta versión corregida:

    1. La función statistics ahora toma un puntero a un array de floats como parámetro de entrada. Esto permite que la función modifique el contenido del array y devuelva el resultado a través de él.
    2. El bucle for ha sido eliminado y la media y la varianza ahora se asignan directamente a las posiciones del array dentro de la función statistics.
    3. La función main ahora declara result como un array de floats con dos posiciones, pasando un puntero a este array a la función statistics.
    4. Finalmente, la función main imprime los valores en el array result utilizando %f en lugar de %lf.

    En conclusión, utilizar un array para almacenar los valores de la media y la varianza es un enfoque válido. Sin embargo, es importante asegurarse de que los tipos de variables y los valores devueltos y pasados como argumentos sean consistentes en las funciones involucradas.</stdio.h>

Comments are closed.