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

Создать класс Date – дата, содержащая поля: день, месяц, год. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Создать матрицу.Вывести самый меньший парный элемент http://www.cyberforum.ru/cpp-beginners/thread272129.html
Создать матрицу.Вывести самый меньший парный элемент.Парный имеется ввиду который стоит к примеру во втором столбце и второй строчке.
C++ Проверить матрицу на ортоганальность Всем привет=) Вот такое задание есть: "Проверить матрицу ортоганальная ли она (с помощью функций), то есть скалярные произведения каждого ряда на другой равны о" Подкиньте идею пож... Заранее спасибо=) http://www.cyberforum.ru/cpp-beginners/thread272114.html
Циклы в C# C++
Подскажите, пожалуйста, где ошибка? Программа неправильный результат выдаёт! Вот исходные данные: p=s=4*(1-(1/3)+...+((-1)^n*(1/2*n+1)+...) e=0.0001 Через рекуррентное соотношение: q=-(2*n+1)/(2*n+3) Вот сама программа: {
C++ Обратная матрицы
Следует написать 4 программы поиска обратной матрицы методом присоединённой единичной, гауссом. Только отличие от этих программ такое: форма входа матрицы линейный массив строк, линейный массив столбцов, двумерный массив с адресом на строки, двумерный массив с адресом на столбцы. Также следует перемножить эти две матрицы (получинную обратную и исходную) получить почти единичную, отнять единичную...
C++ Работа с массивом (исправте ошибки плз) http://www.cyberforum.ru/cpp-beginners/thread272086.html
Найти максимальное значение и заменить его индексом элементы массива меньше чем -5 массив от 100 до -100 #include <stdio.h> #include <stdlib.h> #include <time.h> int Ar; int i; int j; int max=-100;
C++ Алгоритм Габова для поиска максимального паросочетания в произвольном графе за O(V^3) Прокомментируйте каждую строку. Очень нужно. Спасибо! #include <cstdio> #include <cstring> #include <queue> using namespace std; const int MAXN = 250; const int MAXB = MAXN + 1; подробнее

Показать сообщение отдельно
Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
08.04.2011, 03:27
у меня как-раз такая программа завалялась:
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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
#include <iostream>
#include <cstring>
#include <algorithm>
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,"");
    }
    //возвращает ture если d1 раньше d2.
    //p - это сткрока с параметрами, указывающими какие поля структур не следует использовать при сравнении
    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);
        //если d2 раньше d1 поменять их местами, это сделано потому что
        //далее в функции весь код адекватен при условии что d1 раньше d2.
        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;
        //считаем были ли весокосный год между датами если они оличатюся менее чем на 4 года.
        for (int i=d2.Year-diffyear;i<=d2.Year;i++)
        {
            //год является високосным, если он кратен 4 и при этом не кратен 100, либо кратен 400.
            if (((i%4==0) && !(i%100==0))||(i%400==0))
            {
            diff+=1; break;
            }
        }
        return diff;
    }
    date operator+(int days)
    {
 
        date d(*this);
        d.Year+=int(days/365);
        int diff=0;
        for (int i=Month;i < 13;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;
            }
        }
        int out_of_year=(days - int(days/365) * 365);
        for (int i=1; diff < out_of_year-31; 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;
            }
        }
        d.Month+= out_of_year/diff;
        return d;
    }
};
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";
    cout << "enter number: ";
    int n;
    cin >> n;
    cout << "first date + " << n << " days: " << D1 + n << '\n';
    return 0;
}
не уверен в корректности сложения числа и даты.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru