Цель лабораторной работы: изучение структурной организации массивов и способов доступа к их элементам; совершенствование навыков процедурного программирования на языке Турбо Паскаль при решении задач обработки массивов.
Задание на программирование: используя технологию процедурного программирования, разработать программу обработки двумерных массивов в соответствии с индивидуальным заданием.
Порядок выполнения работы:
1) Получить у преподавателя индивидуальное задание и выполнить постановку задачи: сформулировать условие, определить входные и выходные данные, их ограничения.
2) Разработать математическую модель: описать с помощью формул и рисунков структуру массивов и процесс их преобразования.
3) Построить схему алгоритма решения задачи.
4) Составить спецификации необходимых подпрограмм: создания матрицы, вывода матрицы, обработки матрицы и др.
5) Составить программу на языке Турбо Паскаль.
6) Использовать оконный интерфейс предыдущих лабораторных работ.
7) Входные данныевводить с клавиатуры по запросу.
8) Выходные данные выводить на экран с пояснениями.
9) Проверить и продемонстрировать преподавателю работу программы на полном наборе тестов, в том числе с ошибочными входными данными. Входные и выходные массивы должны выводиться в одном и том же формате.
10) Оформить отчет о лабораторной работе в составе: постановка задачи, математическая модель, схема алгоритма решения, текст программы, спецификация подпрограмм, контрольные примеры.
Варианты индивидуальных заданий
В заданной матрице поменять местами первую строку и строку, содержащую наибольший элемент матрицы.
В заданной матрице поменять местами последний столбец и столбец, содержащий наименьший элемент матрицы.
В заданной матрице поменять местами две строки: строку, содержащую максимальный элемент матрицы, и строку, содержащую минимальный элемент матрицы.
В заданной матрице поменять местами главную и побочную диагонали.
В заданной матрице поменять местами первый столбец со столбцом, содержащим наибольший элемент матрицы.
В заданной матрице поменять местами среднюю строку и средний столбец.
В заданной матрице поменять местами последнюю строку со строкой, содержащей наибольший элемент матрицы.
В заданной матрице поменять местами первую строку и первый столбец.
В заданной матрице поменять местами последний столбец со столбцом, содержащим наибольший элемент матрицы.
В заданной матрице поменять местами последнюю строку со строкой, содержащей наименьший элемент матрицы.
В заданной матрице поменять местами первый столбец со столбцом, содержащим наибольший элемент главной диагонали.
В заданной матрице поменять местами последний столбец и побочную диагональ.
В заданной матрице поменять местами две строки: строку с указанным номером и строку, содержащую наименьший элемент матрицы.
В заданной матрице из целых чисел поменять местами первую строку и строку, содержащую наибольший по абсолютной величине элемент матрицы.
В заданной матрице поменять местами два столбца: столбец, содержащий максимальный элемент матрицы, и столбец, содержащий минимальный элемент матрицы.
В заданной матрице поменять местами первую строку и строку, содержащую максимальный элемент матрицы.
В заданной матрице поменять местами первый столбец и побочную диагональ.
В заданной матрице поменять местами последнюю строку со строкой, содержащей минимальный элемент матрицы.
В заданной матрице поменять местами последний столбец и столбец, содержащий минимальный элемент матрицы.
В заданной матрице поменять местами последнюю строку со строкой, содержащей максимальный элемент матрицы.
В заданной матрице поменять местами последний столбец со столбцом, содержащим максимальный элемент матрицы.
В заданной матрице поменять местами первую строку и главную диагональ.
В заданной матрице поменять местами главную диагональ и последний столбец.
В заданной матрице поменять местами два столбца: столбец, содержащий максимальный отрицательный элемент матрицы, и столбец, содержащий минимальный положительный элемент матрицы.
В заданной матрице поменять местами последний столбец и столбец, содержащий минимальный положительный элемент матрицы.
В заданной матрице из целых чисел поменять местами первую строку и строку, содержащую максимальный отрицательный элемент матрицы.
Пример программы
Program ObrMatr;
{Программа поиска и перестановки в матрице двух строк:
строки с минимальным и строки с максимальным элементом}
Uses Crt; {Подключение модуля}
Const
R=10; {Размер строки (столбца) матрицы}
Type
TInd=1..R; {Тип индекса элемента матрицы}
TElem=Integer; {Тип элемента матрицы}
TVect=Array[Tind] Of TElem; {Тип вектор}
TMatr=Array[Tind] Of TVect; {Тип матрица}
{$R+}
Procedure InMatr(kStr,kStb:TInd;Var M:TMatr);
{Процедура ввода значений элементов матрицы.
Входные данные: kStr - количество строк матрицы,
kStb - количество столбцов матрицы.
Выходное данное: M - матрица.}
Var
i,j:TInd; {Локальные переменные}
Begin
WriteLn('Вводите матрицу по строкам:');
For i:=1 To kStr
Do Begin
For j:=1 To kStb
Do Read(M[i,j]);
ReadLn;
End;
End;{InMatr}
Function NomMin(kStr,kStb:TInd; Const M:TMatr):TInd;
{Функция определения номера строки с минимальным элементом.
Входные данные: kStr - количество строк матрицы,
kStb - количество столбцов матрицы,
M - матрица.
Выходное данное: NomMin - номер строки с миним. элементом.}
Var
i,j,nmin:TInd;
min:TElem; {Локальные переменные}
Begin
min:=M[1,1]; nmin:=1;
For i:=1 To kStr
Do For j:=1 To kStb
Do If M[i,j]<min
Then Begin
min:=M[i,j];
nmin:=i;
End;
NomMin:=nmin;
End; {NomMin}
Function NomMax(kStr,kStb:TInd; Const M:TMatr):TInd;
{Функция определения номера строки с максимальным элементом.
Входные данные: kStr - количество строк матрицы,
kStb - количество столбцов матрицы,
M - матрица.
Выходное данное: NomMax - номер строки с макс. элементом.}
Var
i,j,nmax:TInd;
max:TElem; {Локальные переменные}
Begin
max:=M[1,1]; nmax:=1;
For i:=1 To kStr
Do For j:=1 To kStb
Do If M[i,j]>max
Then Begin
max:=M[i,j];
nmax:=i;
End;
NomMax:=nmax;
End; {NomMax}
Procedure ObmenStr(kStr,kStb:TInd; Var M:TMatr);
{Процедура перестановки строк с минимальным и максимальным элементом.
Входные данные: kStr - количество строк матрицы,
kStb - количество столбцов матрицы,
M - матрица целых чисел.
Выходное данное: M - преобразованная матрица.}
Var
strM:TVect;
nmin,nmax:TInd; {Локальные переменные}
Begin
nmin:=NomMin(kStr,kStb,M);
nmax:=NomMax(kStr,kStb,M);
If nmin<>nmax
Then Begin
strM:=M[nmin];
M[nmin]:=M[nmax];
M[nmax]:=strM;
End;
End; {ObmenStr}
Procedure Okno(x1,y1,x2,y2,cf,ct:Byte);
{Процедура формирования окна}
Begin
Window(x1,y1,x2,y2); {Установка параметров окна}
TextBackGround(cf); {Установка цвета фона}
TextColor(ct); {Установка цвета текста}
ClrScr; {Очистка окна}
End;{Okno}
Procedure OutMatr(kStr,kStb:TInd; Const M:TMatr);
{Процедура вывода матрицы.
Входные данные: kStr - количество строк матрицы,
kStb - количество столбцов матрицы,
M - матрица.}
Var
i,j:TInd; {Локальные переменные}
Begin
For i:=1 To kStr
Do Begin
For j:=1 To kStb
Do Write(M[i,j]:3);
WriteLn;
End;
End;{OutMatr}
Var
n,m,nStb:TInd;
Matr:TMatr;
Begin
Okno(1,1,80,25,0,15); {На черном фоне белый текст}
Write('Размеры матрицы? ');
ReadLn(n,m);
Okno(1,6,38,20,2,15); {На зеленом фоне белый текст}
InMatr(n,m,Matr); {Ввод матрицы}
WriteLn('Исходная матрица');
OutMatr(n,m,Matr); {Вывод матрицы}
ObmenStr(n,m,Matr); {Перестановка строк}
Okno(40,6,80,20,3,15); {На голубом фоне белый текст}