Опубликован: 10.04.2015 | Уровень: для всех | Доступ: платный | ВУЗ: Компания ALT Linux
Лекция 3:

Операторы управления

Аннотация: В этой главе изложена методика составления алгоритмов с помощью блок-схем и описаны основные операторы языка: условный оператор if, оператор выбора case, операторы цикла while..do, repeat..until, for..do. Приводится большое количество примеров составления программ различной сложности.

3.1 Основные конструкции алгоритма

Как правило, созданию программы предшествует разработка алгоритма1Алгоритм — от algorithmi, algorismus, первоначально латинская транслитерация имени математика аль-Хорезми.. Алгоритм — это чёткое описание последовательности действий, которые необходимо выполнить для того, чтобы при соответствующих исходных данных получить требуемый результат. Одним из способов представления алгоритма является блок-схема. При составлении блок-схемы все этапы решения задачи изображаются с помощью различных геометрических фигур. Эти фигуры называют блоками и, как правило, сопровождают текстом. Последовательность выполнения этапов указывают при помощи стрелок, соединяющих эти блоки. Типичные этапы решения задачи изображаются следующими геометрическими фигурами:

  • блок начала (конца ) (рис. 3.1). Текст внутри блока: "начало" ("конец");
Блок начала (конца) алгоритма

Рис. 3.1. Блок начала (конца) алгоритма
  • блок ввода (вывода ) данных (рис. 3.2). Текст внутри блока: "ввод" ("вывод" или "печать") и список вводимых (выводимых) переменных;
Блок ввода (вывода)

Рис. 3.2. Блок ввода (вывода)
  • блок решения, или арифметический (рис. 3.3). Внутри блока записывается действие, вычислительная операция или группа операций;
Арифметический блок

Рис. 3.3. Арифметический блок
  • условный блок (рис. 3.4). Логическое условие записывается внутри блока. В результате проверки условия осуществляется выбор одного из возможных путей (ветвей) вычислительного процесса.
Условный блок

Рис. 3.4. Условный блок

Рассмотренные блоки позволяют описать три основные конструкции алгоритма : линейный процесс, разветвляющийся процесс и циклический процесс.

Линейный процесс — это конструкция, представляющая собой последовательное выполнение двух или более блоков (рис. 3.5).

Разветвляющийся процесс задаёт выполнение одного или другого оператора в зависимости от выполнения условия (рис. 3.6).

Циклический процесс задаёт многократное выполнение оператора или группы операторов (рис. 3.7).

Линейный процесс

Рис. 3.5. Линейный процесс
Разветвляющийся процесс

Рис. 3.6. Разветвляющийся процесс
Циклический процесс

Рис. 3.7. Циклический процесс

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

Рассмотрим операторы языка программирования Free Pascal, реализующие основные конструкции алгоритма.

3.2 Оператор присваивания

Оператор присваивания в языке Free Pascal состоит из двух символов: двоеточия и знака равенства. Символы := всегда пишут слитно. Пробелы допускаются перед символом двоеточия и после символа равенства.

В общем случае оператор присваивания имеет вид:

имя_переменной := значение;

где значение — это выражение, переменная, константа или функция. Выполняется оператор так. Сначала вычисляется значение выражения, указанного в правой части оператора, а затем его результат записывается в область памяти (переменную), имя которой указано слева. Например, запись a:=b означает, что переменной а присваивается значение выражения b.

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

Оператор присваивания, как и любой другой оператор в языке Free Pascal, отделяется от других точкой с запятой.

3.3 Составной оператор

Составной операторгруппа операторов, отделённых друг от друга точкой с запятой, начинающихся со служебного слова begin и заканчивающихся служебным словом end:

begin
оператор_1;
...
оператор_n
end;

Транслятор воспринимает составной оператор как один оператор.

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

В языке Free Pascal одна из основных конструкций алгоритма, разветвляющийся процесс, реализована двумя условными операторами: if и case. Рассмотрим каждый из них.

3.4.1 Условный оператор if..then..else

При решении большинства задач порядок вычислений зависит от определённых условий, например от исходных данных или от промежуточных результатов, полученных на предыдущих шагах программы. Для организации вычислений в зависимости от какого-либо условия в языке Free Pascal используется условный оператор if..then..else, который в общем виде записывается так:

Алгоритм условного оператора if..then..else

Рис. 3.8. Алгоритм условного оператора if..then..else

if условие then оператор_1 else оператор_2;

где if..then..else — зарезервированные слова, условие — выражение логического типа2Логическое выражение может принимать одно из двух значений: истина или ложь., оператор_1 и оператор_2 — любые операторы языка Free Pascal.

Работа условного оператора организована следующим образом. Сначала вычисляется выражение, записанное в условии. Если оно имеет значение истина (True), то выполняется оператор_1. В противном случае, когда выражение имеет значение ложь (False), оператор_1 игнорируется и управление передаётся оператору_2.

Алгоритм, который реализован в условном операторе if..then..else, представлен на рис. 3.8.

Например, чтобы сравнить значения переменных x и y, нужно создать следующий программный код:

write ( ’ x= ’ ); readln ( x );
write ( ’ y= ’ ); readln ( y );
if x=y then
writeln ( ’значение x равно значению y ’ )
else writeln ( ’значение x не равно значению y ’ );

Если в задаче требуется, чтобы в зависимости от значения условия выполнялся не один оператор, а несколько, необходимо использовать составной оператор:

if условие then
	begin
		оператор_1;
		оператор_2;
		...
		оператор_n;
	end
else
	begin
		оператор_1;
		оператор_2;
		...
		оператор_n;
	end;

Альтернативная ветвь else в условном операторе может отсутствовать, если в ней нет необходимости:

if условие then оператор;
или
if условие then
	begin
		оператор_1;
		оператор_2;
		...
		оператор_n;
	end;

В таком "усечённом" виде условный оператор работает так: оператор (группа операторов) либо выполняется, либо пропускается в зависимости от значения выражения, представляющего условие. Алгоритм этого условного процесса представлен на рис. 3.9.

Пример применения условного оператора, без альтернативной ветви else может быть таким:

write ( ’ x= ’ ); readln ( x );
write ( ’ y= ’ ); readln ( y );
c : = 0;
{Значение переменной c изменяется только при условии,}
{что x не равно y.}
if ( x<>y ) then c :=x+y;
{Вывод на экран значения переменной c}
{выполняется в любом случае.}
writeln ( ’Значение переменной с= ’, c );

Условные операторы могут быть вложены друг в друга. При вложениях условных операторов всегда действует правило: альтернатива else считается принадлежащей ближайшему if, имеющему ветвь else. Например, в записи он принадлежит оператору if с условием_1.

Алгоритм условного оператора if без альтернативной ветви else

Рис. 3.9. Алгоритм условного оператора if без альтернативной ветви else
if условие_1 then
	if условие_2 then
		оператор_А
	else оператор_Б;

оператор_Б относится к условию_2, а в конструкции

if условие_1 then
	begin
		if условие_2 then
			оператор_А;
		end
	else оператор_Б;

Для сравнения переменных в условных выражениях применяют операции отношения : =, <>, <, >, <=, >=. Условные выражения составляют с использованием логических операций and, or и not. В языке Free Pascal приоритет операций отношения меньше, чем у логических операций, поэтому составные части сложного логического выражения заключают в скобки.

Допустим, нужно проверить, принадлежит ли переменная x интервалу [a, b]. Условный оператор будет иметь вид:

if ( x>=a ) and ( x<=b ) then...

Запись

if x>=a and x<=b then...

неверна, так как фактически будет вычисляться значение выражения

x>=(a and x)<=b.

Графическое представление задачи 3.1

увеличить изображение
Рис. 3.10. Графическое представление задачи 3.1
Юрий Шутиков
Юрий Шутиков

По первому тесту выполнил дважды задания. Результат получается правильный (проверял калькулятором). Пишет, что "Задание не проверено" и предлагает повторить. 
 

Евгений Силуков
Евгений Силуков

Еще в декабре выполнил тест №1, а его все так и не проверили.

Aalbaz Turaew
Aalbaz Turaew
Азербайджан, Баку
Руфия Биккулова
Руфия Биккулова
Россия, р.п. Старая Кулатка, УлГПУ имени И.Н. Ульянова, 2005