Помощь - Поиск - Пользователи - Календарь
Полная версия: строки&столбцы в матрице(?)
Форум «Всё о Паскале» > 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;
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.