Приемы работы с массивами

Содержание |  Назад  |  Вперед

Зачем нужны массивы?

Ввод/вывод элементов массива

Поиск минимального и максимального элементов

Сортировка элементов массива

Сжатие массива

 

Зачем нужны массивы?

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

VAR
  Day1, Day2, Day3, ... Day365 : Real;

Это выражение далеко не полное. Чтобы записать все переменные потребуется по крайней мере страница! Далее каждой переменной нужно присвоить определенное значение, а для вычисления среднего значения нужно написать выражение:

Srednee := (Day1 + Day2 + Day3 + ... + Day365)/365;

Для записи этого выражения также потребуется немало времени и терпения! Но даже если у Вас хватит терпения написать целиком все выражение, то при попытки запустить программу на выполнение компилятор неминуемо выдаст сообщение об ошибке: too long string (слишком длинная строка), поскольку строка в тексте программы не может превышать 126 символов.

В тоже время, при использовании массивов, для описания 365-ти переменных типа Real достаточно написать:

VAR
  Day : Array [1..365] of Real;

Тем самым мы описываем сразу 365 переменных, которые могут использоваться в программе как обычные переменные:

Day[1], Day[2], Day[3], ..., Day[365]

Для вычисления среднего арифметического удобно воспользоваться оператором FOR:

Srednee := 0;
FOR i:=1 TO 365 DO Srednee := Srednee + Day[i];
Srednee := Srednee/365;

 

Приемы работы с массивами

1. Ввод/вывод элементов массива

Пусть в программе описана переменная-массив:

VAR
  V : Array [1..100] of Integer;

Значения элементов массива необходимо ввести с клавиатуры. Поскольку с элементами массива можно обращаться как с обычными переменными, мы вправе написать следующие строчки:

Write(‘Введите V[1]: ’); ReadLn(V[1]);
Write(‘Введите V[2]: ’); ReadLn(V[2]);
. . .
. . .
. . .

Write(‘Введите V[100]: ’); ReadLn(V[100]);

Однако писать сто почти одинаковых строчек занятие весьма утомительное и главное не разумное. Отличие этих строк состоит лишь в индексе элемента массива. Здесь на помощь приходит оператор FOR, так как именно он позволяет самым эффективным образом организовать циклический процесс с заданным числом повторений. Кроме этого параметр цикла можно использовать в качестве индекса массива V. Итак, ввод элементов массива V можно оформить следующим образом:

FOR i:=1 TO 100 DO begin
  Write(‘Введите V[‘,i,’]: ’);
  ReadLn(V[i])
end;

Если необходимо вывести все элементы массива на экран (в строчку), то это также можно сделать с помощью оператора FOR:

FOR i:=1 TO 100 DO Write( V[i]:5 );

Примечание: Запись V[i]:5 в процедуре Write означает, что при выводе значения переменной V[i] под число будет отведено 5 знакомест (подробнее о форматах вывода см. здесь).

Ввод и вывод элементов двумерного массива. При вводе и выводе элементов двумерного массива (матрицы) тоже удобно использовать оператор FOR. Только теперь необходимо уже два оператора FOR, так как у матрицы каждый элемент имеет два индекса – номер строки и номер столбца. Ниже приведен пример программы, иллюстрирующей ввод элементов массива размером 5х3 с клавиатуры с последующим выводом элементов массива на экран в виде матрицы.

PROGRAM Array_Input_Output;
VAR
     M : array [1..5, 1..3] of Integer;
  i, j : Integer;
BEGIN
  Writeln(‘Ввод элементов массива.’);
  FOR i:=1 TO 5 DO
  FOR j:=1 TO 3 DO begin
    Write(‘Введите элемент M[‘, i, ’,’, j, ’]: ’);
    Readln(M[i,j])
  end;
  Writeln(‘Вывод массива в виде матрицы.’);
  FOR i:=1 TO 5 DO begin
    FOR j:=1 TO 3 DO Write( M[i,j]:5 );
    Writeln
  end;
END.

 

2. Поиск минимального и максимального элементов в массиве

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

  1. Выбираем в качестве минимального значения первый элемент массива (min := V[1];)
  2. Сравниваем значение переменной min со вторым элементом массива. Если оказывается, что V[2] меньше чем min, т.е. если выполняется условие (V[2]<min), тогда в качестве min берем значение V[2]. В противном случае, значение переменной min оставляем без изменения.
  3. Циклически повторяем действия п.2 для третьего, четвертого и т.д. элементов. По завершению цикла переменная min будет содержать минимальный элемент массива.

Аналогично осуществляется поиск максимального элемента.

PROGRAM Min_Max;
VAR
  V : array [1..5] of Integer;
  i, min, max : Integer;
BEGIN
  ...
  ввод элементов массива V;
  ...
  min := V[1];
  max := V[1];
  FOR i:=2 TO 5 DO begin
    IF V[i] < min THEN min := V[i];
    IF V[i] > max THEN max := V[i];
  end;
  Writeln(‘min: ’, min);
  Writeln(‘max: ’, max)
END.

 

3.Сортировка элементов массива

 

4. Сжатие массива

Содержание |  Назад  |  Вперед