Типовые действия с массивами 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Типовые действия с массивами



 

Массивы должны быть описаны в программе в разделе описания типов или переменных. Например:

CONST

N=10;

TYPE

Vector = ARRAY[1..20] OF REAL;

Matr = ARRAY[1..N,1..5] OF BYTE;

VAR

A, B: Vector;

C: ARRAY [1..N] OF INTEGER;

D: Matr;

Здесь описаны три одномерных и один двумерный массивы. Одномерные массивы А и В типа Vector состоят из двадцати элементов, а массив С – из десяти элементов. Двумерный массив D представляет собой матрицу размерами 10 5, имеющую десять строк и пять столбцов.

Далее приводятся фрагменты программ для реализация ти­повых действий с массивами. Предполагается, что описания мас­сивов в программах имеются, а индексы начинаются с 1.

 

1. Ввод массивов с клавиатуры:

а) одномерного массива А б) двумерногомассива С

For I:=1 То N DоFor I:=1 То N Dо {строки}

Read(A[i]);For J:=1 To M Dо

{столбцы}

Read(C[i,j]);

 

При каждом выполнении оператора Read вводится один эле­мент массива (после набора каждого элемента нужнонажиматьклавишуEnter (Ввод)). Ввод двумерногомассива осуществляет­ся в приведенном примере по строкам.

 

2. Вывод на экран массивов:

а) одномерного в строку б) одномерного в столбец

For I:=l To N Do For I:=l To N Do

Write(A[i]); Writeln(A[i]);

в) двумерного построкам

For I:=l To N Do

Begin

For J:=l To M Do

Write (C[i,j]);

Writeln;

End.

 

3. Суммирование элементов массивов:

а) одномерного б) двумерного

S:=0; S:=0;

For I:=l To N Do For I:=l To N Do

S:=S+A[i]; For J:=l To M Do

S:=S+C[i,j];

4. Суммирование диагональных элементов матрицы (вычи­сление следа матрицы):

S:=0;

For I:=l To N Do

S:=S+C[i,i];

 

5. Суммирование двух массивов по элементам (оба массива -слагаемых должны полностью совпадать как по размерности, так и по типам их элементов):

а) одномерного б) двумерного

For i:=1 To N Do For i:=l To N Do

C[i]:=A[i]+B[i]; For j:=l To M Do

C[i,j]:=A[i,j]+B[i,j];

 

6. Суммирование элементов заданной k-й строки матри­цы:

S:=0;

For j:=l To M Do

S:=S+C[k,j];

 

7. Суммирование элементов строк матриц:.

Необходимо вычислить сумму элементов каждой строки матри­цы С размерами N М. Результат получим в виде вектора D:

For i:=lТо К Do

Begin

S:=0;

For j:=l To M Do

S:=S+C[i,j];

D[i]:=S;

End;

8. Транспонирование матрицы:

Необходимо заменить строки матрицы ее столбцами, а столбцы — строками, т.е. вычислить dij = cji, i =1,... N, j = 1,... M:

For i:=l To N Do

For j:=l To M Do

D[i,j]:=C[j,i];

Транспонированную матрицу можно получить в исходном массиве С. Для квадратной матрицы размерами N N для это­го необходимо поменять местами каждый элемент верхнего треугольника с соответствующим элементом нижнего (диагональ­ные элементы переставлять не нужно). При этом для каждой строки нужно выполнять перестановку элементов, располо­женных правее главной диагонали, с элементами соответству­ющего столбца, расположенного ниже главной диагонали, т.е. взаимно перемещать элементы Сi,j и Сj,i,i =1,..., N -1; j = i +1,..., N.

For i:=l To N-1 Do

For j:=i+l To N Do

Begin

X:= C[i,j];

C[i,j]:= C[j,i];

C[j,i]:= X;

End;

Для прямоугольной матрицы алгоритм усложняется.

 

9. Умножение матрицы на вектор:

Для вычисления произведения С матрицы A размерами N М на вектор В размером М необходимо вычислить С i= i =1,... N:

For i:=lTo N Do

Begin

S:=0;

For j:=l To M Do

S:=S+A[i,j]*B[j];

C[i]:=S;

End;

 

10. Умножение матрицы на матрицу:

Для умножения матрицы А размерами N L на матрицу B раз­мерами L М необходимо вычислить Сij = , i = 1... N, j = l,... М;

For i:=1 То М Do

For j:=l To N Do

Begin

S:=0;

For k:=l To L

S:=S+A[i,k]*B[k,j];

C[i,j]:=S;

End;

11. Удаление элемента из массива:

Требуется удалить k— й элемент из массива А размером N. Удалить элемент, расположенный на k— м месте в массиве, мож­но, сдвинув весь "хвост" массива, начиная с (k + 1)—го элемен­та, на одну позицию влево, т.е. выполняя операцию ai:= ai +1, i = k, k +1,... ,N -1:

N:=N-l;

For i:=k To N Do

A[i]:=A[i+l];

 

12. Включение элемента в заданную позицию массива:

Перед включением элемента в k— ю позицию необходимо раз­двинуть массив, т.е. передвинуть "хвост" массива вправо на одну позицию, начиная с (k + 1)-го элемента, выполняя операцию ai +1:= ai, i = N, N -1,..., k. Перемещения элементов массива нужно начинать с конца. В противном случае весь "хвост" будет заполнен элементом аk. Далее k-му элементу присваивается за­данное значение В. Размер массива увеличивается на 1:

For i:=N Downto k Do

A[i+l]:=A[i];

A[k]:=B;

N:=N+1;

 

13. Включение элемента в массив, упорядоченный по возрастанию, с сохранением упорядоченности:

Сначала следует найти элемент, перед которым необходимо включать заданное число В. Для этого нужно проверять условие В < аi, для всех i =1,2,.... При выполнении условия текущее значение индекса i определяет позицию добавляемого элемента. Далее включение элемента осуществляется по алгоритму, опи­санному в п. 12.

k:=1;

While B<a[k] do

Begin

k:=k+1;

End;

For i:=N Dowto k-1 Do

A[i+l]:=A[i];

A[k-1]:=B;

14. Удаление строки из матрицы:

Требуется удалить строку с заданным номером К. Решение этой зада­чи аналогично решению задачи удаления элементаиз одномерного массива. Все строки, начиная с (К + 1)-й, нужно переместить вверх. Число строк уменьшается на 1.

N:=N-1;

For i:=K To N Do

For j:=l To M Do

B[i,j]:=B[i+l,j];

Удаление столбца осуществляется аналогично.

 

15. Включение cтроки в матрицу:

Включаемая строка задана как вектор С. Включение строки в матрицу аналогично включению элемента в одномерный массив (см. п.12).

For i:=N Downto К Do

For j:=1 To M Do

B[i+l,j]:=B[i,j];

For j:=1 To M Do

B[K,j]:=C[j];

N:=N+1;

 

16. Поиск минимального (максимального) элемента в мас­сиве:

Требуется найти минимальный элемент в массиве и егозначениепоместить в переменную Р, а индекс — в переменную K.

Р:=А[1];

К:=1;

For i:=2 To N Do

If P>A[i] Then

Begin

P:=A[i];

K:=i

End;

 

Если в массиве несколько элементов имеют минимальное зна­чение, то

в К будет запоминаться индекс первогоиз них. Если проверять условие Р >= А (i), то будет запоминаться индекс по­следнего элемента. Для поиска максимального элемента нужно проверять условие P < A (i). Для двумерногомассива алгоритм аналогичный, но нужно просматривать все элементы

каждой строки, что требует организации двойного цикла, и запоминать два индекса: номер строки К и номер столбца L.

 

P:=C[l,l];

K:=l;

L:=l;

For i:=l To N Do

For j:=l To M Do

If P>C[i,j] Then

Begin

P:=C[i,j];

K:=i;

L:=j

End;

 

17. Преобразование матрицы:

Преобразование матрицы, как правило, производится относительно ка­кой-либо оси, которой могут быть главная диагональ, побочная диагональ, любая строка или столбец.

Рассмотрим эти понятия на примере матрицы А размерами N N, обозна­чив номер строки переменной I, а номер столбца - переменной J.

1. Элементы главной диагонали имеют одинаковые индексы, т.е. А (1,1) (например А (1,1), А (2, 2),... A (N, N)).

2. У всех элементов, расположенных выше (правее) главной диагонали, J > I.

3. У всех элементов, расположенных ниже главной диагонали, J < I.

4. Элементами, симметричными относительно главной диагонали, яв­ляются пары A (I, J) и A (J, I).

5. У элементов, образующих побочную диагональ, есть зависимость индексов: I + J = N +1, или J = N +1- I, т.е. A (I, N +1- I).

6. У всех элементов, расположенных выше побочной диагонали, I < N +1- J.

7. У всех элементов, расположенных ниже побочной диагонали, I > N +1- J.

8. Элементами, симметричными относительно побочной диагонали, являются пары A (I, J) и A (N +1- J, N +1- I).

9. Элементами, симметричными относительно средней горизонтальной оси, являются пары A (I, J) и A (I, N +1- J).

Примеры решения задач по обработке массивов

 

Пример 2.1. Сформировать массив Y из положительных эле­ментов заданного массива Х размером 10.

Решение.

Возможный вариант программы:

PROGRAM PRIM21;

VAR

X, Y: ARRAY [1..10] OF REAL;

I, K: INTEGER;

{X – исходный массив}

{Y – сформированный массив}

{K – количество элементов массива Y}

BEGIN

{Ввод массива Х}

For I:=1 To 10 Do

Read (X[I]);

{Формирование массива Y}

K:=0;

For I:=1 To 10 Do

If X[I] > 0 Then

BEGIN

K:=K+1;

Y[K]:=X[i];

END;

{Вывод сформированного массива Y на экран}

For I:=1 To K Do

Write(Y[i]:5:2);

End.

Пример 2.2. В одномерный массив размером N ввести произвольные числа. Поменять местами элементы массива, стоящие равноудаленно от элемента с заданным индексом К. Вывести на экран в строку исходный и новый массивы.

Решение.

Введем произвольные числа в массив A (N).

Индекс элемента, относительно которого производится обмен, обозна­чим переменной К. При вводе К следует выполнить проверку, так как К не должно быть меньше единицы или больше N.

Алгоритм. Алгоритм заключается в том, что менять местами элементы массива можно до тех пор, пока не закончится массив слева или справа от К, т.е. пока индекс элемента слева больше или равен единице, а индекс элемента справа от К меньше или равен N.

Для формирования индекса элемента слева от К назначаем переменную L, а для формирования индекса элемента справа от К - переменную PR.

Вариант программы

PROGRAM PRIM22;

VAR

A: ARRAY [1.. 100] OF REAL;

N, I, L, K,PR: INTEGER;

X: REAL;

BEGIN

Write('Введите размер массива (не более 100)’);

Readln(N);

WHILE (N<=2) OR (N>=100) DO

Begin

Writeln(‘Ошибка ввода. Повторить’);

Writeln(‘Введите размер массива’);

Readln(N);

End;

FOR I:=1 ТО N Do

Begin

Write(‘Введите ‘, I:3, ‘ число ’);

Readln(A[I]);

End;

Writeln(‘Исходный массив’);

FOR I:=1 TO N Do

Begin

Write(A[I]);

If I Mod 6 = 0 Then Writeln;

End;

Writeln;

Write(‘Введите индекс‘);

Readln(К);

L:=K-1;

PR:=K+1;

WHILE (L>=1) AND (PR<=N) Do

Begin

X:=A[L];

A[L]:=A[PR];

A[PR]:=X;

L:=L-1;

PR:=PR+1;

END;

Writeln;

Writeln(‘Новый массив’);

FOR I:=1 ТО N Do

Begin

Write(A[I]);

If I Mod 6 = 0 Then Writeln;

End;

END.

Пример 2.3. В массивы вводятся элементы двух последовательностей Ai и Bj целых чисел, которые содержат 6 и 8 элементов соответственно.

Ai — неубывающая и Bj — невозрастающая последовательности. Не­обходимо вывести на экран общий список значений элементов этих последовательностей по их возрастанию без создания третьего массива.

Решение.

Для решения этой задачи необходимо каждый раз перед вы­водом на экран очередного числа сравнивать два числа из разных массивов, пока они не закончились, и выводить на экран меньшее из них.

В соответствии с условиями задачи, массив А начинаем просматривать с первой ячейки, а массив В — с последней, т.е.

если условие А[1]<В[8] выполняется - на экран выводится А[1];

если условие А[2]<В[8] не выполняется - на экран выводится В[8];

если условие А[2]<В[7] не выполняется - на экран выводится В[7];

если условие А[2]<В[6] не выполняется - на экран выводится В[6];

если условие А[3]<В[1] не выполняется - на экран выводится В[1].

Дальнейшее сравнение чисел из двух массивов невозможно, так как один из них (массив В) закончился. Оставшиеся в массиве А числа следует вывести на экран.

Отметим, что какой из двух массивов закончится раньше, определяется числами, находящимися в нем, а не длиной массива, поэтому при составле­нии программы необходимо предусмотреть вывод на экран оставшихся чи­сел и из массива А, и из массива В.

Анализируя приведенные выше строки сравнения чисел из разных мас­сивов, приходим к выводу:

- индексы элементов массива меняются, поэтому введем переменные для формирования индексов (К 1 и К 2);

- начальное значение индекса элемента в массиве АК 1 равно 1;начальное значение индекса элемента в массиве ВК 2 равно 8;

- сравнивать числа из разных массивов можно до тех пор, пока один из массивов не закончится, т.е. пока К 1<=6, а К 2>1.

Программа

PROGRAM PRIM23;

VAR

A: ARRAY [1..6] OF INTEGER;

B: ARRAY [1..8] OF INTEGER;

I, K1, K2: INTEGER;

BEGIN

Writeln(‘Введите массив А’);

FOR I:=1 ТО 6 Do

Begin

Write(‘Введите ‘, I:1, ‘ число массива А’);

Readln(A[I]);

End;

Writeln(‘Введите массив B’);

FOR I:=1 ТО 8 Do

Begin

Write(‘Введите ‘, I:1, ‘ число массива B’);

Readln(B[I]);

End;

Writeln(‘Общий список чисел по возрастанию’);

К1:=1;

К2:=8;

WHILE (К1<=6) AND (K2>=1) Do

IF A[K1]<B[K2] THEN

Begin

Write(A[K1]:4);

K1:=K1+1

End

ELSE

Begin

Write(B[K2]:4);

К2:=К2-1;

END;

{Из двух циклов For в зависимости от чисел, введенных в массивы, будет работать какой-либо один из них}

FOR I:=K1 TO 6 Do

Write(A[I]:4);

FOR I:=K2 DownTo 1 Do

Write(В[I]:4);

END.

Пример 2.4. В одномерный массив ввести N произвольных чисел. Задан индекс К одного из элементов массива. Требуется записать в обратном порядке все элементы, стоящие слева и справа от заданного К. Вывести на экран в строку новый массив.

Решение.

Предположим, что исходный массив (A (N)) заполнен произвольно, а К = 5.

Алгоритм.

Анализируя расположение чисел в новом массиве, прихо­дим к выводу, что для решения данной задачи следует выполнить обмен эле­ментов отдельно слева и справа от элемента с индексом К.

Слева должны меняться местами элементы: А [1] с А [4]; А [2] с А [3]. Справа должны меняться элементы: А [6] с А [14]; А [7] с А [13]; А [8] с А [12]; А [9] с А [11].

При обмене индексы элементов меняются, поэтому для их формирова­ния выбираем переменные L и PR.

Для реализации предложенного алгоритма необходимо организовать два цикла (обмен слева от К и обмен справа от К), пока индекс левой переменной меньше индекса правой переменной (L < PR).

Программа

PROGRAM PRIM24;

LABEL 10;

VAR

A: ARRAY [1..100] OF REAL;

I, N, K, L, PR: INTEGER;

X: REAL;

BEGIN

Write('Введите размер массива (не более 100)’);

10:Readln(N);

IF (N<=2) OR (N>=100) THEN

Begin

Writeln(‘Ошибка ввода. Повторить’);

GOTO 10;

End;

FOR I:=1 ТО N Do

Begin

Write(‘Введите ‘, I:3, ‘ число ’);

Readln(A[I]);

End;

Writeln(‘Исходный массив’);

FOR I:=1 TO N Do

Begin

Write(A[I]);

If I Mod 6 = 0 Then Writeln;

End;

Write(‘Введите индекс К ’);

Readln(К);

{Цикл обмена слева от К }

L:=1;

PR:=K-1;

WHILE L<PR Do

Begin

X:=A[L];

A[L]:=A[PR];

A[PR]:=X;

L:=L+1;

PR:=PR-1;

End;

{Цикл обмена справа от К }

L:=K+1;

PR:=N;

WHILE L<PR Do

Begin

X:=A[L];

A[L]:=A[PR];

A[PR]:=X;

L:=L+1;

PR:=PR-1;

End;

Writeln(‘Новый массив');

FOR I:=1 ТО N Do

Begin

Write(A[I]);

If I Mod 6 = 0 Then Writeln;

End;

END.

Пример 2.5. Ввести два одномерных массива (первый из N целых чисел, второй — из 5 различных целых чисел). Удалить из первого массива числа, содержащи­еся во втором. При удалении элементов первого массива он должен быть сжат перемещением оставшихся элементов в массиве.

Если какое-либо число из второго массива не встретилось в первом ни разу, вывести соответствующее сообщение. Вывести измененный массив.

Решение.

Для решения задачи следует по очереди каждое число из массива В сравнивать на совпадение с каждым числом массива А.

При совпадении осуществляется перемещение справа налево всех чисел, стоящих правее найденного. Например, если найдено число в ячейке А [2], то осуществляется последовательное перемещение:

А [2] А [3], А [3] А [4], А [4] А [5]... А [ Х -1] А [ Х ],

где Х — переменная, определяющая меняющуюся длину сжимаемого» массива.

Каждый раз после удаления очередного числа массив А укорачивается и для просмотра, и для последующих перемещений элементов, хотя заданная длина массива А не меняется.

Программа

PROGRAM PRIM25;

LABEL 10, 20;

VAR

A: ARRAY [1.. 100] OF INTEGER;

B: ARRAY [1.. 5] OF INTEGER;

N, I, J, X, F, K: INTEGER;

BEGIN

{ Ввод размера и элементов массива А }

Write(‘Введите количество чисел массива А’);

Readln(N);

FOR I:=1 ТО N Do

Begin

Write(‘Введите ‘, I:3, ‘ число массива А’);

Readln(A[I]);

End;

{ Ввод элементов массива B }

FOR I:=1 ТО 5 Do

Begin

Write(‘Введите ‘, I:3, ‘ число массива B’);

Readln(B[I]);

End;

{первоначальная длина массива А заносится в перемен­ную X}

X:=N;

{внешний цикл (по i) для выбора элементов массива В}

FOR I:=1 ТО 5 Do

Begin

{каждое новое число массива В начинаем искать с первой ячейки массива А (К=1), переменная F показывает, встретилось ли очередное число массива В хотя бы раз в массиве А}

K:=1;

F:=0;

{цикл поиска очередного числа массива В в массиве А, перемещение чисел массива А справа налево, изменение длины массива А (Х=Х-1) и изменение значения переменной F, которое фиксирует, что оче­редное число массива В встретилось в массиве А}

10: WHILE K<=X Do

Begin

IF B[I]<>A[K] THEN

Begin

K:=K+1;

GOTO 10

End;

FOR J:=K TO X-1 Do

A[J]:=A[J+1];

Х:=Х-1;

F:=1

End;

IF F=0 THEN

Writeln(‘Число’, В [J],’не встретилось в массиве А');

End;

IF X=0 THEN

Begin

Writeln(‘Массив А состоял только из чисел массива В, поэтому он полностью сжался’);

GOTO 20;

End;

{вывод на экран оставшихся чисел массива А в случае, если какие-то числа остались}

Writeln(‘Измененный массив А’);

FOR I:=1 ТО X Do

Write(A[I]:4);

20: END.

Пример 2.6. В одномерный массив ввести N произвольных чисел (N - за­данное число). Переместить его элементы таким образом, чтобы в конце массива были все отрицательные числа, сохранив при этом начальный порядок следования отдельно для отрицательных и от­дельно для нулевых и положительных элементов. Дополнительный массив не использовать.

Решение.

Возможный вариант программы:

PROGRAM PRIM26;

VAR

A: ARRAY [1..50] OF REAL;

N, I, P: INTEGER;

X: REAL;

BEGIN

Write(‘N= ‘);

Readln(N);

FOR I:=1 ТО N Do

Begin

Write(‘Номер ‘, I);

Readln(A[I]);

End;

Writeln(‘Исходный массив’);

FOR I:=1 ТО N Do

Write(A[I]:6:2);

P:=1;

WHILE P<>0 Do

Begin

P:=0;

FOR I:=1 TO N-1 Do

IF (A[I]<0) AND (A[I+1]>=0) THEN

Begin

X:=A[I];

A[I]:=A[I+1];

A[I+1]:=X;

P:=1

End;

End;

Writeln(‘Модифицированный массив’);

FOR I:=1 ТО N Do

Write(A[I]:6:2);

END.

Пример 2.7. Сформировать массив из индексов минимальных элементов строк матрицы А размерами 5 4.

Решение.

Возможный вариант программы:

PROGRAM PRIM27;

VAR

A: ARRAY [1..5,1..4] OF REAL;

X: ARRAY [1..5] OF INTEGER;

I, J, K: INTEGER;

MIN: REAL;

BEGIN

For I:=1 To 5 Do

For J:=1 To 4 Do

Read(A[i,j]);

For I:=l To 5 Do

Begin

MIN:=A[i,1];

K:=l;

For J:=2 To 4 Do

If A[i,j]<MIN Then

Begin

MIN:=A[i,j];

K:=J;

End;

X[i]:=K;

End;

For I:=l To 5 Do

Write(X[i]:4);

End.

Пример 2.8. Задана матрица A размерами 5 5. Найти максимальный по модулю элемент матрицы. Строку, содержащую этот элемент, поменять местами с первой.

Решение.

Возможный вариант программы:

Program PRIM28;

VAR

A: ARRAY [1..5,1..5] of REAL;

I, J, K, L: INTEGER;

MAX, Q: REAL;

BEGIN

{Ввод данных }

For I:=1 То 5 Do

For J:=l То 5 Do

Read (A[I,J]);

{Отысканиемаксимального по модулю элемента в матрице }

MAX:=Abs(A[l,l]);

K:=l;

L:=l;

For I:=l To 5 Do

For J:=1 To 5 Do

Begin

Q:=Abs(A[I,J]);

If P < Q Then

Begin

MAX:=Q;

K:=I;

L:=J;

End;

End;

WRITELN(‘Максимальный по модулюэлемент =’,A[K,L]:7:2);

WRITELN(‘находится в строке’,K:2,’ в столбце’,L:2);

{Перестановка строк}

For I:=1 To 5 Do

Begin

Q:=A[K,I];

A[K,I]:=A[l,I];

A[l,I]:=Q;

End;

{Печать преобразованной матрицы}

WRITELN(‘Матрица-результат’);

For I:=l To5 Do

Begin

For J:=1 To 5 Do

WRITE(A[I,J]:7:2);

WRITELN;

End;

End.

Пример 2.9. Подсчитать количество отрицательных элемен­тов в каждой строке матрицы Х размерами 5 4. Результат по­лучить в виде вектора.

Решение.

Программа

PROGRAM PRIM29;

VAR

X: ARRAY [1..5,1..4] OF REAL;

P: ARRAY [1..5] OF INTEGER;

I, J, N: INTEGER;

{Х – заданная матрица}

{P – одномерный массив, значением элементов которого является количество отрицательных элементов в соответствующей строке матрицы Х}

{N – количество отрицательных элементов в строке матрицы Х}

BEGIN

{Ввод матрицы Х}

For I:=1 To 5 Do

For J:=1 To 4 Do

Read (X[I,J]);

For I:=1 To 5 Do

Begin

{Блок определения количества отрицательных элементов в I-й строке матрицы}

N:=0;

For J:=l To 4 Do

If X[I,J] < 0 Then N:=N+1;

P[I]:=N;

End;

{Вывод}

For I:=l To 5 Do

WRITELN(‘В ’,I:2,’ строке ’, P[I]:2,’ отрицательных элементов’);

End.

Пример 2.10. В каждой строке матрицы удалить минимальный элемент строки.

Решение.

Программа

PROGRAM PRIM210;

VAR

A: ARRAY [1..5,1..4] OF REAL;

I, J, K: INTEGER;

MIN: REAL;

BEGIN

{Ввод матрицы А}

For I:=l To 5 Do

For J:=l To 4 Do

Read (A[I,J]);

For I:=l To 5 Do

Begin

{Определение минимального элемента в I-й строке и его индекса К}

MIN:=A[I,1];

K:=l;

For j=2 To 4 Do

If A[I,J] < MIN Then

Begin

MIN:=A[I,J];

K:= J

End;

{Удаление минимального элемента из I-й строки}

If K < 4 Then

For J:=k+l To 4 Do

A[I,J-l]:=A[I,J];

End;

{Вывод на экран преобразованной матрицы}

For I:=1 To 5 Do

Begin

Fог J:=1 To 3 Do

WRITE(A[I,J]:5:2); WRITELN;

End;

End.

 

 

Контрольные вопросы

 

1. Что такое массив?

2. Как осуществляется доступ к элементам массива?

3. Как осуществляется описание массивов на языке Турбо Паскаль?

4. Как выполняется ввод вектора, матрицы?

5. Как организовать вывод массива?

6. Как осуществить суммирование векторов и матриц?

7. Как выглядит алгоритм транспонирования матрицы?

8. Как выполнить умножение: а) матрицы на матрицу, б) матрицы на вектор?

9. Как выполнить удаление элементов массива?

10. Как добавить элементы в массив?

11. Как осуществить замены (перемещения) элементов внутри мас­сива?

 

Задачи I уровня

 

Эти задачи предназначены для приобре­тения навыков работы с одномерными и двумерными массивами с использованием типовых алгоритмов.

1. Найти среднее значение элементов заданного массива раз­мером 8. Преобразовать исходный массив, вычитая из каждого элемента среднее значение.

2. Для заданногомассива размером 10 определить индекс эле­мента, значение которогонаиболее близко к среднемузначениюэлементовмассива.

3. Решить уравнение ах = b для семи пар значений а и b, заданных в двух массивах. Результат поместить в массив X.

 

4. Найти минимальный среди положительных элементов за­данного массива размером 10.

5. Вычислить сумму элементов одномерного массива, расположенных до первого отрицательного элемента.

6. Все положительные элементы массива увеличить в 2 раза, оставив остальные без изменения.

7. Поменять местами максимальный и первый отрицательный элементы массива размером 10.

8. Поменять местами минимальный и максимальный элемен­ты массива размером 10.

9. Вычислить среднее значение элементов массива, предварительно отбросив минимальный и максимальный элементы.

10. Задана матрица размерами п т. Просуммировать поло­жительные элементы каждой строки. Результат получить в виде вектора размером n.

11. Для матрицы размерами n m найти максимальный эле­мент каждой строки. Результат получить в виде вектора разме­ром n.

12. В квадратной матрице размерами 5 5 переставить местами стро­ку с максимальным элементом на главной диагонали и строку с заданным номером.

13. В квадратной матрице размерами 5 5 исключить строку и столбец, на пересечении которых расположен максимальный элемент главной диагонали.

14. Задана матрица размерами n n и число К (1 К n). Найти максимальный по модулю элемент в К -м столбце; строку, содержащую этот элемент, переставить с К -й строкой.

15. Задана матрица размерами n m. Определить номера строк, содержащих минимальный и максимальный элементы и поме­нятьих местами.

16. Задана матрица размерами n n. Сменить знаки у элементов, лежащих ниже главной диагонали.

17. Ввести массив чисел размерами М N (M и N - заданные числа). "Особым" элементом массива назовем элемент, который является наибольшим в столбце и одновременно наибольшим в строке. Определить количество "особых" элементов в введенном мас­сиве, считая, что в каждой строке (и в каждом столбце) присутству­ет только один наибольший элемент.

18. N ребят образуют круг. Начиная отсчет по кругу от первого, в ходе считалки удаляется каждый К -й. После очередного удаления круг смыкается, а считалка начинается вновь с участника, следую­щего в круге за удаленным. Напечатать номера ребят в порядке их удаления из круга и номер единственного оставшегося.

19. Ввести массив чисел размерами М N (M и N - заданные числа).Сменить знаки у элементов, лежащих выше главной диагонали и имеющих четную сумму индексов.

20. Ввести массив чисел размерами М N (M и N - заданные числа). В элементах столбцов, не содержащих отрицательных элементов, сменять знаки.

 

Задачи II уровня

1. Дана целочисленная квадратная матрица А размерами N N, где N - заданное натуральное число. Столбец с индексом J (J =1,2,..,N) назовем отмеченным, если все элементы в этом столбце, расположенные на главной диагонали и ниже нее являются простыми числами и оканчиваются на цифру 7. Найти количество отмеченных столбцов в матрице А.

2. Ввести по 18 чисел в два одномерных массива. Переписать элементы массивов построчно в квадратную матрицу, расположив их по убыванию значений. Дополнительных массивов не использо­вать. Напечатать матрицу.

3. Ввести числовой двумерный массив размерами N N (N - заданное число от 6 до 20). Переставить элементы массива симмет­рично относительно побочной диагонали. Полученный массив вы­вести на экран. Побочная диагональ проходит через правый верхний и левый нижний углы таблицы.

4. Ввести числовую прямоугольную матрицу размерами M N (М и N заданы). Определить элементы, которые, являясь максималь­ными в столбцах, больше всех своих соседей слева в строке и мень­ше всех своих соседей справа в строке, указав значения найденных элементов и их индексы, или же сообщить, что таких элементов нет. Крайние столбцы не рассматривать.

5. В одномерный массив ввести N произвольных чисел (N - за­данное число). Переместить его элементы таким образом, чтобы в конце массива были все отрицательные числа, сохранив при этом начальный порядок следования отдельно для отрицательных и от­дельно для нулевых и положительных элементов. Дополнительный массив не использовать.

6. Ввести в массив 10 произвольных чисел. Выполнить пере­мещение чисел в массиве таким образом, чтобы в начале массива оказались все положительные числа, затем - все отрицательные, а в конце массива - нули, сохранив при этом взаимное расположение в массиве ненулевых чисел каждой из двух групп. Дополнительных массивов не использовать.

7. Двигаясь по спирали от центра по периметру введенной чи­словой квадратной матрицы, состоящей из N строк и столбцов (N - заданное число), обойти все элементы матрицы и распечатать их в порядке обхода.

8. На основе введенной числовой квадратной таблицы, со­стоящей из N строк и столбцов (N - заданное число), сформировать и напечатать массив, i -й элемент которого равен 1, если i -я строка матрицы образует строго возрастающую последовательность. В про­тивном случае i -й элемент должен быть равен 0.

9. В введенной числовой таблице, имеющей N строк и М столбцов (М и N - заданные числа), переставить строки по возрастанию суммы положительных элементов в них.

10. В введенной числовой квадратной таблице, состоящей из N строк и столбцов (N -заданное число), определить такие К и L, для которых К -я строка совпадает с L -м столбцом (попарно совпадают все элементы строки и столбца), а также общее количество таких совпадений.

11. Переставить в конец одномерного массива, состоящего из N элементов, элементы, кратные заданному числу, и расположить их в порядке возрастания.

12. Нулевые элементы переставить в начало одномерного массива, а остальные расположить в порядке возрастания.

13. В введенной числовой матрице, состоящей из M строк и N столбцов, элементы строки, содержащей максимальное количество положительных элементов, расположить в порядке возрастания.

14. В введенной числовой матрице, состоящей из M строк и N столбцов, элементы всех строк расположить в порядке убывания.

15. Ввести целое число N. Сформировать и вывести на экран целочислен­ную квадратную матрицу (двухмерный массив) размерами N N.

1 2 3... N -2 N -1 N

2 3 4... N -1 N 0

3 4 5... N 0 0

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

N -1 N 0... 0 0 0

N 0 0... 0 0 0

16.Ввести целое число N. Сформировать и вы­вести на экран целочисленную квадратную матрицу (двухмерный массив) размерами N N.

N 0 0... 0 0

N N -1 0... 0 0

N N -1 N -2... 0 0

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

N N -1 N -2...2 0

N N -1 N -2... 2 1

17. В введенной числовой матрице, состоящей из M строк и N столбцов, элементы столбцов, содержащих хотя бы один отрицательный элемент, расположить в порядке убывания.

18. В введенной числовой матрице, состоящей из M строк и N столбцов, переставить строки в порядке убывания количества содержащихся в них положительных элементов.

19. В введенной числовой матрице, состоящей из M строк и N столбцов, переставить строки в порядке возрастания элементов последнего столбца.

20. В введенной числовой матрице, состоящей из M строк и N столбцов, строки матрицы, не содержащие нулевых элементов, расположить в порядке убывания произведений элементов строк.

21. В введенной числовой матрице, состоящей из M строк и N столбцов, элементы столбца, содержащего максимальное количество нулевых элементов, расположить в порядке убывания.

22. В введенной целочисленной матрице, состоящей из M строк и N

столбцов, удалить строку и столбец, содержащие минимальный из наиболее часто встречающихся элементов.

23. Замените каждый элемент матрицы целых чисел размерами M N на сумму элементов его “креста”, т.е. тех элементов, которые находятся в одном с ним столбце и в одной строке.

24. Вычислить сумму элементов одномерного массива размером N, являющихся простыми числами. Простыми числами называются числа, которые не делятся нацело ни на какое число кроме 1 и самого себя, при этом 1 простым числом не является.

 

Строки

 

С помощью компьютера часто приходится обрабатывать не только числа, но и строки символов, например имена, фамилии, названия и т.д. Поэтому в Турбо Паскале имеется специальный тип String, облегчающий программирование операций над строками.

Значение стандартного типа String – последовательность символов длиной от 1 до 255.

Данные типа String, как и числовые данные, подразделяются на константы и переменные.

Строковые константы – это последовательность символов, заключенная в апострофы. Мы уже использовали строковые константы при вводе и выводе информации, например ‘Введите размер массива’, ‘Сумма элементов матрицы А =’.

Строковые константы могут быть описаны в разделе описания констант:

Const С = ’Результаты вычислений’;

St = ’Строка’;

January: String[10] = ‘Январь’; {Типизированная константа}

Описание строковых переменных имеет вид

Var имя переменной: String[N];

Здесь N – целая константа или имя целой константы (1 N 255), указывающая максимальную длину строки (количество символов).

Разрешается не указывать N, в этом случае длина строки принимается максимально возможной, а именно равной 255. Например:

Var FIO: String[25];

Nazv: String;

Как и в одномерных массивах, к отдельным символам строки можно обратиться с помощью индексов в квадратных скобках: FIO[5], Nazv[8].

Над строковыми данными определены операции: присваивание, сцепление и отношение.

Присваивание последовательности символов строковым переменным осуществляется с помощью оператора присваивания.

Ввод и вывод значений строковых переменных осуществляется без апострофов с помощью стандартных процедур Read, Readln, Write, Writeln.

Если при присваивании или вводе длина строки превышает максимальную длину строковой переменной, то все лишние символы справа отбрасываются.

Операция сцепление применяется для объединения нескольких строк в одну. Для обозначения операции сцепления в Турбо Паскале используется символ ‘+’.

Например:

Var

St, St1, St2: String;

Begin

St1:=’ Турбо ‘;

St2:=’Паскаль’;

St:=St1+St2;

Writeln(‘St=’,St);

End.

После выполнения этой программы получим St= Турбо Паскаль.

Если длина объединенной строки превысит максимально допустимую длину N, то лишние символы справа отбрасываются.

Произвольные пары строк могут сравниваться с помощью операций отношения: =, <>, <, >, <=, >=.

Приоритет каждого из операторов отношения ниже приоритета оператора сцепления.

Сравнение строк производится посимвольно слева направо до первого несовпадающего символа, и та строка считается большей, в которой первый несовпадающий символ имеет больший ASCII-код. Если такая пара не найдена, а строки совпадают до последнего символа более короткой строки, то короткая строка рассматривается как меньшая.

Две строки равны только тогда, когда они одинаковой длины и состоят из идентичных символов.

Все остальные действия над строками реализуются с помощью стандартных процедур и функций:

LENGTH (St) - функция, возвращающая текущую длину строки St.

COPY(St, I, COUNT) – функция, которая выделяет из строки St подстроку длиной COUNT, начиная с позиции I. Если I>Length(St), то результатом будет пробел.

DELETE(St, I, COUNT) – процедура, которая удаляет из строки St подстроку длиной COUNT, начинающуюся с позиции I. Результатом является новая строка St без удаленной подстроки. Параметр St может быть только переменной.



Поделиться:


Последнее изменение этой страницы: 2016-12-17; просмотров: 463; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.147.104.248 (0.414 с.)