TODOPIC

Lenguajes de programación para PC => C, C#, C++ => Mensaje iniciado por: Daniel1952 en 25 de Mayo de 2017, 22:15:11

Título: Obtener el día de la semana con fecha distinta a la actual[C]
Publicado por: Daniel1952 en 25 de Mayo de 2017, 22:15:11
Hola, muy buen día. -
El programa que dejo a continuación logra perfectamente lo que necesito, pero quiero meter todo esto en una función para obtener el día de la semana, nada más que eso y me parecen muchas líneas para lograr tan solo una, alguien tiene algo con menos líneas y que haga lo mismo? .-

Código: C
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. char *dias [] = {" ", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado", "Domingo"} ;
  6.  
  7. int main ( int argc, char *argv[ ] ){
  8.         struct tm fecha;
  9.         int anyo, mes, dia;
  10.  
  11.         printf (" \n Anio.....: ");
  12.         scanf ("%d", &anyo) ;
  13.  
  14.         printf( " Mes......: ");
  15.         scanf ("%d", &mes);
  16.  
  17.         printf ( " Dia......: ");
  18.         scanf ("%d", &dia) ;
  19.  
  20.         fecha.tm_year = anyo - 1900;
  21.         fecha.tm_mon = mes - 1;
  22.         fecha.tm_mday = dia;
  23.         fecha.tm_hour = 0;
  24.         fecha.tm_min = 0;
  25.         fecha.tm_sec = 1;
  26.         fecha.tm_isdst = -1;
  27.  
  28.         if (mktime (&fecha) == -1){
  29.                 puts ( " Error en la fecha. " ) ;
  30.                 exit(-1);
  31.         }
  32.  
  33.         if (fecha.tm_wday == 0)
  34.                 fecha.tm_wday = 7;
  35.  
  36.         printf("\n El %d/%d/%d es %s" , dia, mes, anyo, dias[fecha.tm_wday]);
  37.  
  38.         return EXIT_SUCCESS;
  39. }

Un saludo para todos.
Daniel
Título: Re:Obtener el día de la semana con fecha distinta a la actual[C]
Publicado por: KILLERJC en 25 de Mayo de 2017, 22:58:04
Te dejo algunos codigos de StackOverflow:


Para una entrada de la forma: dd-mm-aaaa
Devuelve el indice del dia o -1

Código: C
  1. int get_weekday(char * str) {
  2.   struct tm tm;
  3.   memset((void *) &tm, 0, sizeof(tm));
  4.   if (strptime(str, "%d-%m-%Y", &tm) != NULL) {
  5.     time_t t = mktime(&tm);
  6.     if (t >= 0) {
  7.       return localtime(&t)->tm_wday; // Sunday=0, Monday=1, etc.
  8.     }
  9.   }
  10.   return -1;
  11. }

Otra funcion es esta, no conserva los valores de algunas varaibles asi que no es problema para una funcion Y que podes pasar como enteros.
Devuelve el indice del dia que comienza en el Domingo, es decir 1 seria Lunes.

Código: C
  1. int d    = 15   ; //Day     1-31
  2. int m    = 5    ; //Month   1-12`
  3. int y    = 2013 ; //Year    2013`
  4.  
  5. int weekday  = (d += m < 3 ? y-- : y - 2, 23*m/9 + d + 4 + y/4- y/100 + y/400)%7;

No los probe, pero supongo que funcionaran correctamente.
Título: Re:Obtener el día de la semana con fecha distinta a la actual[C]
Publicado por: Daniel1952 en 27 de Mayo de 2017, 13:09:54
Hola, ¿cómo estas? -
Utilice el segundo ej. y funciona a la perfección (menos líneas imposible ((:-)) ((:-)) ((:-))) como bien lo dices cambia el valor original de las variables. -
Solo como curiosidad, me podrías pasar la página donde obtuviste esos ejs.

Código: C
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. int main ( int argc, char *argv[ ] ){
  6.         char *dias[] = {" ", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado", "Domingo"} ;
  7.         int d = 18, m = 1, y = 1952;
  8.  
  9.         int nombreDiaSemana = ( d += m < 3 ? y-- : y - 2, 23*m/9 + d + 4 + y/4- y/100 + y/400 )%7;     
  10.        
  11.         printf( "\n %s \n", *(dias+nombreDiaSemana) );
  12.        
  13.         return EXIT_SUCCESS;
  14. }

Saludos y muchas gracias. -
Daniel 
Título: Re:Obtener el día de la semana con fecha distinta a la actual[C]
Publicado por: KILLERJC en 27 de Mayo de 2017, 14:04:11
Busque por google "Day of week C"

Y el primer resultado fue el de stackoverflow

https://stackoverflow.com/questions/6054016/c-program-to-find-day-of-week-given-date