Рефераты. Алгоритмический язык Паскаль

Первый способ предпочтительнее, чем второй, т.к. конструкция THEN-IF менее удобна, чем ELSE-IF. С помощью конструкции ELSE-IF чаще всего осуществляется выбор одного из нескольких альтернативных путей. Заметим, однако, что иногда такое вложение лучше заменить на последовательность короткой формы оператора IF-THEN. Это видно на следующем примере:

program QUARD;

var A,B,C: real; DETER: real;

begin

read(A,B,C); DETER:= sqr(B)-4*A-C;

1 вариант

2 вариант

if DETER<0 then

if DETER<0 then

write('Не имеет корней');

write('Нет корней');

if DETER=0 then

else

write('Один корень');

if DETER=0 then

if DETER>0 then

write('Один корень');

write('Два корня');

else

write('Два корня');

end

однако в Паскале существует оператор, позволяющий сделать выбор из нескольких альтернатив - множественное ветвление.

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

ОБЩАЯ ФОРМА ЗАПИСИ:

CASE <выражение> OF

константы: оператор;

константы: оператор

ELSE < оператор >

END.

Выражение, стоящее между CASE и OF, называется селектором.

Константы (значения выражения), предшествующие двоеточию, называются метками случаев. Порядок работы оператора - сначала вычисляется значение селектора, затем выполняется оператор, метка которого совпадает со значением селектора. Все остальные операторы не выполняются, управление передается на следующий после END оператор. Если же в операторе есть строка ELSE, то при несовпадении значения селектора ни с одной константой выполняется оператор, следующий за ELSE.

Выражение "селектор" может относиться к любому скалярному типу, кроме REAL. Метки случаев должны принадлежать тому же типу, что и селектор. Недопустимо, чтобы одна и та же метка появлялась более одного раза в операторе CASE.

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

ПРИМЕР 1. Печать названия десятичных цифр

program DICITS;

var DIGIT: integer;

label 1;

begin

1: writeln ('Введите цифру');

readln(DIGIT);

if (DIGIT < 0) or (DIGIT > 9) then

begin

writeln ('Это не цифра');

GOTO 1

end

else

case DIGIT of

0: writeln('нуль');

1: writeln('один');

9: writeln('девять');

end;

end.

ПРИМЕР 2. Печать номера квартала года

program NUMKVART;

var MESIATZ: 1..12;

begin

write('Введите номер месяца года - '"; read(MESIATZ);

case MESIATZ of

1,2,3: writeln('Первый квартал');

4,5,6: writeln('Второй квартал');

7,8,9: writeln('Третий квартал');

10,11,12: writeln('Четвертый квартал');

end;

end.

ПРИМЕР 3. Вывод на печать, является ли введенный с клавиатуры символ гласной буквой или знаком препинания

program SIMVOL;

var CH: char;

begin

write('Введите символ - '"; readln(CH);

write (CH,' есть ');

case CH of

'A','E','I','O','U': write('гласная');

'.',';',',',':','?','!': write('знак препинания');

end;

end.

ЗАМЕЧАНИЕ. В операторе CASE нет условий как таковых, однако проверка условий осуществляется в неявном виде. Действительно, строке

'A','E','I','O','U': WRITE('гласная')

примера 3 равносилен оператор

IF (ch='A") OR (ch='E') OR (ch='I') OR (ch='O') OR (ch='U')

THEN WRITE(' гласная').

4.3 Организация циклов. Операторы повторения

Оператор цикла задает повторное выполнение определенных операторов. Для реализации циклов в Паскале предусмотрены три различных структурных оператора: WHILE, REPEAT, FOR. Первые два используются, если число повторений (итераций) заранее не определено, но известно условие завершения цикла. Оператор FOR применяется тогда, когда число повторений тела цикла известно.

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

Логическое выражение, стоящее после WHILE, называется условием возобновления цикла и должно иметь булевский тип. Оператор, следующий за DO, является телом цикла. Он повторяется до тех пор, пока истинно условие возобновления цикла. Как только условие возобновления цикла становится ложным, управление переходит к оператору, стоящему за WHILE. Если условие возобновления не удовлетворяется до начала выполнения цикла, то тело цикла пропускается.

Из указанного описания видно, что оператор WHILE реализует базовую структуру "цикл - пока", т.к. здесь проверка условия идет до тела цикла. Поэтому оператор WHILE называют оператором цикла с предусловием.

Рассмотрим пример программы вычисления для данного а0 по известной итерационной формуле:

Здесь надо организовать циклический процесс и остановиться тогда, когда

,

где Е - заданная точность приближения.

program SQUR;

var A,X,EPS: real;

begin

write('Введите число ');

readln(A);

write('Введите точность ');

readln(EPS);

X:=(A+1)/2;

while abs(sqr(X)-A) >= EPS do

X:=0.5*(X+A/X);

write('Корень из ',A,' = ',X);

end.

ЗАМЕЧАНИЕ. Грамотное использование оператора WHILE предполагает умение правильно написать условие возобновления цикла. Здесь надо иметь в виду следующие рекомендации:

а) в условии, как в логическом выражении, должны обязательно фигурировать переменные, изменяющие свои значения в теле цикла;

б) во избежание зацикливания лучше сначала написать условие прекращения цикла и взять потом в оператор его отрицание;

в) переменные логического выражения должны получить свои исходные значения до входа в оператор WHILE.

Оператор REPEAT называют оператором цикла с постусловием, т.к. здесь выражение, управляющее повторным выполнением последовательности операторов, помещается после тела цикла.

В этом операторе тело цикла выполняется до тех пор, пока ложно условие, стоящее после UNTIL. Условием выхода из цикла является истинность выражения. Мы видим, что это есть форма "цикла-до".

ПРИМЕР. Даны числа A, B (A>1). Получить все степени числа A, меньшие числа B

program STEPENI;

var A,B,C: real;

begin

readln(A,B); C:=A;

repeat

writeln(C);

C:= C*A;

until C >= B;

end.

ПРИМЕЧАНИЕ. Между операторами WHILE и REPEAT существуют три основных различия:

1. В операторе REPEAT проверка условия выхода из цикла выполняется в конце, а не в начале цикла, как в операторе WHILE. Поэтому в операторе REPEAT тело цикла выполняется хотя бы один раз.

2. В REPEAT выход из цикла осуществляется по истинности условия, а в WHILE - по ложности.

3. В операторе WHILE тело цикла чаще всего имеет форму составного оператора, в операторе REPEAT для организации тела цикла операторные скобки не нужны.

Он предназначен для организации циклов, когда заранее известно, сколько раз должно повториться тело цикла. Здесь управление числом повторений осуществляется с помощью специальной переменной - параметра цикла (управляющей переменной), которой присваивается возрастающая (убывающая) последовательность значений.

Здесь "переменная" есть параметр цикла, "выражение 1" - начальное значение параметра, "выражение 2" - его конечное значение. В качестве управляющей переменной должен использоваться идентификатор переменной, объявленный локальной в блоке, который содержит данный оператор FOR. Управляющая переменная должна иметь ординальный тип. Начальное и конечное значения имеют тип, совместимый с типом параметра цикла.

Когда начинает выполняться оператор FOR, начальное и конечное значения определяются один раз, и эти значения сохраняются на протяжении всего выполнения оператора.

Оператор, который содержится в теле оператора FOR, выполняется один раз для каждого значения управляющей переменной в диапазоне между начальным и конечным значениями. Управляющая переменная всегда инициализируется начальным значением. Она принимает все свои значения из диапазона с шагом 1, если TO, и с шагом -1, если DOWNTO. В случае TO, если начальное значение превышает конечное, то тело цикла не выполняется.

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.