[ Foro de C ]

Duda con arrays

23-Jul-2014 22:05
Invitado (sara)
3 Respuestas



#include<stdio.h>
//Crear un programa que pida al usuario 10 números, calcule su media y luego muestre los que están por encima de la media.

int main()
{
	int datos[10];
	int i = 0;
	int media;
	int suma = 0;
	int cant_datos;
	printf("Teclea diez numeros\n");
	for (i=0; i<10; i++)
	{
		scanf("%d", &datos[i]); 
		suma +=  datos[i]; //sumo todos los datos
	}	
	printf("La suma es: %d\n", suma);
	cant_datos = 10;
	media = suma/cant_datos; //calculo la media
	printf("La media de esos numeros es: %d\n", media);
	
	do
	{ 
		printf("%d", datos[10]); // escribe los numeros ( de la matriz), mayor que la media
	}
	while(datos[i]>media);
return 0;
}


El problema, es que el programa no funciona como yo quiero que funcione, me hace mal lo del do... while y no entiendo el por qué!!!
Si me pueden ayudar, muchas gracias!!!


24-Jul-2014 00:01
Nacho Cabanes (+83)

El "do..while" usa una variable "i", cuyo valor no cambia dentro de ese bloque, lo que provocará un bucle sin fin.

Además, estás mirando el dato 11 de un array de 10, lo que es un desbordamiento y un error en tiempo de ejecución (o, peor aún, un dato no válido, con valor al azar).

Ese "do..while" debería ser otro "for", que recorra todos los valores, comparando con la media, que ya conoces en ese momento del programa.


24-Jul-2014 00:51
Luis Torres (+18)

Efectivamente, la mejor opción que tienes para ir analizando cada dato preguntándote si es o no mayor que la media es, a través, de un ciclo for. Podrías hacerlo de la siguiente manera:


#include <stdio.h>
//Crear un programa que pida al usuario 10 números, calcule su media y luego muestre los que están por encima de la media.

int main(){
   int datos[10];
   int i=0;
   int media;
   int suma= 0;
   int cant_datos;
   printf("Teclea diez numeros:\n");
   for (i=0;i<10;i++)
   {
       printf("Dato %d: ",i+1);
       scanf("%d",&datos[i]);
       suma += datos[i];
   }
   printf("La suma es: %d\n",suma);
   cant_datos= 10;
   media= suma/cant_datos;
   printf("La media es: %d\n",media);
   for(i=0;i<10;i++)
   {
       if (datos[i]>media)
       {
           printf("%d\n",datos[i]);
       }
   }
return 0;
}


24-Jul-2014 13:09
Invitado (sara)

Ostras... es verdad!!! No había caído!!!
Muchas graciass :)






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)