asd / корзина / лекции по TP / Lecture_Pascal / lecture4
.doc
Лекция 4
5.2.2. Условный оператор IF
Оператор IF в Турбо Паскале допускается в двух вариантах: полный оператор IF и укороченная форма оператора.
У
TRUE
TRUE
I
FALSE
Полный оператор IF
I
FALSE
Примеры:
-
x if x < 0 then x:=-x;
-
y=sign(x) if x < 0 then y:=-1 else
if x=0 then y:=0 else y:=1;
Что будет напечатано в результате выполнения следующего фрагмента программы
read(x,y);
z:=0;
if x>0 then if y>0 then z:=1 else z:=-1;
Если вводить 1) х=1,у=1; 2) х=1, у=-1; 3) х=-1, у=1.
5.2.3. Условный оператор CASE
С помощью этого оператора можно выбрать вариант из любого количества вариантов. Структура этого оператора выглядит следующим образом
CASE S OF
C1:<оператор1>;
C2:<оператор2>;
…
Cn:<операторN>;
ELSE <оператор>
END;
В этой структуре S - выражение порядкового типа, которое вычисляется;
C1, C2,…,Cn - константы с которыми сравнивается значение выражения S;
оператор1, оператор2,…,операторN – операторы, из которых выполняется тот, с константой которого совпадает значение выражения S;
оператор – оператор, который выполняется, если значение выражения S не совпадает ни с одной из констант C1, C2,…,Cn.
Ветвь ELSE <оператор> является необязательной. Если она отсутствует, и значение выражения S не совпадает ни с одной из перечисленных констант, весь оператор рассматривается как пустой.
Если для нескольких констант нужно выполнять один и тот же оператор, их можно перечислить через запятую (или даже указать диапазон, если возможно), сопроводив их одним оператором.
Пример.
Р
N
W
E
S
В качестве команд рассмотрим следующие значения FORWARD – вперед, RIGHT – направо, BACK – назад и LEFT – налево.
program polet;
type kurs=(N,E,S,W); {перечислимый тип курс}
com=( FORWARD, RIGHT, BACK, LEFT);
var
k1,k2:kurs;
b:com;
begin
read(b);
case b of
FORWARD: k2:=k1;
{движение прежним курсом}
RIGHT: if k1=W then k2:=N
else k2:=succ(k1);
BACK: if k1=S then k2:=N
else if k1=W then k2:=E
else k2:=succ(succ(k1));
LEFT: if k1=N then k2:=W
else k2:=pred(k1)
end
end.
5.2.4. Оператор цикла WHILE
Цикл – это компактная запись вычислительного процесса продолжающегося сколь угодно долго.
Оператор цикла WHILE организует выполнение одного оператора неизвестное количество раз. Выход из цикла происходит, если значение некоторого логического выражения окажется ложным. Так как истинность логического выражения проверяется в начале каждой итерации, оператор цикла может не выполниться ни разу. Структура оператора цикла имеет вид:
WHILE S DO <OPERATOR>;
Здесь S – логическое выражение, истинность которого проверяется в начале каждой итерации; OPERATOR – выполняемый оператор цикла.
Пример.
Вычислить
y:=0;
i:=n;
while i>0 do
begin
y:=sqrt(y=3*i);
i:=i-1
end;
5.2.4. Оператор цикла REPEAT
Оператор цикла REPEAT организует выполнение цикла, состоящего из любого количества операторов, с неизвестным заранее числом повторений. Тело цикла выполняется хотя бы один раз. Выход из цикла происходит при истинности некоторого логического выражения.
REPEAT
operator1;
operator2;
…
operatorN
UNTIL S;
В этой структуре: operator1,operator2,…,operatorN – выполняемые операторы, составляющие тело цикла; S – логическое выражение, которое проверяется в конце каждой итерации.
Пример.
Алгоритм Евклида для нахождения наибольшего общего делителя чисел m, n (m>n):
repeat
l:=m mod n;
m:=n;
n:=l
until l=0;{результат находится в m}
5.2.5. Оператор цикла FOR
Оператор цикла FOR организует выполнение одного оператора заранее известное число раз. Существует два варианта оператора:
FOR param:=start TO finish DO operator;
FOR param:=start DOWNTO finish DO operator;
Здесь:
param – параметр цикла, являющийся переменной порядкового типа;
start – выражение, определяющее начальное значение параметра цикла
finish - выражение, определяющее конечное значение параметра цикла;
operator – выполняемый оператор.
start и finish должны быть совместимы для присваивания с параметром цикла.
При выполнении оператора цикла параметр цикла сначала принимает значение выражения start, а затем при каждой очередной итерации принимает последующее (при первом варианте) или предыдущее значение (при втором варианте), вплоть до значения выражения finish.
Пример.
Вычислить s=nxn-1+(n-1)xn-2+…+2x+1;
s:=0;
p:=1;
for i:=1 to n do
begin
s:=s+p*i;
p:=p*x
end;
Или
s:=0;
for i:=n downto 1 do s:=s*x+i;{схема Горнера}
Задача.
Определить чему будет равно значение S в каждом из следующих случаев:
а) s:=0;
i:=0;
while i<5 do i:=i+1;
s:=s+1/i; ответ 0.2
b) s:=0;
i:=1;
while i>1 do
begin
s:=s+1/i;
i:=i-1;
end; ответ 0
c) s:=0;
i:=1;
repeat
s:=s+1/i;
i:=i-1
until i <=1; ответ 1.0
d) s:=1;
n:=1;
for i:=2 to n do s:=s+1/i; ответ 1.0
Кафедра информатики
Иванов Борис Алексеевич. Файл