alarm
Задайте вопрос
Информатика
Bernard

Не могу написать проверку на високосный/не високосный год для февраля. Пыталась вводить и без проверки, но даже так февраль не выводится. Вот условие:Напишите программу, которая запрашивает день, месяц, год и осуществляетпроверку на корректный ввод данных (даты). Необходимо учитывать количество дней согласномесяцу, високосный/не високосный год. Значение года – четырехзначное положительное число. При вводе некорректных данных – сообщение. Если же дата введена верно, вывести на экран сназванием месяца. Например, 9 июля 2021 г. int day, month, year;cout << "Введите день, месяц и год: "; cin >> day >> month >> year;if (year > 0){if (month <= 12 && month >= 1){if (day <= 31){if (day >= 1 || day == 31)switch (month) {case 1: cout << day << " января " << year; break;case 3: cout << day << " марта " << year; break;case 5: cout << day << " мая " << year; break;case 7: cout << day << " июля " << year; break;case 8: cout << day << " августа " << year; break;case 10: cout << day << " октября " << year; break;case 12: cout << day << " декабря " << year; break;default: cout << "Неверный день. ";}else if (day >= 1 || day == 30)switch (month) {case 4: cout << day << " апреля " << year; break;case 6: cout << day << " июня " << year; break;case 9: cout << day << " сентября " << year; break;case 11: cout << day << " ноября " << year; break;default: cout << "Неверный день. ";}else if (day >= 1 || day == 29 && year %4 ==0 && year%100 =0)switch (month) {case 2: cout << day << " февраля " << year; break;default: cout << "Неверный день. ";}}else cout << "Неверный день. ";}else cout << "Неверный месяц. ";}else cout << "Неверный год. ";

ответы: 1
Зарегистрируйтесь, чтобы добавить ответ
Ответ:

У тебя конструкция такая:

if(day <= 31) {

if(day >= 1 || day == 31) {

//Январь, март, май, июль, авгус, октябрь, декабрь

} else if(day >= 1 || day == 30) {

// Апрель, июнь, сентябрь, ноябрь

} else if(. . . ) {

// февраль

} else {

//Неверно

}

Если мы вводим правильный день месяца, то мы всегда заходим в первый же if и игнорируем все последующие if-else, поскольку в первый уже зашли. Например, не только 31 января со ствует условию if(day >= 1 || day == 31), но и 2 апреля, и даже 29 февраля. Только все, кто не попал в switch-case внутри первого if, будут выкидывать "неверный день"

Если не слишком переписывать код, то надо заменить конструкции else if на простые if, и убрать внутри default. Но как только мы нашли совпадение, т. е. зашли в одну из веток switch-case и вывели в консоль дату, надо из функции или программы делать return.

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

if год > 0 {

if месяц in (январь, март, май, июль, авгус, октябрь, декабрь) {

if день in 1. . 31 { // выводим дату } else { // неверный день }

}

else if месяц in (апрель, июнь, сентябрь, ноябрь) {

if день in 1. . 30 { // выводим дату } else { // неверный день }

}

else if месяц == февраль {

if проверка_на_обычный_год OR проверка_на_високосный год { // выводим дату } else { // неверный день }

}

else { // неверный месяц }

}

else { // неверный год }

388
DavidAxel
Чтобы ответить необходимо зарегистрироваться.

Другие вопросы: - Информатика

попробуйте решить эту задачу с п

Какие классы и методы тестирован

Нужно написать программу, где ну

посчитайте Очень Задачи не

С++.Даю 20 поинтов. Есть код на

С++. Необходимо найти n-ое прост

Контакты
Реклама на сайте