Условный оператор и оператор выбора в языке Ада. Введение

Условный оператор if

Условный оператор позволяет в процессе выполнения программы осуществлять выбор между альтернативными вариантами действий. Общий вид условного оператора:

if Условие_1 then		если выполняется Условие_1 тогда
	Действие_1			выполнить Действие_1 
elsif Условие_2 then		иначе если выполняется Условие_2 тогда   
	Действие_2			выполнить Действие_2 
else				иначе 
	Действие_3			выполнить Действие_3 
end if;				Конец условия;

Оператор if должен иметь часть then. Части elsif и else не являются обязательными. Они используются по необходимости. Количество elsif не ограничено, а else может быть только один.

Также для проверки условий нам понадобятся операторы сравнения:

= равно (проверяет равенство двух переменных)
/= не равно
> больше
< меньше
>= больше или равно
<= меньше или равно

Выражение, в котором используются операторы сравнения, может принимать два значения: истина и ложь (True и False). Например, 4 > 1 принимает значение True (так ка 4 больше 1), а выражение 2 > 5 - False (так как 2 меньше 5).

Ниже приведён пример условного оператора:

if A > B then
	Put("A > B");
elsif A = B then
	Put("A = B");
else
	Put("B < A");
end if;

Один условный оператор может быть "вложен" внутрь другого условного оператора. Рассмотрим пример такого вложения:

if A = B then
	Put_Line("Верно!");
else
	Put_Line("Неверно!");
	if A > B then                                 --Начало вложенного блока
		Put_Line("Слишком большое число!");
	else
		Put_Line("Слишком маленькое число!");
	end if;                                       --Конец вложенного блока
end if;

Иногда возникает необходимость проверить более сложные условия. Например, нужно проверить истинность A / B > C. Если В = 0, то будет ошибка (будет возбуждено исключение, т.к на 0 делить нельзя) и программа закончит своё выполнение. Здесь на помощь придут логические операторы:

and и
or или
xor исключающее или

Используя эту таблицу, для предыдущего условия можно сделать следующую проверку:

if B /= 0 and then A / B > C then... --Если B не равно 0 и затем частное от деления A на B больше C...

and then означает последовательную проверку условий, то есть, сначала будет проверено условие B /= 0, и только если оно выполняется, будет проверено следующее условие (A / B > C). Если вместо "and then" написать просто "and":

if B /= 0 and A / B > C then...

то будут в обязательном порядке проверены оба условия (и деление на 0 приведёт к вызову исключения).

Пример:

if A > B then
	Put("A > B");
elsif A = B then
	Put("A = B");
elsif A /= 0 and then B > 10 then
	B := B / A;
	Put(B);
else
	Put("...");
end if;

Рассмотрим задачу:

Даны два целых числа. Выведите значение наибольшего из них. Если числа равны, выведите любое из них.

Формат входных данных
Вводятся два числа.
Формат выходных данных
Выведите ответ на задачу.

Пример ввода 1:
1 2
Пример вывода 1:
2

Пример ввода 2:
5 3
Пример вывода 2:
5

Решение:

with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
 
procedure main is
	a, b : Integer;                     --Объявляем 2 целочисленные переменные
begin
	Get(a); Get(b);                     --Ввод двух целых чисел
	if a >= b then                      --Если первое число больше второго, то
		Put(Item => a, Width => 1);     --Выводим первое число
	else                                --Иначе
		Put(Item => b, Width => 1);     --Выводим второе число
	end if;                             --Конец условного оператора
end main;

Оператор выбора case

Если необходимо проверить много условий и оператор if чрезмерно разрастается, то иногда имеет смысл использовать вместо него оператор выбора case. Общий вид:

case Y is
    when -1           => Действие/я_1;      --Если Y = -1, то выполнить действие/я_1
    when 0 | 1        => Действие/я_2;      --Если Y = 0 или Y = 1, то выполнить действие/я_2
    when 2..10        => Действие/я_3;      --Если Y лежит в диапазоне от 2 до 10, то выполнить действие/я_3
    when 11 | 15..20  => Действие/я_4;      --Если Y равен 11 или лежит в диапазоне от 15 до 20, то
                                            --выполнить действие/я_4
    when others       => Действие/я_5;      --Во всех остальных случаях выполнить действие/я_5
end case;

Необходимо отметить, что тип Y должен быть дискретным, т.е. нужно использовать перечисление либо целый тип (Integer).

Рассмотрим задачу:

Напишите программу, которая запрашивает у пользователя номер дня недели, затем выводит название дня недели или сообщение об ошибке, если введены неверные данные.

Пример ввода:
1
Пример вывода:
Понедельник

Решение:

with Ada.Text_IO; use Ada.Text_IO;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
 
procedure Main is
	X : Integer;
begin
	Get(X);
	case X is                                    --Начало оператора выбора
		when 1 => Put_Line("Понедельник");
		when 2 => Put_Line("Вторник");
		when 3 => Put_Line("Среда");
		when 4 => Put_Line("Четверг");
		when 5 => Put_Line("Пятница");
		when 6 => Put_Line("Суббота");
		when 7 => Put_Line("Воскресенье");
		when others => Put_Line("Ошибка! Введены неверные данные.");
	end case;                                     --Конец оператора выбора
end Main;

Теперь можно смело переходить к решению задач.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *