
- •Массивы: типовые алгоритмы обработки
- •Раздел описания типов
- •1. Одномерные массивы
- •Объявление одномерных массивов
- •Ввод, вывод элементов одномерного массива
- •Решение задач с использованием одномерных массивов
- •Удаление элементов одномерного массива
- •Вставка элементов в одномерный массив
- •Перестановка элементов одномерного массива

Close (f);
{Вывод массива на экран} For i:=1 To n Do
Write (А[i], ‘ ‘);
End.
Если требуется считать определенное количество элементов из файла или количество заранее известно, то в этом случае используется цикл с параметром:
Значение переменной n (количество элементов) можно также ввести из файла. Значение n должно находиться в пределах, которые установлены типом индекса массива
(или наоборот – тип индекса определяется известными ограничениями).
...
Assign (f,'arr.dat'); Reset (f);
Read (f,n); {чтение количества элементов массива} For i:=1 To n Do
Read (f,А[i]); {заполнение массива из n элементов значениями} Close (f);
...
Пример 1.9. Что выполняет следующий фрагмент программы:
Program M;
Const N=50;
Var A : Array [1..N] Of Integer; I : Integer;
Begin
For I:=1 To N Do A[I]:=I*I
End.
Ответ: Заполняет массив таким образом, что значение каждого элемента равняется квадрату его индекса.
Решение задач с использованием одномерных массивов
Пример 1.10. Переставить элементы массива в обратном порядке.
Const N=25;
Var A: Array[1..N] Of Integer; i,B:Integer; Begin
{Ввод элементов массива с клавиатуры. N –количество элементов}

For i:=1 To N Do Begin
Write (‘A[‘,i,']= '); Readln (А[i]);
End;
{Перестановка элементов массива} For i:=1 To N div 2 Do Begin
B:=A[i]; A[i]:=A[N-i+1]; A[N-i+1]:=B; End;
For i:=1 To N Do {вывод массива} Write(A[i]:6)
End.
Пример 1.11. Найти сумму четных элементов массива.
Const N=25;
Type Tarray=Array[1..N] Of Integer;
Var A:Tarray; i,S:Integer;
Begin
{Ввод элементов массива с клавиатуры. N – количество элементов} For i:=1 To N Do Begin
Write (‘A[‘,i,']= '); Readln (А[i]);
End;
{Сумма элементов массива} S:=0;
For i:=1 To N Do
If А[i] mod 2 = 0 Then {или not odd (А[i])} S:= S + А[i];
WriteLn ('S=', S);
End.
Пример 1.12. Найти первый максимальный элемент массива и его индекс.
Фрагмент программы (считаем, что все переменные описаны правильно):
...
zmax:=А[1]; |
{Значение максимального элемента} |
imax:=1; |
{Индекс максимального элемента} |
For i:=2 To n Do
If А[i] > zmax Then Begin
zmax := А [i];

imax := i;
End;
или другой вариант:
...
imax:=1;
For i:=2 To n Do
If A[i] > A[imax] Then imax := i;
zmax:= m[imax];
Пример 1.13. Найти количество положительных и отрицательных элементов массива. Выбрать наиболее эффективный фрагмент.
Фрагмент программы 1:
Var i,k1,k2,n:Integer; A:Array[1..30] Of Integer; Begin
...
k1:=0; {k1 – количество положительных элементов} k2:=0; {k2 – количество отрицательных элементов} For i:=1 To n Do
If A[i] > 0 Then Inc (k1)
Else If A[i] < 0 Then Inc (k2);
...
Фрагмент программы 2:
Var i,k1,k2,n:Integer; A:Array[1..30] Of Integer; Begin
...
k1:=0; {k1 – количество положительных элементов} k2:=0; {k2 – количество отрицательных элементов} For i:=1 To n Do Begin
K1:= k1 + ord( A[i] > 0); K2:= k2 + ord( A[i] < 0);
End;
...
Фрагмент программы 3:
Var i,n:Integer; A:Array[1..30] Of Integer; Flags:array[Boolean] of byte;
Begin
...

Flags[False]:=0; {количество положительных элементов}
Flags[true]:=0; {количество отрицательных элементов}
For i:=1 To n Do
Flags[A[i] <= 0]:=Flags[A[i] <= 0]+1–ord(A[i]=0);
Пример 1.14. Дан линейный массив целых чисел. Подсчитать, сколько в нем
различных чисел.
Идея решения: заводим вспомогательный массив, элементами которого являются логические величины (False – если элемент уже встречался ранее, True –
иначе).
Var I, N, K, Kol:Integer;
A:Array [1..50] Of Integer; {исходный массив} L:Array [1..50] Of Boolean; {вспомогательный массив}
Begin
Write('Введите количество элементов массива: '); ReadLn(N);
For I := 1 To N Do Begin
Write('A[', I, ']='); ReadLn (A[I]);
L[I] := True; {Заполняем вспомогательный массив значениями True} End;
Kol := 0; {переменная, в которой будет храниться значение количества различных чисел}
For I := 1 To N Do IF L[I] Then
Begin
Kol := Kol + 1;
FOR K := I+1 TO N DO
{Во вспомогательный массив заносим значение False, если число уже встречалось ранее или совпадает с текущим элементом A[I]}
L[K] := (A[K] <> A[I]) And L[K]; End;
WriteLn('Количество различных чисел: ', Kol) End.
Задание. Реализовать другой алгоритм для подсчета различных чисел в массиве, в котором для каждого элемента во вспомогательном массиве подсчитать их количество.