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#include <stdio.h>
#include <conio.h>
#include <math.h>
void diaYmes(int, int, int, int);
int diasXmes[]= {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;
clrscr();
printf("escriba el dia del a¤o : "); scanf("%d", &diadelanhio
); diaYmes(anhio,diadelanhio, dia, mes);
return 0;
}
void diaYmes(int anio, int diadelanio, int dia, int mes)
{
int totaldias; //??? comente el significado de esta variable
int bisiesto;
int k;
bisiesto = (anio % 4== 0 && anio % 100 != 0) || (anio % 400 == 0);
/*int suma=0; solo con fines de prueba
for(int i=0; i<12; i++){
suma+=diasXmes[i];
printf("\nmes %d tiene %d dias; total anual : %d\n",i+1,diasXmes[i], suma);
}
*/
if (bisiesto) diasXmes[2]= 29;
for (totaldias= 0, k= 0; totaldias < diadelanio; totaldias += diasXmes[k], k++);
//printf("\ntotal dias : %d\n", totaldias);
//printf("\nk : %d\n", k);
totaldias -= diasXmes[--k]; //Hasta el mes anterior
//printf("\nk : %d\n", k);
//printf("total dias : %d\n", totaldias);
dia= diadelanio - totaldias;
mes= k+1;
printf("%c%d/%c%d/%d\n", dia
<10?'0':' ' , dia
, mes
<10? '0':' ', mes
, anio
); diasXmes[2]= 28; //de nuevo al valor original !!!
return;
}
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.