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

Validar Fecha en C (struct)

Estas en el tema de Validar Fecha en C (struct) en el foro de C/C++ en Foros del Web. Saludos compañeros, tengo el siguiente codigo... pero no me funciona ! =S Creo que lo tengo todo bien... pero no me compila (en Code::Blocks 8.02) ...
  #1 (permalink)  
Antiguo 06/02/2010, 11:33
 
Fecha de Ingreso: septiembre-2007
Mensajes: 99
Antigüedad: 16 años, 7 meses
Puntos: 0
Validar Fecha en C (struct)

Saludos compañeros, tengo el siguiente codigo... pero no me funciona ! =S
Creo que lo tengo todo bien... pero no me compila (en Code::Blocks 8.02)

Y la verdad... no se que hacer... les dejo el code:

Código:
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <conio.h>

#define es_anio_bisiesto(y)  ((((y)%400)==0)||((((y)%4)==0)&&(((y)%100)!=0)))

struct date fecha;


enum bool
{
    false = 0,
    true = 1
};

enum Mes
{
   Enero = 1,
   Febrero = 2,
   Marzo = 3,
   Abril = 4,
   Mayo = 5,
   Junio = 6,
   Julio = 7,
   Agosto = 8,
   Septiembre = 9,
   Octubre = 10,
   Noviembre = 11,
   Diciembre = 12
};


int dias_en_el_mes (int y, int m)
{
    const int dias[12] = { 31, 28, 31, 30, 31, 30,
                           31, 31, 30, 31, 30, 31 };
   int resultado;

   resultado = dias[m-1];

   if ( m == Febrero && es_anio_bisiesto ( y ) )
      resultado++;

   return resultado;
}


bool es_fecha_valida ( struct date fecha )
{
   if ( fecha.da_mon < Enero || fecha.da_mon > Diciembre )
      return false;

   if ( fecha.da_day < 0 || fecha.da_day >=
             dias_en_el_mes ( fecha.da_year, fecha.da_mon ) )
      return false;

   return true;
}

void main()
{
   struct date fecha1, fecha2;

   fecha1.da_day=1;
   fecha1.da_mon=6;
   fecha1.da_year=2006;

   fecha2.da_day=30;
   fecha2.da_mon=2;
   fecha2.da_year=2006;

   clrscr();

   if(es_fecha_valida(fecha1))
      printf("La fecha1 es valida\n");
   else
      printf("La fecha1 NO es valida\n");

   if(es_fecha_valida(fecha2))
      printf("La fecha2 es valida");
   else
      printf("La fecha2 NO es valida");

   getch();
}
Saludos y gracias
__________________
---> Webnox.es
  #2 (permalink)  
Antiguo 06/02/2010, 12:24
 
Fecha de Ingreso: enero-2010
Mensajes: 25
Antigüedad: 14 años, 3 meses
Puntos: 0
Busqueda Respuesta: Validar Fecha en C (struct)

Modifique un poco tu codigo para que funcione. Las funciones de conio.h simplemente las quite porque no suelo usar esa lib, por eso nada mas.


Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define es_anio_bisiesto(y)  ((((y)%400)==0)||((((y)%4)==0)&&(((y)%100)!=0)))
  5.  
  6. struct Fecha{
  7.     int da_mon;
  8.     int  da_day;
  9.     int  da_year;      
  10. };
  11.  
  12.  
  13. enum bool{
  14.     FALSE = 0,
  15.     TRUE = 1
  16. };
  17.  
  18. enum Mes{
  19.    Enero = 1,
  20.    Febrero = 2,
  21.    Marzo = 3,
  22.    Abril = 4,
  23.    Mayo = 5,
  24.    Junio = 6,
  25.    Julio = 7,
  26.    Agosto = 8,
  27.    Septiembre = 9,
  28.    Octubre = 10,
  29.    Noviembre = 11,
  30.    Diciembre = 12
  31. };
  32.  
  33.  
  34. int dias_en_el_mes (int y, int m){
  35.     const int dias[12] = { 31, 28, 31, 30, 31, 30,
  36.                            31, 31, 30, 31, 30, 31 };
  37.    int resultado;
  38.  
  39.    resultado = dias[m-1];
  40.  
  41.    if ( m == Febrero && es_anio_bisiesto ( y ) )
  42.       resultado++;
  43.  
  44.    return resultado;
  45. }
  46.  
  47. /*Aca debe retornar enum bool y no bool solamente porque la estructura
  48. esta declarada así.
  49. Podrias usar typedef para renombrarlo a boolean si quieres
  50. Ademas el parametro de la función debe ser un puntero a struct fecha   */
  51.  
  52. enum bool es_fecha_valida ( struct Fecha *fecha ){
  53.    if ( fecha->da_mon < Enero || fecha->da_mon > Diciembre )
  54.       return FALSE;
  55.  
  56.    if ( fecha->da_day < 0 || fecha->da_day >=
  57.              dias_en_el_mes ( fecha->da_year, fecha->da_mon ) )
  58.       return FALSE;
  59.  
  60.    return TRUE;
  61. }
  62.  
  63. int main(){
  64.    struct Fecha fecha1, fecha2;
  65.    fecha1.da_day=1;
  66.    fecha1.da_mon=6;
  67.    fecha1.da_year=2006;
  68.  
  69.    fecha2.da_day=30;
  70.    fecha2.da_mon=2;
  71.    fecha2.da_year=2006;
  72.  
  73.  
  74.    if(es_fecha_valida(&fecha1))
  75.       printf("La fecha1 es valida\n");
  76.    else
  77.       printf("La fecha1 NO es valida\n");
  78.  
  79.    if(es_fecha_valida(&fecha2))
  80.       printf("La fecha2 es valida");
  81.    else
  82.       printf("La fecha2 NO es valida");
  83.      
  84.    system("PAUSE");
  85.    return 0;
  86. }

Saludos



------------------------------------
visiten www.devshared.net


Última edición por devshared; 06/02/2010 a las 12:41
  #3 (permalink)  
Antiguo 06/02/2010, 14:06
 
Fecha de Ingreso: septiembre-2007
Mensajes: 99
Antigüedad: 16 años, 7 meses
Puntos: 0
Respuesta: Validar Fecha en C (struct)

Muchas gracias por el esfuerzo... y ahora tengo la siguiente duda:
Quiero pasar estos datos (dados que son int) a char

y tengo esto:

Código:
struct data info;

itoa (info.dia,10);
itoa (info.mes,10);
itoa (info.ano,10);

info_datos[i].dia=info.dia;
info_datos[i].mes=info.mes;
info_datos[i].ano=info.ano;
pero no se que estoy haciendo mal... creo que es por la funcion itoa

(he cambiado los nombres respecto a la funcion de arriba, pero hace lo mismo)
__________________
---> Webnox.es
  #4 (permalink)  
Antiguo 06/02/2010, 21:13
 
Fecha de Ingreso: enero-2010
Mensajes: 25
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Validar Fecha en C (struct)

El prototipo de la función itoa es el siguiente

Código C:
Ver original
  1. char * itoa(int value, char *string, int radix)

Donde
  • value es el numero a convertir
  • string es donde se almacena el numero convertido
  • radix es la base del numero

Ejemplo:

char decimalStr[20];
itoa(25, decimalStr, 10);


Saludos!!




------------------------------------
visiten www.devshared.net


Última edición por devshared; 06/02/2010 a las 21:27
  #5 (permalink)  
Antiguo 07/02/2010, 12:07
 
Fecha de Ingreso: septiembre-2007
Mensajes: 99
Antigüedad: 16 años, 7 meses
Puntos: 0
Respuesta: Validar Fecha en C (struct)

yaa... el problema que tengo es que:

char decimalStr[20];
itoa(25, decimalStr, 10);

mi char es parte de una estructura
y mi entero y parte de OTRA estructura diferente...

=S

no se como juntar ambas.... no se si me entienden...

es decir... que el int que tengo esta en por ejemplo:

info.dia

y donde lo quiero pasar a decimal es en:

info_datos[i].dia

no se como hacer eso... me da problemas =S
__________________
---> Webnox.es
  #6 (permalink)  
Antiguo 07/02/2010, 13:41
 
Fecha de Ingreso: enero-2010
Mensajes: 25
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Validar Fecha en C (struct)

No se si entendi bien lo que queres hacer pero esto es lo que hice
espero que te sirva de algo.

Código C:
Ver original
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<conio2.h>
  4.  
  5. struct data{
  6.        int dia, mes, anio;
  7. };
  8. struct dataChar{
  9.        char dia[3], mes[3], anio[5];
  10. };
  11.  
  12. int main(int argc, char *argv[]){
  13.     struct data info;
  14.     struct dataChar info_datos[3];  
  15.     info.dia = 7;
  16.     info.mes = 2;
  17.     info.anio = 2010;
  18.     itoa(info.dia, info_datos[0].dia, 10);
  19.     itoa(info.mes, info_datos[0].mes, 10);
  20.     itoa(info.anio, info_datos[0].anio, 10);
  21.     printf("Dia: %s Mes: %s Año: %s \n", info_datos[0].dia,
  22.                  info_datos[0].mes, info_datos[0].anio);
  23.     system("PAUSE");            
  24. }


Saludos!



------------------------------------
visiten www.devshared.net


Última edición por devshared; 10/02/2010 a las 20:33
  #7 (permalink)  
Antiguo 08/02/2010, 13:49
 
Fecha de Ingreso: septiembre-2007
Mensajes: 99
Antigüedad: 16 años, 7 meses
Puntos: 0
Respuesta: Validar Fecha en C (struct)

Muchas gracias... he intengado lo que me has puesto pero me da error :S

TE dejo una captura para que lo veas :s



La verdad no se que hacer =S
Esta exactamente igual que en el tyo =S

Saludos y gracias
__________________
---> Webnox.es

Etiquetas: fechas
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 08:31.