Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по Информатике.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
1 Мб
Скачать
☆

Организация обработки данных

Как правило, в программах не удается ограничиться операторами присваи­вания. Для большинства реально используемых алгоритмов характерна широ­кая разветвленность процесса вычислений. При этом в зависимости от кон­кретных исходных данных или промежуточных результатов применяются раз­ные правила обработки данных. Для организации процесса вычислений в Паскале имеются операторы: перехода, разветвления, циклов, пустой, составной, присоединения и вызова подпрограмм.

Характерной особенностью алгоритмов является их цикличность, когда ка­кая-либо последовательность действий должна выполняться многократно, циклически. Для удобного и компактного описания циклических алгоритмов в Паскале имеются операторы цикла с параметром цикла и итеративного типа с предусловием и с постусловием.

GОТО - оператор перехода.

Операторы программ располагаются в памяти и выполняются последова­тельно, в порядке их записи. Но могут быть ситуации (условия), когда надо пропустить группу операторов. Такие пропуски производятся в программах с помощью операторов перехода.

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

Форма оператора перехода: GOTO метка ;

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

Все метки, используемые в программе, должны быть объявлены в разделе LABEL. После выполнения оператора GOTO следующим выполняется опера­тор, метка которого совпадает с меткой, стоящей после слова GOTO, т. е. опе­ратор, помеченный такой меткой.

Пример:

LABEL M1,M2,25; ...

GOTO M1; ... GOTO 25; ... GOTO M2;

M1: A:=В; ... M2: 25: С:=D;

Все метки локальны в блоке; на Паскале не допускается переход:

  1. внутрь сложного оператора (составного, условного, варианта, цикла);

  2. в процедуру или функцию и из процедуры или функции в вызвавшую их программу.

Составной оператор и пустой оператор

Составной оператор (блок) - это группа операторов, ограниченная опера­торными скобками BEGIN и END. Например:

BEGIN X:=Y; Y:=Z; Z:=X END;

Точка с запятой может не быть после BEGIN и перед END. После END может быть:

  1. пробел, если следующий оператор END или слово ELSE;

  2. точка с запятой, если следующим является выполняемый оператор;

  3. точка, если это конец программы.

Составной оператор используется для ограничения:

  1. раздела операторов программ, процедур и функций;

  2. групп операторов в условных операторах, операторах выбора варианта и цикла.

В составном операторе могут быть другие составные операторы произволь­ной глубины вложенности. Например:

BEGIN ...

BEGIN ... - вложенный составной !

END; ... оператор

END;

Пустой оператор представляется символом ; и не вызывает никаких дей­ствий. Он может использоваться для установки метки и, в случае необходи­мости, после ключевых слов THEN или ELSE в операторах IF;, причем перед ELSE пустой оператор располагается по умолчанию, без символа ;. Напри­мер:

M1: ; IF ... THEN IF ... THEN ...

ELSE ...

{ здесь - пустой оператор - по умолчанию, без ' ; ' }

ELSE ...

Там, где стоит многоточие, располагаются операторы.

Циклы

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

К операторам цикла относят операторы FOR, WHILE и REPEAT. Если коли­чество повторений заранее известно, то целесообразно использовать оператор FOR. А если количество повторений определяется условиями - операторы WHILE или REPEAT.

FOR - оператор цикла с параметром

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

TO

FOR I := IN IK DO S;

DOWNTO

Заголовок цикла

где I - параметр цикла, управляющая переменная, идентификатор;

IN, IK - выражения для определения начального и конечного значений I; ТО - определяет шаг изменения параметра цикла I: DI = 1;

DOWNTO - определяет шаг изменения параметра цикла I: DI = -1;

S - один оператор, простой или составной; тело цикла.

Правила формирования и выполнения цикла FOR:

  1. I, IN и IK могут быть любого ординального типа, в том числе целыми, логическими, перечисляемыми и диапазонными;

  2. I, IN и IK должны быть совместимого типа;

  3. значение I не должно изменяться операторами в теле цикла;

  4. так как анализ конца цикла производится до выполнения тела цикла, то при IN >IK для ТО (и при IN < IK для DOWNTO) тело цикла не выпол­няется ни разу;

  5. после завершения цикла FOR параметр цикла имеет значение:

а) после нормального завершения: I = IK;

б) при котором выполнился оператор GOTO;

  1. значения IN и IK определяются один раз, в начале выполнения оператора FOR, и сохраняются во время выполнения оператора FOR;

  2. DI определяет для I целого типа приращение значения I, а для параметров перечисляемого типа - приращение номера значения I;

  3. для каждого I тело цикла выполняется один раз;

  4. после каждого выполнения тела цикла к параметру цикла I добавляется его приращение DI.

Пример: Дан массив А на 5 вещественных значений. Надо определить и вывести сумму его положительных элементов.

CONST A:ARRAY[1..5] OF REAL=(1,-2,3,-4,5);

VAR S:REAL; I : INTEGER;

BEGIN

S := 0;

FOR I:=1 TO 5 DO

IF A[I]>0 THEN S:=S+A[I];

WRITELN ('S=',S:12)

END.

WHILE - оператор цикла итеративного типа с предусловием

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

Форма цикла: while B(Х) do s;

где В(Х) - логическое выражение; условие завершения цикла;

S - один оператор, простой или составной; тело цикла; в нем должны быть операторы для изменения операндов логического выражения В(Х).

Тело цикла WHILE выполняется только в случае, если результат выраже­ния В(Х) истинный; если он ложный, тело цикла не выполняется. Если ре­зультат выражения В(Х) ложный до начала первого выполнения тела цикла, то тело цикла не выполняется ни разу.

REPEAT - оператор цикла итеративного типа с постусловием

Оператор цикла REPEAT - это цикл итеративного типа с постусловием, так как в нем анализ конца цикла производится после выполнения операторов тела цикла. Он используется, когда количество повторений операторов тела цикла заранее неизвестно и определяется в процессе выполнения цикла. Опе­раторы тела цикла должны выполняться хотя бы один раз. Схема цикла REPEAT представлена на рис. 21.

Форма цикла REPEAT:

REPEAT S

UNTIL B(X) ;

где В(Х) - логическое выражение; условие завершения цикла;

S - один и более операторов тела цикла; в нем должно быть изменение операндов выражения В(Х).

REPEAT и UNTIL B(X) определяют начало и условие завершения цикла. Тело цикла REPEAT выполняется хотя бы один раз. После каждого выполне­ния тела цикла анализируется значение результата выражения В(Х): если оно ложно (false), выполнение тела цикла повторяется, если истинно (TRUE) - цикл завершается.

Дополнительные операторы для циклов.

Язык Паскаль имеет 2 стандартные процедуры: BREAK и CONTINUE. Они могут использоваться в циклах всех видов: FOR, REPEAT и WHILE. Вызовы этих процедур могут быть только в пределах тела цикла. Обе процедуры без параметров. Вызовы этих процедур можно назвать полноправными операто­рами языка, потому что они компилируются не в вызов подпрограмм, а в ма­шинные команды безусловного перехода.

Процедура BREAK прекращает выполнение ближайшего охватывающего цикла. Управление передается на оператор, следующий за данным циклом.

Процедура CONTINUE вызывает прекращение текущей итерации (выполне­ния) ближайшего охватывающего цикла и переход к анализу конца цикла и выполнению следующей итерации.

Пример: (Использование процедур BREAK и CONTINUE).

CONST A:ARRAY [1..5] OF INTEGER=(1,2,-3,-4,5);

VAR S,I: INTEGER;

BEGIN S:=0;{Суммирование всех элементов, кроме A[I]<=0:}

FOR I:=1 TO 5 DO BEGIN

IF A[I]<=0 THEN CONTINUE;

WRITELN ('A[',I,']=', A[I]);

S:=S+A[I];

END;

WRITELN ('S = ',S); { - вывод суммы }

S := 0; { Суммирование до первого A[I] < 0: }

FOR I:=1 TO 5 DO BEGIN

IF A[I]<0 THEN BREAK;

S := S + A[I];

END;

WRITELN ('S = ',S); { - вывод суммы }

END.

В первой части примера производится суммирование и вывод всех элементов массива А, кроме отрицательных и нулевых элементов массива. Во второй - при обнаружении первого отрицательного элемента про­исходит переход за тело цикла суммирования.

Лекция №5.