• Lunes 16 de Diciembre de 2024, 00:42

Autor Tema:  Diferencia De Fechas Con Structuras  (Leído 1781 veces)

cybergatita

  • Miembro MUY activo
  • ***
  • Mensajes: 154
    • Ver Perfil
Diferencia De Fechas Con Structuras
« en: Martes 6 de Septiembre de 2005, 02:57 »
0
Que tal

Soy nueva en este foro. mi primer vez que posteo y principiante en el mundo de la programacion.


El ejersicio es dadas dos fechas por usuario, dar el resultado de diferencias de dias con structuras
#include <dos.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>


 void main()
{
   struct date d;
  clrscr();
  printf(" La fecha actual es:\n\n\n\n");

   getdate(&d);
   printf("El a¤o es: %d\n", d.da_year);
   printf("El dia es: %d\n", d.da_day);
   printf("El mes es: %d\n", d.da_mon);
   getch();

printf("Ingresa dos fechas, se te pedira una y despues la otra\n recuerda que el dia y el mes los tomaremos en cuenta con digitos numericos\n\n\n\n");

struct primer{
int anio;
int dia;
int mes;
}fecha;
struct segunda{
int anio2;
int dia2;
int mes2;
}fecha2;

printf("A¤o de tu primer fecha\n\n");
scanf("%d",&fecha.anio);
printf("Dia de tu primer fecha\n\n");
scanf("%d",&fecha.dia);
printf("Mes de tu primer fecha\n\n");
scanf("%d",&fecha.mes);
printf("Estos son los datos de tu primer fecha\n\n\n");
printf("A¤o: %d\n",fecha.anio);
printf("Dia: %d\n",fecha.dia);
printf("Mes: %d\n",fecha.mes);

getch();
printf(" Ingresaras ahora tu segunda fecha\n\n\n");
printf("A¤o de tu segunda fecha\n\n");
scanf("%d",&fecha2.anio2);
printf("Dia de tu segunda fecha\n\n");
scanf("%d",&fecha2.dia2);
printf("Mes de tu segunda fecha\n\n");
scanf("%d",&fecha2.mes2);
printf("Estos son los datos de tu segunda fecha\n\n\n");
printf("A¤o: %d\n",fecha2.anio2);
printf("Dia: %d\n",fecha2.dia2);
printf("Mes: %d\n",fecha2.mes2);
             getdate

getch();
}
yo he hecho eso , pero al momento de hacer la operacion tengo muchas dudas

alguien me podria ayudar



gracias

Diodo

  • Moderador
  • ******
  • Mensajes: 658
    • Ver Perfil
    • http://www.solocodigo.com
Re: Diferencia De Fechas Con Structuras
« Respuesta #1 en: Martes 6 de Septiembre de 2005, 09:01 »
0
Hola

Para empezar te dire que la utilidad de las estructuras es crear un nuevo tipo de datos, por lo que esto que haces no tiene mucho sentido
Código: Text
  1.  
  2. struct primer{
  3. int anio;
  4. int dia;
  5. int mes;
  6. }fecha;
  7. struct segunda{
  8. int anio2;
  9. int dia2;
  10. int mes2;
  11. }fecha2;
  12.  

Deberias crear fuera del main la estructura para guardar un tipo de dato fecha, algo asi:

Código: Text
  1.  
  2.  
  3. struct fecha{
  4. int anio;
  5. int dia;
  6. int mes;
  7. };
  8.  
  9.  

Entonces dentro del main ya puedes declarar tantos tipos de datos fecha como quieras (cada uno tendra dentro 3 ints)

Código: Text
  1.  
  2. void main()
  3. {
  4.  
  5. fecha f1;
  6. fecha f2;
  7. // y ahora podrias rellenar el contenido de fechas u operar con ellas
  8. }
  9.  
  10.  


Espero que te sirva

salu2 :hola:

cybergatita

  • Miembro MUY activo
  • ***
  • Mensajes: 154
    • Ver Perfil
Re: Diferencia De Fechas Con Structuras
« Respuesta #2 en: Martes 6 de Septiembre de 2005, 22:05 »
0
Gracias diodo
ya lo estoy tomando en cuenta.

Pero sigo con la duda de como podre hacer la operacion para uqe me de la diferencia de entre las dos fechas.

Gracias.

Diodo

  • Moderador
  • ******
  • Mensajes: 658
    • Ver Perfil
    • http://www.solocodigo.com
Re: Diferencia De Fechas Con Structuras
« Respuesta #3 en: Martes 6 de Septiembre de 2005, 23:08 »
0
Hola

La manera mas facil que se me ocurre para hacer esa operacion es calcular el numero de dias transcurridos desde el año 0 mes 0 dia 0.Por ejemplo: 4-4-2002

dias                 ---> 4
dias*meses      ---->30*3=120
dias*años         ---->365*2001= lo que sea

y sumas todos los dias

Esto suponiendo que los meses tienen todos 30 dias.Si quieres hacerlo exacto pues te haces un vector entero de 12 elementos,donde cada elemento sera el numero de dias correspondiente a ese mes y vas haciendo sumas de los elementos hasta n=numero del mes-1

Una vez pasadas las fechas a dias, solo tendrias que restar a la fecha mas reciente la fecha mas antigua, obteniendo asi la diferencia de dias

Espero que no te haya liado mas  :lol:

salu2  :hola:

cybergatita

  • Miembro MUY activo
  • ***
  • Mensajes: 154
    • Ver Perfil
Re: Diferencia De Fechas Con Structuras
« Respuesta #4 en: Miércoles 7 de Septiembre de 2005, 02:10 »
0
#include <dos.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

struct fecha{
int anio;
int dia;
int mes;
};
 struct date d;

 void main()
 
{
   fecha f1;
   fecha f2;
 
 clrscr();
 printf(" La fecha actual es:\n\n\n\n");

  getdate(&d);
  printf("El a¤o es: %d\n", d.da_year);
  printf("El dia es: %d\n", d.da_day);
  printf("El mes es: %d\n", d.da_mon);
  getch();

printf("Ingresa dos fechas, se te pedira una y despues la otra\n recuerda que el dia y el mes los tomaremos en cuenta con digitos numericos\n\n\n\n");
printf("A¤o de tu primer fecha\n\n");
scanf("%d",&f1.anio);
printf("Dia de tu primer fecha\n\n");
scanf("%d",&f1.dia);
printf("Mes de tu primer fecha\n\n");
scanf("%d",&f1.mes);
printf("Estos son los datos de tu primer fecha\n\n\n");
printf("A¤o: %d\n",f1.anio);
printf("Dia: %d\n",f1.dia);
printf("Mes: %d\n",f1.mes);
getch();
printf(" Ingresaras ahora tu segunda fecha\n\n\n");
printf("A¤o de tu segunda fecha\n\n");
scanf("%d",&f2.anio);
printf("Dia de tu segunda fecha\n\n");
scanf("%d",&f2.dia);
printf("Mes de tu segunda fecha\n\n");
scanf("%d",&f2.mes);
printf("Estos son los datos de tu segunda fecha\n\n\n");
printf("A¤o: %d\n",f2.anio);
printf("Dia: %d\n",f2.dia);
printf("Mes: %d\n",f2.mes);
getch();
}


mira modifique un poco el codigo, con las sugerencias que me diste..
esta bien asi?


y bueno la verdad si me revolviste un poquito mas con eso de las operaciones :(



saludos :(

Diodo

  • Moderador
  • ******
  • Mensajes: 658
    • Ver Perfil
    • http://www.solocodigo.com
Re: Diferencia De Fechas Con Structuras
« Respuesta #5 en: Miércoles 7 de Septiembre de 2005, 09:24 »
0
Hola

A primera vista si que esta bien.¿Te compila bien?
Lo que deberias hacerle tambien es una comprobacion de que las entradas que mete el usuario esten bien, es decir, que no meta por ejemplo en el mes un numero mayor de 12 ni en el dia un numero mayor de 31.

Bueno empieza con la operacion de hallar los dias enre 2 fechas, y si tienes alguna duda lo dices por aca.

salu2  :hola:

cybergatita

  • Miembro MUY activo
  • ***
  • Mensajes: 154
    • Ver Perfil
Re: Diferencia De Fechas Con Structuras
« Respuesta #6 en: Jueves 8 de Septiembre de 2005, 00:06 »
0
#include <dos.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

struct fecha{
int anio;
int dia;
int mes;
};
 struct date d;

 void main()

{
textcolor(RED);

int mesm, anion, diad;
  mesm=anion=diad=0;
   fecha f1={0,0,0};
   fecha f2={0,0,0};
 int total=0;
 int bi=0;
/* int meses=0;*/
 clrscr();
 printf(" La fecha actual es:\n\n\n\n");

  getdate(&d);
  printf("El a¤o es: %d\n", d.da_year);
  printf("El dia es: %d\n", d.da_day);
  printf("El mes es: %d\n", d.da_mon);
  getch();



printf("Ingresa dos fechas, se te pedira una y despues la otra\n recuerda que el dia y el mes los tomaremos en cuenta con digitos numericos\n\n\n\n");
printf("A¤o de tu primer fecha\n\n");
scanf("%d",&f1.anio);
printf("Dia de tu primer fecha\n\n");
scanf("%d",&f1.dia);
printf("Mes de tu primer fecha\n\n");
scanf("%d",&f1.mes);
printf("Estos son los datos de tu primer fecha\n\n\n");
printf("A¤o: %d\n",f1.anio);
printf("Dia: %d\n",f1.dia);
printf("Mes: %d\n",f1.mes);
getch();
printf(" Ingresaras ahora tu segunda fecha\n\n\n");
printf("A¤o de tu segunda fecha\n\n");
scanf("%d",&f2.anio);
printf("Dia de tu segunda fecha\n\n");
scanf("%d",&f2.dia);
printf("Mes de tu segunda fecha\n\n");
scanf("%d",&f2.mes);
printf("Estos son los datos de tu segunda fecha\n\n\n");
printf("A¤o: %d\n",f2.anio);
printf("Dia: %d\n",f2.dia);
printf("Mes: %d\n",f2.mes);

 getch();
/*
 if ((f1.mes==1)&&(f2.mes==1));
  meses=31;
 if((f1.mes==2)||(f2.mes==2));
 meses=29;
if  ((f1.mes==3)||(f2.mes==3));
 meses=31;
if ((f1.mes==4)||(f2.mes==4));
 meses=30;
if ((f1.mes==5)||(f2.mes==5));
 meses=31;
if ((f1.mes==6)||(f2.mes==6));
 meses=31;
if ((f1.mes==7)||(f2.mes==7));
 meses=31;
if ((f1.mes==8)||(f2.mes==8));
 meses=31;
if ((f1.mes==9)||(f2.mes==9));
 meses=30;
if ((f1.mes==10)&&(f2.mes==10));
 meses=31;
if ((f1.mes==11)&&(f2.mes==11));
 meses=30;
if ((f1.mes==12)&&(f2.mes==12));
 meses=31;
         */

 if((f1.anio%4==0)&&(f1.anio%100==0)&&(f1.anio%400==0))
   bi=366;
 else
 bi=365;

if (f1.dia<f2.dia)
diad=f2.dia-f1.dia;
else
diad=f1.dia-f2.dia;
if(f1.mes<f2.mes)
mesm=(f2.mes-f1.mes)*bi/12;
else
mesm=(f1.mes-f2.mes)*bi/12;
if(f1.anio<f2.anio)
anion=(f2.anio-f1.anio)*bi;
else
anion=(f1.anio-f2.anio)*bi;


/*printf("La direferencia de a¤os en dias es:%d\n",mesm);
printf("La direferencia de meses en dias es:%d\n",anion);*/

total=diad+mesm+anion;
printf("La diferencia TOTAL en dias  entre las dos fechas es: %d\n", total);
getch();


}

*obviamente a lo que este entre /* */ no le hagas caso, es cuando estabamos delirando como hacer las operaciones jaja

Mira ya esta terminado, solo que hay un problema, en algunas fechas no las calcula bien,, y en otras si,,, el año bisiesto ya viste como hice la operacion?
sobre el problema ya inicialize varialbes,,mmh pero en este momento no se me ocurre nada

saludos,,, y gracias por tu ayuda.

Diodo

  • Moderador
  • ******
  • Mensajes: 658
    • Ver Perfil
    • http://www.solocodigo.com
Re: Diferencia De Fechas Con Structuras
« Respuesta #7 en: Viernes 9 de Septiembre de 2005, 12:05 »
0
Hola, parece que el codigo esta bien, tiene buena pinta  :good:

Respecto del año bisiesto, se me habia pasao completamente  :lol: , y eso que naci en uno de ellos

Yo creo que valdria con hacer esta comparacion ¿no?

 if((f1.anio%4==0)

Si no me equivoco bisiestos son los años 4,8,12,16,20,........1980,1984,1988,1992,1996,2000,2004.........
cuya division por 4 no da decimales.
A lo mejor me equivoco no se, si eso me explicas para que haces estas dos condiciones mas

(f1.anio%100==0)&&(f1.anio%400==0)

Respecto de los meses

mesm=(f2.mes-f1.mes)*bi/12;

Cuando haces esta operacion estas asignando a los meses el mismo numero de dias, entonces es posible que por eso te salgan bien algunas fechas y otras no.

Otra cosa que podrias hacer y que quedaria mas pofechinal seria hacer una funcion especifica para calcular el numero de dias de una fecha, pasandole como argumento una struct fecha

salu2  :hola: