М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
yra8372004
yra8372004
12.08.2022 16:44 •  Информатика

Не могу написать проверку на високосный/не високосный год для февраля. Пыталась вводить и без проверки, но даже так февраль не выводится. Вот условие:
Напишите программу, которая запрашивает день, месяц, год и осуществляет
проверку на корректный ввод данных (даты). Необходимо учитывать количество дней согласно
месяцу, високосный/не високосный год. Значение года – четырехзначное положительное число.
При вводе некорректных данных – сообщение. Если же дата введена верно, вывести на экран с
названием месяца. Например, 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 << "Неверный год.";

👇
Ответ:
Duxa22
Duxa22
12.08.2022

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

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 { // неверный год }

4,4(44 оценок)
Ответ:
ttlekzhan
ttlekzhan
12.08.2022

bool check_intercalary(int k){

   return (k % 4 == 0 && k % 100 != 0) || (k % 400 == 0);

}

signed main(){

   map<int, string> u;

   u[1] = "января";

   u[2] = "февраля";

   u[3] = "марта";

   u[4] = "апреля";

   u[5] = "мая";

   u[6] = "июня";

   u[7] = "июля";

   u[8] = "августа";

   u[9] = "сентября";

   u[10] = "октября";

   u[11] = "ноября";

   u[12] = "декабря";

   int d, m, y;

   cin >> d >> m >> y;

   bool ok = true;

   if(m == 2 && d > 28 + check_intercalary(y))

       ok = false;

   else if(((m % 2 == 1 && m < 8) || (m % 2 == 0 && m >= 8)) && d > 31)

       ok = false;

   else if(d > 30)

       ok = false;

   if(ok)

       cout << d << " " << u[m] << " " << y << " г.";

   else

       cout << "Неверный ввод";

}

4,5(30 оценок)
Открыть все ответы
Ответ:
laravivaldyoy2w4w
laravivaldyoy2w4w
12.08.2022
Многие пользователи активно используют программу PowerPoint для создания презентаций. Но мало кто знает, какие требования при этом должны выполняться, каких ошибок нужно избегать. Рассмотрим основные ошибки, которые совершает пользователь при создании презентации.
 Ошибка 1. Фон слайда не сочетается с темой презентации. И мы видим, к примеру, презентацию о революциях в России на фоне с березками и грибочками.Ошибка 2. Использован фон, который входит в набор программы PowerPoint. За многие годы существования программы PowerPoint стандартными шаблонами воспользовались тысячи людей, опубликовали свои презентации в сети, показали на выступлениях. Эти шаблоны уже просто надоели слушателям.
4,8(100 оценок)
Ответ:
rasulid04
rasulid04
12.08.2022
2^n в двоичной системе - это 1 и n нулей после неё. Например, 2^5(10) = 100000(2)
Приведём все степени к основанию 2

2^3702-2^468+2^1620-108

-108 можно представить как -128 + 16 + 4

2^3702-2^468+2^1620-2^7 + 2^4 + 2^2

Теперь выстраиваем степени в порядке убывания:

2^3702+2^1620-2^468-2^7 + 2^4 + 2^2

В выражении два вычитания подряд, избавимся от этого, заменив -2^468 на -2^469 + 2^468

2^3702+2^1620 -2^469+2^468-2^7 + 2^4 + 2^2

2^3702 - 1 единица
2^4 - 1 единица
2^2 - 1 единица

Количество единиц в вычитаниях будет равно разнице степеней. Например 1000000-100=1111

2^1620 -2^469 - количеств единиц 1620-469 = 1151
2^468-2^7 - количество единиц 468-7 = 461
Общее количество единиц равно 3+1151+461 = 1615
4,8(84 оценок)
Это интересно:
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ