logo search
Курс лекций по информатике

Одномерные массивы

В математике одномерному массиву соответствует мерный вектор, например:

, где

компонента (координата) вектора;

номер компоненты;

число компонент.

Описание одномерного массива

В Турбо Паскале описание одномерного массива задается следующим образом:

<имя массива>: ARRAY [m1 m2] OF < тип элементов>;

Индекс одномерного массива определяет порядковый номер элемента в массиве.

m1 m2 – диапазон значений индекса.

Тип элементов в массиве может быть любым: простым (REAL, INTEGER, CHAR), структурным (ARRAY), строковым (STRING).

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

Var

X: array [15] of real;

будет выделяться область из пяти последовательных ячеек для записи значений элементов вещественного типа.

Индексные переменные

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

индексная переменная (элемент массива);

имя массива;

индекс (номер элемента массива).

В качестве индекса используются:

Замечание. Индексными выражениями являются арифметические выражения целого типа.

Индексная переменная, как и простая, может стаять в левой части оператора присваивания, например:

;

Ввод-вывод одномерных массивов

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

Пример 1. Организовать ввод с клавиатуры массива:

.

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

Var

A: array [14] of real;

i: integer;

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

Begin {начало программы}

WRITELN (‘Введите массив А’);

for i := 1 to 4 read(a[i]);

……………

На клавиатуре набирается:

1.2 5 6.8 14  Enter .

Пример 2. Организовать вывод массива А на экран таким образом, чтобы все элементы располагались на одной строке экрана.

В программе надо записать следующие операторы:

for i := 1 to 4 do write(a[i]:5:1);

writeln;

Вид выводимого массива на экране:

1.2 5.0 -6.8 14.0

Оператор WRITELN без списка служит для перевода курсора к началу следующей строки.

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

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

Задача 1. Организация счетчика.

Определить количество элементов заданного целочисленного массива , которые делятся на 3 без остатка.

Program OM_1;

Var

B: array [1… 20] of integer;

i, L: integer;

Begin

writeln(‘Введите массив В’);

for i :=1 to 20 do read(b[i]);

L := 0;

for i :=1 to 20 do

if (b[i] MOD 3) = 0 then L := L+1;

writeln(‘L =’, L);

End.

Задача 2. Накопление суммы и произведения.

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

; .

Program ОМ_2;

Var

Х: array [1… 100] of real;

n, i: integer;

S, P: real;

Begin

writeln(‘Введите размер массива n’);

read(n);

writeln(‘Введите массив Х’);

for i := 1 to n do read(x[i]);

S := 0;

P := 1;

for i := 1 to n do

begin

S := S + x[i];

P := P  x[i];

end;

S := S/n;

P := exp(1/n * ln(P));

writeln(‘S =’, S:6:2);

writeln(‘P =’, P:10:2);

End.

Задача 3. Поиск минимального и максимального элементов массива.

Дан вещественный массив .

Поменять местами минимальный и максимальный элементы массива и вывести массив после обмена.

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

Введем обозначения:

min – минимальный элемент;

imin – индекс минимального элемента;

max – максимальный элемент;

imax – индекс максимального элемента.

Program ОМ_3;

Var

T: array [1… 10] of real;

i, imin, imax: integer;

min, max: real;

Begin

writeln(‘Введите массив T’);

for i := 1 to 10 do read(t[i]);

min := +1E6;

max := -1E6;

for i := 1 to 10 do

begin

if t[i]<min then

begin

min := t[i];

imin := i;

end;

if t[i]>max then

begin

max := t[i];

imax := i;

end;

end;

t[imin]:= max;

t[imax]:= min;

for i := 1 to 10 do write(t[i]:6:2);

writeln;

End.