Массивы
Основное предназначение современных компьютеров — обработка большого количества данных. При этом надо как-то обращаться к каждой из тысяч (или даже миллионов) ячеек с данными. Очень сложно дать каждой ячейке собственное имя и при этом не запутаться. Из этой ситуации выходят так: дают имя не ячейке, а группе ячеек, в которой каждая ячейка имеет собственный номер. Такая область памяти называется массивом.
Массив – это структурированный тип данных, состоящий из фиксированного числа упорядоченных однотипных элементов.
Элементы массива упорядочены по индексам, определяющим положение каждого элемента в массиве. Элементы массива могут быть любого типа, включая структурированный. Индексы могут быть любого порядкового типа, кроме Longint.
I |
1 |
2 |
… |
10 |
A[ i ] |
A[ 1 ] |
A[ 2 ] |
… |
A[ 10 ] |
I/J |
1 |
2 |
… |
5 |
1 |
A[ 1,1] |
A[ 1,2] |
… |
A[ 1,3] |
2 |
A[ 2,1] |
A[ 2,2] |
… |
A[ 2,3] |
3 |
A[ 1,3] |
A[ 2,3] |
… |
A[3,3 ] |
i – индекс или номер элемента
i –номер строки ; j – номер столбца
Одномерный массив соответствует понятию линейной таблицы (с одним индексом), двумерный – понятию прямоугольной таблицы или матрицы (с двумя индексами). Если количество индексов n – массив называется n – мерным. Размерность ограничена объёмом памяти конкретного компьютера.
Для описания массива предназначено словосочетание array of (массив из). После слова array указывается тип индексов в квадратных скобках, после слова of - тип самих компонент (элементов массива).
Формат: 1 способ
Type <имя типа> = array [тип индекса] of <тип компонент>;
Пример:
Type A=array [1..10] of integer; {массив из 10 целых чисел}
AB=array [1..3,1..5] of real; {двумерный массив из вещественных чисел размерностью 3 строки и 5 столбцов}
2 способ
Массив можно описать без представления типа непосредственно в разделе описаний типов данных:
Var <идентификатор> : array [тип индекса] of <тип компонент>;
Пример:
var A: array[1..5] of integer; // массив из 5 элементов целого типа
V: array[0..5] of real; // массив из 6 элементов вещественного типа
L: array[-5..5] of boolean; // массив из 11 элементов логического типа
S: array[65..90] of char; // массив из 26 элементов символьного типа
Для описания массива можно использовать предварительно определённые константы:
Const N1=4; N2=5;
Var Mas: array[1..N1,1..N2] of real;
или массив из постоянных величин const b: array [1..5] of integer = (4, 2, 3, 5, 7);
Способы заполнения массива
1 способ. Ввод каждого значения с клавиатуры:
for i:=1 to10 do read (a[i]);
2 способ. С помощью оператора присваивания (по формуле):
for i:=1 to 10 do a[i]:=i;
3 способ. С помощью оператора присваивания (случайными числами):
randomize;
for i:=1 to 10 do a[i]:=random(100);
Функция Random [0;N):
x = random; [0;1)
x = random (50) [0;49]
x = random (100)+50 [50;149]
x = random (100)-50 [-50;49]
x = random (254)-123 [-123;130]
Вывод массива
1 способ. Элементы массива можно вывести в строку, разделив их пробелом:
for i:=1 to 10 do write (a[i], ' '); Пример: 25 15 13 48 56 30 12 24 17 62
2 способ. Элементы массива можно вывести в строку, указав количество зарезервированных ячеек под число:
for i:=1 to 10 do write (a[i]:5); Пример: 25 15 13 48 56 30 12 24 17 62
3 способ. Вывод с комментариями:
for i:=1 to 10 do writeln ('a[', i, ']=', a[i]);
Пример: a[1]=4 a[2]=1 a[3]=6 a[4]=3 a[5]=8 a[6]=5 a[7]=9 a[8]=4 a[9]=8 a[10]=7
Задача 1: Определение суммы и произведения элементов в массиве. Сформировать и вывести на экран массив из 15 случайных чисел в интервале от 1 до 100. Определить сумму и произведение всех элементов.
program p1;
uses Crt; //подключение библиотек
var a: array [1 ..15] of integer;
i, S: integer;
p: longint;
begin
ClrScr; //очистка экрана
p:=1; //первоначальное значение произведения 1
s:=0; //первоначальное значение суммы 0
randomize; //Инициализация счётчика случайных чисел
for i:=1 to 15 do // для номеров массива от 1 до 15
begin
a[i] := random (100)+1; // заполнение массива случайными числами
write (a[i],' '); //вывод элементов массива через пробел
S:= S + a[i]; //подсчёт суммы
P:= P * a[i]; //подсчёт произведения
end;
writeln; //вставка пустой строки
writeln ('произведение = ', p);
writeln ('сумма = ', s);
end.
Задача 2. Определение количества заданных элементов в массиве. Ввести с клавиатуры массив целых чисел А[10]. Положительные элементы возвести в квадрат, подсчитать количество отрицательных и чётных чисел. Вывести полученный массив.
program p2;
uses Crt;//подключение библиотек
var A: array[1..10] of integer;
i, otr, n: integer;
begin
ClrScr;
otr:=0; n:=0;//обнуление результатов
for i:=1 to 10 do begin
write('Введите элемент массива А[',i,']= '); // заполнение массива с клавиатуры
readln(A[i]);//ввод массива с клавиатуры
end;
writeln('Итоговый массив A:');
for i:=1 to 10 do begin
if A[i]>0 then begin
A[i]:= sqr(A[i]); write (a[i]:4); end;// возведение в квадрат положительных элементов и вывод нового массива
if A[i]<0 then otr:= otr + 1;//подсчет отрицательных элементов
if A[i] mod 2=0 then n:= n + 1;//подсчет четных элементов
end;
writeln;
writeln('количество чётных = ',N);
writeln('количество отрицательных = ',Otr)
end.