- •Содержание:
- •Введение.
- •Задача 1(№127)
- •Текст программы:
- •Задача 2(№133)
- •Текст программы:
- •Задача 3(№145)
- •Текст программы:
- •Задача 4(№161)
- •Текст программы:
- •Задача 5(№172)
- •Текст программы:
- •Задача 6(№177)
- •Текст программы:
- •Задача 7(№187)
- •Текст программы:
- •Текст программы:
- •Задача 9(№200)
- •Текст программы:
- •Список используемой литературы
Задача 6(№177)
Постановка задачи: Напишите функцию сравнения двух дат.
Текст программы:
class Date{
int d,m,y;
static int d0,m0,y0;
static int dw0;
public:
Date(int=0,int=0,int=0); // Конструктор
void Print();
static void SetInitialDate(int di,int mi,int yi,int dwi) // Фун-ия установки начальной даты
{
d0=di;m0=mi;y0=yi;dw0=dwi;
}
int DayOfYear(); // Возвращает номер дня в году
int NumberDayOfWeek(); // День недели
friend bool leapyear(Date); // Объявление функции-друга
int sravneniedat(Date dt2); // Сравнение первой даты(d,m,y) и второй dt2
};
#include<iostream>
using namespace std;
//определение статических членов класса
int Date ::d0, Date ::m0, Date ::y0, Date::dw0;
void Date::Print()
{
cout<<d<<'.'<<m<<'.'<<y;
}
int leap(int year)
{
return (year % 4==0 && year % 100 !=0)|| year % 400 ==0;
}
bool leapyear(Date dt){return leap(dt.y);}
char daytab[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}
};
int Date::DayOfYear() // Возвращает номер дня в году
{
int days=d; // Кол-во дней от начала месяца
int lp=leap(y); // Признак високостности года
for(int i=1;i<m;i++)
days+= daytab[lp][i];
return days;
}
int Date::NumberDayOfWeek() // Возврат номер днянедели
{
Date dti(d0,m0,y0); // Начальная дата формируется по статическим членам
long days=dw0-1; // Кол-во дней, прошедших от пн начальной недели
if(y0 < y)
days+=365+leap(y0)-dti.DayOfYear(); // Учет дней в начальном году
for(int i=y0+1;i<y;i++) // Учет дней в промежуточных годах
days+=365+leap(i);
days+=DayOfYear(); // Учет дней в заданном году.
return days % 7+1 ;
}
int Date::sravneniedat(Date dt2) // Сравнение первой даты(d,m,y) и второй dt2
{
if (y < dt2.y) // Год первой даты меньше второй
return -1;
else if ( y > dt2.y ) // год первой даты больше второй
return 1;
else if ( m < dt2.m) // год первой даты равен второй, а месяц меньше
return -1;
else if ( m > dt2.m) // год первой даты равен второй а месяц больше
return 1;
else if ( d < dt2.d) // год и месяц первой даты равен второй, а день меньше
return -1;
else if ( d > dt2.d) // год и месяц первой даты равен второй, а день больше
return 1;
else return 0; // даты одинаковые
}
#include<ctime>
Date::Date(int dd,int mm,int yy)
{
time_t seconds;
time(& seconds);
struct tm* ptm_time;
ptm_time=localtime(& seconds);
d=dd?dd:ptm_time->tm_mday;
m=mm?mm:ptm_time->tm_mon+1;
y=yy?yy:ptm_time->tm_year+1900;
}
#include<conio.h>
#include<iostream>
using namespace std;
void Print();
int main()
{ setlocale (LC_ALL,"Russian");
char*DayWeek[7]={"Понедельник","Вторник","Среда","Четверг","Пятница","Суббота","Воскресенье"};
Date::SetInitialDate(1,1,2011,6);
Date Today;
cout<<"\n Сегодня"; Today.Print();
cout<<"," << DayWeek[Today.NumberDayOfWeek()-1];
cout<<"\n Идет високосный год: "<<leapyear(Today);
cout << "\n Сегодня " << Today.DayOfYear() << " день года ";
Date M (19,04,1994);
Date U (27,12,1993);
int srvMU = M.sravneniedat(U);
if (srvMU < 0)
cout<<"M " << "Старше U ";
else if ( srvMU > 0)
cout<<"U " << "Старше M ";
cout<<"I was bern " << DayWeek[M.NumberDayOfWeek()-1];
getch();
return 0;
}