Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
Fr0sT2013
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 13
1

Создать класс Triad (тройка чисел); определить метод сравнения триад. Определить производный класс Date

10.01.2019, 00:19. Просмотров 1102. Ответов 4
Метки нет (Все метки)

Создать класс Triad (тройка чисел); определить метод сравнения триад. Определить производный класс Date с полями: год, месяц и день. Определить полный набор методов сравнения дат.
Тема наследования, не могу ничего понять, прошу помочь с программой.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2019, 00:19
Ответы с готовыми решениями:

Создать класс Triad (тройка чисел) - определить методы; определить производный класс Date - переопределить методы
Создать класс Triad (тройка чисел); определить методы увеличения полей на 1. Определить производный...

Создать класс Triad (тройка чисел); определить методы изменения полей и вычисления суммы чисел.
Создать класс Triad (тройка чисел); определить методы изменения полей и вычисления суммы чисел....

Создать класс Triad (тройка чисел)
Создать класс Triad (тройка чисел); определить методы изменения полей и вычисления суммы чисел....

Создать абстрактный базовый класс Тройка чисел с виртуальными методами увеличения на 1. Создать производный класс Время со своими функциями
Здравствуйте, пожалуйста помогите написать код к данной задаче, с таким условием: Создать...

Создать класс Triad (тройка чисел). Выдает ошибку
задание звучит так: создать класс Triad (тройка чисел); определить методы изменения полей и...

4
Fixer_84
1402 / 883 / 789
Регистрация: 30.04.2016
Сообщений: 3,000
10.01.2019, 19:27 2
Цитата Сообщение от Fr0sT2013 Посмотреть сообщение
определить метод сравнения триад
Цитата Сообщение от Fr0sT2013 Посмотреть сообщение
Определить полный набор методов сравнения дат
Здравствуйте! Что вы имеете ввиду под методами сравнения? Проверку всех трех чисел на валидность (выход за пределы их диапазона)? И еще вопрос: cтоит ли делать класс Triad абстрактным?
0
Fr0sT2013
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 13
18.01.2019, 18:28  [ТС] 3
Класс Triad должен быть абстрактным, Date - наследуемым. Проверять надо именно даты на валидность(учитывать високосный год и т.д.), а не числа в Триаде.
0
Fixer_84
1402 / 883 / 789
Регистрация: 30.04.2016
Сообщений: 3,000
18.01.2019, 19:14 4
Fr0sT2013, здравствуйте. Можно ли для проверки дат использовать встроенные функции или регулярные выражения?
0
Fixer_84
1402 / 883 / 789
Регистрация: 30.04.2016
Сообщений: 3,000
21.01.2019, 22:21 5
Fr0sT2013, здравствуйте! Вот тестовый вариант программы. Пишите, если у вас есть замечания. Я исправлю.

Код:

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
#include <iostream>
 
    using namespace std;
 
class Triad { //Базовый, абстрактный класс
 
    public:
 
        virtual bool isLeapYear(int y) = 0; //Виртуальная функция
 
    public:
 
        int day;
        int month;
        int year;
};
 
class Date: public Triad { //Производный класс
 
    public:
       
        Date() { //Конструктор по умолчанию
            day = 01;
            month = 01;
            year = 1970;
        }
 
    Date(int d, int m, int y) { //Инициализирующий конструктор (конструктор с параметром)
        day = d;
        month = m;
        year = y;
    }
 
    //Сеттеры
 
    void setDay(int d) {
        day = d;
    }
 
    void setMonth(int m) {
        month = m;
    }
 
    void setYear(int y) {
        year = y;
    }
 
    //Геттеры
 
    int getDay() {
        return day;
    }
 
    int getMonth() {
        return month;
    }
 
    int getYear() {
        return year;
    }
    
    //Остальные функции
    
    int days_in_month[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; //Массив дней для каждого месяца (год не високосный)
 
    bool isLeapYear(int year) { //Функция проверки является ли год високосным (реализуем виртуальный метод абстрактного класса)
        if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
            return true;
        }
        return false;
    }
 
    bool checkDay(Date &date) { //Функция проверки дня на валидность
        for (auto i: { 0, 2, 4, 6, 7, 9, 11 }) {
            if (date.getMonth() == i + 1) {
                if (date.getDay() >= 1 && date.getDay() <= days_in_month[i]) {
                    return true;
                }
            }
        }
        for (auto i: { 3, 5, 8, 10 }) {
            if (date.getMonth() == i + 1) {
                if (date.getDay() >= 1 && date.getDay() <= days_in_month[i]) {
                    return true;
                }
            }
        }
        if (date.getMonth() == 2) {
            if (isLeapYear(date.getYear())) {
                if (date.getDay() >= 1 && date.getDay() <= 29) {
                    return true;
                }
            } else {
                if (date.getDay() >= 1 && date.getDay() <= 28) {
                    return true;
                }
            }
        }
        return false;
    }
 
    bool checkMonth(Date &date) { //Функция проверки месяца на валидность
        if (date.getMonth() >= 1 && date.getMonth() <= 12) {
            return true;
        }
        return false;
    }
 
    bool checkYear(Date &date) { //Функция проверки года на валидность
        if (date.getYear() >= 1900 && date.getYear() <= 2040) {
            return true;
        }
        return false;
    }
 
    void checkDate(Date &date) { //Функция проверки даты на валидность
        if ((checkDay(date) == true) &&
            (checkMonth(date) == true) &&
            (checkYear(date) == true)) {
            cout << "This date is correct!\n";
        } else {
            cout << "This date is NOT correct!\n";
        }
    }
};
 
int main(void) {
    Date obj(31, 05, 2000); //Устанавливаем значение даты с помощью инициализирующего конструктора
    //obj.setDay(30);
    //obj.setMonth(04);
    //obj.setYear(2006);
    obj.checkDate(obj); //Проверяем дату на валидность
    system("pause");
    return 0;
}
0
21.01.2019, 22:21
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2019, 22:21

Создать базовый класс Triad и производный класс vector3D
Помогите пожалуйста с заданием. Часть кода(vector3D) сделал, вроде работает Нужно помочь с классом...

Создать базовый класс Тройка_чисел (Triad) и производный класс Time с полями часы, минуты и секунды
Наследование. Виртуальныефункции.Полиморфизм. 1. Цельзадания: 1) Создание консольного приложения,...

Класс Triad (тройка чисел)
Создать класс Triad (тройка чисел); определить методы изменения полей и вычисления суммы чисел....


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

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

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