Помощь - Поиск - Пользователи - Календарь
Полная версия: Матрица.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
AnTiDoD
Здравствуйте, вот столкнулся с проблемой:
Дана матрица, найти в ней число k, и вывести все элементы марицы, которые <= k и,стоящие на той же(том же) строке(столбце), в другом цвете. - Эту часть сделал, но когда дано несколько k, то возникает проблема с сохранением определенных i и j. Для этого я взял отдельный массив l (x*2), который содержит в первом столбце определенный i и во втором, соответсвенно, j данного эл-та k.

Вот тест проги, помогите найти проблему:

uses crt;
var
a:array[1..10,1..10] of integer;
l:array[1..10,1..10] of integer;
i, j, n, m, k, q, w,d :integer;
begin
write('m=');
readln(m);
write('n=');
readln(n);
for i:=1 to n do
for j:=1 to m do
a[i,j]:=Random(10);
writeln('Ucxodnay matruca:');
for i:=1 to n do
begin
for j:=1 to m do
write(a[i,j],' ');
writeln;
end;
write('k=');
readln(k);
q:=1;w:=1;
for i:=1 to n do
for j:=1 to m do
if a[i,j]=k then
begin
l[q,w]:=i;
l[q,w+1]:=j;
q:=q+1;
w:=1;
end;
q:=1;w:=1;
for i:=1 to n do
begin
for j:=1 to m do
if a[i,j]<=k then
for q:=1 to 10 do
if (l[q,w]=i) or (l[q,w+1]=j) then
begin
TextColor(Red);
write(a[i,j],' ');
NormVideo;
break;
end
else
else
write(a[i,j],' ');
writeln;
end;

readkey;
end.

volvo
AnTiDoD, а как это ты себе представляешь, что дано НЕСКОЛЬКО k? Что, один и тот же элемент выводить одновременно разными цветами? Они же все равно выводятся по-очереди, так? Вот и иди от минимального К к максимальному...

Ты опиши, что ты ХОЧЕШЬ чтобы было, а не то, что неправильно работает...

P.S. Что за мода пошла - инвертировать заголовок? mad.gif Caps Lock заело?
AnTiDoD
Надо чтобы вывелась матрица с выделенными(в цвете) элементами, которые удолетворяют условию - <= k и находятся на там же столбце или строке... вот и все! А несколько k в матрице могут встретиться не один раз...
AnTiDoD
Все я сделал и нашел ошибку!
Кому надо, то вот:

uses crt;
var
a:array[1..10,1..10] of integer;
l:array[1..10,1..10] of integer;
i, j, n, m, k, q, w,d :integer;
buf : boolean;
begin
clrscr;
write('m=');
readln(m);
write('n=');
readln(n);
for i:=1 to n do
for j:=1 to m do
a[i,j]:=Random(10);
<...>
write('k=');
readln(k);
q:=1;w:=1;
for i:=1 to n do
for j:=1 to m do
if a[i,j]=k then
begin
l[q,w]:=i;
l[q,w+1]:=j;
q:=q+1;
w:=1;
end;
q:=1;w:=1;
for i:=1 to n do
begin
for j:=1 to m do
if a[i,j]<=k then
begin
buf:=False;
for q:=1 to 10 do
if (l[q,w]=i) or (l[q,w+1]=j) then
begin
TextColor(Red);
write(a[i,j],' ');
NormVideo;
buf:=True;
break;
end;
if (not buf) then write(a[i,j],' ');
end
else write(a[i,j],' ');
writeln;
end;

readkey;
end.



Тему можно закрывать!!!
volvo
Еще раз - не путайся САМ и не путай НИКОГО!!! k у тебя ОДНО - ты вводишь его с клавиатуры, и для него отведена одна переменная типа Integer... Все. Больше с этим ничего не сделаешь... А вот ЭЛЕМЕНТОВ, больших или меньших или РАВНЫХ k, действительно может быть несколько...

Учитесь, наконец, вопросы-то задавать!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.