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 (¢в массиве есть нужная пара элементов¢)