| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
estoyperdida
Registrado: 25 Nov 2007 Mensajes: 16
| Publicado: 25/11/2007 11:17 am | | | Título: Funcion dia_semana |
| Bueno esta es la primera de las muchas dudas que tengo  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  |
|
| Volver arriba | |
 |
estoyperdida
Registrado: 25 Nov 2007 Mensajes: 16
| Publicado: 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
| Publicado: 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
| Publicado: 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
| Publicado: 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
| Publicado: 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
| Publicado: 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
| Publicado: 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
| Publicado: 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...  |
|
| Volver arriba | |
 |
|
|