If FLAG then

End.

Else

Begin

Begin

Repeat

Begin

Begin

Begin

Var

Var

Type

Var

a, b: array[1..10] of real;

t: array [1..5, 1..7] of integer;

2. Сначала описать тип данных, имеющих структуру массива, а затем описать сам массив, как переменную описанного типа

<имя типа> = ARRAY[<сп.индекс.типов>]

of <тип>

Например:

mas = array [1..10] of real;

matr = array [1..5, 1..7] of integer;

a, b: mass;

t: matr;

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

Следует придерживаться одного из следующих способов описания:

1. Заранее описать массив с избыточным количеством элементов, а с клавиатуры задавать конкретное число элементов, которые будут практически использованы.

2. Описать число элементов как константу с конкретным значением, а при описании массива указать эту константу в качестве числа элементов массива

Например:

…..

const N=10;

a, b: array [1..N] of real;

Отдельный элемент массива записывается следующим образом

<имя массива> [<индекс>],

где индекс может быть выражением порядкового типа

Например:

a[1], b[5], t[2, 3], b[i], a[j+1], t[m, n]

Линейный (одномерный массив) представляет собой набор однотипных простых значений, объединенных общим именем и различаемых внутри набора по единственному номеру (индексу).

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

Отдельный этап обработки массива, состоящего из n элементов, можно представить следующим фрагментом блок-схемы:

Пример:

Ввести с клавиатуры 10 элементов одномерного массива А[I].

for i:=1 to 10 do

write (¢Введите значения элемента А[¢, i: 3, ¢]:¢);

readln (A[i]);

end;

….

Ниже описаны некоторые простые алгоритмы обработки одномерных массивов (во всех примерах N – число элементов массива А). [1].


1. Вычисления суммы всех элементов массива (переменная SUM).

….

SUM:=0;

for J=1 to N do

SUM:= SUM + A[J]

2. Вычисление произведения всех элементов (переменная PR):

….

PR:=1;

for J:=1 to N do

PR:= PR*A[J];

3. Определение максимального элемента массива и его номера (переменные MAX и NOM)

….

MAX:=A[1];

NOM:=1;

for J:=2 to N do

if A[J]>MAX then

MAX:= A[J];

NOM:=J;

end;

4. Сортировка массива методом «пузырька».

Сортировка – это перестановка элементов массива в порядке возрастания или убывания. Метод «пузырька» - эффективный и простой метод сортировки не слишком больших массивов. Принцип его заключается в следующем (на примере сортировки по возрастанию). Просматривают попарно элементы массива: первый и второй, второй и третий и т.д., и каждый раз, когда последующий элемент оказывается больше предыдущего, их меняют местами. Нетрудно понять, что при этом большой по значению элемент будет постепенно перемещаться в направлении конца массива, пока не встретит на пути элемент, еще больший. Затем передвигаться будет этот больший элемент и т.д. После проверки всех пар, вплоть до пары элементов с номерами (N – 1) и N, самый большой элемент массива встанет на последнее место. Затем подобным образом проверяют уже первые (N – 1) элементов, затем (N – 2) и так далее, пока не останется только одна пара элементов: 1-й и 2-й. Переставив их в нужном порядке, получают массив, в котором все элементы выстроены в порядке возрастания.

Алгоритм осуществляется с помощью вложенных циклов. Внутренний цикл – это цикл проверки некоторого количества (М) пар элементов с перестановкой их при необходимости. Внешний цикл позволяет постепенно уменьшать значение М от (N – 1) до 1.

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

1. одно из значений переменных записывается в буфер;

2. второе значение записывается в ячейку, соответствующую первой переменной;

3. значение первой переменной из буфера записывается в ячейку, соответствующую второй переменной.

Приведем текст фрагмента программы, описывающего сортировку массива А из 10 элементов по возрастанию. Использованы переменные: J – счетчик внутреннего цикла, М – счетчик внешнего цикла, BUF – переменная-буфер:

for M:= N – 1 down to 1 do

for J:=1 to M do

if A[J]<A[J+1]then

BUF:=A[J];

A[J]:= A[J+1];

A[J+1]:=BUF;

end;

Поиск первого по порядку элемента, удовлетворяющего какому-то условию. Для запоминания номера нужного элемента вводят дополнительную переменную и вначале присваивают ей значение 0.

Для решения этой задачи нам более эффективным является использование цикла с постусловием (т.к. число повторений заранее не известно):

Nom:=0

J:=0;

J:=J+1;

if <условие> then

Nom:=J;

until <условие>;

5. Выборочная обработка тех элементов массива, которые удовлетворяют условию, проводится по общему принципу, изображенному фрагментом блок-схемы.

От обычных алгоритмов, например, суммирования, эта схема отличается наличием проверки условия перед обработкой очередного элемента. Если элемент этому условию не удовлетворяет, он не обрабатывается, а пропускается.

Пример: подсчитать количество элементов массива из 10 элементов, принадлежащих интервалу (3; 8).

program primer;

const N = 10;

var J, KOL: integer;

A: array [1..N] of real;

{ Ввод }

for J:=1 to N do

write (¢Введите¢, J:3, ¢-й элемент массива: ¢);

readln(A[J]);

end; {конец этапа ввода начальных значений}

{обработка}

KOL:=0;

for J:=1 to N do

if (A[J]>3) and (A[J]<8) then

KOL:=KOL + 1;

{ Вывод результата: }

if KOL=0 then

writeln (¢Таких элементов в массиве нет¢);

writeln (¢Количество элементов равно¢, KOL:4);

readln; { задержка окончания программы }

6. Определение наличия элемента или группы элементов, удовлетворяющих условию (без подсчета их количества).

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

Решение таких задач можно провести аналогично п.5, но часто для этого используют «флажок» - переменную логического типа, фиксирующую ответ на вопрос «Имеется ли в массиве нужная группа элементов». Перед началом просмотра массива переменной присваивают значение falseнет»). Затем просматривают массив и, найдя нужную группу элементов, меняют значение «флажка» на trueда»).

var Flag: boolean; { описание логической переменной в разделе описаний }

Flag:= false;

for J:=1 to N – 1 do

if (A[J+1]=2*A[J]) then

FLAG:=true;

writeln (¢в массиве есть нужная пара элементов¢)


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: