Добавлен: 15.11.2018
Просмотров: 5610
Скачиваний: 36
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. Подсчитать количество отрицательных элементов в каждой строке матрицы Х размерами 54. Результат получить в виде вектора.
Решение.
Программа
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.
Контрольные вопросы
-
Что такое массив?
-
Как осуществляется доступ к элементам массива?
-
Как осуществляется описание массивов на языке Турбо Паскаль?
-
Как выполняется ввод вектора, матрицы?
-
Как организовать вывод массива?
-
Как осуществить суммирование векторов и матриц?
-
Как выглядит алгоритм транспонирования матрицы?
-
Как выполнить умножение: а) матрицы на матрицу, б) матрицы на вектор?
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. Дана целочисленная квадратная матрица А размерами NN, где 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 столбцов, элементы строки, содержащей максимальное количество положительных элементов, расположить в порядке возрастания.