Ver Mensaje Individual
  #4 (permalink)  
Antiguo 23/04/2010, 15:50
Fenris
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: Ayuda para corregir un código

Hola

Si despues de tantos intentos logre entender cual es la idea del codigo y lo corregi de tal forma que funcion y entendi su funcionamiento.

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <math.h>
  4.  
  5. void diaYmes(int, int, int, int);
  6. int diasXmes[]= {31,28,31,30,31,30,31,31,30,31,30,31};
  7.  
  8. int main()
  9. {
  10. int anhio, diadelanhio; //no hace falta inicializarlos
  11. int dia=0, mes=0;
  12. clrscr();
  13. printf("escriba el a¤o : ");
  14. scanf("%d", &anhio);
  15. printf("escriba el dia del a¤o : ");
  16. scanf("%d", &diadelanhio);
  17. diaYmes(anhio,diadelanhio, dia, mes);
  18. return 0;
  19. }
  20.  
  21. void diaYmes(int anio, int diadelanio, int dia, int mes)
  22. {
  23. int totaldias; //??? comente el significado de esta variable
  24. int bisiesto;
  25. int k;
  26. bisiesto = (anio % 4== 0 && anio % 100 != 0) || (anio % 400 == 0);
  27. /*int suma=0; solo con fines de prueba
  28. for(int i=0; i<12; i++){
  29. suma+=diasXmes[i];
  30. printf("\nmes %d tiene %d dias; total anual : %d\n",i+1,diasXmes[i], suma);
  31. }
  32. */
  33.  
  34.  
  35. if (bisiesto) diasXmes[2]= 29;
  36. for (totaldias= 0, k= 0; totaldias < diadelanio; totaldias += diasXmes[k], k++);
  37. //printf("\ntotal dias : %d\n", totaldias);
  38. //printf("\nk : %d\n", k);
  39. totaldias -= diasXmes[--k]; //Hasta el mes anterior
  40. //printf("\nk : %d\n", k);
  41. //printf("total dias : %d\n", totaldias);
  42.  
  43. dia= diadelanio - totaldias;
  44. mes= k+1;
  45. printf("%c%d/%c%d/%d\n", dia<10?'0':' ' , dia, mes<10? '0':' ', mes, anio);
  46. diasXmes[2]= 28; //de nuevo al valor original !!!
  47. return;
  48. }

1.- Funcion void no retorna nada asi que hice la impresion de la fecha dentro de la funcion ya que ademas los parametros de dia y mes se modifican dentro de dicha funcion.
2.- Te faltan el simbolo ampersand en la captura de los datos correspondientes a año y dia del año.
3.- En el for que esta dentro de la funcion inicie k en 0 de tal forma que recorra todos los meses y no solo 11 de ellos, luego incremente en 1 k para asignarlo al mes ya que de otra manera tomara siempre mes -1.
4.- La variable totaldias lleva la sumatoria de los dias del mes hasta que sea menor a dia del año ingresado por el usuario, y luego resta a esta suma el ultimo mes en que quedo la variable k antes de terminar el ciclo for.

Saludos

Fenris.