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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
mercenaryfess
0 / 0 / 0
Регистрация: 02.07.2014
Сообщений: 2
#1

Вывести разницу дней между двумя датами - C++

02.07.2014, 08:10. Просмотров 1609. Ответов 1
Метки нет (Все метки)

Всем привет. Ребят, прошу вашей помощи
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
132
133
134
135
136
137
138
139
#include <iostream>
using namespace std;
 
class Date{
private:
    int raz, sch;
    int day, day2;
    int month, month2;
    int year, year2;
public:
    Date(){ //создание объекта по умолчанию.
        year = day = month = 1;
    }
    Date(int d, int m, int y){ //создание объекта с указанной датой.
        year = day = month = 1;
        if (m >= 1 && m <= 12){
            month = m;
        }
        if (y > 0) year = y;
        int dz;
        if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12){
            dz = 31;
        }
        else if (month == 4 || month == 6 || month == 9 || month == 11){
            dz = 30;
        }
        else if (month == 2){
            if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) dz = 29;
            else dz = 28;
        }
        if (d >= 1 && d <= dz) day = d;
    }
    friend ostream& operator << (ostream& out, const Date& dt)
    {
        out << dt.day << '.' << dt.month << '.' << dt.year;
        return out;
    }
    Date operator + (int days){
        if (days < 0) return *this;
        Date date = Date(*this); //копия
        date.day += days;
 
        while (true){
            int dz;
            if (date.month == 3 || date.month == 1 || date.month == 5 || date.month == 7 || date.month == 8 || date.month == 10 || date.month == 12){
                dz = 31;
            }
            else if (date.month == 4 || date.month == 6 || date.month == 9 || date.month == 11){
                dz = 30;
            }
            else if (date.month == 2){
                if ((date.year % 4 == 0) && (date.year % 100 != 0) || (date.year % 400 == 0)) dz = 29;
                else dz = 28;
            }
            if (date.day > dz){
                date.day -= dz;
                date.month += 1;
            }
            else {
                break;
            }
            if (date.month > 12){
                date.month -= 12;
                date.year += 1;
            }
        }
        return date;
    }
    void writeDate(){
        int d, m, y, d2, m2, y2;
        
        cout << "Write 1st date (like 23 05 2009): ";
        cin >> d >> m >> y;
        year = day = month = 1;
        if (m >= 1 && m <= 12){
            month = m;
        }
        if (y > 0) year = y;
        int dz;
        if (month == 3 || month == 1 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12){
            dz = 31;
        }
        else if (month == 4 || month == 6 || month == 9 || month == 11){
            dz = 30;
        }
        else if (month == 2){
            if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) dz = 29;
            else dz = 28;
        }
        if (d >= 1 && d <= dz) day = d;
 
        cout << "Write 2nd date (like 23 05 2009): ";
        cin >> d2 >> m2 >> y2;
        year2 = day2 = month2 = 1;
        if (m2 >= 1 && m2 <= 12){
            month2 = m2;
        }
        if (y2 > 0) year2 = y2;
        int dz2;
        if (month2 == 3 || month2 == 1 || month2 == 5 || month2 == 7 || month2 == 8 || month2 == 10 || month2 == 12){
            dz2 = 31;
        }
        else if (month2 == 4 || month2 == 6 || month2 == 9 || month2 == 11){
            dz2 = 30;
        }
        else if (month2 == 2){
            if ((year2 % 4 == 0) && (year2 % 100 != 0) || (year2 % 400 == 0)) dz2 = 29;
            else dz2 = 28;
        }
        if (d2 >= 1 && d2 <= dz) day2 = d2;
 
    
        if (d != d2 && m != m2 && y != y2)
            raz = 0;
            if (y2 >= y & m2>=m & d2>d){
            while (d < d2 & m<m2)
                    d+=1;
                raz ++;
            }
            else if(y>=y2 ){}
            while (d > d2 & m>m2) {
                d2+=1;
                raz++;
            }
            sch = raz;
                cout << "Raznica v dnyah: " << sch << endl;
    };
};
void main(){
    Date d1 = Date();
    d1.writeDate();
    cout << "Date 1: " << d1 << endl;
    cout << "Date 1 + 20 days: " << d1 + 20 << endl;
    cout << "Date 1 + 1000 days: " << d1 + 1000 << endl;
    cout << "Date 1 + ? days: ";
    int n; cin >> n;
    cout << d1 + n << endl;
    system("PAUSE");
}
В функции writeDate в конце я хочу вывести разницу дней между двумя датами. У меня это не очень получается, выводит на экран какую-то фигню
0
Миниатюры
Вывести разницу дней между двумя датами  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.07.2014, 08:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывести разницу дней между двумя датами (C++):

Вывести разницу в днях между двумя датами - C++
Надо определить количество прошедших дней(даты ввести в формате dd/mm/yyyy)(можно считать что в году 365 дней) например: вход: ...

Вычислить разницу между двумя датами - C++
1. есть ли функция которая вычислит сколько прошло например с 1934 до 2014. 2. как вычислить сраж роботы есть год поступления на роботу и...

Определить и вывести количество дней между двумя датами (логические операторы и операторы ветвлений) - C++
Задачка Пользователь вводит две даты (день, месяц, год в виде целых чисел). Необходимо определить и вывести количество дней между этими...

Вычислить разницу в днях между двумя заданными датами - C++
Парни надо написать программу, которая будет вычислять разницу в днях между двумя заданными датами.

Программа, определяющая разницу в сутках между двумя датами - C++
Составьте программу определяющую разницу в сутках между двумя датами. Нельзя использовать условный оператор , помогите пожалуйста ...

Количество дней между двумя датами - C++
Хочу спросить кто знает как найти количество дней между двумя датами. ПРИМЕР input output 01.01.93 1 02.01.93 ...

1
zss
Модератор
Эксперт С++
6486 / 6049 / 1987
Регистрация: 18.12.2011
Сообщений: 15,691
Завершенные тесты: 1
02.07.2014, 08:46 #2
Класс составлен в принципе неправильно:
Цитата Сообщение от mercenaryfess Посмотреть сообщение
private: int raz, sch;
int day, day2;
int month, month2;
int year, year2;
Здесь должны быть только day,month и year.
Остальные переменные вычисляемые, их объявлять надо локально в методах при необходимости.
Тогда бы, в частности, Вы бы заметили, что в методе writeDate()
используется неинициализированная переменная raz.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2014, 08:46
Привет! Вот еще темы с ответами:

Высчитать количество дней между двумя датами - C++
Короче,много тем на форуме по этому поводу,но нету ниодной правильной,которая мне нужна. Суть программы в том,что нужно ввести 2 даты....

Вычислить количество дней между двумя датами - C++
Даны натуральные числа a1, b1, c1, a2, b2, c2, которые указывают две даты (число, месяц, год). Вычислить: количество дней, прошедших между...

Определить количество дней между двумя датами - C++
Всем привет. Знаю была уже подобная задачка решена ранее, и не раз: Пользователь вводит две даты (день, месяц, год в виде целых чисел)....

Посчитать количество дней между двумя датами - C++
читал на форуме похожие темы, даже нашел целый код, но он мне кажется мудреным, да и использовать мне массивы нельзя, мы их типо не прошли,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru