Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Informatica / lin.doc
Скачиваний:
41
Добавлен:
09.04.2015
Размер:
776.19 Кб
Скачать

Операторы цикла

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

Операторы цикла с параметром

for V := E1 to E2 do S

Здесь for,to,do– служебные слова; V – переменная скалярного типа (кроме real)), называемаяпараметром цикла, E1 и E2 – выражения того же типа, что и V, S – оператор, называемыйтелом цикла.

При выполнении этого оператора происходит присвоение пере­менной V последовательно возростающих значений от E1 до E2 и выпол­нение оператора S при каждом значении V. Значения E1 и E2 вычисля­ются при входе в оператор цикла, значение параметра цикла V не должно изменяться при выполнении S. Если E1 > E2 (что допустимо), то опера­тор S не выполнится ни разу. При завершении выполнения оператора цикла значение параметра цикла считается неопределенным.

В Паскале есть и другая форма оператора цикла с параметром

for V := E2 downto E1 do S

Здесь downto– служебное слово. В этом случае параметр цикла V принимает последовательно убывающие значения от E2 до E1.

В Delphi переменная – параметр цикла – должна быть описана в том же блоке, в котором помещен цикл.

Замечание. Параметр цикла не обязательно используется в теле цикла, т.е. в операторе S.

Оператор цикла с постусловием

repeat S1; S2; ...Sk until B

Здесь repeat,until – служебные слова, B – логическое выраже­ние, S1, … Sk – операторы.

При выполнении этого оператора цикла последовательность операторов S1, … Sk выполняется один или более раз. Процесс заверша­ется, когда после очередного выполнения заданной последовательности операторов выражение B впервые примет значениеtrue.

Оператор цикла с предусловием

while B do S

Здесь while,do – служебные слова, B – логическое выражение, S – оператор. В этом случае S выполняетсянуль или более раз, но перед каждым его выполнением вычисляется значение выражения B. Оператор S выполняется только, если B = true. Выполнение оператора цикла завершается, когда впервые B примет значение false. Если при первом же вычислении B принимает значение false, то S не выполняется ни разу.

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

В циклах For, WhileиRepeatможно использовать стандартные процедурыBreakиContinue. ПроцедураBreakпозволяет выйти из цик­ла, не дожидаясь выполнения условия выхода. ПроцедураContinueпоз­воляет начать новую итерацию цикла, если предыдущая не завершена.

Регулярные типы (массивы)

Массив – это упорядоченный набор фиксированного количе­ства некоторых значений (компонент массива). Все компоненты должны быть одного типа, который называетсятипом компонентилибазовым типом.

Каждому используемому в программе массиву должно быть при­своено имя полной переменной. Ее значением является весь массив. Каждый компонент массива можно явно обозначить путем указания имени массива, за которым следуетселекторкомпоненты– взятый в квадратные скобки индекс, задающий правило вычисления номера ком­поненты. Т.е. для ссылки на отдельную компоненту используется запись вида<имя массива>[<индекс>], которую назовемчастичной перемен­ной, так как ее значением является отдельный компонент. Она называет­сяпеременной с индексом(например, a[1], b[i+5] и т.п).

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

Значением индексного выражения должно быть конкретное дан­ное, по которому можно однозначно установить номер компоненты массива. Поэтому тип индекса может быть только скалярным, множество значений которого ограничено. Это исключает тип real и integer. Так как множество значений ограниченного типа конечно, упорядочено и перену­меровано, то этот тип и используется наиболее часто, причем обычно – это ограниченный целый тип.

При задании регулярного типа кроме типа индекса необходимо задать и тип компонент. Задание такого регулярного типа, как одномер­ный массив (вектор) имеет вид:

array [<тип индекса>] of <тип компонент>;

где <тип компонент>– имя типа или задание типа.

Каждому задаваемому регулярному типу можно дать имя с помо­щью описания типа. Переменные регулярных типов вводятся обычным способом с помощью описания в разделе переменных.

Пример.

typeГраницы= 1..100; Вектор =array[границы]ofreal;

var A,B : Вектор; C: array[-10..200] of real;

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

Для ссылки на конкретный массив как единое целое использует­ся полная переменная, т.е. имя переменной соответствующего регуляр­ного типа. Над значениями регулярного типа в Паскале не определено каких-либо операций – не только аналогов арифметических операций, но и операций сравнения. В Паскале нет констант и функций регулярных типов, за исключением строковых констант.

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

Так при наличии в программе описания А и В как переменных одного и того же регулярного типа, если значение А было определено (т.е. всем его компонентам были присвоены конкретные значения), то для присваивания полной переменной В точно того же значения достаточно выполнить оператор присваивания B:=A.

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

Соседние файлы в папке Informatica