Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2009, 22:15   #1
mouse697
 
Регистрация: 22.03.2009
Сообщений: 8
Восклицание 2-x мерный масссив удаление строк

Матрицу 9х8 преобразовать в матрицу 8х7 , вычеркнув строку и столбец, на пересечении которых расположен наименьший элемент матрицы A.
Нашел минимум и программа вычеркивает только столбец. Где что неправильно указал ?

для заполнения исходной таблицы используется генератор
Код:
program lab3pr4;
uses crt;
 var a,b:array[1..9,1..8] of integer;
  i,j,min,k,l:integer;
begin
 clrscr;
 for i:=1 to 9 do
 for j:=1 to 8 do
  a[i,j]:=trunc(random*(-50))+40;
  min:=a[1,1]; k:=1; l:=1;
 for i:=1 to 9 do
 for j:=1 to 8 do
   if a[i,j]<min then
   begin
    min:=a[i,j];
    k:=i; l:=j;
   end;
 writeln('min= ',min);
 writeln('stroka ',k,' stolbec ',l);

{ думаю что ошибка где то здесь }
 for k:=1 to 9 do
 for l:=1 to 8 do
  begin
   if i=k then b[i,j]:=0 else b[i,j]:=a[i,j];
   if j=l then b[i,j]:=0 else b[i,j]:=a[i,j];
  end;

{ далее только выводим конечный результат}

 writeln('--- isxodnij massiv---');
 for i:=1 to 9 do
   begin
    for j:=1 to 8 do
      write(a[i,j]:5);
     writeln;
    end;
 writeln;
 writeln('--- konechnij massiv--- ');
 for i:=1 to 9 do
   begin
    for j:=1 to 8 do
     if b[i,j]<>0 then write(b[i,j]:5);
     writeln;
    end;
 readkey;
end.
mouse697 вне форума Ответить с цитированием
Старый 23.03.2009, 22:33   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Код:
 for k:=1 to 9 do
 for l:=1 to 8 do
Здесь должны быть не k и l, а i и j.
Код:
 for i:=1 to 9 do
 for j:=1 to 8 do
Только у вас есть еще кое-какая ошибка.
Вы зануляете нужные столбец и строку и не выводите нулевые элементы.
Но в исходной матрице также есть нули.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 23.03.2009, 22:37   #3
mouse697
 
Регистрация: 22.03.2009
Сообщений: 8
По умолчанию

заменять на i и j тоже пробовал ничего особо не меняется

после запуска в исходной матрице у меня ни одного нуля не показывает
mouse697 вне форума Ответить с цитированием
Старый 23.03.2009, 22:41   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Полный код:
Код:
program lab3pr4;
uses crt;
 var a,b:array[1..9,1..8] of integer;
  i,j,min,k,l:integer;
begin
 clrscr;
 for i:=1 to 9 do
 for j:=1 to 8 do
  a[i,j]:=trunc(random*(-50))+40;
  min:=a[1,1]; k:=1; l:=1;
 for i:=1 to 9 do
 for j:=1 to 8 do
   if a[i,j]<min then
   begin
    min:=a[i,j];
    k:=i; l:=j;
   end;
 writeln('min= ',min);
 writeln('stroka ',k,' stolbec ',l);

{ думаю что ошибка где то здесь }
 for i:=1 to 9 do
 for j:=1 to 8 do
  begin
   if i=k then b[i,j]:=0 else b[i,j]:=a[i,j];
   if j=l then b[i,j]:=0 else b[i,j]:=a[i,j];
  end;

{ далее только выводим конечный результат}

 writeln('--- isxodnij massiv---');
 for i:=1 to 9 do
   begin
    for j:=1 to 8 do
      write(a[i,j]:5);
     writeln;
    end;
 writeln;
 writeln('--- konechnij massiv--- ');
 for i:=1 to 9 do
   begin
    for j:=1 to 8 do
     if b[i,j]<>0 then write(b[i,j]:5);
     writeln;
    end;
 readkey;
end.
Выводит:
Код:
min= -8
stroka 3 stolbec 1
--- isxodnij massiv---
   13   11    5   -2   10   -2   13   -2
   19    9    8   21   19   26   -4   38
   -8   27   21   17    1    0   14   17
   12   21   -6   -1   37   24   36    8
   39   22   -1   -7    2   33   -3   -3
   -8   17    1    0   17   14    1    7
   35    4    9   11   33   14   -7    3
   14   35   20   17   27   31    2    4
   18   30   12   34   40   24   10   33

--- konechnij massiv---
   11    5   -2   10   -2   13   -2
    9    8   21   19   26   -4   38
   27   21   17    1   14   17
   21   -6   -1   37   24   36    8
   22   -1   -7    2   33   -3   -3
   17    1   17   14    1    7
    4    9   11   33   14   -7    3
   35   20   17   27   31    2    4
   30   12   34   40   24   10   33
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 23.03.2009, 22:51   #5
mouse697
 
Регистрация: 22.03.2009
Сообщений: 8
По умолчанию

спасибо конечно но у меня генерируются числа другие и в итоге считает не правильно, только что попробовал ваш код

а если заменить блок на
Код:
for i:=1 to 9 do
 for j:=1 to 8 do
  begin
   if i=k then b[i,j]:=a[i,j];
   if j=l then b[i,j]:=a[i,j] ;
  end;
то выводит только строку и столбец где расположен min элемент а можно выводить обратное ?
mouse697 вне форума Ответить с цитированием
Старый 23.03.2009, 22:55   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
у меня генерируются числа другие
Естественно другие. Притом каждый раз одни и те же. Поэтому вы и не видите нули в исходной матрице. У вас не проининциализирован генератор. Добавьте в начале программы:
Код:
randomize;
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 23.03.2009, 23:01   #7
mouse697
 
Регистрация: 22.03.2009
Сообщений: 8
По умолчанию

хорошо, теперь генерирует разные но строчку всё равно не удаляет

а можно ли просто не выводить ту строчку и столбец, если можно то как подскажите пожалуйста

и только что проверил что строка вообще не заменяется на 0, это выясняется когда убрать условие невывода нулевых значений в конце программы

Последний раз редактировалось mouse697; 23.03.2009 в 23:03.
mouse697 вне форума Ответить с цитированием
Старый 23.03.2009, 23:05   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
но строчку всё равно не удаляет
Вот, нужно исправить:

Код:
 if i=k then b[i,j]:=0 else b[i,j]:=a[i,j];
if j=l then b[i,j]:=0 else b[i,j]:=a[i,j];
на
Код:
if i=k then b[i,j]:=0
   else if j=l then b[i,j]:=0
   else b[i,j]:=a[i,j];
==============
Цитата:
а можно ли просто не выводить ту строчку и столбец, если можно то как подскажите пожалуйста
Можно:
Код:
writeln('--- konechnij massiv--- ');
 for i:=1 to 9 do
   begin
    for j:=1 to 8 do
     if (i<>k) and (j<>l) then
      begin
      write(b[i,j]:5);
      end;
     if i<>k then writeln;
    end;
Полный код:
Код:
program lab3pr4;
uses crt;
 var a,b:array[1..9,1..8] of integer;
  i,j,min,k,l:integer;
begin
 clrscr;
 randomize;
 for i:=1 to 9 do
 for j:=1 to 8 do
  a[i,j]:=trunc(random*(-50))+40;
  min:=a[1,1]; k:=1; l:=1;
 for i:=1 to 9 do
 for j:=1 to 8 do

   if a[i,j]<min then
   begin
    min:=a[i,j];
    k:=i; l:=j;
   end;
 writeln('min= ',min);
 writeln('stroka ',k,' stolbec ',l);

 for i:=1 to 9 do
  for j:=1 to 8 do
  begin
   if i=k then b[i,j]:=0
   else if j=l then b[i,j]:=0
   else b[i,j]:=a[i,j];
  end;

{ далее только выводим конечный результат}

 writeln('--- isxodnij massiv---');
 for i:=1 to 9 do
   begin

    for j:=1 to 8 do
      begin
      write(a[i,j]:5);
      end;
     writeln;
    end;
 writeln;

 writeln('--- konechnij massiv--- ');
 for i:=1 to 9 do
   begin
    for j:=1 to 8 do
     if (i<>k) and (j<>l) then
      begin
      write(b[i,j]:5);
      end;
     if i<>k then writeln;
    end;
 readkey;
end.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 23.03.2009, 23:16   #9
mouse697
 
Регистрация: 22.03.2009
Сообщений: 8
По умолчанию

все большое спасибо, осталось только получше с этим разобраться
mouse697 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
удаление строк alexk Microsoft Office Excel 24 15.02.2011 08:34
Удаление из ListBox строк S.T.A.L.K.E.R. Общие вопросы Delphi 2 27.09.2009 05:15
Удаление строк с нулями Sensy Microsoft Office Excel 3 27.02.2009 15:42
Удаление строк Dr.Badnezz Общие вопросы Delphi 1 07.10.2008 15:22
удаление строк Dime_x Microsoft Office Excel 2 07.10.2008 13:38