Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ строки&столбцы в матрице(?)

Автор: nadja yak 12.04.2011 20:31

Привет!Жду помощи профессионалов в этом довольно сложном для меня вопросе.
Условия задачи:Составить программу, которая в двумерном массиве находит самое большое значение и элементы строки и столбца, на пересечении которых он стоит, делает нулевыми.
Вот код. В нем я нашла мах элемент, и запомнила номер столбца и строчки где он находится(с последующим выводом на экран).

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 12.04.2011 22:23

Цитата
В нем я нашла мах элемент, и запомнила номер столбца и строчки где он находится
Если элемент с индексами [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 12.04.2011 22:41

Тточно!! я сама не так поняла задачу! Спасибо огромное!

Добавлено через 7 мин.
что то у меня не получается(
хотя я сделала как Вы сказали. что выводить после цикла for что получилась новая матрица после исходной?
у меня всё это идет таблицей но почему то не правильной((

Автор: volvo 12.04.2011 23:30

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 12.04.2011 23:45

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


Добавлено через 17 мин.
volvo!
а как сделать чтоб число мах НЕ затиралось тоже нулем??

Автор: volvo 13.04.2011 0:10

Вот так попробуй изменить циклы:

   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;