Программа для определения принадлежности чисел одному знаку



Задание.


Проверить и вывести на экран сообщение о том, что a и b одинаковые по знаку.



Математическое вступление


Чтобы определить, что число является положительным или отрицательным нужно сравнить его с нулем:

a>0 - положительное число;
a<0 - отрицательное число.


Случай a=0 рассматривать не будем, хотя можно для более точного решения задачи заменить строгое сравнение на нестрогое. >=


Можно пойти и другим путем, например, проверяя наличие знака у числа, но это будет уже сложнее.


Решение задачи на Паскале.


Пусть вводимые числа для простоты будут целыми


Var
a,b:integer;

Используем условия для проверки принадлежности к диапазону.

(a>0) and (b>0) - становится истиной только при одновременной положительности чисел, исходя из таблицы истинности. Точно также и для отрицательного диапазона.


(a>0) and (b>0) - становится истиной только при одновременной положительности чисел, исходя из таблицы истинности операции and.


Program znaki_1;

Var
a,b:integer;
Begin
write(Введите числа a и b:);
readln(a,b);
if (a>0) and (b>0) then
writeln(Числа a и b - положительные!);
if (a<0) and (b<0) then
writeln(Числа a и b - отрицательные!);
End.

Проверка вводимых значений.


Введите числа a и b: 6 9
Числа a и b - положительные!


Введите числа a и b:-9 -7
Числа a и b - отрицательные!


А вот? если мы будем вводить разные по знакам числа, то ничего на экран не выйдет:


Введите числа a и b:9 -7


Доработка программы.


Чтобы исправить эту проверку, нужно добавить проверку на разность по знакам.
Сделаем ещё одну проверку условия с вложенным оператором ветвления.
Учтите, что перед else не должно стоять точки с запятой!


Program znaki_2;

Var
a,b:integer;
Begin
write(Введите числа a и b:);
readln(a,b);
if (a>0) and (b>0) then
writeln(Числа a и b - положительные!)
else
if (a<0) and (b<0) then
writeln(Числа a и b - отрицательные!)
else
writeln(Числа a и b - разные по знаку!);
End.

Проверка выполнения условия


Введите числа a и b:-9 9
Числа a и b - разные по знаку!



Упрощаем решение задачи.


Вспомним, что по условию задачи нам необязательно проверять вводимые числа на принадлежность к какому-либо конкретному знаку, поэтому задачу можно упростить.


Program znaki_3;

Var
a,b:integer;
Begin
write(Введите числа a и b:);
readln(a,b);
if ((a>0) and (b>0)) or ((a<0) and (b<0)) then
writeln(Числа a и b - одного знака!)
else
writeln(Числа a и b - разные по знаку!);
End.

Условие получилось достаточно большое, но хорошо читаемое. Теперь для проверки используется только одна строка кода.


Оператор ввода данных с клавиатуры