Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: freddy91 en 30 de Octubre 2016, 13:01

Título: Problema media en c (lenguajeC) calcular media de n números y parar con negativo
Publicado por: freddy91 en 30 de Octubre 2016, 13:01
Hola tengo un problema con un código que estoy haciendo(soy nuevo en esto).Tengo que hacer la media de n numero y cuando se introduzca un numero negativo se pare.Esto es es lo que tengo hecho:

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {


int contador=0;
float media=0,notas=0,total_notas=0;



printf("Ingrese la nota o un numero negativo para salir: ");
scanf("%f",&notas);
while(notas>=0){
contador++;
total_notas=total_notas+notas;
printf("Ingrese la nota o un numero negativo para salir: ");
scanf("%f",&notas);


}
if (contador!=0)
media=total_notas/contador;


printf("Total de alumnos presentados a examen: %d\n",contador);
printf("Nota media: %f\n",media);



return 0;
}
El problema es que al hacer la media me cuenta el numero negativo y la media sale mal.¿Cómo podría arreglarlo?
Gracias de antemano

EDIT: Ya lo he solucionado
Así me queda el código
Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {


float contador=0,aprobado=0,suspenso=0,notable=0,deficiente=0,sobresaliente=0;
float media=0,notas=0,total_notas=0;
float por_sobre=0,por_not=0,por_apro=0,por_sus=0,por_defi=0;


do{
;
printf("Ingrese la nota o numero negativo para salir: ");
scanf("%f",&notas);
if (notas<10 & notas>=0){
contador++;
if(notas>=9 )
sobresaliente++;

if(notas>=7 & notas<9)
notable++;
if(notas>=5 & notas<7)
aprobado++;
if(notas>=2 & notas<5)
suspenso++;
if(notas<2)
deficiente++;
total_notas=total_notas+notas;






}
}while(notas>0);


media=total_notas/contador;
por_sobre=(sobresaliente/contador)*100;
por_not=(notable/contador)*100;
por_apro=(aprobado/contador)*100;
por_sus=(suspenso/contador)*100;
por_defi=(deficiente/contador)*100;
printf("Total alumnos presentados a examen: %g\n",contador);
printf("Numero de sobresalientes: %g (%.2f)\n",sobresaliente,por_sobre);
printf("Numero de notable: %g (%.2f)\n",notable,por_not);
printf("Numero de aprobados: %g (%.2f)\n",aprobado,por_apro);
printf("Numero de suspensos: %g (%.2f)\n",suspenso,por_sus);
printf("Numero de muy deficientes: %g (%.2f)\n",deficiente,por_defi);

if(media>=5){
printf("Nota media: %.2f (Aprobado)\n",media);
}
else{
printf("Nota media: %.2f (Suspenso)\n",media);
}



return 0;
}

¿De que forma podría optimizarlo más?
Título: Re:Problema media en c (lenguajeC) calcular media de n números y parar con negativo
Publicado por: Alex Rodríguez en 03 de Noviembre 2016, 19:46
Hola freddy91 en general tu código se ve bien

Una forma de mejorar tu código es usar el tipo de variable int en aquellos casos en que la variable no va a tomar valores decimales. Es cierto que para operar posteriormente puede requerirte realizar una conversión de tipo de dato.

Por ejemplo contador no tendría que ser float (supongo que lo has hecho así para poder operar sin problemas)

Recomendamos este curso para comprender los conceptos de la programación en C: https://www.aprenderaprogramar.com/index.php?option=com_content&view=category&id=82&Itemid=210

Saludos