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

Ayuda para corregir un código

Estas en el tema de Ayuda para corregir un código en el foro de C/C++ en Foros del Web. Hola, antes de nada decir que soy nueva en el foro y espero que nos llevemos bien :D Bien, la semana que viene tengo que ...
  #1 (permalink)  
Antiguo 23/04/2010, 13:33
 
Fecha de Ingreso: abril-2010
Ubicación: Galicia
Mensajes: 11
Antigüedad: 14 años, 2 meses
Puntos: 0
Exclamación Ayuda para corregir un código

Hola, antes de nada decir que soy nueva en el foro y espero que nos llevemos bien :D

Bien, la semana que viene tengo que presentar un trabajo, el profesor de fundamentos de ordenadores nos ha enviado un código que tenemos que corregir...lo he corregido y me sigue dando un montón de errores...espero que alguien me pueda ayudar porque no sé que más hacer. GRACIAS

Este es el código:

#include <stdio.h>
int diasXmes[]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{
int anhio, diadelanhio; //no hace falta inicializarlos
int dia = 0, mes = 0;
void diaYmes(int, int, int, int);
printf("escriba anhio y dia del anhio: ");
scanf("%d %d\n", anhio, diadelanhio);
diaYmes(anhio,diadelanhio, dia, mes);
printf("%c%d/%c%d/%d\n",
dia<10?'0':' ' , dia, mes<10? '0':' ', mes, anhio);
return 0;
}
void diaYmes(int anio, int diadelanio, int dia, int mes)
{
int totaldias; //??? comente el signicado de esta variable
int bisiesto;
int k;
bisiesto = anio % 4== 0 && anio % 100 != 0
|| anio % 400 == 0;
if (bisiesto) diasXmes[2]= 29;
for (totaldias= 0, k= 1; totaldias < diadelanio;
totaldias += diasXmes[k], k++);
totaldias -= diasXmes[--k]; //Hasta el mes anterior
dia= diadelanio- totaldias;
mes= k;
diasXmes[2]= 28; //de nuevo al valor original !!!
return;
}

Espero que alguien me pueda ayudar, saludos!

Última edición por informatica18; 23/04/2010 a las 13:43
  #2 (permalink)  
Antiguo 23/04/2010, 14:07
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Ayuda para corregir un código

Cual es el objetivo del código, que resultado debería dar, ya que lo he corregido y me entrega un resultado formateado como fecha pero 00/00/2010 por ejemplo, y eso independientemente del día que escriba.
  #3 (permalink)  
Antiguo 23/04/2010, 14:21
 
Fecha de Ingreso: abril-2010
Ubicación: Galicia
Mensajes: 11
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Ayuda para corregir un código

No lo sé...nos ha mandado por email un documento en pdf diciendo que tenemos que corregir ese código y el único dato complentario que nos da es el siguiente:

/* La funcion diaYmes tiene como entrada anio y dia del anio y PRETENDE
entregar la fecha (el dia y mes que corresponda).
Ejemplos:
Entrada: anio 2010, dia del anio: 1. Salida: 01/01/2010
Entrada: anio 2009, dia del anio: 200. Salida: 19/07/2009
*/


Saludos y gracias
  #4 (permalink)  
Antiguo 23/04/2010, 15:50
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 15 años, 10 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.
  #5 (permalink)  
Antiguo 23/04/2010, 16:41
 
Fecha de Ingreso: abril-2010
Ubicación: Galicia
Mensajes: 11
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Ayuda para corregir un código

Muchísimas graciass!!Funciona perfectamente!!

Mil gracias Fenris

Etiquetas: corregir
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 01:33.