Создайте программу (Pascal), которая запрашивает два целых числа и выводит на экран удвоенное первое число и половину второго числа. Протокол программы: a, b = 12 17 a = 2 = 24 b : 2 = 8.5
Программа имеет 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'ов не всегда предсказуемо для человека, не всегда оптимально по ресурсозатратам и т.п.), но точно не в учебных программах.
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'ов не всегда предсказуемо для человека, не всегда оптимально по ресурсозатратам и т.п.), но точно не в учебных программах.