Помощь - Поиск - Пользователи - Календарь
Полная версия: Матрица.
Форум «Всё о Паскале» > 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, действительно может быть несколько...

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