Полная форма объявления одномерного массива

Описание типа задаётся следующим образом:

TYPE

<имя_типа> = ARRAY [ < нач_индекс..кон_индекс > ] OF <тип_данных>;

VAR

<Имя_массива> : < имя_типа >;

Здесь <имя_типа> - правильный идентификатор;

ARRAY, OF – зарезервированные слова (массив, из);

[ < нач_индекс..кон_индекс > ] – список из одного или нескольких индексных типов, разделённых запятыми;

<тип_данных> - базовый тип.

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

Например,

Type mass = array [1..5] of integer;

Var R : Mass;

Данный способ описания массива применяется при работе с подпрограммами: для передачи процедуре или функции параметров одного типа.

Доступ к элементам массива

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

Например, k := R[1] + R[5]; R[3] := 34;

Здесь, в первом случае переменной k присваивается сумма значений элементов массива R с порядковыми номерами 1 и 5. Во втором примере элементу массива R с порядковым номером 3 присваивается значение 34.

В качестве индекса может использоваться выражение, результатом которого является целое число.

Например, R[2*I] – элементы массива с чётным индексом; R[2*I-1] – элементы массива с нечётным индексом.

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

В частности, для ввода и вывода числовых значений массива используются циклы:

FOR I := 1 TO 10 DO READ (A[I]);

FOR I := 1 TO 10 DO WRITE (A[I]);

В операторах присваивания можно использовать не только элементы массивов, но и массивы в целом. Оператор вида A := B выглядит лаконичнее и выполняется быстрее цикла for i :=1 to n do A[i] := B[i]. Используя в операторах присваивания массивы, следует помнить, что такая конструкция приводит к копированию всего массива! Массивы в целом можно использовать в логических отношениях равенства (=) и неравенства (<>). Другие операции отношения применяются только к отдельным элементам массива.

Элементы массива могут вводиться с клавиатуры или формироваться случайным образом.

В последнем случае используется функция – генератор случайных чисел Random. Эта функция согласно определённому алгоритму при каждом обращении к ней возвращает случайное число – либо вещественное, из интервала [0..1], если аргумент отсутствует, либо целое, если задан целочисленный аргумент. Чтобы эта функция работала корректно, рекомендуется вначале её инициализировать, вызвав процедуру Randomize без параметров.

Например,

randomize;

for i := 1 to 10 do R[i] := random; (из интервала [0..1])

или

randomize;

for i := 1 to 10 do R[i] := random(11); (из интервала [0..10])

Условия чётности и нечётности элемента массива:

If R[i] mod 2 = 0 then …

If odd (R[i]) then …или

If odd (R[i]) = false then …

If R[i] mod 2 <>0 then …

If not odd (R[i]) then …или

If odd (R[i]) = true then …

 
 

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

Блок-схема алгоритма

Листинг программы

PROGRAM TASK1;

USES CRT;

CONST N = 50;

VAR

A, B, C : ARRAY [1..N] OF INTEGER;

I, K, L : INTEGER;

BEGIN

CLRSCR;

WRITE (‘Введите размерность массива <=50’);

READLN (N);

FOR I := 1 TO N DO READLN (A[I]);

K := 0;

L := 0;

FOR I :=1 TO N DO

BEGIN

IF A[I] < 0 THEN

BEGIN

K := K + 1;

B[K] := A[I];

END

ELSE

BEGIN

L:= L + 1;

C[L] := A[I];

END;

END;

WRITELN (‘Отрицательные элементы массива ’);

FOR I := 1 TO K DO WRIETLN (B[I]);

WRITELN (‘Положительные элементы массива’);

FOR I := 1 TO L DO WRIETLN (C[I]);

WRITELN (‘Кол-во отрицательных элементов ’);

WRITELN (K);

WRITELN (‘Кол-во положительных элементов ’);

WRITELN (L);

READLN;

END.

Задача 7.2.Найти максимальный элемент и значение индекса этого максимального элемента целочисленного одномерного массива, сформированного случайным образом.

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

Алгоритм решения программы №1:

1. Сформировать случайный целочисленный массив R;

2. Присвоить вспомогательной переменной max значение первого элемента массива;

3. Для каждого элемента массива, начиная со второго и заканчивая последним, проверить выполнение условия max > R[i]. Если оно выполнено, то продолжать перебор, иначе присвоить max := R[i]и index = i и продолжать перебор.

 
 

Блок-схема алгоритма

Листинг программы

PROGRAM TASK2;

USES CRT;

CONST N = 100;

VAR R : ARRAY [1..N] OF INTEGER;

I, MAX, INDEX : INTEGER;

BEGIN

CLRSCR;

RANDOMIZE;

FOR I:=1 TO N DO R[I]:=random(11);

MAX := R[1];

INDEX := 1;

FOR I l= 2 TO N DO IF MAX < R[I] THEN

BEGIN

MAX := R[I];

INDEX := I;

END;

WRITELN (‘Значение ’, INDEX, ‘-го максимального элемента равно ’, R[INDEX]);

WRITELN (‘Для завершения работы нажмите <Enter>’);

READLN;

END.

Алгоритм решения программы №2:

1. Сформировать случайный целочисленный массив R;

2. Присвоить вспомогательной переменной index порядковый номер первого элемента массива, то есть 1;

3. Для каждого элемента массива, начиная со второго и заканчивая последним, проверить выполнение условия R[index] > R[i]. Если оно выполнено, то продолжать перебор, иначе присвоить index:=i и продолжать перебор.

Листинг программы

PROGRAM TASK2;

USES CRT;

CONST N = 100;

VAR R : ARRAY [1..N] OF INTEGER;

I, INDEX : INTEGER;

BEGIN

CLRSCR;

RANDOMIZE;

FOR I := 1 TO N DO R[I] := random (11)-5;

INDEX := 1;

FOR I= 2 TO N DO

IF R[INDEX] < R[I]

THEN INDEX := I;

WRITELN (‘Значение ’, INDEX, ‘-го максимального элемента равно ’, R[INDEX]);

WRITELN (‘Для завершения работы нажмите <Enter>’);

READLN;

END.

 
 

Блок-схема алгоритма

Задача 7.3.Сформировать элементы массива случайным образом и вывести на экран в обратном порядке.

Листинг программы

USES CRT;

VAR A : ARRAY [1..100] OF INTEGER; I : INTEGER;

BEGIN

CLRSCR;

RANDOMIZE;

WRITELN (‘Сформированный массив: ’);

FOR I := 1 TO 100 DO

BEGIN

A[I] := RANDOM (11) - 6; {[-6..4]}

WRITE (‘A[’, I, ‘]= ’, A[I]:3, ‘’:2);

END;

READLN; {Enter}

WRITELN (‘Изменённый массив: ’);

FOR I := 100 DOWNTO 1 DO WRITE (‘A[’, I, ‘]= ’, A[I]:3, ‘’:2);

READLN;

END.

Задача 7.4.Сформировать массив случайным образом, состоящим из 1000 элементов, числа находятся в диапазоне от 150 до 250. Сосчитать количество чисел больших 200.

Листинг программы

USES CRT;

VAR A : ARRAY [1..1000] OF INTEGER;

I, K: INTEGER;

BEGIN

CLRSCR;

RANDOMIZE;

WRITELN (‘Сформированный массив:’);

FOR I := 1 TO 1000 DO

BEGIN

A[I] := RANDOM (101) +150; {[150..250]}

WRITE (‘A[’, I, ‘]= ’, A[I]:3, ‘’:2);

END;

READLN; {Enter}

K := 0;

FOR I := 1 TO 1000 DO IF A[I] > 200 THEN K := K +1;

WRITELN (‘Количество элементов >200 = ’, K:2);

READLN;

END.

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

1. Дайте определение массива?

2. Как осуществляется объявление массива в разделе Var (1 способ)?

3. Каким образом можно объявить массив в разделе Var, если создан новый тип массива в разделе Type (2 способ)?

4. Что необходимо знать, чтобы обратиться к определённому элементу массива?

5. Объясните назначение 2-го способа объявления массива?

6. Как организовать ввод и вывод элементов массива?

7. Как можно реализовать формирование элементов массива случайным способом?

Лабораторная работа №7_1

Наши рекомендации