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

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

20.04.2010, 16:23. Показов 14124. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru