Операторы. Условные операторы. Операторы повторения
Операторы языка Турбо Паскаль разделяются на две группы : простые операторы и структурные операторы.
Простые операторы
- К простым операторам отнесем :
оператор присваивания,
оператор процедуры и оператор перехода.
- Простые операторы - это такие операторы, которые не содержат в себе других операторов.
Оператор присваивания:
Имя := выражение.
Выполняется -
- вычисления справа от знака,
- присваивание этого значения переменной с именем слева от знака :=.
Оператор перехода состоит из ключевого слова Goto, после которого стоит метка. Выполнение оператора Goto приводит к передаче управления на оператор, перед которым расположена указанная в операторе Goto метка.
Оператор вызова процедуры - 1) Имя_процедуры;
2)Имя_процедуры(список фактических параметров)
Сложные операторы
Структурные операторы включают в себя другие операторы и управляют последовательностью их выполнения.
В Turbo Pascal структурными операторами являются:
1) составной оператор;
2) условные операторы :
- оператор альтернативы IF;
- оператор выбора CASE;
3) операторы цикла :
- оператор цикла с предусловием WHILE;
- оператор цикла с постусловием REPEAT;
- оператор цикла со счетчиком FOR;
Составной оператор
Составной оператор
объединяет группу операторов в единое целое, после чего они могут считаться одним оператором.
Составной оператор
состоит из последовательности объединяемых операторов, которые располагаются между ключевыми словами
begin и end.
Условный оператор IF
Неполная форма :
if выражение
then оператор
else
then
if выражение
then оператор1
else оператор2;
Полная форма :
При выполнении условного оператора
сначала вычисляется выражение, результат которого может принимать только булевский тип,
а затем , в зависимости от значения результата, выполняется оператор1, стоящий после ключевого слова then (если результат равен True), или оператор2,стоящий после ключевого слова else (если результат равен False).
Внимание!!! Напомним, что операторы разделяются «;». Это означает, что внутри условного оператора символ «;» встречатся не должен, иначе, все, что стоит после него, будет считаться уже другим оператором.
Перед ELSE символ «;» никогда не ставится!!!
Возможны такие варианты построения :
If условие
then оператор
else begin
оператор1
...
оператор N
end;
If условие
then begin
оператор 1;
...
оператор N
end
else оператор ;
If условие
then begin
оператор1;
...
операторЕ
end
else begin
оператор;
...
оператор N
end;
6
Оператор ВЫБОРА
Если же возникнет необходимость выбора из трех, четырех ,..., десяти и более возможных действий? А таких ситуаций бывает ,ой, как много! Может попытаться вкладывать условные операторы друг в друга? Это возможно и выход, но не очень удачный если будет очень много условий.
Например, фрагмент программы определяющий количество уроков в зависимости от дня недели в Вашем классе будет выглядеть так:
begin
writeln(‘введите номер дня недели’); readln(n);
if n=1 then begin writeln(‘введите количество уроков в понедельник’); readln(m); end
else if n=2 then begin writeln(‘введите кол-во уроков во вторник’);
readln(m); end
else if n=3 then begin writeln(‘введите количество уроков в среду’);
readln(m); end
else if n=4 then begin writeln(‘а сколько уроков в четверг?’);
readln(m); end
else if n=5 then
begin writeln(‘введите количество уроков в пятницу’);
readln(m);
end ...
и так можно продолжать дальше, но Вы увидели, что этот способ очень громоздкий .
В таких случаях необходим оператор выбора (варианта)!
6
Оператор выбора case является обобщением оператора if - он дает возможность выполнить одно из нескольких действий в зависимости от значения переключателя.
Конструкция case.. of является идеальным средством для обработки ситуаций с несколькими исходами, когда условие может принимать более двух значений.
В качестве переключателя используется выражение, которое располагается между ключевыми словами case и of.
Результатом этого выражения может быть только значение порядкового типа, общее количество элементов которого не превышает 65535.
Переключатель должен иметь перечисляемый тип и перечисляемые значения верхней и нижней границы этого типа должны лежать в диапазоне от -32768 до 32767.
Таким образом, строковый тип и длинный целый тип являются недопустимыми типами переключателя.
Все константы выбора должны быть уникальными и иметь перечислимый тип, совместимый с типом переключателя.
6
Принцип работы оператора:
Значение переменной или выражения сравнивается с предложенными списками значений :
- Если найдено нужное значение, выполняется
соответствующий оператор
- Если нужное значение не найдено в перечисленных списках,
выполняется оператор после else
- Если else отсутствует, то, когда нужное значение не найдено, выполняется следующий за case оператор.
1) casе выражение if
список команд1: оператор1;
список команд2: оператор2;
. . .
список командN: операторN;
end;
2) case выражение of
список констант1: оператор1;
список констант2: оператор2;
. . .
список константN: операторN-1;
else операторN
end;
9
Где операторы, стоящие после двоеточия могут быть как простыми, так и структурными.
Список констант может состоять из одного, двух и более констант, которые перечисляются через запятую или если они идут подряд, можно указать два крайних значения, разделив их двумя точками.
3) case выражение of
const1, const2: begin
операторы
end;
min..max: begin
операторы
end;
end;
Возможно, Вы удивились тому, что в текстах программ перед ELSE стоит точка с запятой.
Это действительно должно быть так, после конструкции CASE ..OF должен стоять символ точка с запятой.
10
ОПЕРАТОРЫ ПОВТОРЕНИЯ
В жизни с повторением мы встречаемся постоянно. Операторы повторения позволяют многократно выполнять один или много операторов.
Каким бы не был оператор повторения для его работы необходимо :
1) задать начальное значение, т.е. с какого значения начнет свою работу цикл
2) задать конечное значение или условие выполнения цикла ;
3) приращение значения или шаг с каким будет работать цикл.
10
ЦИКЛ С ПРЕДУСЛОВИЕМ ( WHILE).
Оператор WHILE вместе с оператором case являются самыми универсальными управляющими конструкциями. С помощью операторов варианта можно записать условие разветвления произвольной сложности, а с помощью оператора с предусловием можно записать любое циклическое действие.
Этот оператор имеет вид :
WHILE выражение DO Оператор;
или WHILE выражение DO
begin
оператор1;
оператор2;...
end;
Оператор цикла с постусловием позволяет многократно выполнять одни и те же действия в зависимости от некоторого условия, которое записывается между ключевыми словами while и do и должно быть выражением булевского типа.
12
Опишем работу этого цикла.
1) Сначало, задав начальное значение, при входе в цикл вычисляется условие .
а) Если оно равно false , то вход в цикл не выполняется и управление передается оператору, следующему непосредственно за операторами тела цикла.
б) Если же условие истинно , то происходит вход в цикл и однократное выполнение операторов его тела .
2) Как только достигнут конец тела цикла и сделано приращение значения, управление снова передается нa его заголовок, где опять вычисляется условие .
3) Если значения условия все еще истинно, то тело цикла выполняется еще раз, и так далее.
Как только очередное вычисление условия цикла даст значение false , работа цикла завершится!
12
Например:
Задача1.Рассмотрим программу, которая вычисляет и выводит значения функции на промежутке [-100,100] с шагом 0.2.
var x,y: real;
begin x:=-100; { вот начальное значение для работы цикла! }
while x это конечное значение или условие выполнения цикла! }
begin
if x
writeln(‘x=’,x,’ y=’.y);
x:=x+0.2; { а это приращение или шаг }
end;
end.
12
ЦИКЛ С ПОСТУСЛОВИЕМ (REPEAT).
Оператор REPEAT ... UNTIL организует выполнение цикла, состоящего из любого числа операторов, с неизвестным заранее числом повторений.
Тело цикла обрамляется зарезервированными словами REPEAT (повторяй) ... UNTIL (до) .
В любом случае последовательность операторов, входящих в тело цикла, выполняется один раз, после чего проверяется условие завершения цикла, записанное после слова UNTIL.
Выход из цикла осуществляется при истинности некоторого логического выражения, которое является условием.
Структура этого оператора:
REPEAT
Оператор1;
UNTIL выражение;
12
Заметим, что в отличие от while , оператор repeat не требует
использования составного оператора, когда в его теле необходимо
записать более одного оператора.
Кроме того, оператор REPEAT является не столь универсальным, как оператор WHILE, поскольку его условие располагается в конце тела цикла и операторы его тела будут, в отличие от цикла WHILE , всегда выполняться как минимум один раз.
Это означает, что оператор REPEAT не годится для записи циклов, в которых может возникать ситуация, когда тело цикла не должно выполняться ни разу.
Общий принцип работы данного цикла такой же, как и предыдущего, но в отличие от цикла WHILE , повторимся, условие проверяется не перед выполнением цикла, а после него, и управление циклом REPEAT прямо противоположно управлению циклом WHILE .
То есть цикл продолжается пока условие равно FALSE
и заканчивается при истинности условия!!!
12
100 { это конечное значение или условие выполнения цикла! } end. 12 " width="640"
Задача1.Рассмотрим программу, которая вычисляет и выводит значения функции на промежутке [-100,100] с шагом 0.2.
Решим задачу , используя цикл с постусловием:
var x,y: real;
begin
x:=-100; { вот начальное значение для работы цикла! }
repeat
if x
writeln(‘x=’,x,’ y=’.y);
x:=x+0.2; { а это приращение или шаг }
until x100
{ это конечное значение или условие выполнения цикла! }
end.
12
ЦИКЛА СО СЧЕТЧИКОМ ( с параметром ) (for).
Оператор цикла со счетчиком подходит для программирования только таких циклических фрагментов, в которых до выполнения
цикла известны начальное и конечное значения счетчика повторений.
Однако в тех случаях, когда его использование возможно, оператор цикла со счетчиком, благодаря своей высокой наглядности, имеет несомненное преимущество перед другими операторами цикла.
Операторы цикла с параметром (которые начинаются со слова for) вызывает повторяющееся выполнение оператора (который
может быть составным оператором) пока управляющей переменной присваивается возрастающая последовательность значений.
Общую структуру оператора данного цикла можно представить одним из следующих способов.
1) Если счетчик при выполнении цикла наращивает свое значение:
FOR переменная := начальноеЗначениеСчетчика
TO КонечноеЗначениеСчетчика DO Оператор
Чтобы оператор выполнился хотя бы один раз
НачальноеЗначениеСчетчика должно быть не больше , чем
КонечноеЗначениеСчетчика!!!
2) Если счетчик при выполнении цикла уменьшает свое значение:
FOR переменная := начальноеЗначениеСчетчика
DOWNTO КонечноеЗначениеСчетчика DO Оператор
Чтобы оператор выполнился хотя бы один раз
НачальноеЗначениеСчетчика должно быть не меньше, чем
КонечноеЗначениеСчетчика.
Заметим, что для оператора FOR , в отличие от WHILE и REPEAT , установка начального значения счетчика циклов выполняется не перед заголовком, а прямо в заголовке записью
переменная := начальноеЗначениеСчетчика .
Кроме того, после окончания тела цикла наращивание или уменьшение значения счетчика происходит автоматически.
Таким образом, специальный оператор для увеличения или уменьшения значения счетчика не требуется, более того, такой оператор приведет к неправильной работе цикла.
Управляющая переменная должна иметь перечисляемый тип. Начальное и конечное значения должны иметь тип, совместимый по присваиванию с перечисляемым типом.
Когда начинает выполняться оператор for, начальное и конечное значения определяются один раз, и эти значения сохраняются на протяжении всего выполнения оператора for.
Когда работает оператор for, значение управляющей переменной увеличивается при каждом повторении на единицу.
Если начальное значение превышает конечное значение, то содержащийся в теле оператора for оператор не выполнятся.
Когда в операторе цикла используется ключевое слово downto, значение управляющей переменной уменьшается при каждом повторении на единицу.
Если начальное значение в таком операторе меньше, чем конечное значение, то содержащийся в теле оператора цикла оператор не выполнятся.
Если оператор, содержащийся в теле оператора for, изменяет значение управляющей переменной, то это является ошибкой.
Задача2.
Найти произведение и сумму всех четных чисел из интервала [-100,300].
Var x, Summa, Proizvedenie: integer;
begin
summa:=0; Proizvedenie:=1;
for x:=-100 to 300 do begin
if x mod 2=0 then begin summa:=summa+x;
Proizvedenie:= Proizvedenie *x;
end;
end;
writeln (‘summa=’, summa,’ Proizvedenie=’, Proizvedenie);
end.
Если число повторений заранее известно, то подходящей конструкций является оператор for!!!
В противном случае
следует использовать
операторы while или repeat!!!