Witam. Piszę program do operacji na datach i stanąłem w martwym punkcie. Zrobiłem wyświetlanie dat w trzech formach jako trzy klasy. Chciałbym zrobić jeszcze operator odejmowania dwóch dat, próbowałem zrobić jako algorytm zamiany na dni juliańskie, odejmowanie i z powrotem na gregoriańskie. Efekt jest taki, że kompletnie się nie trzyma to rzeczywistości. Nie mogę sobie z tym poradzić, tym bardziej, że chcę aby wartość była pobierana z wartości w konstruktorze. Istnieje biblioteka 'time.h' i być może tu jest pies pogrzebany ale nie bardzo wiem jak z tego skorzystać. Dodatkowo chcę jeszcze aby przy pomocy operatora '<' przesunąć datę o zadaną ilość d/m/r, myślę, że rozwiązanie mogłoby być podobne aczkolwiek nie mogę sobie z tym poradzić. Z góry dzięki za wszelkie rady. Pozdrawiam. Chodzi o c++ oczywiście, dalej kod, który napisałem do tej pory.
#include <iostream>
#include <cmath>
#include <string>
#include <time.h>
using namespace std;
class Data1;
class Data
{
public:
unsigned int dzien;
unsigned int miesiac;
unsigned int rok;
public:
Data (); //konstruktor domniemanny
Data (const unsigned int &d, const unsigned int &m, const unsigned int &r); //konstuktor par
~Data ();
virtual void drukuj();
Data operator - (const Data &dod);
int setdzien(const int &d);
int getdzien();
int setmiesiac(const int &m);
int getmiesiac(const int &m);
int setrok(const int &r);
int getrok(const int &r);
};
Data::Data() : dzien(0) , miesiac(0), rok(0)
{
}
Data::Data(const unsigned int &d, const unsigned int &m, const unsigned int &r) //: dzien(d), miesiac(m), rok(r)
{
cout << "konstr" << endl;
//dzien = d;
if(d<31)
{
dzien = d;
}
else
{
dzien=0;
cout << "bledna data!!" << endl;
}
//drukuj();
miesiac = m;
rok = r;
}
Data::~Data()
{
cout << "destr" << endl;
}
void Data::drukuj()
{
//if(dzien!=0)
//{
//cout << " Drukuje date w formacie dd-mm-rrrr \n" ;
cout.fill('0');
cout.width(2);
cout << dzien << "-";
cout.fill('0');
cout.width(2);
cout << miesiac << "-";
cout.fill(' ');
cout.width(4);
cout << rok << endl;
//}
}
Data Data::operator - (const Data &dod)
{
DateTime t = DateTime.now;
Data tmp1;
double X, A, Y, V, B, Q, C, W, E, JD;
double X1, A1, Y1, V1, B1, Q1, C1, W1, E1, JD1;
double W2, X2, U2, Y2, Z2, A2, B2, C2, E2, F2;
double sum;
X = (dod.miesiac + 9) / 12;
A = 4716 + dod.rok + int(X);
Y = 275 * dod.miesiac / 9;
V = 7 * A / 4;
B = 1729279.5 + (367 * dod.rok) + int(Y) + int(V) + dod.dzien;
Q = (A + 83) / 100;
C = int(Q);
W = 3 * (C + 1) / 4;
E = int(W);
JD = B + 38 - E;
X1 = (miesiac + 9) / 12;
A1 = 4716 + rok + int(X1);
Y1 = 275 * miesiac / 9;
V1 = 7 * A1 / 4;
B1 = 1729279.5 + (367 * rok) + int(Y1) + int(V1) + dzien;
Q1 = (A1 + 83) / 100;
C1 = int(Q1);
W1 = 3 * (C1 + 1) / 4;
E1 = int(W1);
JD1 = B1 + 38 - E1;
sum = JD - JD1;
W2 = sum + 0.5;
X2 = int(W2);
U2 = W2 - X2;
Y2 = int((X2 + 32044.5) / 36524.25);
Z2 = X2 + Y2 - int(Y2 / 4) - 38;
A2 = Z2 + 1524;
B2 = int((A2 - 122.1) / 365.25);
C2 = A2 - int(365.25 * B2);
E2 = int(C2 / 30.61);
F2 = int(E2 / 14);
tmp1.rok = int(B2 - 4716 + F2);
tmp1.miesiac = int(E2 - 1 - (12 * F2));
tmp1.dzien = int(C2 + U2 - int(153 * E2 / 5));
return tmp1;
}
//int Data::setdzien(const int &d)
//{
// //dzien = d;
// if(d<31)
// {
// dzien = d;
// return dzien;
// }
// else
// {
// dzien=0;
// cout << "bledna data!!" << endl;
// return 0;
// }
//}
//
//int Data::getdzien()
// {
// return dzien;
// }
class Data1 : public Data
{
public:
string miesiac;
public:
Data1();
Data1 (const unsigned int &d, string m, const unsigned int &r);
~Data1();
void drukuj();
int zamien();
};
Data1::Data1()
{
dzien = 0;
miesiac;
rok = 0;
}
Data1::Data1(const unsigned int &d, string m, const unsigned int &r)
{
dzien = d;
miesiac = m;
rok = r;
cout << "konst1" << endl;
zamien();
}
Data1::~Data1()
{
cout << "destr1" << endl;
}
void Data1::drukuj()
{
//if(dzien!=0)
//{
//cout << " Drukuje date w formacie dd-mm-rrrr \n" ;
cout.fill('0');
cout.width(2);
cout << dzien << " ";
// cout.fill('0');
// cout.width(2);
cout << miesiac << " ";
cout.fill(' ');
cout.width(4);
cout << rok << endl;
//}
//string str = miesiac;
//int i = atoi(str.c_str());
//cout << " \t miesiac w int = " << i << endl;
}
int Data1::zamien()
{
int tmp;
if(miesiac=="styczen")
{
//m=miesiac;
tmp=1;
cout<< tmp << endl;
return tmp;
}
else if(miesiac=="luty")
{
//m=miesiac;
tmp=2;
cout << tmp << endl;
return tmp;
}
else if(miesiac=="marzec")
{
//m=miesiac;
tmp=3;
cout<< tmp << endl;
return tmp;
}
else if(miesiac=="kwiecien")
{
//m=miesiac;
tmp=4;
cout<< tmp << endl;
return tmp;
}
else if(miesiac=="maj")
{
//m=miesiac;
tmp=5;
cout<< tmp << endl;
return tmp;
}
else if(miesiac=="czerwiec")
{
//m=miesiac;
tmp=6;
cout<< tmp << endl;
return tmp;
}
else if(miesiac=="lipiec")
{
//m=miesiac;
tmp=7;
cout<< tmp << endl;
return tmp;
}
else if(miesiac=="sierpien")
{
//m=miesiac;
tmp=8;
cout<< tmp << endl;
return tmp;
}
else if(miesiac=="wrzesien")
{
//m=miesiac;
tmp=9;
cout<< tmp << endl;
return tmp;
}
else if(miesiac=="pazdziernik")
{
//m=miesiac;
tmp=10;
cout<< tmp << endl;
return tmp;
}
else if(miesiac=="listopad")
{
//m=miesiac;
tmp=11;
cout<< tmp << endl;
return tmp;
}
else if(miesiac=="grudzien")
{
//m=miesiac;
tmp=12;
cout<< tmp << endl;
return tmp;
}
else
{
cout << " nie ma takiego miesiaca " << endl;
tmp = 0;
return 0;
}
}
class Data2 : public Data1
{
public:
Data2();
Data2 (const unsigned int &d, string m, const unsigned int &r);
~Data2();
void drukuj();
int zamien();
};
Data2::Data2()
{
dzien = 0;
miesiac;
rok = 0;
}
Data2::Data2(const unsigned int &d, string m, const unsigned int &r)
{
dzien = d;
miesiac = m;
rok = r;
cout << "konst2" << endl;
}
Data2::~Data2()
{
cout << "destr2" << endl;
}
void Data2::drukuj()
{
//if(dzien!=0)
//{
//cout << " Drukuje date w formacie dd-mm-rrrr \n" ;
cout.fill('0');
cout.width(2);
cout << dzien << ".";
// cout.fill('0');
// cout.width(2);
cout << miesiac << ".";
cout.fill(' ');
cout.width(4);
cout << rok << endl;
//}
}
int Data2::zamien()
{
int tmp;
if(miesiac=="I")
{
//m=miesiac;
tmp=1;
cout<< tmp << endl;
return tmp;
}
else if(miesiac=="II")
{
//m=miesiac;
tmp=2;
cout << tmp << endl;
return tmp;
}
else if(miesiac=="III")
{
//m=miesiac;
tmp=3;
cout<< tmp << endl;
return tmp;
}
else if(miesiac=="IV")
{
//m=miesiac;
tmp=4;
cout<< tmp << endl;
return tmp;
}
else if(miesiac=="V")
{
//m=miesiac;
tmp=5;
cout<< tmp << endl;
return tmp;
}
else if(miesiac=="VI")
{
//m=miesiac;
tmp=6;
cout<< tmp << endl;
return tmp;
}
else if(miesiac=="VII")
{
//m=miesiac;
tmp=7;
cout<< tmp << endl;
return tmp;
}
else if(miesiac=="VIII")
{
//m=miesiac;
tmp=8;
cout<< tmp << endl;
return tmp;
}
else if(miesiac=="IX")
{
//m=miesiac;
tmp=9;
cout<< tmp << endl;
return tmp;
}
else if(miesiac=="X")
{
//m=miesiac;
tmp=10;
cout<< tmp << endl;
return tmp;
}
else if(miesiac=="XI")
{
//m=miesiac;
tmp=11;
cout<< tmp << endl;
return tmp;
}
else if(miesiac=="XII")
{
//m=miesiac;
tmp=12;
cout<< tmp << endl;
return tmp;
}
else
{
cout << " nie ma takiego miesiaca " << endl;
tmp = 0;
return 0;
}
}
int main ()
{
Data data1(2,2,2002);
data1.drukuj();
Data data4(5,5,505);
data4.drukuj();
Data data5;
data5 = data1 - data5;
data5.drukuj();
//data1.setdzien(60);
//Data data2(data1.getdzien(), 5, 2020);
//data1.drukuj();
Data1 data2(02, "czerwiec", 2015);
data2.drukuj();
//data2.zamien();
Data2 data3(02,"X",2025);
data3.drukuj();
}