Массивы в языке программирования
Таблицы (массивы) как основное средство представления однородной информации используется во всех компьютерных программах. На табличном принципе основана и архитектура современных ЭВМ: память ПК можно рассматривать как большой массив байтов, адреса которых располагаются по возрастанию.
Массив – это набор объектов одного типа, имеющих одно имя, но у каждого из которых есть порядковый номер.
В Pascal массивы описываются при помощи зарезервированного слова array. При этом количество элементов в массиве должно быть определено заранее. Также указывается тип элементов, из которых состоит массив и от какого до какого значения изменяются индексы.
Массив называется одномерным, если для доступа к его элементам достаточно одного индекса. Массив описывается следующим образом:
VAR Имя массива: ARRAY [начальное значение индекса.. конечное значение индекса] OF тип данных;
В Pascal индекс – это переменная перечисляемого типа. Границы изменения индексов должны быть постоянными величинами.
Пример описания одномерного массива:
Var A: ARRAY[1..50] OF real;
В результате в каждой ячейке памяти будет отдельный элемент:
a[1], a[2], a[3], …,a[50].
Для введения данных в память необходимо организовать цикл. Ввод массива можно выполнить 2-мя способами:
1) FOR I:= 1 TO N DO
READ(A[I]);
Значения, которые вводятся, набираются на клавиатуре и отделяются одно от другого пробелом.
2) Вводить можно каждое данное в отдельном ряду:
FOR I:= 1 TO N DO
BEGIN
Write(‘a[‘, I,’]=’);
Read(a[i]);
End.
Работу с массивом можно условно разделить на 3 части:
формирование массива; обработка массива; вывод обработанного массива.Формирование массива:
1 cпособ:
Задача 1. Ввести с клавиатуры массив из 20 целых чисел.
Program A_251;
Var A: array[1..20] of integer;
I: integer;
Begin
For i:= 1 to 20 do
Read(a[i]);
End.
2 способ: Формирование случайным образом.
Массивы можно задавать с помощью генератора случайных чисел. Этот оператор находится в модуле CRT, поэтому при его использовании вам необходимо подключить этот модуль.
ГСЧ(генератор случайных чисел) состоит из двух операторов. В начале нужно сделать его «активным» для того, чтобы при новом запуске можно было получать разные числа. Для этого в начале программы используется оператор RANDOMIZE – он «включает» ГСЧ.
Чтобы непосредственно получить некоторое число, используется оператор RANDOM.
Если использовать RANDOM(100), то он «выбирает» произвольное число из диапазона 0-99.
Задача 2 Сгенерировать случайным образом массив M из 30 элементов целого типа.
Program Massiv;
Uses Crt;
Var M: array[1..30] of integer;
I: integer;
Begin
Randomize;
For i:=1 to 30 do
M[i]: = random(100);
For i:=1 to 30 do
Write(m[i]:4);
End.
Мы рассмотрели случай использования оператора random, когда есть ограничения на большее значение. А как быть, если ограничение на нижнее значение.
Допустим, учительнице не разрешили ставить оценки ниже 4. Как использовать random?
Рассмотрим пример W:=Random(13); Минимальное значение, которое принимает переменная w = 0, а максимальное значение = 12. Как увеличить минимальное значение – прибавить то число, на которое надо увеличить минимальное значение, значит w:= Random(13)+4; Однако в этом случае на 4 увеличится и максимальное значение. Чтобы максимальное значение не увеличилось, надо отнять 4 от того, что мы указали в скобках, т. е. w:= Random(13-4)+4;
В результате w может принять значения от 4 до 12.
А как быть, если нужно получить значения из промежутка (-5, 16)? В этом случае минимальное значение надо уменьшить на 5. А как быть с максимальным значением? Укажем w:= Random(17)-5. Тогда минимальное значение действительно будет -5. А максимальное? 16-5! Следовательно, максимальное значение надо увеличить на 5. Получим w:= Random(17+5)-5.
Практические задачи:
Получите значения P из промежутка
А) (-3, 7)
Б) (5, 77)
В) (4, 35)
Г) (-4, -1)
Д) (44, 77).
Классические задачи обработки массивов
Вычисление суммы элементов массиваЗадача №1 Составить программу вычисления суммы элементов массива из N целых чисел.
Указание: Просмотреть все элементы массива и добавить их в сумму. Операция добавления к сумме слагаемого уже известна, а просмотреть элементы массива можно при помощи цикла.
Программа:
Program Z5_5;
Const n=5;
Var I, Sum: integer;
A: array [1..n] of integer;
Begin
For i:=1 to n do
Begin
Write(‘Введите элементы массива через пробел’);
Read(a[i]);
End;
Sum:=0;
For i:= 1 to n do
Sum:= Sum + a[i];
Writeln(‘Сумма всех элементов массива=’,Sum);
End.
Поиск заданного элемента в массиве.
Задачи поиска в массиве конкретных данных часто решаются методом сканирования массива (просмотром всех его элементов).
Задача №2 В заданном массиве найти местоположение элементов с заданным значением.
Программа:
Program Z5_6;
Var A: array[1..10] of real;
X: real;
I: integer;
Begin
Write(‘Введите элементы массива’);
For i:=1 to 10 do
Read(a[i]);
Write(‘Введите значение величины для поиска’);
Read(x);
For i:=1 to n do
If (a[i]) = x then write(‘на’, I, ‘- месте массива находится заданный элемент’, x:1:2);
End.
Поиск минимального (максимального) элемента массива.
Задача №3 Найти наименьший элемент массива и место его расположения в массиве.
Будем последовательно сравнивать каждый элемент массива с некоторым «трафаретом» (текущим значением минимального элемента). Если текущий элемент массива меньше «трафарета», то запоминаем в нём это новое наименьшее значение.
Программа:
Program Z5_7;
Var A: array[1..10] of real;
Min: real;
I: integer;
Begin
Write(‘Введите элементы массива’);
For I:=1 to 10 do
Read(a[i]);
Min:=a[1]; k:=1;
For I: =2 to 10 do
If (a[i]) < min then
Begin
Min:= a[i];
K:=I;
End;
Write(‘на ‘, k, ‘ – месте массива находится минимальный элемент’, min:1:2);
End.
Сортировка элементов массива
Задача № 4 Написать программу, которая сортирует по убыванию введённый с клавиатуры одномерный массив.
Программа:
Program Z5_8;
Const size=5;
Var A: array[1..size] of integer;
I, k, buf : integer;
Begin
Write(‘Введите элементы массива’);
For i:=1 to size do {Формирование массива}
Read(a[i]);
For i:=1 to size-1 do
Begin
For k:=1 to size-1 do
Begin
If a[k]> a[k+1] then
Begin
Buf: = a[k];
A[k]:= a[k+1];
A[k+1]:= buf;
End;
End;
For k:= 1 to size do write(a[k],’ ‘); {отладочная печать – состояние массива после очередного цикла сортировки}
End;
For i:= 1 to size do write(a[i],’ ‘); {Вывод массива}
End.


