Lunes 16 de Diciembre de 2024, 00:42
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Diferencia De Fechas Con Structuras
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Diferencia De Fechas Con Structuras (Leído 1781 veces)
cybergatita
Miembro MUY activo
Mensajes: 154
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
Tweet
Diodo
Moderador
Mensajes: 658
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
struct primer{
int anio;
int dia;
int mes;
}fecha;
struct segunda{
int anio2;
int dia2;
int mes2;
}fecha2;
Deberias crear fuera del main la estructura para guardar un tipo de dato fecha, algo asi:
Código: Text
struct fecha{
int anio;
int dia;
int mes;
};
Entonces dentro del main ya puedes declarar tantos tipos de datos fecha como quieras (cada uno tendra dentro 3 ints)
Código: Text
void main()
{
fecha f1;
fecha f2;
// y ahora podrias rellenar el contenido de fechas u operar con ellas
}
Espero que te sirva
salu2
http]
Empty your memory,
with a free()...
like a pointer!
If you cast a pointer to a integer,
it becomes the integer,
if you cast a pointer to a struct,
it becomes the struct...
The pointer can crash...,
and can Overflow...
Be a pointer my friend...
cybergatita
Miembro MUY activo
Mensajes: 154
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
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
salu2
http]
Empty your memory,
with a free()...
like a pointer!
If you cast a pointer to a integer,
it becomes the integer,
if you cast a pointer to a struct,
it becomes the struct...
The pointer can crash...,
and can Overflow...
Be a pointer my friend...
cybergatita
Miembro MUY activo
Mensajes: 154
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
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
http]
Empty your memory,
with a free()...
like a pointer!
If you cast a pointer to a integer,
it becomes the integer,
if you cast a pointer to a struct,
it becomes the struct...
The pointer can crash...,
and can Overflow...
Be a pointer my friend...
cybergatita
Miembro MUY activo
Mensajes: 154
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
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
Respecto del año bisiesto, se me habia pasao completamente
, 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
http]
Empty your memory,
with a free()...
like a pointer!
If you cast a pointer to a integer,
it becomes the integer,
if you cast a pointer to a struct,
it becomes the struct...
The pointer can crash...,
and can Overflow...
Be a pointer my friend...
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Diferencia De Fechas Con Structuras