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

Создайте программу (Pascal), которая запрашивает два целых числа и выводит на экран удвоенное первое число и половину второго числа. Протокол программы:
a, b = 12 17
a = 2 = 24 b : 2 = 8.5

Показать ответ
Ответ:
жасеке
жасеке
19.05.2021 23:32

program AB;

var

   a: Integer;

   b: Integer;

   b2: Real;

begin

   writeln('a, b = '); readln(a,b);

   a := a * 2;

   b2 := b / 2;

   writeln('a*2 = ', a, ' b : 2 = ', b2);

end.

Объяснение:

Программа имеет 3 переменные: a, b (для входных данных), b2 (для результата деления, который потенциально может быть не целым числом, а потому требует типа Real).

Программа выводит приглашение на ввод, считывает два целых числа (считывает их именно как целые числа Integer, что от нас и требуется по задаче), затем умножает число a на 2, а для b "просто разделить на 2" нельзя, т.к. надо учесть возможность деление может дать и вовсе не целое число (как в примере), поэтому результат мы записываем в переменную вещественного типа Real с именем b2.

Дальше вывод.

БОНУС. В принципе, данная задача имеет альтернативное решение через конструкцию если...то (if...then), которая использует только целые значения, но, наверное, данное решение неуместно.

Тем не менее, я всё же приведу его. Если Вы пока не проходили if.. then, то можете вернуться, когда пройдёте.

Суть решения сводится к тому, что существует всего один возможный ненулевой остаток от деления числа на 2, который в десятичном виде всегда записывается точно как ".5").

Поэтому

program AB_alt;

var

    a: Integer;

    b: Integer;

    bmod: Integer;

begin

    writeln('a, b');

    a := a * 2;

    bmod := b mod 2;

    b := b div 2;

    writeln('a*2 = ', a, 'b : 2 = ', b);

    if (bmod <> 0) then write('.5');

end.

Вычисляется остаток от деления, затем выводится целая часть от деления b на 2, и затем, если имеется ненулевой остаток (для положительных чисел он равен 1, для отрицательных -1), но в целом это всегда добавляет просто добавляет к целой части запись ".5".

Данный метод иногда бывает уместен (дело в том, что поведение real'ов не всегда предсказуемо для человека, не всегда оптимально по ресурсозатратам и т.п.), но точно не в учебных программах.

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