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

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

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


3)Создайте класс Date, который будет содержать информацию о дате (день, месяц, год). С помощью механизма перегрузки операторов, определите операцию разности двух дат (результат в виде количества дней между датами), а также операцию увеличения даты на определенное количество дней.
4)Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, то есть общие символы для двух строк. Например, результатом пересечения строк "sdqcg" "rgfas34" будет строка "sg". Для реализации функции перегрузить оператор * (бинарное умножение).
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.04.2010, 16:23
Ответы с готовыми решениями:

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

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

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

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

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

помогите пожалуйста)))
большое спасибо зарание!
173 / 170 / 19
Регистрация: 31.08.2010
Сообщений: 570
19.03.2011, 16:40 4
Привет! Буквально сейчас занимаюсь реализацией класса 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.03.2011, 16:40

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

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

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

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

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


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

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

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