Да се създаде библиотека за работа с дати (с файлове dati.h и dati.cpp), който съдържа следните функции:
- четене на дата от клавиатурата
- извеждане на дата на екрана в различен формат (например 31.10.2013, 10/31/2013)
- проверка дали две дати съвпадат
- проверка коя е по-късната от две дати
- извеждане на сезона за дадена дата
- ** прибавяне на определен брой дни към дата
Напишете програма, която демонстрира тази библиотека.
По желание: Добавете и други функции за работа с дати.


Главната програма:
#include <iostream> #include <stdlib.h> #include "dati.h" using namespace std; int main(int argc, char** argv) { int d, m, g; //?????? ?? ???? ?? ???????????? chetene(d,m,g); //????????? ?? ???? ?? ?????? ? ???????? ?????? (???????? 31.10.2013, 10/31/2013) izvejdane(d,m,g); //???????? ???? ??? ???? ???????? cout<<"Dali savpadat: "<<savpadat(12,12,2012, 31,10,1999)<<endl; cout<<"Dali savpadat: "<<savpadat(26,01,2005, 26,01,2005)<<endl; //???????? ??? ? ??-??????? ?? ??? ???? cout<<"Po-kasna e data "<<po_kasna(15,10,2014, 31,10,2014)<<endl; cout<<"Po-kasna e data "<<po_kasna(15,10,2016, 15,10,2012)<<endl; cout<<"Po-kasna e data "<<po_kasna(15,10,2012, 15,04,2012)<<endl; //????????? ?? ?????? ?? ?????? ???? sezon(d,m); //** ????????? ?? ????????? ???? ??? ??? ???? dobavqne(d,m,g); izvejdane(d,m,g); system("pause"); return 0; }dati.cpp
#include <iostream> #include <stdlib.h> using namespace std; //?????? ?? ???? ?? ???????????? void chetene(int &d, int &m, int &g){ cout<<"Vavedi data: "; cin>>d>>m>>g; } //????????? ?? ???? ?? ?????? ? ???????? ?????? (???????? 31.10.2013, 10/31/2013) void izvejdane(int d, int m, int g){ char ch; cout<<"Vavedi simvol: "; cin>>ch; cout<<d<<ch<<m<<ch<<g<<endl; } //???????? ???? ??? ???? ???????? bool savpadat(int d1, int m1, int g1, int d2, int m2, int g2){ if((d1==d2) && (m1==m2) && (g1==g2)) return true; else return false; } //???????? ??? ? ??-??????? ?? ??? ???? int po_kasna(int d1, int m1, int g1, int d2, int m2, int g2){ if(g1>g2) return 1; else if(m1>m2){ if(g1>=g2) return 1; } else if(d1>d2){ if(m1>=m2) if(g1>=g2) return 1; } else return 2; } //????????? ?? ?????? ?? ?????? ???? void sezon(int d, int m){ switch(m){ case 4: case 5: cout<<"Prolet"; break; case 7: case 8: cout<<"Lqto"; break; case 10: case 11: cout<<"Esen"; break; case 1: case 2: cout<<"Zima"; break; case 3: if(d>=22) cout<<"Prolet"; else cout<<"Zima"; break; case 6: if(d<=21) cout<<"Prolet"; else cout<<"Lqto"; break; case 9: if(d>=22) cout<<"Esen"; else cout<"Lqto"; break; case 12: if(d>=22) cout<<"Zima"; else cout<<"Esen"; break; } cout<<endl; } //** ????????? ?? ????????? ???? ??? ??? ???? void dobavqne(int &d, int &m, int &g){ int max_d; int dni; cout<<"Dobavi dni: "; cin>>dni; switch(m){ case 1: case 3: case 5: case 7: case 8: case 10: case 12: max_d=31; break; case 4: case 6: case 9: case 11: max_d=30; break; case 2: if (((g%4 == 0) || (g%400 == 0)) && g%100 != 0) max_d=29; else max_d=28; } int razlika=d+dni-max_d; for(int i=dni; i>0; i--){ if(d<=max_d) d++; else { m++; d=1; if(m>12) { g++; m=1; d=1; } } } }dati.h
Още една задача, охо! :-)
Тук обаче имам забележки:
1) по izvejdane() – функциите трябва да са като черна кутия или като универсален инструмент – всичко необходимо за тях трябва да им идва като параметър (а не чрез въвеждане от клавиатурата) – освен ако не е изрично указано.
2) po_kasna() може да бъде направена по-оптимално. Имам в предвид условията за годините.
3) dobavqne() както си го реализирал ще работи само за добавяне на по-малко от 30 дни. Може да се направи да работи за произволен брой дни, помисли как.
Задачите не са тривиални и изискват обмисляне, радвам се, че си ги решил всичките…