Массив обозначается одним именем. Так всю совокупность действительных чисел
1.6, 14.9, -5.0, 8.5, 0.46
можно считать массивом и обозначить одним именем, например А. Образующие массив переменные называются элементами массива. Каждый элемент массива обозначается именем массива с индексом, заключенным в квадратные скобки.
A[1], A[2], A[3], ..., A[n].
Индекс определяет положение элемента массива данных относительно его начала.
Для рассмотренного выше примера элементами массива А являются:
<идентификатор,…>:array[тип индекса] of <тип компонент>;
Например:
M: array[1..4] of integer;
MAS: array[1..60] of real;
Для описания массива можно использовать предварительно определенные константы.
Например,
Const
G1=4; G2=6;
Var
M1: array[1..G1] of integer;
M2: array[1..G2] of real;
Заполнение массива
1 Способ (заполнение с клавиатуры. Динамический ввод данных)
Var
M:array[1..10] of integer;
I: byte;
Begin
For I:=1 To 10 Do Begin
Write('Введите ',I,' значение ');
ReadLn(M[I]);
End;
End.
2 Способ (с использованием генератора случайных чисел)
Var
M: array[1..25] of integer;
I: byte;
Begin
For I:=1 To 25 Do Begin
M[I]:=Random(50);
Write(M[I]:4);
End;
End.
3 Способ (статический ввод данных)
Const
M: array[1..12] of integer = (31,28,31,30,31,30,31,31,30,31,30,31);
Var
I: Integer;
Begin
For I:=1 To 9 Do
Write(M[I]:3);
End.
6.1.4 Примеры решения задач
1. Алгоритмы поиска и присвоения значений элементам массива
1. Составить программу обработки массива размерностью n, заполненного целыми числами, введенными с клавиатуры. Вывести индексы и значения положительных элементов массива.
USES Crt;
CONST N=10;
VAR
A:ARRAY[0..N] OF INTEGER;
I:BYTE;
BEGIN
ClrScr;
{ Заполнение массива }
FOR I:=1 TO N DO Begin
Write('Введите ',I,' элемент массива '); ReadLn(A[I]);
End;
{ Обработка элементов массива }
FOR I:=1 TO N DO
IF A[I]>0 THEN WriteLn('Положительный элемент = ',A[I],' его индекс = ',I);
END.
2. Составить программу вычисления и печати значений функции Y=sin(x-1)/2x. Значения аргументов задать в массиве X, состоящего из 6 элементов. Значения функции записать в массив Y.
USES Crt;
VAR
X,Y:ARRAY[0..6] OF REAL;
I: BYTE;
BEGIN
ClrScr;
FOR I:=1 TO 6 DO Begin
Write('Введите ',I,' значение аргумента '); ReadLn(X[I]);
End;
FOR I:=1 TO 6 DO Begin
Y[I]:=SIN(X[I]-1)/(2*X[I]);
WriteLn(' X= ',X[I]:4:1,' Y=',Y[I]:5:2);
End;
END.
3. Дан массив M, состоящий из 30 элементов. Элементы массива - произвольные целые числа. Выдать на экран значение каждого пятого и положительного элемента. Указанные элементы выдать в строку.
USES Crt;
VAR
M:ARRAY[0..30] OF INTEGER;
I: BYTE;
BEGIN
ClrScr; Randomize;
WriteLn(' Значения элементов массива');
FOR I:=1 TO 30 DO Begin
M[I]:=Random(20)-4; Write(M[I]:3);
End; WriteLn;
I:=5;
WriteLn(' Значения каждого пятого и положительного элемента массива');
While I<=30 DO Begin
IF M[I] > 0 THEN Write(M[I]:3);
I:=I+5;
End;
END.
Примеры для самостоятельного решения:
1. Дан одномерный массив размерностью 10, заполненный целыми числами, введенными с клавиатуры, и величина N. Отрицательные элементы заменить на N. Измененный массив вывести на экран одной строкой.
2. Дан одномерный массив размерностью N, заполненный случайными числами в интервале от -15 до 20. Вывести на экран значения элементов массива, абсолютное значение которых >10.
3. Дан одномерный массив размерностью N, заполненный случайными числами. Каждый третий элемент массива возвести в квадрат, если элемент отрицательный. Измененный массив вывести на экран.
4. Составить программу вычисления и печати значений функции Y=(sinx+1)Öcos4x. Значения аргументов задать в массиве X, состоящего из 10 элементов. Значения функции записать в массив Y.
5. Из элементов массива А, состоящего из 25 элементов, сформировать массив D той же размерности по правилу: первые 10 элементов находятся по формуле Di=Ai+i, остальные - по формуле Di=Ai-i.
2. Алгоритмы нахождения суммы, произведения и количества элементов массива. Работа с индексами элементов массива
1. Определить сумму элементов массива Р(n), значения которых > заданного Т
USES Crt;
Const N=30;
VAR
P:ARRAY[0..N] OF INTEGER;
I,T:BYTE; S:INTEGER;
BEGIN
ClrScr; Randomize;
{ Заполнение массива случайными числами }
WriteLn(' Значения элементов массива');
FOR I:=1 TO N DO Begin
P[I]:=Random(30); Write(P[I]:3);
End; WriteLn;
Write(' Введите значение переменной '); ReadLn(T);
S:=0;
FOR I:=1 TO N DO
IF P[I]>T THEN S:=S+P[I]; { сумма элементов массива > T }
WriteLn(' Сумма элементов массива > заданного значения = ',S);
END.
2. Дан массив целых чисел, состоящий из 25 элементов. Подсчитать сумму элементов массива, произведение положительных и количество нулевых элементов. Результат вычисления вывести на экран.
USES Crt;
VAR
A:ARRAY[0..25] OF INTEGER;
I: BYTE; S,K: INTEGER; P: REAL;
BEGIN
ClrScr; Randomize;
{ Заполнение массива случайными числами }
WriteLn(' Значения элементов массива');
FOR I:=1 TO 25 DO Begin
A[I]:=Random(10)-3; Write(A[I]:3);
End; WriteLn;
S:=0; K:=0; P:=1;
FOR I:=1 TO 25 DO Begin
S:=S+A[I]; { сумма элементов массива }
IF A[I]>0 THEN P:=P*A[I]; { произведение положительных элементов массива }
IF A[I]=0 THEN K:=K+1; { количество нулевых элементов массива }
End;
WriteLn(' Сумма элементов массива = ',S);
WriteLn(' Произведение положительных элементов массива = ',P:0:0);
WriteLn(' Количество нулевых элементов массива = ',K);
END.
3. Дан массив четных чисел, состоящий из 15 элементов. Заполнить его с клавиатуры. Найти:
· сумму элементов, имеющих нечетные индексы;
· подсчитать количество элементов массива, значения которых больше заданного числа T и кратны 5;
· номер первого отрицательного элемента, делящегося на 5 с остатком 2.
WriteLn(' Количество элементов, значения которых > ',T,' и кратны 5 = ',K);
WriteLn(' Номер первого отрицательного элемента, делящегося на 5 с остатком 2 = ',NP);
END.
Примеры для самостоятельного решения:
1. Дан массив целых чисел, состоящий из 10 элементов. Заполнить его с клавиатуры. Найти:
· сумму отрицательных элементов;
· количество тех элементов, значения которых положительны и не превосходят заданного числа А;
· номер последней пары соседних элементов с разными знаками.
2. Дан массив целых чисел, состоящий из 10 элементов. Заполнить его с клавиатуры. Найти:
· сумму элементов, имеющих нечетное значение;
· вывести индексы тех элементов, значения которых больше заданного числа А;
· количество положительных элементов, кратных К. ( К вводится с клавиатуры ).
3. Дан массив целых чисел, состоящий из N элементов. Определить среднее арифметическое положительных элементов.
4. Дан массив чисел. Найти, сколько в нем пар одинаковых соседних элементов.
5. Оценки, полученные учащимися за урок, занесены в массив. Подсчитать количество «5» и «2», полученных учащимися за урок и средний балл.
6. В очереди за билетами стоят мужчины и женщины. Какое количество мужчин стоит в начале очереди до первой женщины.
3. Алгоритмы нахождения наибольшего или наименьшего элемента массива и его индекса
1. Дан массив K, состоящий из 45 элементов. Элементы массива - произвольные целые числа. Определить минимальный элемент массива и его индекс.
USES Crt;
VAR
K:ARRAY[0..45] OF INTEGER;
I,IND: BYTE; MIN:INTEGER;
BEGIN
ClrScr; Randomize;
WriteLn(' Значения элементов массива');
FOR I:=1 TO 45 DO Begin
K[I]:=Random(35)+6; Write(K[I]:3);
End; WriteLn;
MIN:=K[1]; IND:=1;
{ нахождение минимального значения и его индекса }
FOR I:=2 TO 45 DO
IF K[I]<MIN THEN Begin MIN:=K[I]; IND:=I; End;
WriteLn(' Минимальное значение = ',MIN);
WriteLn(' Индекс минимального значения = ',IND);
END.
2. Дан массив B, состоящий из N элементов. Элементы массива - произвольные целые числа. Определить сумму элементов, расположенных до максимального элемента массива.
USES Crt;
CONST N=20;
VAR
B:ARRAY[0..N] OF INTEGER;
I,IND: BYTE; MAX,S:INTEGER;
BEGIN
ClrScr; Randomize;
WriteLn(' Значения элементов массива');
FOR I:=1 TO N DO Begin
B[I]:=Random(35); Write(B[I]:3);
End; WriteLn;
MAX:=B[1]; IND:=1;
{ нахождение максимального значения и его индекса }
FOR I:=2 TO N DO
IF B[I]>MAX THEN Begin MAX:=B[I]; IND:=I; End;
WriteLn(' Максимальное значение = ',MAX);
{ нахождение суммы элементов, расположенных до максимального элемента }
S:=0;
FOR I:=1 TO IND-1 DO
S:=S+B[I];
WriteLn(' Cумма элементов, расположенных до максимального элемента =',S);
END.
3. Известны данные о среднемесячной температуре за год. Определить, какая была самая высокая температура летом и самая низкая зимой.
USES Crt;
VAR
MAS: ARRAY[1..12] OF REAL;
I: INTEGER; MIN,MAX:REAL;
BEGIN
ClrScr;
{ Заполнение массива с клавиатуры }
FOR I:=1 TO 12 DO Begin
Write(' Введите среднюю температуру за ',I,' месяц '); ReadLn(MAS[I]);
End;
MAX:=MAS[6]; MIN:=MAS[12];
{ Определение самой высокой температуры летом }
FOR I:=7 TO 8 DO
IF MAX<MAS[I] THEN MAX:=MAS[I];
{ Определение самой низкой температуры зимой }
FOR I:=1 TO 2 DO
IF MIN>MAS[I] THEN MIN:=MAS[I];
WriteLn(' Самая высокая температура летом ',MAX);
WriteLn(' Самая низкая температура зимой ',MIN);
END.
Примеры для самостоятельного решения:
1. Дан массив чисел. Найти значение максимального элемента. Если таких элементов несколько, то определить, сколько их.
2. Дан массив чисел. Найти среднее арифметическое максимального и минимального элемента. Вывести значения и индексы этих элементов.
3. Дан массив чисел. Определить количество элементов, находящихся в интервале от 1 до 12 и расположенных до максимального элемента массива.