/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Funcion dia_semana

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
estoyperdida



Registrado: 25 Nov 2007
Mensajes: 16

MensajePublicado: 25/11/2007 11:17 am
Título: Funcion dia_semana

Bueno esta es la primera de las muchas dudas que tengo Rolling Eyes
Tengo que hacer un calendario gregoriano...y una de las funciones que hay que hacer es la de dia_semana:

Cita:
Devuelve el día de la semana (lunes=1, martes=2, miercoles=3... domingo=7) de una
fecha pasada como parámetro.
Para calcular el día de la semana basta con conocer la diferencia de días entre el 1 de
junio de 1981 (que fue Lunes) con el 1 del mes y año seleccionado. Una vez conocida
la diferencia de días se aplica el operador módulo (%) 7 (nos da valores de 0 a 6) y se
suma 1 (nos da valores de 1=Lunes a 7 (Domingo)).


Se que hay que usar la funcion de diferencia de fechas...pero ni idea de como hacerlo, espero que me ayude alguien Wink
Volver arriba
estoyperdida



Registrado: 25 Nov 2007
Mensajes: 16

MensajePublicado: 27/11/2007 3:41 am
Título:

Vale lo he intentado
Código:

int dia_semana(int dia, int mes, int anno)
 {
 switch(dif_dias(dia1, mes1, anno1, dia2, mes2, anno2)%7)
          {
               case 3: return 7; // Domingo
               case 4: return 1; // Lunes
               case 5: return 2; // Martes   
               case 6: return 3; // Miércoles
               case 0: return 4; // Jueves
               case 1: return 5; // Viernes
               case 2: return 6; // Sábado
          }
}

Pero no me compila...me salen estos errores

Código:

pds2.c: In function âdia_semanaâ:
pds2.c:134: error: âdia1â undeclared (first use in this function)
pds2.c:134: error: (Each undeclared identifier is reported only once
pds2.c:134: error: for each function it appears in.)
pds2.c:134: error: âmes1â undeclared (first use in this function)
pds2.c:134: error: âanno1â undeclared (first use in this function)
pds2.c:134: error: âdia2â undeclared (first use in this function)
pds2.c:134: error: âmes2â undeclared (first use in this function)
pds2.c:134: error: âanno2â undeclared (first use in this function)


Si alguien me pueder ayudarrr por favorr
Volver arriba
digies



Registrado: 18 Nov 2005
Mensajes: 377
Ubicación: Cono Sur

MensajePublicado: 27/11/2007 6:16 am
Título:

Hola

En la sección Código fuente tienes varios ejemplos.

Un saludo
Volver arriba
estoyperdida



Registrado: 25 Nov 2007
Mensajes: 16

MensajePublicado: 28/11/2007 2:20 am
Título:

Gracias^^, pero no lo encuentro >.<, soy un poco nula xD
Volver arriba
Naitmeir



Registrado: 20 Nov 2007
Mensajes: 14
Ubicación: Barcelona

MensajePublicado: 28/11/2007 2:53 am
Título:

Yo diria que en codigo fuente no esta, quizas algo se puede parecer pero no hay nada referido a los dias de la semana, yo tb lo mire... O los dos somos algo "void's" ... Es lo que tiene no tener ni zorra, ademas muchos de los que estan en el codigo fuente no puedo compilarlos sin errores. Utilizo el Visual C++
Volver arriba
estoyperdida



Registrado: 25 Nov 2007
Mensajes: 16

MensajePublicado: 28/11/2007 3:29 am
Título:

Código:
int dia_semana(int dia, int mes, int anno)
 { int dia1,mes1,anno1,dia2,mes2,anno2;
 dia1=1;
 mes1=6;
anno1=1981;
dia2=1;
mes2=mes;
anno2=anno;

 switch(dif_dias(dia1, mes1, anno1, dia2, mes2, anno2)%7)
          {
               case 3: return 7; // Domingo
               case 4: return 1; // Lunes
               case 5: return 2; // Martes   
               case 6: return 3; // Miércoles
               case 0: return 4; // Jueves
               case 1: return 5; // Viernes
               case 2: return 6; // Sábado
          }
}


He puesto esto ahora y me compila, pero al hacer la prueba me sale que el dia de la semana es siempre 4.....
Joder tengo que entregar la practica el jueves y no voy ni por la mitad >.<
Volver arriba
david_celta



Registrado: 02 Jun 2005
Mensajes: 151

MensajePublicado: 28/11/2007 5:36 pm
Título:

Encontre esto por ahi
//0->domingo,1->lunes,....6->sabado
//si el año es bisiesto restarle uno al resultado de la funcion

int dia_semana(int dd, int mm, int aaaa)
{
int A = (aaaa % 100) + ((aaaa % 100) / 4);
int B = dd;
int C;

switch (mm)
{
case 1: C=0;break;
case 2: C=3;break;
case 3: C=3;break;
case 4: C=-1;break;
case 5: C=1;break;
case 6: C=4;break;
case 7: C=-1;break;
case 8: C=2;break;
case 9: C=-2;break;
case 10: C=0;break;
case 11: C=3;break;
case 12: C=-2;break;
}

int D;

if(aaaa>=1600 && aaaa<1700) D=6;
if(aaaa>=1700 && aaaa<1800) D=4;
if(aaaa>=1800 && aaaa<1900) D=2;
if(aaaa>=1900) D=0;

int S=(A+B+C+D)%7;

return S-1;
}

Hmmmm, prueba a ver si ese te sirve. Tu funcion dif_dias quiza tiene algun problema por eso siempre te deviuelve lo mismo.
_________________
In all your fantasies,
you always knew
that man and mystery...

...were both in you...
Volver arriba
david_celta



Registrado: 02 Jun 2005
Mensajes: 151

MensajePublicado: 28/11/2007 6:16 pm
Título:

Tambien encontre esto:

Cita:


The following short C program works for a restricted range, it returns 0 for Monday, 1 for Tuesday, etc.


dow(m,d,y){y-=m<3;return(y+y/4-y/100+y/400+"-bed=pen+mad."[m]+d)%7;}

The program appeared was posted by (Tomohiko Sakamoto) on comp.lang.c on March 10th, 1993.


_________________
In all your fantasies,
you always knew
that man and mystery...

...were both in you...
Volver arriba
estoyperdida



Registrado: 25 Nov 2007
Mensajes: 16

MensajePublicado: 30/11/2007 12:08 pm
Título:

Muchas gracias a tods!!!
Aunque el problema se ve que esta en otra funcion, o en la de diferencia de dias, o en la comparar fechas o a saber... Rolling Eyes
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com