Помощь - Поиск - Пользователи - Календарь
Полная версия: строки&столбцы в матрице(?)
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
nadja yak
Привет!Жду помощи профессионалов в этом довольно сложном для меня вопросе.
Условия задачи:Составить программу, которая в двумерном массиве находит самое большое значение и элементы строки и столбца, на пересечении которых он стоит, делает нулевыми.
Вот код. В нем я нашла мах элемент, и запомнила номер столбца и строчки где он находится(с последующим выводом на экран).
Program max_str;
 Uses crt;
 Const
 m=5;
 n=6;
 var i,j:byte;
 a: array [1..m, 1..n] of integer;
 max,u,t: integer;
begin
 clrscr;
 randomize;
 for i:=1 to m do
   begin
    for j:=1 to n do
      begin
         a[i,j]:=random(100);
         write(a[i,j]:4);
      end;
    writeln;
   end;
 writeln (' массив:');
 max:=a[1,1];

 for i:=1 to m  do
   begin
    for j:=1 to n do
      begin
        if a[i,j]>max then begin
         max:=a[i,j];
         u:=i;
         t:=j;
          end;
     end;
   end;
   write (max:4,'  ',u ,'  ' ,t,'  ' );
 readln;
end.




Как видите я НЕ смогла понять как обнулить все элементы на пересечении. Подскажите,пожалуйста, как это сделать.Надеюсь ошибок в сообщении не допустила.Жду помощи!

Вот как это должно выглядеть(вдруг я условие задачи изложила не понятно).==========>
volvo
Цитата
В нем я нашла мах элемент, и запомнила номер столбца и строчки где он находится
Если элемент с индексами [1, 1] будет максимальным, то номер столбца/строки будет найден неверно. Присвой u, t значение 1 перед циклом, а не 0, который присваивается автоматически.

А по поводу как обнулить - очень просто:
for i := 1 to m do a[i, t] := 0;
for j := 1 to n do a[u, j] := 0;


Цитата
Вот как это должно выглядеть
Почему только перед макс. элементом (выше и левее)? А что с остальными в той же строке/столбце, но ниже/правее? У тебя точно задание звучит именно так, как ты его привела?
nadja yak
Тточно!! я сама не так поняла задачу! Спасибо огромное!

Добавлено через 7 мин.
что то у меня не получается(
хотя я сделала как Вы сказали. что выводить после цикла for что получилась новая матрица после исходной?
у меня всё это идет таблицей но почему то не правильной((
volvo
program max_str;
const
   m = 5;
   n = 6;

var
   i, j : byte;
   a : array [1..m, 1..n] of integer;
   u, t : integer;

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

   u := 1; t := 1;
   for i:=1 to m do
   begin
      for j:=1 to n do
         if a[i, j] > a[u, t] then
         begin
            u := i; t := j;
         end;
   end;

   { Нашли строку и столбец, где находится максимум. Выводим... }
   writeln;
   writeln ('max : ', a[u, t]:4, u:4, t:4);

   { Меняем содержимое строки и столбца на нули }
   for i := 1 to m do a[i, t] := 0;
   for j := 1 to n do a[u, j] := 0;

   { Выводим итоговый результат: }
   writeln ('after:');
   for i:=1 to m do
   begin
      for j:=1 to n do
         write(a[i,j]:4);
      writeln;
   end;

   readln;
end.


before:
76 11 24 56 28 77
77 28 42 56 85 43
29 56 15 8 95 68
20 84 63 8 27 84
20 89 94 0 8 26

max : 95 3 5
after:
76 11 24 56 0 77
77 28 42 56 0 43
0 0 0 0 0 0
20 84 63 8 0 84
20 89 94 0 0 26

Вроде выводит, как положено.
nadja yak
ой!!volvo! вы не раз уже спасаете!
Я наверно бы никогда не догадалась поставить такое условие if a[i, j] > a[u, t] then


Добавлено через 17 мин.
volvo!
а как сделать чтоб число мах НЕ затиралось тоже нулем??
volvo
Вот так попробуй изменить циклы:
   for i := 1 to m do if i <> u then a[i, t] := 0;
   for j := 1 to n do if j <> t then a[u, j] := 0;
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.