РЕБЯТА ВЫРУЧАЙТЕ, помогите пожалуйста написать программу в паскале: " Даны два целых числа: D (день)...

Тематика Информатика
Уровень 10 - 11 классы
программирование паскаль case предыдущая дата день месяц не високосный год задача алгоритм
0

РЕБЯТА ВЫРУЧАЙТЕ, помогите пожалуйста написать программу в паскале: " Даны два целых числа: D (день) и M (месяц), определяющие правильную дату не високосного года. Вывести значения D и M для даты, предшествующей указанной." ИСПОЛЬЗУЯ КОМАНДУ CASE.

avatar
7ko
задан 11 дней назад

2 Ответа

0

Для решения задачи о нахождении предыдущей даты, исходя из указанного дня (D) и месяца (M), можно использовать язык программирования Паскаль. Мы будем учитывать количество дней в каждом месяце (для не високосного года) и обрабатывать различные ситуации с переходом между месяцами и годами.

Вот пример программы, которая решает данную задачу:

program PreviousDate;

var
  D, M: Integer;
  PrevD, PrevM: Integer;

begin
  // Ввод данных
  Write('Введите день (D): ');
  ReadLn(D);
  Write('Введите месяц (M): ');
  ReadLn(M);

  // Проверяем корректность введенных данных
  if (M < 1) or (M > 12) or (D < 1) or (D > 31) then
  begin
    WriteLn('Некорректные данные. Пожалуйста, введите правильный день и месяц.');
    Exit;
  end;

  // Определяем предыдущую дату с использованием команды CASE
  case M of
    1: // Январь
      begin
        if D > 1 then
        begin
          PrevD := D - 1;
          PrevM := M;
        end
        else
        begin
          PrevD := 31; // Декабрь предыдущего года
          PrevM := 12;
        end;
      end;

    2: // Февраль
      begin
        if D > 1 then
        begin
          PrevD := D - 1;
          PrevM := M;
        end
        else
        begin
          PrevD := 31; // Январь
          PrevM := 1;
        end;
      end;

    3: // Март
      begin
        if D > 1 then
        begin
          PrevD := D - 1;
          PrevM := M;
        end
        else
        begin
          PrevD := 28; // Февраль
          PrevM := 2;
        end;
      end;

    4: // Апрель
      begin
        if D > 1 then
        begin
          PrevD := D - 1;
          PrevM := M;
        end
        else
        begin
          PrevD := 31; // Март
          PrevM := 3;
        end;
      end;

    5: // Май
      begin
        if D > 1 then
        begin
          PrevD := D - 1;
          PrevM := M;
        end
        else
        begin
          PrevD := 30; // Апрель
          PrevM := 4;
        end;
      end;

    6: // Июнь
      begin
        if D > 1 then
        begin
          PrevD := D - 1;
          PrevM := M;
        end
        else
        begin
          PrevD := 31; // Май
          PrevM := 5;
        end;
      end;

    7: // Июль
      begin
        if D > 1 then
        begin
          PrevD := D - 1;
          PrevM := M;
        end
        else
        begin
          PrevD := 30; // Июнь
          PrevM := 6;
        end;
      end;

    8: // Август
      begin
        if D > 1 then
        begin
          PrevD := D - 1;
          PrevM := M;
        end
        else
        begin
          PrevD := 31; // Июль
          PrevM := 7;
        end;
      end;

    9: // Сентябрь
      begin
        if D > 1 then
        begin
          PrevD := D - 1;
          PrevM := M;
        end
        else
        begin
          PrevD := 31; // Август
          PrevM := 8;
        end;
      end;

    10: // Октябрь
      begin
        if D > 1 then
        begin
          PrevD := D - 1;
          PrevM := M;
        end
        else
        begin
          PrevD := 30; // Сентябрь
          PrevM := 9;
        end;
      end;

    11: // Ноябрь
      begin
        if D > 1 then
        begin
          PrevD := D - 1;
          PrevM := M;
        end
        else
        begin
          PrevD := 31; // Октябрь
          PrevM := 10;
        end;
      end;

    12: // Декабрь
      begin
        if D > 1 then
        begin
          PrevD := D - 1;
          PrevM := M;
        end
        else
        begin
          PrevD := 30; // Ноябрь
          PrevM := 11;
        end;
      end;

  else
    WriteLn('Некорректный месяц.');
    Exit;
  end;

  // Вывод предыдущей даты
  WriteLn('Предыдущая дата: ', PrevD, '/', PrevM);
end.

Объяснение программы:

  1. Ввод данных: Программа запрашивает у пользователя ввод дня и месяца.
  2. Проверка корректности данных: Убедимся, что введенные значения находятся в допустимых пределах.
  3. Использование case: На основе введенного месяца программа определяет, какой день будет предыдущим, учитывая переход между месяцами. Для каждого месяца предусмотрены различные условия, чтобы корректно обрабатывать ситуации, когда день - первый (1). В таких случаях программа возвращается к последнему дню предыдущего месяца.
  4. Вывод результата: Программа выводит предыдущую дату в формате "день/месяц".

Таким образом, с помощью конструкции case мы можем легко управлять логикой нахождения предыдущей даты для каждого месяца.

avatar
ответил 11 дней назад
0

Вот развернутое объяснение и решение задачи о нахождении предыдущей даты в не високосном году с использованием языка программирования Pascal и конструкции case.

1. Постановка задачи:

  • У нас есть два целых числа — D (день) и M (месяц), которые представляют корректную дату в не високосном году.
  • Нужно определить, какая дата предшествует указанной, и вывести её.
  • Учитываем особенности календаря:
    • Месяцы разные по количеству дней:
      • Январь, март, май, июль, август, октябрь, декабрь — 31 день.
      • Апрель, июнь, сентябрь, ноябрь — 30 дней.
      • Февраль — 28 дней (не високосный год).
    • Если вводим дату 1 числа в каком-то месяце, то предыдущий день будет последним числом предыдущего месяца. Например:
      • Для 1 марта предыдущей датой будет 28 февраля.
      • Для 1 мая — 30 апреля.
      • Для 1 января — 31 декабря предыдущего года.

2. Решение:

Чтобы решить задачу, удобно использовать команду case, которая подходит для выбора логики в зависимости от месяца. Программа будет работать следующим образом:

  1. Проверяем, является ли введённая дата первым числом месяца (D = 1):
    • Если да, то нужно определить последний день предыдущего месяца.
    • Если месяц — январь (M = 1), то переходим на декабрь прошлого года.
    • Для остальных месяцев нужно учитывать количество дней в предыдущем месяце.
  2. Если дата не первое число месяца (D > 1), просто уменьшаем день на единицу (D := D - 1).

3. Код программы:

program PreviousDate;
var
  D, M: integer;
begin
  writeln('Введите день и месяц (через пробел):');
  readln(D, M);

  if (D < 1) or (D > 31) or (M < 1) or (M > 12) then
  begin
    writeln('Ошибка: некорректная дата.');
    exit;
  end;

  if D = 1 then  // Если это первое число месяца
  begin
    M := M - 1;  // Переходим к предыдущему месяцу
    if M = 0 then  // Если это был январь, то теперь декабрь
    begin
      M := 12;
      D := 31;
    end
    else
    begin
      case M of
        1, 3, 5, 7, 8, 10, 12: D := 31;  // Январь, март, май, июль, август, октябрь, декабрь
        4, 6, 9, 11: D := 30;            // Апрель, июнь, сентябрь, ноябрь
        2: D := 28;                      // Февраль (не високосный год)
      end;
    end;
  end
  else
  begin
    D := D - 1;  // Если это не первое число, просто уменьшаем день
  end;

  writeln('Предыдущая дата: ', D, '.', M);
end.

4. Объяснение кода:

  1. Ввод данных:
    • Пользователь вводит день и месяц. Проверяем, чтобы значения были в допустимых пределах.
  2. Проверка первого числа месяца:
    • Если день равен 1 (D = 1), то переходим на предыдущий месяц:
      • Если это январь, то предыдущий месяц — декабрь, устанавливаем дату 31 декабря.
      • Для всех других месяцев используем case для определения количества дней в предыдущем месяце.
  3. Обработка остальных случаев:
    • Если день больше 1 (D > 1), то просто уменьшаем значение дня на 1.
  4. Вывод результата:
    • Программа выводит предыдущую дату в формате D.M.

5. Примеры работы программы:

Пример 1:

Ввод:

1 3

Вывод:

Предыдущая дата: 28.2

(1 марта → 28 февраля)

Пример 2:

Ввод:

15 6

Вывод:

Предыдущая дата: 14.6

(15 июня → 14 июня)

Пример 3:

Ввод:

1 1

Вывод:

Предыдущая дата: 31.12

(1 января → 31 декабря)

6. Особенности:

  • Программа предполагает, что вводимая дата корректна (например, не проверяем 31 февраля, так как она невозможна).
  • Работает только для не високосного года (у февраля всегда 28 дней).

Надеюсь, это решение поможет вам!

avatar
ответил 11 дней назад

Ваш ответ

Вопросы по теме