Помощь - Поиск - Пользователи - Календарь
Полная версия: Матрицы, строки
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
LoveInLife

Program ObrMatr; { Пример 3 - 2007 }
{ Сортировка строк матрицы по главному столбцу
(*Главный столбец - это столбец с минимальным элементом матрицы*) }
Uses Crt; { Подключение модуля }
Const R=9; { Размер строки (столбца) матрицы }
Type Tind=1..R; { Тип индекса элемента матрицы }
Tvect=Array[Tind] Of Integer; { Тип вектор целых чисел }
Tmatr=Array[Tind] Of Tvect; { Тип матрица целых чисел }
{$R+}
Procedure SozdMatr(kStr,kStb:Tind; nd,kd:Integer; Var M:Tmatr);
{ Процедура заполнения матрицы
случайными целыми числами заданного диапазона.
Входные данные: kStr - количество строк матрицы,
kStb - количество столбцов матрицы,
nd - начало диапазона чисел,
kd - конец диапазона чисел.
Выходное данное: M - матрица. }
Var i,j:Tind;
Begin
Randomize;
For i:=1 To kStr
Do For j:=1 To kStb
Do M[i,j]:=Random(kd-nd+1)+nd;
End;{ SozdMatr }

Function NomStrMax(kStr,kStb:Tind; Const M:Tmatr):Tind;
{ Функция определения номера столбца с минимальным элементом матрицы.
Входные данные: kStr - количество строк матрицы,
kStb - количество столбцов матрицы,
M - матрица.
Выходное данное: NomStrMax - номер стоки максимального элемента. }
Var i,j,imax:Tind; max:Integer;
Begin
max:=M[1,1]; imax:=1;
For i:=1 To kStr
Do For j:=1 To kStb
Do If M[i,j]>max
Then Begin max:=M[i,j];
imax:=i
End;
NomStrMax:=imax
End;{ NomStbMax }

Procedure SortMatr(kStr,jmin:Tind; Var M:Tmatr);
{ Процедура сортировки строк матрицы методом
нахождения максимума.
Входные данные: kStr - количество строк матрицы,
imax - индекс строки максимального элемента,
M - матрица.
Выходное данное: M - упорядоченная матрица.}
Var i,k,imax:Tind; strM:Tvect;
Begin
For i:=1 To kStr-1
Do Begin { Поиск очередного максимума в главном столбце: }
imax:=i;
For k:=i+1 To kStr
Do If M[k,jmin]>M[imax,jmin]
Then imax:=k;
{ Перестановка строк матрицы: }
strM:=M[i]; M[i]:=M[imax]; M[imax]:=strM
End;
End;{ SortMatr }

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]:4);
WriteLn
End;
End;{ OutMatr }

Const ND=-99; KD=-1; { Границы диапазона значений элементов матрицы }
Var n,m,nStb:Tind; Matr:Tmatr;
Begin
Okno(1,1,80,25,0,15); { На черном фоне белый текст }
Write('Размеры матрицы? '); ReadLn(n,m);
Okno(3,3,25,15,2,15); { На зеленом фоне белый текст }
WriteLn('Задача: В матрице из целых чисел поменять первую строку и строку, содержащую наибольший отрицательный элемент');
SozdMatr(n,m,ND,KD,Matr); { Создание матрицы }
Okno(28,3,50,20,3,15); { На голубом фоне белый текст }
WriteLn('Ввод данных:');
OutMatr(n,m,Matr); { Вывод матрицы }
nStb:=NomStrMax(n,m,Matr); { Поиск столбца с минимумом }
SortMatr(n,nStb,Matr); { Сортировка матрицы }
Okno(53,3,77,20,4,15); { На голубом фоне белый текст }
WriteLn('Вывод результата');
OutMatr(n,m,Matr); { Вывод матрицы }
Okno(3,17,25,24,5,15); { На голубом фоне белый текст }
WriteLn('Ошибка!');
ReadLn;
End.






Помогите пожалуйста исправить Procedure SortMatr процедура нахождения СОРТИРОВКИ строк : Строку с наибольшим элементом нужно поменять на первую строку....плиззз
volvo
Ты опять за свое? Тебе же сказали, что перестановка двух строк местами это НЕ сортировка!

Добавлено через 1 мин.
А как решается твоя задача я тебе уже показывал. Второй раз повторять не буду...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.