Обработка массивов

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.

.....................................................................................................................................