Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_р_4.doc
Скачиваний:
3
Добавлен:
27.11.2019
Размер:
105.98 Кб
Скачать

Макарчукова А.А., гр. ВР 2-2

Лабораторная работа №4

Обработка одномерных массивов. Простые циклы

Теоретическая часть

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

Практически во всех задачах, связанных с обработкой массивов, исполь­зуется оператор цикла с параметром. Этот оператор предусматривает повторное выполнение одного или нескольких операторов с одновременным изменением по правилу арифметической прогрессии значения параметра этого цикла. Общий вид записи этого оператора:

For i:=m1 To m2 Do S

или

For i:=m1 Downto m2 Do S

где For (для), To (до), Downto (вниз до), Do (выполнить) – служебные слова; i – параметр цикла (переменная любого скалярного типа, кроме вещественного); m1 и m2 – начальное и конечное значения параметра цикла, записываются константами или выражениями того же типа, что и тип переменной цикла; S – тело цикл (простой или составной оператор).

Тело цикла выполняется для каждого значения параметра цикла, начиная со значения m1 и до значения m2 включительно. При использовании в цикле служеб­ного слова To значение параметра цикла увеличивается автоматически с помощью функции Succ, при Downto – уменьшается с помощью функций Pred. Шаг изменения параметра цикла зависит от типа этой переменной. Наиболее часто используется переменная целого типа, что определяет шаг, равный +1 при To, и -1 при Downto.

Правила организации цикла:

  • запрещено изменять в теле цикла значения параметра цикла, переменных m1и m2.;

  • запрещено входить в тело цикла с помощью оператора Goto, минуя заголовок оператора For, так как значение параметра цикла будет не определено;

  • цикл не выполнится вообще, если начальное значение параметра цикла больше (при Downto – меньше), чем конечное;

  • по окончании выполнения цикла значение параметра цикла не определено и не может быть непосредственно использовано в дальнейших вычислениях;

  • из составного оператора, входящего в тело цикла, можно выйти до окончания цикла с помощью оператора Goto, тогда последнее значение параметра цикла сохраняется.

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

2. Массивы

Массив (регулярный тип данных) представляет собой фиксированное коли­чество упорядоченных компонент, снабженных индексами. Все компоненты долж­ны быть одного и того же базового типа. В качестве базового типа можно исполь­зовать любой из допустимых в Паскале типов. В зависимости от числа индексов массивы бывают одномерные, двумерные, трехмерные и т.д. Число индексов у массива не более 7, суммарная длина внутреннего представления любого массива не должна превышать 2 Гайта.

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

Type A = Array [tl] of t2;

где Type (тип), Array (массив), of (из) – служебные слова; tl – тип индекса; t2 – тип компонент (записывается аналогично типу простых переменных), A – идентифика­тор нового типа, он может быть использован в описании переменных.

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

Примеры описания массивов:

Const n=4;

Type M1 = Array [1…100] of Real;

M2 = Array [Char] of Boolean;

M3 = Array [0…n] of Integer;

Var x,y: M1;

C: M2;

A: M3;

Регулярный тип можно задавать непосредственно при описании переменных;

Const m=5;

Var B,D: Array [1…50] of Char;

Z: Array [1…m] of Real;

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

Доступ к компонентам (элементам) массива строится традиционно: после идентификатора массива в квадратных скобках указывается индекс нужного эле­мента или список индексов, определяющий элемент многомерного массива. В ка­честве индексов могут выступать произвольные выражения, тип которых должен соответствовать типу индексов в описании массива, например: x[3], s[k+1]. Значение индекса не должно выходить за допустимые пределы. В простейших вариантах такие ошибки обнаруживаются при компиляции программы: например, для массива:

Var M: Array[0…10] of Real;

Обращение вида M[11]:=0.5 является некорректным, так как индекс 11 не принад­лежит ограниченному типу 0…10, и вызывает прекращение трансляции с выдачей соответствующего диагностического сообщения, однако оператор присваивания

M[i]:=M[i-1]+i

компилятор не может квалифицировать как ошибочный, так как его корректность зависит от текущих значений индексов i и i-1. Если в процессе выполнения программы значение i лежит в диапазоне от 1 до 10, то этот оператор выполнится правильно; в противном случае будет зафиксирована ошибка выполнения.

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

V[i]:=V[i-1]/n

В операторах присваивания можно использовать и массивы, например:

Vect1:=Vect2

причем типы обоих массивов в данном случае должны быть эквиваленты.

Операции отношения над массивами не определены. Нельзя, например, записать If Vect1=Vect2 then… даже, если массивы Vect1 и Vect2 одного типа. Сравнение двух массивов надо проводить по элементам

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]