media con arreglos

Iniciado por criser20, 4 Abril 2014, 07:01 AM

0 Miembros y 1 Visitante están viendo este tema.

criser20

no entiendo pq no me funciona esto para sacar la media de un arreglo dinamico, me podrian decir que tiene mal o algun consejo?
code=c]#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 200



void media(int n,int arr[MAX]);

int main()
{int opc, n, arreglo[n] ;

   do{
        system("CLS");
   printf("Seleccione una accion.\n");
   printf("1.Multiplicacion de matrices.\n");
   printf("2.transpuesta de una matriz.\n");
   printf("4.fibonacci.\n");
   printf("7.Media,Varianza.");
   printf("0.Salir");
   scanf("%d", &opc);
    switch(opc){
    case 0:
        printf("gracias por usar el programa");
        system("PAUSE");
        break;

case 7:
    printf("cuantos numeros desea evaluar?");
    scanf("%d", &n);
    media(n, arreglo);
    break;


    }

   } while(opc!=0);
    return 0;
}


void media(int n,int arr[MAX]){
int i, x=0, j;
for (i=0;i<n;i++){
    printf("ingrese el %d numero", i+1);
    scanf("%d", &arr[i]);
}
for (j=0;j<n;j++){
    x=x+arr[j];
}
printf("la media es %d", x/n);
}

eferion

*Nota, si a la etiqueta de apertura de "code", le pones =c te coloreará el código con formato C.

int opc, n, arreglo[n] ;

Vamos a ver, tienes n que es una variable no inicializada... y después tienes arreglo[n]... mal vamos.

Además, el compilador no te garantiza que las variables que vayan a crear en orden ( de izquierda a derecha ), en msvc al menos es al revés (primero se "crea" arreglo[n], luego n y finalmente opc ), así que ya sabes.

Por otro lado, arreglo[n] no es, para nada, un arreglo dinámico. La palabra dinámico se reserva para cuando se hace uso de memoria dinámica, es decir, cuando hay una reserva de memoria con malloc o calloc. No es tu caso.

Tu problema de código se soluciona sustituyendo arreglo[n] por arreglo[MAX], pero ya te digo, no es un arreglo dinámico.

leosansan

#2
Además de lo indicado por eferion en cuanto a que no es un arreglo dinámico debes declarar como int la variable arr después de introducir el valor de n:

Código (cpp) [Seleccionar]

.....................
int opc, n ;
....................
printf("cuantos numeros desea evaluar?");
   scanf("%d", &n);
   int  arreglo[n] ;
   media(n, arreglo);
................................


Y luego en la función media sería:

Código (cpp) [Seleccionar]
void media(int n,int arr[n])

Y para que la media de un valor correcto, es decir con decimales que es lo usual en estos casos, como tienes declarados como int a x y arr debes hacer un cast a float e imprimir como %f o %g:

Código (cpp) [Seleccionar]

.............................  
for (j=0;j<n;j++)
   x+=arr[j];
printf("\nla media es %f: \n", (float)x/n);
system("pause");
......................


Por cierto, observa que en el for he quitado las llaves. Siempre que el cuerpo de un for, if, etc tenga una sola línea no son necesarias. También he puesto una pausa para ver el resultado antes de que se limpie la pantalla con el system("CLS").



¡¡¡¡ Saluditos! ..... !!!!





criser20

gracias a ambos ya lo resolvi de verdad muchas gracias