Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ахмадулин Р.К. технологии программирования.doc
Скачиваний:
9
Добавлен:
10.11.2019
Размер:
615.94 Кб
Скачать

Вопросы для самопроверки

1. С помощью какого цикла лучше всего вычислить факториал числа?

2. С помощью какого цикла лучше всего вычислить сумму по заданной формуле?

3. С помощью какого цикла лучше всего вычислить сумму ряда с заданной точностью?

4. Какой цикл лучше использовать, если известно, что пользователь вводит последовательность чисел, заканчивающуюся цифрой 0?

§10. Массивы

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

Структурированные же типы имеют четыре разновидности: массивы, а также множества, записи и файлы.

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

Описание массива

Массив – это непрерывный блок данных одного типа.

Каждая отдельная величина называется компонентой массива (или элементом массива). Массивы содержат фиксированное число компонентов одного типа, так называемого типа компонент. Тип компонент может быть любым, принятым в языке Паскаль, кроме файлового.

Таким образом, массив может состоять, например, из 100 элементов типа integer, или из 25 элементов типа real, или из 5 элементов типа char и т.п.

Д ля описания массива используется следующая конструкция (задает размер массива и тип его компонент):

Пример:

type

TVector = array [ byte ] of char;

var

MyVector: TVector;

Values: array [ 1..10 ] of real;

Индексный тип определяет число элементов массива, а также индекс первой и последней компоненты. Допустимыми индексными типами являются все порядковые типы, за исключением длинного целого (longint) и его поддиапазонов. Индексы интервального типа, для которого базовым является целый тип, могут принимать отрицательные, нулевое и положительные значения.

Пример:

type

MyArray1 = array[byte] of integer; {массив из 256 целых чисел}

MyArray2 = array[-20..17] of integer; {массив из 38 целых чисел}

Массив может быть проиндексирован всеми значениями соответствующего индексного типа. Нумерация компонент массива не обязана начинаться с 1 или с 0 – можно описывать массив, пронумерованный любыми целыми числами. Необходимо лишь, чтобы номер последней компоненты был больше первой.

Описать массив можно следующим образом:

  1. в разделе описания переменных в качестве типа данных записать представленную выше конструкцию;

Пример:

var

Values: array [ 1..10 ] of real;

  1. создать новый тип в разделе описания типов и использовать его при описании переменных.

Пример:

type

TVector = array [ 1..10 ] of real;

var

Values: TVector;

В обоих случаях переменная Values будет представлять из себя «контейнер», в котором можно хранить 10 вещественных чисел с индексами от 1 до 10. Однако второй способ является более предпочтительным, т.к. он позволит описать еще несколько переменных типа TVector.

Обращение к элементам массива

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

Доступ к компонентам линейного массива осуществляется с помощью конструкции, называемой переменной с индексом:

<имя_массива> [ <индекс_компоненты> ]

Пример:

type

TVector = array [ 1..10 ] of real;

var

Values: TVector;

Values[1] := 10.5;

Values[2] := Values[1] + 5;

readln (Values[3]);

Values[4]:= Values[2] + Values[3];

writeln (Values[4]);

Индекс компоненты может быть константой, переменной или выражением, куда входят операции и вызовы функций. Тип индекса должен быть совместим с типом, объявленным в описании массива.

Пример:

Values[i+3-abs(x)] := 10.5;