Удалить столбцы с максимальным элементом матрицы,затем после первого отрицательного члена каждого столбца вставить число,равное минимальному элементу этого столбца.
Работа с матрицами [Pascal]
Сообщений 1 страница 4 из 4
Поделиться22008-08-25 15:26:27
Удалить столбцы с максимальным элементом матрицы
Если элементов несколько - удаляем все столбцы, в которых содержится максимальный элемент. Со второй частью пока не разобрался..
const n = 5; var ms, rez: array [1..n, 1..n] of integer; i,j,x,y,max, max_j: integer; no_max: boolean; begin randomize; max := -999; for i:=1 to n do {zapolnenie massiva i poisk maximuma} begin for j:=1 to n do begin ms[i,j] := random(9)-3; if ms[i,j] > max then begin max := ms[i,j]; end; write(ms[i,j]:4); end; writeln; end; writeln; y:=0; writeln(max); for j:=1 to n do begin no_max := true; for i:=1 to n do no_max := no_max and not (ms[i,j] = max); { writeln(j, ' ', no_max); } if no_max then begin inc(y); for x:=1 to n do rez[x,y] := ms[x,j]; end; end; { writeln; writeln; } for i:=1 to n do begin for j:=1 to y do write(rez[i,j]:4); writeln; end; readln; end.
Поделиться32008-08-25 15:54:55
Полное решение задачи.
после первого отрицательного члена каждого столбца вставить число,равное минимальному элементу этого столбца
Число, стоящее за первым отрицательным элементом столбца замещается минимальным элементом этого столбца.
const n = 5; var ms, rez: array [1..n, 1..n] of integer; i,j,x,y,max,min: integer; no_max: boolean; begin randomize; max := -999; for i:=1 to n do {zapolnenie massiva i poisk maximuma} begin for j:=1 to n do begin ms[i,j] := random(9)-3; if ms[i,j] > max then begin max := ms[i,j]; end; write(ms[i,j]:4); end; writeln; end; writeln; y:=0; writeln(max); for j:=1 to n do { udalyaem stolbtsy } begin no_max := true; for i:=1 to n do no_max := no_max and not (ms[i,j] = max); { writeln(j, ' ', no_max); } if no_max then begin inc(y); for x:=1 to n do rez[x,y] := ms[x,j]; end; end; for i:=1 to n do begin for j:=1 to y do write(rez[i,j]:4); writeln; end; { vstavlyaem chislo } for j:=1 to y do begin min := 999; for i:=1 to n do if rez[i,j]<min then min := rez[i,j]; for i:=1 to n do if rez[i,j]<0 then begin rez[i+1,j]:= min; break; end; end; writeln; writeln; for i:=1 to n do begin for j:=1 to y do write(rez[i,j]:4); writeln; end; readln; end.
Поделиться42008-08-25 16:35:09
Вот исправленный вариант. Говори, что именно не понятно?
const
n = 5;
var
ms, rez: array [1..n, 1..n] of integer;
i,j,x,y,max,min: integer;
no_max: boolean;
r: char;begin
REPEAT
write('Randomize? (Y/N) '); readln(r);
{ clrscr; }
UNTIL (r='Y') or (r='N');max := -999;
CASE r of
'Y':
BEGIN
randomize;
for i:=1 to n do {zapolnenie massiva i poisk maximuma}
begin
for j:=1 to n do
begin
ms[i,j] := random(9)-3;
if ms[i,j] > max then
max := ms[i,j];
write(ms[i,j]:4);
end;
writeln;
end;
END;'N':
BEGIN
for i:=1 to n do
for j:=1 to n do
begin
write('ms[',i,',',j,'] := ');
read(ms[i,j]);
if ms[i,j] > max then
max := ms[i,j];
end;
{ clrscr; } {esli nugno}
writeln; writeln;
for i:=1 to n do
begin
for j:=1 to n do
write(ms[i,j]:4);
writeln;
end;
END;end;
writeln; y:=0; writeln(max);
for j:=1 to n do { udalyaem stolbtsy }
begin
no_max := true;
for i:=1 to n do
no_max := no_max and not (ms[i,j] = max);
{ writeln(j, ' ', no_max); }
if no_max then
begin
inc(y);
for x:=1 to n do
rez[x,y] := ms[x,j];
end;
end;for i:=1 to n do
begin
for j:=1 to y do
write(rez[i,j]:4);
writeln;
end;{ vstavlyaem chislo }
for j:=1 to y do
begin
min := 999;
for i:=1 to n do
if rez[i,j]<min then min := rez[i,j];
for i:=1 to n do
if rez[i,j]<0 then
begin
rez[i+1,j]:= min;
break;
end;
end;writeln; writeln;
for i:=1 to n do
begin
for j:=1 to y do
write(rez[i,j]:4);
writeln;
end;readln; readln;
end.