Массивы в языке программирования

Таблицы (массивы) как основное средство представления однородной  информации используется во всех компьютерных программах. На табличном принципе основана и архитектура современных ЭВМ: память ПК можно рассматривать как большой массив байтов, адреса которых располагаются по возрастанию.

Массив – это набор объектов одного типа, имеющих одно имя, но у каждого из которых есть порядковый номер.

В 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.