Обработка массивов
Begin
Одновимірні масиви
Введення масиву з клавіатури
for i:=1 to n do readln(a[i]); тут (і надалі) і - параметр, n - кількість елементів у масиві, а - одновимірний масив
Друк масиву на екран
for i:=1 to n do writeln(a[i]);
Двовимірні масиви (n x m)
Введення масиву з клавіатури
for i:=1 to n do {перебір n рядків}
for j:=1 to m do {перебір m стовпців}
readln(a[i,j]); {власне ввід кожного елементу}
Вивід масиву на екран
Щоб вивести двовимірний масив на екран у вигляді таблиці роблять наступне:
for:=1 to n do {перебір рядків}
for j:=1 to m do write(a[i,j],' '); {вивід кожного рядка}
writeln; {перехід на новий рядок}
end;
Алгоритми пошуку в таблицях елементів із деякою властивістюДля організації пошуку в таблиці елементів із заданими властивостями необхідно організувати циклічний перегляд всіх елементів, кожний з яких командою розгалуження порівняти із заданим еталоном або перевірити на деяку властивість. Якщо масив одновимірний, цикл для організації перегляду всіх елементів буде один, якщо ж масив двовимірний - циклів буде два.
Одномерные массивы
Алгоритмы поиска и присвоения значений элементам массива
Задача 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.Составить программу обработки массива K, состоящего из 20 элементов. Заполнить массив случайными числами в диапазоне от -5 до 25. Все элементы массива К, значения которых находятся в интервале от -2 до 20 возвести в квадрат. Измененный массив вывести на экран.
USES Crt;
VAR
K:ARRAY[0..20] OF INTEGER;
I:BYTE;
BEGIN
ClrScr; Randomize;
{ Заполнение массива случайными числами }
FOR I:=1 TO 20 DO Begin
K[I]:=Random(30)-5; Write(K[I]:3);
End; WriteLn;
FOR I:=1 TO 20 DO
IF (K[I]<20) AND (K[I]>-2) THEN K[I]:=K[I]*K[I];
WriteLn('Измененный массив');
FOR I:=1 TO 20 DO
Write(K[I]:4);
END.
Задача 3. Составить программу вычисления и печати значений функции 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.
Алгоритмы нахождения суммы, произведения и количества элементов массива. Работа с индексами элементов массива
Задача 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. Дан массив C, состоящий из N элементов. Элементы массива - произвольные целые числа. Вывести на экран элементы массива в обратном порядке.
USES Crt;
CONST N=20;
VAR
C:ARRAY[0..N] OF INTEGER;
I: BYTE;
BEGIN
ClrScr; Randomize;
WriteLn(' Значения элементов массива');
FOR I:=1 TO N DO Begin
C[I]:=Random(20); Write(C[I]:3);
End; WriteLn;
WriteLn(' Значения элементов массива в обратном порядке');
FOR I:=N DOWNTO 1 DO
Write(C[I]:3);
END.
Задача 4. Дан массив A, состоящий из N элементов. Элементы массива - произвольные целые числа. Распечатать элементы в две строки: в первой строке элементы с нечетными индексами, а во второй - элементы с четными индексами.
USES Crt;
CONST N=25;
VAR
A:ARRAY[0..N] OF INTEGER;
I: BYTE;
BEGIN
ClrScr; Randomize;
WriteLn(' Значения элементов массива');
FOR I:=1 TO N DO Begin
A[I]:=Random(20); Write(A[I]:3);
end; WriteLn;
I:=1;
WriteLn(' Элементы с нечетными индексами');
WHILE I<=N DO Begin
Write(A[I]:3); I:=I+2;
End; WriteLn;
I:=2;
WriteLn(' Элементы с четными индексами');
WHILE I<=N DO Begin
Write(A[I]:3); I:=I+2;
End;
END.
Алгоритмы нахождения наибольшего или наименьшего элемента массива и его индекса
Задача 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. Дан массив A, состоящий из N элементов. Элементы массива - произвольные целые числа. Заменить нулями все элементы массива, расположенные за минимальным элементом массива. Измененный массив вывести на экран.
USES Crt;
CONST N=15;
VAR
A:ARRAY[0..N] OF INTEGER;
I,IND: BYTE; MIN:INTEGER;
BEGIN
ClrScr; Randomize;
WriteLn(' Значения элементов массива');
FOR I:=1 TO N DO Begin
A[I]:=Random(400); Write(A[I]:4);
End; WriteLn;
MIN:=A[1]; IND:=1;
{ нахождение минимального значения и его индекса }
FOR I:=2 TO N DO
IF A[I]<MIN THEN Begin MIN:=A[I]; IND:=I; End;
WriteLn(' Минимальное значение = ',MIN);
{ замена нулями элементов, расположенных за минимальным значением }
FOR I:=IND+1 TO N DO
A[I]:=0;
WriteLn(' Измененный массив');
FOR I:=1 TO N DO
Write(A[I]:4);
END.
Алгоритмы удаления, вставки и перестановки элементов
Задача 1. Дан массив A, состоящий из 12 элементов. Элементы массива - произвольные целые числа. Поменять местами значения 1 и 2 элементов, 3 и 4 и т.д. Измененный массив вывести на экран.
USES Crt;
VAR
A:ARRAY[0..12] OF INTEGER;
I: BYTE; PP:INTEGER;
BEGIN
ClrScr; Randomize;
WriteLn(' Значения элементов массива');
FOR I:=1 TO 12 DO Begin
A[I]:=Random(20); Write(A[I]:3);
End; WriteLn;
I:=1;
WHILE I<=12 DO Begin
{перестановка элементов местами, используя промежуточную переменную PP }
PP:=A[I]; A[I]:=A[I+1]; A[I+1]:=PP;
I:=I+2;
End;
WriteLn(' Значения элементов измененного массива');
FOR I:=1 TO 12 DO
Write(A[I]:3);
END.
Алгоритмы сортировки числового массива
Задача 1. Отсортировать числовой массив. Первый способ.
USES Crt;
CONST N=30;
VAR
A:ARRAY[0..N] OF INTEGER;
I,J: BYTE; PP:INTEGER;
BEGIN
ClrScr; Randomize;
WriteLn(' Значения элементов массива ');
FOR I:=1 TO N DO Begin
A[I]:=Random(50); Write(A[I]:4);
End; WriteLn;
{ Сортировка массива }
FOR I:=2 TO N DO
FOR J:=N DOWNTO I DO
IF A[J-1]>A[J] THEN Begin PP:=A[J]; A[J]:=A[J-1]; A[J-1]:=PP; End;
WriteLn(' Отсортированный массив ');
FOR I:=1 TO N DO
Write(A[I]:4);
END.
Задача 2. Отсортировать числовой массив. Второй способ.
USES Crt;
CONST N=30;
VAR
A:ARRAY[0..N] OF INTEGER;
I,J: BYTE; PP:INTEGER;
BEGIN
ClrScr; Randomize;
WriteLn(' Значения элементов массива ');
FOR I:=1 TO N DO Begin
A[I]:=Random(50); Write(A[I]:4);
End; WriteLn;
{ Сортировка массива }
FOR I:=1 TO N-1 DO
FOR J:=I+1 TO N DO
IF A[I]>A[J] THEN Begin PP:=A[I]; A[I]:=A[J]; A[J]:=PP; End;
WriteLn(' Отсортированный массив ');
FOR I:=1 TO N DO
Write(A[I]:4);
END.
.....................................................................................................................................