Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача на матрицу
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Гость
Дана матрица размерности N*N, найти минимальный (максимальный) элемент, и заменить нулями элементы в строке и столбце, на пересечении которых расположен данный элемент.
А вот с эти разобраться не получается, подскажите пожалуйста...

На надо пихать в одну тему сто разных задач, перемещено
klem4
Что конкретно н получается ? Не можешь найти мин. элемент ? Не можешь обнулить ? Для начала сходи сюда :
FAQ : Массивы, матрицы + воспользуйся поиском, задача решалась сотни раз.

Будут конкретные впросы, задавай.
Alla
Так я вроде в своей теме вопрос задавала smile.gif
Что не получается, все не получается sad.gif
Пробую найти миниммальный элемент, а вместо этого нахожу максимальный:
Код

program test1;
const n=3;
      m=3;
var
a : array[1..n, 1..m] of integer;
i,j,min : integer;
begin
writeln('Vvod elementov', n, 'x', m);
  min:=a[1,1];
  for i:=1 to n do
   for j:=1 to m do
  begin
   readln(a[i,j]);
   if min < a[i,j] then
   min:=a[i,j];
  end;
  writeln(min);
  readln;
end.


Как элементы заменить я вообще не представляю, как указать ту строку и столбец в которой мне надо заменять и как сказать, чтобы заменилось на 0 ???
klem4
Во первых для решения этой задачи тебе надо искать не значение мин. элемента, а его координаты в матрице, чтобы после это обнулить соответствующую строку и столбец

поиск мин. элемента :


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;

// теперь imin содержит искомую строку, которую надо обнулить, а jmin искомый столбец

Гость
Тоесть надо jmin=0 и imin=0 сделать и показать матрицу a[a,j] и ВСЕ ?
klem4
Нет .. надо обнулить строку с номером imin, показываю как это делается, столбец сделаешь самостоятельно


(*
обнуление строк с номером imin
*)
for j := 1 to m do a[imin,j] := 0;

Гость
Но ведь и значение мин элемента тоже надо показать ???
klem4
И что мешает ? writeln(a[imin, jmin]);

Настоятельно рекомендую взять лекции у одногруппников ...
Alla
Посмотрите пожалуйста:
Код
program test1;

const n=3; m=3;

var
a : array[1..n, 1..m] of integer;
i,j,sum,s,jmin,imin : integer;

begin
  writeln('Vvod elementov', n, 'x', m);
  imin := 1;
  jmin := 1;

  for i:=1 to n do
    for j:=1 to m do
     begin
       readln(a[i,j]);
     end;

  for i:=1 to n do
    begin
     writeln;
      for j:=1 to m do
      write(a[i,j]);
    end;

    writeln;

  if a[i,j] < a[imin,jmin] then
    begin
     imin := i;
     jmin := j;
    end;

  for j:=1 to m do
    a[imin,j]:=0;
  for i:=1 to n do
    a[i,jmin]:=0;

  for i:=1 to n do
    begin
     writeln;
      for j:=1 to m do
       write(a[i,j]);
    end;
readln;
end.


На нули меняется пересечение перdой строки первго столбца ???
И минимальный элемент мне так и не удалось вывести, выводится только наибольший sad.gif
klem4
Посмотри, подправил :

program test1;

const n=3; m=3;

var
a : array[1..n, 1..m] of integer;
i,j,sum,s,jmin,imin : integer;

begin

writeln('Vvod elementov', n, 'x', m);

imin := 1;
jmin := 1;

for i:=1 to n do
for j:=1 to m do
begin
readln(a[i,j]);
if a[i,j] < a[imin, jmin] then begin
imin := i;
jmin := j;
end;
end;

for i:=1 to n do
begin
writeln;
for j:=1 to m do
write(a[i,j],' ');
end;

writeln;

for j:=1 to m do
a[imin,j]:=0;
for i:=1 to n do
a[i,jmin]:=0;

for i:=1 to n do
begin
writeln;
for j:=1 to m do
write(a[i,j],' ');
end;
readln;
end.
volvo
Цитата
На нули меняется пересечение перdой строки первго столбца ???
Это смотря какие данные ты вводишь... Говорили же неоднократно - приводите данные, на которых тестировалась программа !!!

klem4, так и будем полностью решать все время? dry.gif
Гость
Все с нулями разобрались, кстати а чем я ошиблась...
И еще минимальное число так и не удалось вывести при написании элементарного
writeln(a[imin, jmin]) выводится 0, хотя мин - 1, а при writeln(a[i,j]) выводится максимум sad.gif
volvo
Ты уже затерла минимальное значение нулем... Чтобы этого не происходило - замени
for j:=1 to m do
a[imin,j]:=0;
for i:=1 to n do
a[i,jmin]:=0;


на
  for j:=1 to m do
if j <> jmin then a[imin,j]:=0;
for i:=1 to n do
if i <> imin then a[i,jmin]:=0;

Больше ничего в программе не добавляй, все прекрасно отрабатывает...
Alla
klem, Volvo, вы лучшие, СПАСИБО !!!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.