Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/76: Рейтинг темы: голосов - 76, средняя оценка - 4.83
3 / 3 / 0
Регистрация: 19.02.2010
Сообщений: 30

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

20.04.2010, 16:23. Показов 14173. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
3)Создайте класс Date, который будет содержать информацию о дате (день, месяц, год). С помощью механизма перегрузки операторов, определите операцию разности двух дат (результат в виде количества дней между датами), а также операцию увеличения даты на определенное количество дней.
4)Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, то есть общие символы для двух строк. Например, результатом пересечения строк "sdqcg" "rgfas34" будет строка "sg". Для реализации функции перегрузить оператор * (бинарное умножение).
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.04.2010, 16:23
Ответы с готовыми решениями:

Добавить в строковый класс функцию
Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, то есть общие символы для двух строк. ...

Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк
Вот такое задание: Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, то есть общие символы...

Строка: Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, то есть общие символы для двух строк.
Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, то есть общие символы для двух строк....

3
 Аватар для Aye Aye
373 / 287 / 97
Регистрация: 17.12.2009
Сообщений: 567
21.04.2010, 18:20
вот у меня что то завалялось, только тут нету операции для увеличения даты на количество дней.
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;
}
0
Мааашка
19.03.2011, 10:42
народ можете помочь) без понятия как делать не сильна в С++.
Написать программу установки и вывода даты, используя понятие класса. По ввведенной дате определить время года и номер декады месяца.
предусмотреть:
1) Возможность ввода даты числами припомощи конструктора.
2) Определение времени года и декады месяца осуществить в виде функции членов.

помогите пожалуйста)))
большое спасибо зарание!
 Аватар для TheAthlete
174 / 170 / 19
Регистрация: 31.08.2010
Сообщений: 575
19.03.2011, 16:40
Привет! Буквально сейчас занимаюсь реализацией класса Date для курсака. Выкладываю код, может тебе поможет. Содержит перегрузку операторов, ввод даты числами с помощью конструктора, определение времени года и декады месяца

Собственно код:

Date.h

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
#ifndef DATE_H
#define DATE_H
 
#include <ctime>
#include <string>
 
class Date {
  friend bool operator==(const Date&, const Date&);
  friend bool operator!=(const Date&, const Date&);
  friend std::ostream& operator<<(std::ostream& out, const Date& date);
  //friend std::istream& operator>>(std::istream& in, const Date& date);
private:
    int day; // день
    int month; // месяц
    int year; // год
    
    tm timeinfo;
 
    time_t seconds;
    time_t rawtime;
public:
    Date(): day(0), month(0), year(0) {}
    Date(int d, int m, int y);
    ~Date() { }
 
    time_t getSeconds() const { return seconds; }
    tm getTimeInfo()    const { return timeinfo; }
  void setTimeInfo(time_t sec);
 
  // получаем дату для данного экземпляра (объекта)
  int getDay()        const { return timeinfo.tm_mday; }
  int getMonth()      const { return timeinfo.tm_mon + 1; }
  int getYear()       const { return timeinfo.tm_year + 1900; }
  int getDayOfYear()  const { return timeinfo.tm_yday + 1; }
  int getDayOfWeek()  const { return ((timeinfo.tm_wday == 0) ? 7 : timeinfo.tm_wday); }
  std::string getTimeOfYear(); // получить время года
  int getTenDayPeriodOfTheMonth(); // получить декаду месяца
 
  void setDay(int d);
  void setMonth(int m);
  void setYear(int y);
 
  // статические функции-члены, т.е. относятся к классу, а не к объекту
  static std::string getDayOfWeek(int dayOfWeek);
  static std::string getMonth(int month);
 
  Date& operator++(); // префиксный оператор инкремента (++date), увеличивается день на один
  Date& operator--(); // префиксный оператор декремента (--date), уменьшается дань на один
  Date operator++(int); // постфиксный оператор инкремента (date++), увеличивается день на один
  Date operator--(int); // постфиксный оператор декремента (date--), уменьшается день на один
  Date& operator+=(const int&);
  Date& operator-=(const int&);
 
    void printTimeInfo(); // выводим на экран значения структуры timeinfo
};
 
Date operator+(const Date&, const int&);
Date operator-(const Date&, const int&);
 
inline bool operator==(const Date& lhs, const Date& rhs) {
  return lhs.day == rhs.day && lhs.month == rhs.month && lhs.year == rhs.year;
}
 
inline bool operator!=(const Date& lhs, const Date& rhs) {
  return !(lhs == rhs);
}
 
#endif
date.cpp

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
#ifndef DATE_H
#define DATE_H
 
#include <ctime>
#include <string>
 
class Date {
  friend bool operator==(const Date&, const Date&);
  friend bool operator!=(const Date&, const Date&);
  friend std::ostream& operator<<(std::ostream& out, const Date& date);
  //friend std::istream& operator>>(std::istream& in, const Date& date);
private:
    int day; // день
    int month; // месяц
    int year; // год
    
    tm timeinfo;
 
    time_t seconds;
    time_t rawtime;
public:
    Date(): day(0), month(0), year(0) {}
    Date(int d, int m, int y);
    ~Date() { }
 
    time_t getSeconds() const { return seconds; }
    tm getTimeInfo()    const { return timeinfo; }
  void setTimeInfo(time_t sec);
 
  // получаем дату для данного экземпляра (объекта)
  int getDay()        const { return timeinfo.tm_mday; }
  int getMonth()      const { return timeinfo.tm_mon + 1; }
  int getYear()       const { return timeinfo.tm_year + 1900; }
  int getDayOfYear()  const { return timeinfo.tm_yday + 1; }
  int getDayOfWeek()  const { return ((timeinfo.tm_wday == 0) ? 7 : timeinfo.tm_wday); }
  std::string getTimeOfYear(); // получить время года
  int getTenDayPeriodOfTheMonth(); // получить декаду месяца
 
  void setDay(int d);
  void setMonth(int m);
  void setYear(int y);
 
  // статические функции-члены, т.е. относятся к классу, а не к объекту
  static std::string getDayOfWeek(int dayOfWeek);
  static std::string getMonth(int month);
 
  Date& operator++(); // префиксный оператор инкремента (++date), увеличивается день на один
  Date& operator--(); // префиксный оператор декремента (--date), уменьшается дань на один
  Date operator++(int); // постфиксный оператор инкремента (date++), увеличивается день на один
  Date operator--(int); // постфиксный оператор декремента (date--), уменьшается день на один
  Date& operator+=(const int&);
  Date& operator-=(const int&);
 
    void printTimeInfo(); // выводим на экран значения структуры timeinfo
};
 
Date operator+(const Date&, const int&);
Date operator-(const Date&, const int&);
 
inline bool operator==(const Date& lhs, const Date& rhs) {
  return lhs.day == rhs.day && lhs.month == rhs.month && lhs.year == rhs.year;
}
 
inline bool operator!=(const Date& lhs, const Date& rhs) {
  return !(lhs == rhs);
}
 
#endif
Пример использования:

main.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "Date.h"
#include <iostream>
 
using std::cout;
using std::endl;
using std::cin;
 
int main() {
  Date data(19, 3, 2011);
  cout << data << endl;
  cout << data.getTimeOfYear() << endl;
  cout << data.getTenDayPeriodOfTheMonth() << "-я декада месяца" << endl;
 
  return 0;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.03.2011, 16:40
Помогаю со студенческими работами здесь

Создайте класс RightTriangle и Создайте производный класс Rectangle
Создайте класс RightTriangle (Прямоугольный треугольник), задаваемый катетами и опишите механизм вычисления его периметра. Создайте...

Класс: Создайте класс, осуществляющий подсчет и изменение числа книг.
Привет форумчане. Задачу решил, и даже проверку проходит , но код не нравится. Подскажите как можно было решить более правильно и в каком...

Создайте класс Parallelogram. Этот класс хранит декартовы координаты четырех углов параллелограмма
Создайте класс Parallelogram.Этот класс хранит декартовы координаты четырех углов параллелограмма. Должны быть предусмотрены...

С++ класс (создайте класс с именем Complex для выполнения в арифмитических операий с комплексными числами))
Кто сможет помогите пожалуйста! (Класс Complex). Создайте класс с именем Complex для выполнения в арифмитических операий с...

Создайте класс, в котором есть ostream& operator<<. Класс должен содержать очередь с приоритетом
Создайте класс, в котором есть ostream&amp; operator&lt;&lt;. Класс должен содержать очередь с приоритетом. Создайте генератор — заполнитель очереди...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru