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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 34, средняя оценка - 4.94
_ALLEN_
3 / 3 / 0
Регистрация: 19.02.2010
Сообщений: 30
#1

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

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

3)Создайте класс Date, который будет содержать информацию о дате (день, месяц, год). С помощью механизма перегрузки операторов, определите операцию разности двух дат (результат в виде количества дней между датами), а также операцию увеличения даты на определенное количество дней.
4)Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, то есть общие символы для двух строк. Например, результатом пересечения строк "sdqcg" "rgfas34" будет строка "sg". Для реализации функции перегрузить оператор * (бинарное умножение).
1
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2010, 16:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создайте класс Date. Добавить в строковый класс функцию (C++):

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

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

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

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

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

Добавить функцию в класс ifstream - C++
имеется функция: bool Str(ifstream &amp;f, const char *s) { char buff; return !(f.get(buff,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Aye Aye
367 / 281 / 36
Регистрация: 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
Мааашка
Сообщений: n/a
19.03.2011, 10:42 #3
народ можете помочь) без понятия как делать не сильна в С++.
Написать программу установки и вывода даты, используя понятие класса. По ввведенной дате определить время года и номер декады месяца.
предусмотреть:
1) Возможность ввода даты числами припомощи конструктора.
2) Определение времени года и декады месяца осуществить в виде функции членов.

помогите пожалуйста)))
большое спасибо зарание!
TheAthlete
153 / 153 / 13
Регистрация: 31.08.2010
Сообщений: 535
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2011, 16:40
Привет! Вот еще темы с ответами:

Как добавить функцию в класс - C++
Например у меня есть функция void Circle(HDC h, int R, int X, int Y) И мне ее нужно добавить в класс. Но эти параметры (HDC h,...

Как добавить дружественную функцию в класс - C++
Написал код, а как добавить функцию friend? #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;stdio.h&gt; using namespace std; ...

Создайте класс, определяющий некоторый тип вещественых чисел, имеющий конструктор, операторы +,-, *,/ функцию вывода на экран – print. - C++
Создайте класс, определяющий некоторый тип вещественых чисел, имеющий конструктор, операторы +,-, *,/ функцию вывода на экран – print....

Добавить в класс Student функцию-член класса - C++
Добавить в класс Student функцию-член класса, определяющую, получает ли студент стипендию, и в головной программе организовать подсчёт...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.03.2011, 16:40
Ответ Создать тему
Опции темы

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