Witam koledzy od dłuższego czasu męczę się z programem który obliczy różnice dni między 2 podanymi datami (rok,miesiac,dni,godzina,minuta,sekunda)
Dokopałem się by zamienić podane daty na daty Juliańskie a następnie odjąć je od siebie dzięki czemu wychodzą ładnie dni lecz mam problem z sekundami
i w przypadkach gdy dzień nie minął do końca program nie spełnia założeń.
Przy podanych danych wejsciowych
5
1997 12 31 0 0 0
1998 1 1 0 0 0
1997 12 31 23 59 59
1998 12 31 23 59 59
1997 12 31 23 59 59
1998 1 1 23 59 58
2000 2 20 0 0 0
2000 3 20 23 59 59
2000 2 29 0 0 0
2000 3 1 0 0 0
Powinno wypluć:
1
365
0
29
1
Pierwsza zmienna D w tym przypadku 5 oznacza ilość testów.
Przy 3 teście zamiast 0 wypluwa mi 1 i nwm jak sobie poradzić z tym problemem dotyczącym sekund.
Oto kod
#include <iostream>
using namespace std;
int Wprowadz_D()
{
int D=0;
while(D<1 or D>2000)
{
cin>>D;
}
return D;
}
void dodaj_chwile(int *tab1,int *tab2)
{
for(int i=0;i<=5;i++)
cin>>tab1[i];
for(int i=0;i<=5;i++)
cin>>tab2[i];
}
void wypisz(int *tab1,int *tab2)
{
for(int i=0;i<=5;i++)
cout<<tab1[i]<<" ";
cout<<endl;
for(int i=0;i<=5;i++)
cout<<tab2[i]<<" ";
}
int Julianskie(int R,int M,int D)
{
double X,A,Y,V,B,Q,C,W,E,JD;
X=(M+9)/12;
A=4716+R+(int)X;
Y=275*M/9;
V=7*A/4;
B=1729279.5+367*R+(int)Y-(int)V+D;
Q=(A+83)/100;
C=(int)Q;
W=3*(C+1)/4;
E=(int)W;
JD=B+38-E;
return JD;
}
int sekundy(int *T1,int *T2)
{
int t1=T1[3]*3600+T1[4]*60+T1[5];
int t2=T2[3]*3600+T2[4]*60+T2[5];
return t2-t1;
}
void wypisz_dane(int tab[],int D)
{
for(int i=0;i<D;i++)
{
cout<<tab[i]<<endl;
}
}
main()
{
int T1[5],T2[5];
int D=Wprowadz_D();
int *wsk_T1=T1,*wsk_T2=T2,roznica,dane[D];
int *wsk_dane=dane;
for(int i=0;i<D;i++)
{
dodaj_chwile(wsk_T1,wsk_T2);
roznica=Julianskie(T2[0],T2[1],T2[2])-Julianskie(T1[0],T1[1],T1[2]);
int sek=sekundy(wsk_T1,wsk_T2);
wsk_dane[i]=roznica;
}
wypisz_dane(dane,D);
}