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

Високосность года

21.07.2017, 06:41. Показов 1657. Ответов 6
Метки нет (Все метки)

Нужно чтобы високостность выводилась отдельным пунктом в меню, но она выводится еще и если выполняется условие в 60 строчке. Как это исправить?
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
#include <string>
#include <iostream>
 
using namespace std;
 
class Date{
    int day; //день
    int month; //месяц
    int year; //год
public:
    Date(int d = 1, int m = 1, int y = 1970) //конструктор
    {
        day = d;
        month = m;
        year = y;
    }
 
//метод ввода даты
void setDate()
{
    cout << "Введите дату в формате (ДД ММ ГГГГ): ";
    cin >> day >> month >> year; //ввод дня, месяца, года
}
 
//форматированный вывод даты (3 формата)
void format(int f)
{
    string months[12] = {"Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа", "Сентября", "Октября", "Ноября", "Декабря"};
    string shortMonth[12] = {"Янв", "Фев", "Мар", "Апр", "Мая", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек"};
    int shortYear = year % 100; //сокращение года до последних двух цифр
    switch(f)
    {
        case 1: cout << day << "." << (month <= 9 ? "0" : "") << month << "." << year << endl; break; //если пользователь выбрал (1) в меню
        case 2: cout << day << " " << months[this->month - 1] << " " << year << endl; break; //если пользователь выбрал (2) в меню
        case 3: cout << day << " " << shortMonth[this->month - 1] << " " << (shortYear <= 9 ? "0" : "") << shortYear << endl; break; //если пользователь выбрал (3) в меню
        default: cout << "Нет такого формата!\n"; //если выбрали не 1, 2 или 3 в меню
    }
}
 
// проверка високосности года
bool isLeap()
{
    if(year % 4 == 0) //если остаток от деления на 4 равен нулю
    {
        cout << "Год високосный\n";
        return true; //то вернуть истину
    }
    else
    {
        cout << "Год не високосный\n";
        return false; // иначе вернуть ложь
    }
}
 
// возвращает следующую дату от текущей даты
Date nextDate()
{
    Date temp; //переменная типа класса Date
    int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};// количество дней в кажном месяце
    if(this->isLeap()) // если год високосный
        days[1] = 29; // то в феврале 29 дней
    if(days[month - 1] - day > 0) //если месяц не закончился
        temp.day = day + 1; //то прибавляем еще один день
    else
    {
        temp.day = 1; //иначе месяц закончился и номер дня равен 1
    }
    if(temp.day == 1) //если номер дня равен 1
        if(month < 12) //если номер месяца < 12
        {
            temp.month = month + 1; //то прибавляем к текущему значению
            temp.year = year; //год не изменяется
        }
        else
        {
            temp.month = 1; //иначе, месяц становится первым
            temp.year = year + 1; //прибавлятся один год
        }
 
    else
    {
        temp.month = month;
        temp.year = year;
    }
    return temp; // возвращаемое значение объект класса Date
}
 
// меню
void menuDate()
{
    int choice = -1; //переменная отвечающая за текущий выбор пользователя
    while (choice != 6) //пока выбор не равен 6
    {
        cout << ("\n___________________________\n"
        "Введите цифру от 1 до 5:\n"
        "1 - Вывести дату (формат 1)\n"
        "2 - Вывести дату (формат 2)\n"
        "3 - Вывести дату (формат 3):\n"
        "4 - Следующая дата\n"
        "5 - Проверить високосность\n"
        "6 - Выйти из меню\n\n");
        cin >> choice; //ввод номера пункта меню
        switch (choice)
        {
            case 1: format(1); break; //Вывести дату (формат 1)
            case 2: format(2); break; //Вывести дату (формат 2)
            case 3: format(3); break; //Вывести дату (формат 3)
            case 4: nextDate().format(1); break; //Следующая дата
            case 5: isLeap(); break;
            case 6: cout << "Вы покинули меню данного объекта"; break; //Выход из меню
        }
    }
}
};
 
int main()
{
    setlocale(LC_CTYPE, ""); //для русского языка в консоли
    Date d; //переменная d типа Date
    //Date d(31,12,2000);
    d.setDate();
   // d.isLeap();
    d.menuDate();
   // system("pause");
    return 0;
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.07.2017, 06:41
Ответы с готовыми решениями:

Определить високосность года
первые начинания в программирование вообще, почему он не выявляет високсный год #include &lt;stdio.h&gt;...

Функция определяющая високосность года
Описать функцию IsLeapYear(Y) логического типа, которая возвращает True, если год Y (целое...

Функция, определяющая високосность года (дополнить код)
вот что нужно писать в скобочках после visikos. у меня выводит ошибку, ибо не написаны параметры....

Дано число года n. Найдите количество дней того года
1) Даны три действительных числа x, y, z. Пусть программа выдаст мин и макс их значения. Сначала...

6
1464 / 1172 / 551
Регистрация: 08.01.2012
Сообщений: 4,517
21.07.2017, 06:56 2
как-то так, а 2100 будет високосным?
C++
1
2
3
4
5
6
bool isLeap(bool show)
{
    if(year % 4 == 0) //если остаток от деления на 4 равен нулю
    {
        if(show) cout << "Год високосный\n";
        ......................
1
0 / 0 / 0
Регистрация: 03.02.2014
Сообщений: 103
21.07.2017, 07:33  [ТС] 3
Да, об этом я не подумал. Как тогда? То что ты написал ничего не меняет
0
66 / 49 / 27
Регистрация: 27.04.2015
Сообщений: 201
21.07.2017, 07:38 4
Цитата Сообщение от TaAccTikk Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
bool isLeap()
{
  if((year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) //если остаток от деления на 4 равен нулю
  {
    cout << "Год високосный\n";
    return true; //то вернуть истину
  }
  else
  {
    cout << "Год не високосный\n";
    return false; // иначе вернуть ложь
  }
}
Условие некорректное
1
0 / 0 / 0
Регистрация: 03.02.2014
Сообщений: 103
21.07.2017, 07:49  [ТС] 5
Ага, а как насчет этого?
Нужно чтобы високостность выводилась отдельным пунктом в меню, но она выводится еще и если выполняется условие в 60 строчке.
0
1464 / 1172 / 551
Регистрация: 08.01.2012
Сообщений: 4,517
21.07.2017, 07:54 6
C++
1
2
3
4
5
6
7
8
bool isLeap(bool show)
{
    if(year%4 || year%100==0 && year%400) 
    {
        if(show) cout << "Год не високосный\n";
        return false; //вернуть ложь
    }
        ......................
1
66 / 49 / 27
Регистрация: 27.04.2015
Сообщений: 201
21.07.2017, 08:08 7
Лучший ответ Сообщение было отмечено TaAccTikk как решение

Решение

Цитата Сообщение от TaAccTikk Посмотреть сообщение
Ага, а как насчет этого?
Вам предложили решение - добавить флаг и проверку на него.
Я бы просто перегрузил эту функцию, чтобы не делать проверку внутри
стр. 55 и стр. 73 (вызов)
Кликните здесь для просмотра всего текста
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
#include <string>
#include <iostream>
 
using namespace std;
 
class Date {
    int day; //день
    int month; //месяц
    int year; //год
public:
    Date(int d = 1, int m = 1, int y = 1970) //конструктор
    {
        day = d;
        month = m;
        year = y;
    }
 
    //метод ввода даты
    void setDate()
    {
        cout << "Введите дату в формате (ДД ММ ГГГГ): ";
        cin >> day >> month >> year; //ввод дня, месяца, года
    }
 
    //форматированный вывод даты (3 формата)
    void format(int f)
    {
        string months[12] = { "Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа", "Сентября", "Октября", "Ноября", "Декабря" };
        string shortMonth[12] = { "Янв", "Фев", "Мар", "Апр", "Мая", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек" };
        int shortYear = year % 100; //сокращение года до последних двух цифр
        switch (f)
        {
        case 1: cout << day << "." << (month <= 9 ? "0" : "") << month << "." << year << endl; break; //если пользователь выбрал (1) в меню
        case 2: cout << day << " " << months[this->month - 1] << " " << year << endl; break; //если пользователь выбрал (2) в меню
        case 3: cout << day << " " << shortMonth[this->month - 1] << " " << (shortYear <= 9 ? "0" : "") << shortYear << endl; break; //если пользователь выбрал (3) в меню
        default: cout << "Нет такого формата!\n"; //если выбрали не 1, 2 или 3 в меню
        }
    }
 
    // проверка високосности года
    bool isLeap()
    {
        if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) //если остаток от деления на 4 равен нулю
        {
            cout << "Год високосный\n";
            return true; //то вернуть истину
        }
        else
        {
            cout << "Год не високосный\n";
            return false; // иначе вернуть ложь
        }
    }
 
    bool isLeap(int x)
    {
        
        if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) //если остаток от деления на 4 равен нулю
        {
            return true; //то вернуть истину
        }
        else
        {
            return false; // иначе вернуть ложь
        }
    }
 
    // возвращает следующую дату от текущей даты
    Date nextDate()
    {
        Date temp; //переменная типа класса Date
        int days[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };// количество дней в кажном месяце
        if (this->isLeap(0)) // если год високосный
            days[1] = 29; // то в феврале 29 дней
        if (days[month - 1] - day > 0) //если месяц не закончился
            temp.day = day + 1; //то прибавляем еще один день
        else
        {
            temp.day = 1; //иначе месяц закончился и номер дня равен 1
        }
        if (temp.day == 1) //если номер дня равен 1
            if (month < 12) //если номер месяца < 12
            {
                temp.month = month + 1; //то прибавляем к текущему значению
                temp.year = year; //год не изменяется
            }
            else
            {
                temp.month = 1; //иначе, месяц становится первым
                temp.year = year + 1; //прибавлятся один год
            }
 
        else
        {
            temp.month = month;
            temp.year = year;
        }
        return temp; // возвращаемое значение объект класса Date
    }
 
    // меню
    void menuDate()
    {
        int choice = -1; //переменная отвечающая за текущий выбор пользователя
        while (choice != 6) //пока выбор не равен 6
        {
            cout << ("\n___________________________\n"
                "Введите цифру от 1 до 5:\n"
                "1 - Вывести дату (формат 1)\n"
                "2 - Вывести дату (формат 2)\n"
                "3 - Вывести дату (формат 3):\n"
                "4 - Следующая дата\n"
                "5 - Проверить високосность\n"
                "6 - Выйти из меню\n\n");
            cin >> choice; //ввод номера пункта меню
            switch (choice)
            {
            case 1: format(1); break; //Вывести дату (формат 1)
            case 2: format(2); break; //Вывести дату (формат 2)
            case 3: format(3); break; //Вывести дату (формат 3)
            case 4: nextDate().format(1); break; //Следующая дата
            case 5: isLeap(); break;
            case 6: cout << "Вы покинули меню данного объекта"; break; //Выход из меню
            }
        }
    }
};
 
int main()
{
    setlocale(LC_CTYPE, ""); //для русского языка в консоли
    Date d; //переменная d типа Date
            //Date d(31,12,2000);
    d.setDate();
    // d.isLeap();
    d.menuDate();
    // system("pause");
    return 0;
}


Добавлено через 10 минут
Код
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 <string>
#include <iostream>
 
using namespace std;
 
class Date {
    int day; //день
    int month; //месяц
    int year; //год
public:
    Date(int d = 1, int m = 1, int y = 1970) //конструктор
    {
        day = d;
        month = m;
        year = y;
    }
 
    //метод ввода даты
    void setDate()
    {
        cout << "Введите дату в формате (ДД ММ ГГГГ): ";
        cin >> day >> month >> year; //ввод дня, месяца, года
    }
 
    //форматированный вывод даты (3 формата)
    void format(int f)
    {
        string months[12] = { "Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа", "Сентября", "Октября", "Ноября", "Декабря" };
        string shortMonth[12] = { "Янв", "Фев", "Мар", "Апр", "Мая", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек" };
        int shortYear = year % 100; //сокращение года до последних двух цифр
        switch (f)
        {
        case 1: cout << day << "." << (month <= 9 ? "0" : "") << month << "." << year << endl; break; //если пользователь выбрал (1) в меню
        case 2: cout << day << " " << months[this->month - 1] << " " << year << endl; break; //если пользователь выбрал (2) в меню
        case 3: cout << day << " " << shortMonth[this->month - 1] << " " << (shortYear <= 9 ? "0" : "") << shortYear << endl; break; //если пользователь выбрал (3) в меню
        default: cout << "Нет такого формата!\n"; //если выбрали не 1, 2 или 3 в меню
        }
    }
 
    // проверка високосности года
    bool isLeap()
    {
        bool res = isLeap(0);
        cout << ((res) ? "Год високосный\n" : "Год не високосный\n");
        return res;
        //если вывод не нужен, то сделай эту функцию void вообще и убери return
        //тогда одна строчка останется:
        //cout << ((isLeap(0)) ? "Год високосный\n" : "Год не високосный\n");
    }
 
    bool isLeap(int x)
    {
        
        if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) //если остаток от деления на 4 равен нулю
        {
            return true; //то вернуть истину
        }
        else
        {
            return false; // иначе вернуть ложь
        }
    }
 
    // возвращает следующую дату от текущей даты
    Date nextDate()
    {
        Date temp; //переменная типа класса Date
        int days[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };// количество дней в кажном месяце
        if (this->isLeap(0)) // если год високосный
            days[1] = 29; // то в феврале 29 дней
        if (days[month - 1] - day > 0) //если месяц не закончился
            temp.day = day + 1; //то прибавляем еще один день
        else
        {
            temp.day = 1; //иначе месяц закончился и номер дня равен 1
        }
        if (temp.day == 1) //если номер дня равен 1
            if (month < 12) //если номер месяца < 12
            {
                temp.month = month + 1; //то прибавляем к текущему значению
                temp.year = year; //год не изменяется
            }
            else
            {
                temp.month = 1; //иначе, месяц становится первым
                temp.year = year + 1; //прибавлятся один год
            }
 
        else
        {
            temp.month = month;
            temp.year = year;
        }
        return temp; // возвращаемое значение объект класса Date
    }
 
    // меню
    void menuDate()
    {
        int choice = -1; //переменная отвечающая за текущий выбор пользователя
        while (choice != 6) //пока выбор не равен 6
        {
            cout << ("\n___________________________\n"
                "Введите цифру от 1 до 5:\n"
                "1 - Вывести дату (формат 1)\n"
                "2 - Вывести дату (формат 2)\n"
                "3 - Вывести дату (формат 3):\n"
                "4 - Следующая дата\n"
                "5 - Проверить високосность\n"
                "6 - Выйти из меню\n\n");
            cin >> choice; //ввод номера пункта меню
            switch (choice)
            {
            case 1: format(1); break; //Вывести дату (формат 1)
            case 2: format(2); break; //Вывести дату (формат 2)
            case 3: format(3); break; //Вывести дату (формат 3)
            case 4: nextDate().format(1); break; //Следующая дата
            case 5: isLeap(); break;
            case 6: cout << "Вы покинули меню данного объекта"; break; //Выход из меню
            }
        }
    }
};
 
int main()
{
    setlocale(LC_CTYPE, ""); //для русского языка в консоли
    Date d; //переменная d типа Date
            //Date d(31,12,2000);
    d.setDate();
    // d.isLeap();
    d.menuDate();
    // system("pause");
    return 0;
}

Вот так даже лучше
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.07.2017, 08:08

Заданы число и месяц невисокосного года. Вычислить порядковый номер даты, начиная отсчет с начала года
Заданы два натуральных числа a,b которые обозначают число и месяц не високосного года. Вычислить...

1 января не високосного года-понедельник. Вводится число и месяц этого года. Вывести день недели этого дня
1 января не високосного года-понедельник. Вводится число и месяц этого года. Вывести день недели...

Написать программу которая выводит возраст и добавляет к нему год, года, лет. Например 1 год, 12 лет, 42 года
Помогите с программой. При запуске программы выводит надпись: &quot;Введите возраст&quot; (от 100 до 130)....

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


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

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

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