Файл: Методичка к лабораторным и практическим.doc

ВУЗ: Не указан

Категория: Методичка

Дисциплина: Программирование

Добавлен: 15.11.2018

Просмотров: 5247

Скачиваний: 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.



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


  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. Дана целочисленная квадратная матрица А размерами 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 столбцов, элементы строки, содержащей максимальное количество положительных элементов, расположить в порядке возрастания.