Найти в каждой строке матрицы P размерности N х N наибольший элемент и поменять его местами с элементом главной диагонали. Вывести полученную матрицу в общепринятом виде.
Если возможно, представить схему алгоритма решения.
Есть вот такой пример:
Задание: В матрице К размерности N х M поменять местами строки содержащие минимальный и максимальный элемент. Вывести полученную матрицу в общепринятом виде.
Приведем программу решения этой задачи. Так как строка матрицы представляет собой одномерный массив, то для обмена двух строк матрицы нам понадобится дополнительный одномерный массив К1. Для того, чтобы обмен одномерных массивов можно было производить так же легко, как и с переменными простых типов данных, введем новый тип KKK = array [1..20] of real. Тогда матрицу К можно описать как одномерный массив, состоящий из строк типа ККК.
program lab5;
uses crt;
type
KKK = array [1..20] of real;
var
K : array [1..20] of KKK;
K1 : KKK;
i, j, n, m, imax, imin : integer;
max,min:real;
begin
clrscr;
writeln('Введите размерность матрицы K:');
write('Число строк : '); readln(n);
write('Число столбцов : '); readln(m);
writeln('Введите элементы матрицы K:');
for i:=1 to n do
for j:=1 to m do
begin
gotoxy(j*5,i+4);
readln(K[i,j]);
end;
max:=K[1,1]; imax:=1;
min:=K[1,1]; imin:=1;
for i:=1 to n do
for j:=1 to m do
begin { Начинаем поиск строк }
if K[i,j]>max then { с max и min элементами}
begin
max:=K[i,j]; imax:=i;
end;
if K[i,j]<min then
begin
min:=K[i,j]; imin:=i;
end;
end;
K1:=K[imax]; {Обмен строк}
K[imax]:=K[imin];
K[imin]:=K1;
writeln('Массив после перестановки строк:');
for i:=1 to n do
for j:=1 to m do
begin
gotoxy(j*5,i+n+5);
writeln(K[i,j]:5:1);
end;
readkey;
end.
М | Connected, используй теги! Выдели текст проги блоком и выбери нужный тип в выпадающем меню над окном ввода. Lapp |
Connected, вот фрагмент, который делает, что тебе надо. Разберись с ним. Если не сможешь сам сделать блок-схему - спрашивай..
for j:=1 to n do begin
k:=1; { принмаем первый за максимальный }
{проходим по строке, если встречаем больший элемент - запоминаем номер}
for i:=2 to n do if p[i,j]>p[k,j] then k:=i;
b:=p[j,j]; {перекладываем диагональный элемент в буфер}
p[j,j]:=p[k,j]; {кладем максимальный в диагональный}
p[k,j]:=b {кладем буфер на место максимального}
end;
А что до этого надо писать? Ну там clr scr или что? Я в программировании "0"
Блок схему тоже не получается составить...=(((
Кто-то может полностью программу написать?
Ну, пимерно так можно..
Я тут заполнял матрицу случайными числами. Число n вводи не очень большое, 4 - 9 примерно, иначе могут быть проблемы с выводом матрицы.
const
MaxN=100;
var
p:array[1..MaxN,1..MaxN]of real;
i,j,k,n:integer;
b:real;
procedure Show;
var
i,j:integer;
begin
for j:=1 to n do begin
for i:=1 to n do Write(p[i,j] :8 :2);
WriteLn
end
end;
begin
Write('n=');ReadLn(n);
for j:=1 to n do for i:=1 to n do p[i,j]:=200*Random-100;
WriteLn('Input:');
Show;
{Тут вставляешь тот фрагмент, что я написал выше}
WriteLn('Output:');
Show
end.
ок. спасибо. а как блок схему составить?
попробую