Форум «Всё о Паскале» _ Задачи _ Перемещение минимального элемента массива
Автор: HUNTER77 20.03.2011 21:15
путем перестановки строк и столбцов необходимо переместитть минимальный элемент в правый нижний угол
uses crt; const n=6; m=4; type matrix =array [1..n , 1..m] of integer; var a:matrix; i,j,min:integer; begin for i:=1 to n do for j:=1 to m do begin a[i,j]:=random(100); end; min:=a[1,1]; For i:=1 to n do begin For j:=1 to m do begin If min> a[i,j] then min:=a[i,j]; end; end; textcolor(green); for i:=1 to n do begin for j:=1 to m do write(a[i,j], ' '); writeln; end; writeln; textcolor (red); writeln('минимальный элемент: ',min); end.
никак не могу понять как это сделать ..очень прошу помочь..
Автор: Lapp 21.03.2011 7:36
Цитата(HUNTER77 @ 20.03.2011 17:15)
путем перестановки строк и столбцов необходимо переместитть минимальный элемент в правый нижний угол ... никак не могу понять как это сделать ..очень прошу помочь..
При поиске минимума запоминай не значение, а индексы. Вот так примерно (не самый эффекливный способ).
{ищем минимум} imin:=1; jmin:=1; For i:=1 to n do For j:=1 to m do If a[i,j] < a[imin,jmin] then begin imin:= i; jmin:= j end;
{переставляем столбцы} for i:=1 to n do begin b:= a[i,m]; a[i,m]:= a[i,jmin]; a[i,jmin]:= b end;
{переставляем строки} for j:=1 to m do begin b:= a[n,j]; a[n,j]:= a[imin,j]; a[imin,j]:= b end;
Автор: HUNTER77 22.03.2011 1:08
Спасибо большое!!!!!!!!!
Автор: HUNTER77 27.03.2011 15:34
как вывести на печать функцию..? мне помогли с решением задачи...я немогу вывести на печать конечный результат необходимо удалить столбец с максимальным элементом.. далее нечетные отрицательные элементы первой строки матрицы расположить по убыванию.
Код
uses crt; var a:array[1..20,1..20]of integer; n,m,i,j,max,jmax,pv,t:integer; function Check (i : integer) : boolean; begin Check := (a[1, i] < 0) and odd (abs (a[1, i])); end; function prev (i : integer) : integer; begin while (i > 0) and not Check (i) do dec (i); prev := i; end; begin
clrscr; randomize; write('n=');readln(n); write('m=');readln(m); writeln('Ishodnaia matrica:'); for i:=1 to n do begin for j:=1 to m do begin a[i,j]:=random(20)-100; write(a[i,j]:4); end; writeln; end; readln; max:=a[1,1];jmax:=1; for i:=1 to n do for j:=1 to m do if a[i,j]>max then begin max:=a[i,j]; jmax:=j; end; writeln('max element=',max,' v stlbce ',jmax); writeln; writeln('Rezultat:'); for j:=jmax to m-1 do for i:=1 to n do begin a[i,j]:=a[i,j+1]; end; for i:=1 to n do begin for j:=1 to m-1 do write(a[i,j]:4); writeln; end; readln; for i := 1 to m - 1 do for j := m - 1 downto i + 1 do begin pv := prev (pred(j)); if pv = 0 then continue; if Check (j) and (a[1, pv] < a[1, j]) then begin T := a[1, pv]; a[1, pv] := a[1, j]; a[1, j] := T end end; end.
Автор: volvo 27.03.2011 15:47
Цитата
я немогу вывести на печать конечный результат
Ну, ты ж выводил матрицу ДО упорядочивания первой строки?
Так же выводи и после...(Показать/Скрыть)
uses crt; var a:array[1..20,1..20]of integer; n,m,i,j,max,jmax,pv,t:integer;
function Check (i : integer) : boolean; begin Check := (a[1, i] < 0) and odd (abs (a[1, i])); end; function prev (i : integer) : integer; begin while (i > 0) and not Check (i) do dec (i); prev := i; end; begin
clrscr; randomize; write('n=');readln(n); write('m=');readln(m); writeln('Ishodnaia matrica:'); for i:=1 to n do begin for j:=1 to m do begin a[i,j]:=random(20)-100; write(a[i,j]:4); end; writeln; end; readln; max:=a[1,1];jmax:=1; for i:=1 to n do for j:=1 to m do if a[i,j]>max then begin max:=a[i,j]; jmax:=j; end; writeln('max element=',max,' v stlbce ',jmax); writeln; writeln('Rezultat:'); for j:=jmax to m-1 do for i:=1 to n do begin a[i,j]:=a[i,j+1]; end; for i:=1 to n do begin for j:=1 to m-1 do write(a[i,j]:4); writeln; end; readln; for i := 1 to m - 1 do for j := m - 1 downto i + 1 do begin pv := prev (pred(j)); if pv = 0 then continue; if Check (j) and (a[1, pv] < a[1, j]) then begin T := a[1, pv]; a[1, pv] := a[1, j]; a[1, j] := T end end;
writeln('After sorting:'); for i:=1 to n do begin for j:=1 to m-1 do write(a[i,j]:4); writeln; end; readln;