В
Все
М
Математика
А
Английский язык
Х
Химия
Э
Экономика
П
Право
И
Информатика
У
Українська мова
Қ
Қазақ тiлi
О
ОБЖ
Н
Немецкий язык
Б
Беларуская мова
У
Українська література
М
Музыка
П
Психология
А
Алгебра
Л
Литература
Б
Биология
М
МХК
О
Окружающий мир
О
Обществознание
И
История
Г
Геометрия
Ф
Французский язык
Ф
Физика
Д
Другие предметы
Р
Русский язык
Г
География
soloveva2506
soloveva2506
04.01.2022 13:11 •  Информатика

Дан фрагмент на паскале
A:=1 b:=1
While (a+b)<16 do
begin
a:=a+1; b:=b+2
End;
s:=a+b;

Составьте трассировочную таблицу для данного фрагмента программы. Чему будут равны значения переменных, a, b, s после завершения этой последовательности?

Показать ответ
Ответ:
мик271
мик271
06.02.2021 15:29

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

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

0,0(0 оценок)
Ответ:
ivanovapolina86
ivanovapolina86
06.02.2021 15:29

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 << "Неверный ввод";

}

0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота