По первому тесту выполнил дважды задания. Результат получается правильный (проверял калькулятором). Пишет, что "Задание не проверено" и предлагает повторить. |
Операторы управления
3.1 Основные конструкции алгоритма
Как правило, созданию программы предшествует разработка алгоритма1Алгоритм — от algorithmi, algorismus, первоначально латинская транслитерация имени математика аль-Хорезми.. Алгоритм — это чёткое описание последовательности действий, которые необходимо выполнить для того, чтобы при соответствующих исходных данных получить требуемый результат. Одним из способов представления алгоритма является блок-схема. При составлении блок-схемы все этапы решения задачи изображаются с помощью различных геометрических фигур. Эти фигуры называют блоками и, как правило, сопровождают текстом. Последовательность выполнения этапов указывают при помощи стрелок, соединяющих эти блоки. Типичные этапы решения задачи изображаются следующими геометрическими фигурами:
- блок начала (конца ) (рис. 3.1). Текст внутри блока: "начало" ("конец");
- блок ввода (вывода ) данных (рис. 3.2). Текст внутри блока: "ввод" ("вывод" или "печать") и список вводимых (выводимых) переменных;
- блок решения, или арифметический (рис. 3.3). Внутри блока записывается действие, вычислительная операция или группа операций;
- условный блок (рис. 3.4). Логическое условие записывается внутри блока. В результате проверки условия осуществляется выбор одного из возможных путей (ветвей) вычислительного процесса.
Рассмотренные блоки позволяют описать три основные конструкции алгоритма : линейный процесс, разветвляющийся процесс и циклический процесс.
Линейный процесс — это конструкция, представляющая собой последовательное выполнение двух или более блоков (рис. 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 оператор_1 else оператор_2;
где if..then..else — зарезервированные слова, условие — выражение логического типа2Логическое выражение может принимать одно из двух значений: истина или ложь., оператор_1 и оператор_2 — любые операторы языка Free Pascal.
Работа условного оператора организована следующим образом. Сначала вычисляется выражение, записанное в условии. Если оно имеет значение истина (True), то выполняется оператор_1. В противном случае, когда выражение имеет значение ложь (False), оператор_1 игнорируется и управление передаётся оператору_2.
Алгоритм, который реализован в условном операторе if..then..else, представлен на рис. 3.8.
Например, чтобы сравнить значения переменных и , нужно создать следующий программный код:
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 условие_1 then if условие_2 then оператор_А else оператор_Б;
оператор_Б относится к условию_2, а в конструкции
if условие_1 then begin if условие_2 then оператор_А; end else оператор_Б;
Для сравнения переменных в условных выражениях применяют операции отношения : =, <>, <, >, <=, >=. Условные выражения составляют с использованием логических операций and, or и not. В языке Free Pascal приоритет операций отношения меньше, чем у логических операций, поэтому составные части сложного логического выражения заключают в скобки.
Допустим, нужно проверить, принадлежит ли переменная интервалу . Условный оператор будет иметь вид:
if ( x>=a ) and ( x<=b ) then...
Запись
if x>=a and x<=b then...
неверна, так как фактически будет вычисляться значение выражения
x>=(a and x)<=b.