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

Создайте класс Date. Добавить в строковый класс функцию - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ В данном словосочетании заменить символы"шина" на один символ "*" и удалить букву"е" http://www.cyberforum.ru/cpp-beginners/thread119241.html
Если у кого-то есть пару мин.свободных ,помогите плиз с задачей: 1)В данном словосочетании заменить символы"шина" на один символ "*" и удалить букву"е" 2)Строки м-цы расположитьв порядке возрастания сумм четных элементов СИ#
C++ Vector как член класса собственно заголовок моего класса: #pragma once #include <Vector> #include "StdAfx.h" #include "PObject.h" #include "PLine.h" http://www.cyberforum.ru/cpp-beginners/thread119080.html
WinAPI и обработчик события своего HWND C++ WinAPI
Утро доброе. Необходимо перехватывать сообщения Windows, имея хендл окна. Рылся в инете и МСДНе - нашел, но там окно создается, и при создании ссылаются на WndProc, где уже и обрабатываются соообщения. В моем случае я имею хендл уже созданного окна. Т.е. я даже не перехватываю сообщения - я просто хочу назначить обработку сообщения (WM_PAINT, например) окна, имея его описатель. Подкиньте наводки...
Произведение элементов массива, расположенных после максимального по модулю элемента C++
Помогите написать программу. Я работаю с программой MS Visual Studio 2005. В одномерном массиве, состоящем из п целых элементов, вычислить 1) количество элементов массива, больших С; 2) произведение элементов массива, расположенных после максимального по модулю элемента. Преобразовать массив таким образом, чтобы сначала располагались все отрицательные элементы, а потом — все положительные...
C++ Нод http://www.cyberforum.ru/cpp-beginners/thread118803.html
Даны два числа a и b. Найти их НОД (наибольший общий делитель). Название Размерность Тип a 8 вх b 8 вх res 8 вых
C++ Количество нулевых битов in1 4бита in2 4бита out1 1бит out2 1бит out3 1бит На входе два двоичных числа: in1,in2. Определить количество нулевых битов в каждом из чисел. Если в in1 больше нулевых битов , чем в in2, то на выход out1 подать 1. Если в in2 больше - то на выход out2 подать 1. При равном количестве - на out3 подать 1. подробнее

Показать сообщение отдельно
Aye Aye
 Аватар для Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
21.04.2010, 18:20     Создайте класс Date. Добавить в строковый класс функцию
вот у меня что то завалялось, только тут нету операции для увеличения даты на количество дней.
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
#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,"");
    }
    //возвращает 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;
    }
};
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;
}
 
Текущее время: 03:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru