Форум программистов, компьютерный форум CyberForum.ru

Разработать класс Date для работы с датами - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Односвязные списки: нужно ли при выходе из функции возвращать голову? http://www.cyberforum.ru/cpp-beginners/thread1202399.html
Здравствуйте. Верю, что когда-то здесь на этот вопрос давался ответ, но я не нашел. Скажите, пожалуйста, вот у меня изначально голова указывает на NULL.Чтобы добавить элемент в конец я прохожу по списку до конца,затем выделяю память под новый элемент,делаю указатель на него от элемента,который был последним,и указываю на Null. Вопрос в следующем:мне нужно при выходе из функции возвращать голову...
C++ Найти цифру числа, проверить делимость Приветствую Вас уважаемые форумчане, прошу вашей помощи в решении данного примерчика, ибо чайник: 1.Дано натуральное число: • найти вторую (сначала) цифру этого числа; • верно ли, что данное число делится на А,В и С (числа А,В,С вводится с клавиатуры) 2. Найти все двухзначные числа, которые при умножении на 2 заканчиваются на 8, а при умножении на 3 – на 4. http://www.cyberforum.ru/cpp-beginners/thread1202398.html
C++ Найти ошибочку. Нахождение суммы цифр вещественного числа
Всем привет! Создал функцию нахождения суммы цифр вещественного числа. Функция практически работает, но, когда я кладу в переменную число н-р: "1.256" почему-то добавляются к числу девятки т.е. становится так: "1.2569999999" b т.к. девятки тоже суммируются, ответ получается не верным. Помогите, пожалуйста, как можно исправить это. Код функции: int fun(double n) { int t, p, sum1 = 0,...
C++ Создать класс Time для работы со временем
Нужно исправить ошибки в программе.Срочно. Создать класс Time для работы со временем в формате «час:минута:секунда». Класс должен включать в себя три конструктора инициализации: числами, строкой (например, «23:59:59»), секундами. Конструктор инициализации тремя числами должен присваивать значения по умолчанию минутам и секундам. Реализовать операции вычисления разницы между двумя...
C++ Нарисовать круг и квадрат http://www.cyberforum.ru/cpp-beginners/thread1202372.html
Нарисовать круг и квадрат!!!у меня имеется прямоугольник и овал,как переделать +++++++++++++++++++ class Rect:public Shape { public: void draw() { line(x1,y1,x2,y1); line(x1,y1,x1,y2); line(x2,y1,x2,y2);
C++ Статические и виртуальные функции Составить программу с одним родительским классом и двумя потомками. Все поля должны быть закрытыми. Потомки должны содержать виртуальные функции. Для родительского объекта создать статическую функцию выдачи результатов расчета виртуальной функции на экран монитора. Составить тестирующую программу. В ней нужно реализовать вывод параметров объектов на экран монитора. Родительский класс:... подробнее

Показать сообщение отдельно
RG21
0 / 0 / 0
Регистрация: 04.05.2013
Сообщений: 8
08.06.2014, 09:27     Разработать класс Date для работы с датами
Как исправить ошибку в программе.

Разработать класс Date для работы с датами. В классе должно быть три поля:
год, месяц и день. Для представления месяцев определить в классе
перечислимый тип month. Перегрузить операцию operator+ для вычисления даты
через заданное количество дней. Перегрузить операции инкремента operator++
и декремента operator-- для вычисления следующей и предыдущей дат.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#include "stdafx.h"
#include <iostream>
using namespace std;
 
struct date
{
    int Year,Month,Day;
    date(){}
    date(int yy, int mm, int dd):Year(yy),Month(mm),Day(dd){}
    bool Less(const date &d1,const date &d2)
    {
        return Less(d1,d2,"");
    }
    bool Less(const date &d1,const date &d2,char *p)
    {
        size_t end=strlen(p);
        if (d1.Year < d2.Year && !find(p,p+end,'y'))return true;
        if (d1.Month < d2.Month &&!find(p,p+end,'m'))return true;
        if (d1.Day < d2.Day && !find(p,p+end,'d'))return true;
        return false;
    }
    int operator-(date d2)
    {
        date d1(*this);
        if (Less(d2,d1))swap(d1,d2);
        int diff=0;
        int from=d1.Month, to=d2.Month;
        int diffyear=abs(d2.Year - d1.Year);
        if (diffyear==0)
            for (int i=from; i < to; i++)
            {
                switch(i)
                {
                    case 1:diff+=31; break;
                    case 2:diff+=28; break;
                    case 3:diff+=31; break;
                    case 4:diff+=30; break;
                    case 5:diff+=31; break;
                    case 6:diff+=30; break;
                    case 7:diff+=31; break;
                    case 8:diff+=31; break;
                    case 9:diff+=30; break;
                    case 10:diff+=31; break;
                    case 11:diff+=30; break;
                    case 12:diff+=31; break;
                }
            }
        else
        {
            for (int i=from; i <= 12; i++)
            {
                switch(i)
                {
                    case 1:diff+=31; break;
                    case 2:diff+=28; break;
                    case 3:diff+=31; break;
                    case 4:diff+=30; break;
                    case 5:diff+=31; break;
                    case 6:diff+=30; break;
                    case 7:diff+=31; break;
                    case 8:diff+=31; break;
                    case 9:diff+=30; break;
                    case 10:diff+=31; break;
                    case 11:diff+=30; break;
                    case 12:diff+=31; break;
                }
            }
            for (int i=1; i < to; i++)
            {
                switch(i)
                {
                    case 1:diff+=31; break;
                    case 2:diff+=28; break;
                    case 3:diff+=31; break;
                    case 4:diff+=30; break;
                    case 5:diff+=31; break;
                    case 6:diff+=30; break;
                    case 7:diff+=31; break;
                    case 8:diff+=31; break;
                    case 9:diff+=30; break;
                    case 10:diff+=31; break;
                    case 11:diff+=30; break;
                    case 12:diff+=31; break;
                }
            }
        }
        diff-=d1.Day;
        diff+=d2.Day;
        diff+=((diffyear > 1)?(diffyear - 1):(0))*365;
        diff+=diffyear/4;
        for (int i=d2.Year-diffyear;i<=d2.Year;i++)
        {
            if (((i%4==0) && !(i%100==0))||(i%400==0))
            {
            diff+=1; break;
            }
        }
        return diff;
    }
};
ostream &operator<<(ostream &out,const date &d)
{
        out << d.Year << '-' << d.Month << '-' << d.Day;
        return out;
}
istream &operator>>(istream &in,date &d)
{
    char c;
    in >> d.Year;
    in >> c;
    if (c=='-')
    {
        in >> d.Month;
        in >> c;
        if (c=='-') in >> d.Day;
        else cout << "wrong date format, excepted '-' after month, variable is not complete\n";
    }
    else cout << "wrong date format, excepted '-' after years, variable is not complete\n";
    return in;
}
int main()
{
    date D1,D2;
    cout << "Enter some date yy-mm-dd: ";
    cin >> D1;
    cout << "Enter some other date yy-mm-dd: ";
    cin >> D2;
    cout << "first date " << D1 << ", second date " << D2 << '\n';
    cout << D1-D2 << " days betwin dates\n";
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru