Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Iniciando en C, programa sencillo

Estas en el tema de Iniciando en C, programa sencillo en el foro de C/C++ en Foros del Web. Hola este semestre ando iniciando con programación en C , acabo de terminar mi 2° programa que es básicamente pide el nombre del alumno, pide ...
  #1 (permalink)  
Antiguo 17/06/2010, 00:41
Avatar de BaByRoDrI  
Fecha de Ingreso: julio-2009
Ubicación: Mexico
Mensajes: 60
Antigüedad: 14 años, 10 meses
Puntos: 1
Pregunta Iniciando en C, programa sencillo

Hola este semestre ando iniciando con programación en C, acabo de terminar mi 2° programa que es básicamente pide el nombre del alumno, pide el nombre de 4 materias asi como sus calificaciones, saca el promedio.

La maestra puso un código bastante sencillo de solo 27 lineas que se limita a sacar el promedio, yo lo agrande a 49 con el plus de que muestra algunos mensajes en base a su promedio y de que si se ingresa alguna cantidad menor a 0 o mayor a 10 la tome como invalida.

En fin aquí esta mi código:

Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. void main()
  4. {
  5.  
  6. #ifdef WIN32
  7. system("cls");
  8. #else
  9. system("clear");
  10. #endif
  11.  
  12. char mat[30], nom[30];
  13. float calif, prom, suma;
  14. int  i;
  15.  
  16. suma=0;
  17.  
  18. printf("Nombre del alumno: "); scanf("%s",nom);
  19.  
  20. for (i=1;i<=4;i++)
  21.         {
  22.         printf("\nMateria %d: ", i);
  23.         scanf("%s", mat);
  24.         pedircalif:
  25.         printf("Calificacion %d: " ,i);
  26.         scanf("%f", &calif);
  27.         if (calif>10 || calif<0)
  28.                 {
  29.                 printf("\n\033[0;31mError la calificacion no puede ser mayor a 10 o menor a 0\033[0m\n");
  30.                 goto pedircalif;
  31.                 }
  32.         suma = suma + calif;
  33.         }
  34.  
  35. prom = suma/4;
  36. printf("\nEl alumno %s obtuvo el promedio %.2f\n",nom,prom);
  37.  
  38. if (prom <= 5)
  39.         { printf("\nLo siento has reprobado :'(\n"); }
  40. else if (prom >= 6 && prom < 8)
  41.         { printf("\nApenas tienes lo suficiente :/\n"); }
  42. else if (prom >= 8 && prom < 9)
  43.         { printf("\nBien :)\n"); }
  44. else if (prom >= 9 && prom < 10)
  45.         { printf("\nMuy bien :)\n"); }
  46. else
  47.         { printf("\nExcelente :D\n"); }
  48.  
  49. }

Solo quiero pedir su ayuda, que opinan, como lo mejorarían? Esos #ifdef estan correctos es que en la escuela usamos Windows :( pero yo lo hago todo en Linux :)

Y una duda anteriormente cuando trabajamos basi hicimos el programa que solo calculará el promedio y que detectara que la calificación fuera de un rango de 0-10 pero curiosamente cuando poníamos la letra e ó p la tomaba como buena, en este caso, si pongo p ó e muestra el mensaje de error pero varias veces :s ¿Por qué?


  #2 (permalink)  
Antiguo 17/06/2010, 08:47
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: Iniciando en C, programa sencillo

si en cuanto a lo de #ifdef es correcto,

Por otro lado, Para validar si el dato introducido fue correcto, debes hacerlo de esta forma:
Código C:
Ver original
  1. if(scanf("%f", &calif))
  2. {
  3.    printf("valor incorrecto");
  4.    goto pedircalif;
  5. }

Ahora bien, en la mayoria de los programas no es recomendable el uso de goto. Prefiere algunas otras alternativas. Y si incluso en linux es desaconsejable.
  #3 (permalink)  
Antiguo 19/06/2010, 08:40
 
Fecha de Ingreso: junio-2010
Mensajes: 3
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Iniciando en C, programa sencillo

estoy de acuerdo con margarito04, puedes usar el siguiente segmento de codigo para remplazar el uso de "goto"
porque este no cumple con la naturaleza estructurada de la programación

Código C:
Ver original
  1. for (i=1;i<=4;i++){
  2.     printf("\nMateria %d: ", i);
  3.     scanf("%s",mat);
  4.     bool valida;
  5.     do{
  6.         valida=true;
  7.         printf("Calificacion %d: " ,i);
  8.         scanf("%f", &calif);
  9.         if (calif>10 || calif<0){
  10.             valida=false;
  11.             printf("\nError la calificacion no puede ser mayor a 10 o menor a 0\n");
  12.         }
  13.     }while(valida==false);
  14.     suma=suma+calif;
  15. }

Etiquetas: programacion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:58.