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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2009, 14:40   #1
HIP-H0P
 
Регистрация: 06.10.2009
Сообщений: 9
Лампочка Поменять нулевые эл-ты относит. глав.диаг.

Собственно нужно поменять элементы равные нулю на элементы, симметричные данным относительно главной диагонали.
Вот мой код:
Код:
program andrei4ik(nuLi_otnositelno_glav_diagonali);
var
a: array[1..4,1..4] of integer;
x,y,i,j:integer;
begin
For i:=1 to 4 do
For j:=1 to 4 do
begin
WriteLn('Vvedite element');
ReadLn(a[i,j]);
end;
For i:=1 to 4 do
begin
For j:=1 to 4 do
Write(a[i,j]:5);        {Выводим начальную матрицу}
WriteLn;
end;
For i:=1 to 4 do
For j:=1 to 4 do
begin
If (i=j) then     {Исключаем проверку элементов главной даигонали, и производим любой действие}
x:=1 else
begin
If a[i,j]=0 then           {Проверяем значение элемента, если равен нулю - меняем на противоположный}
y:=a[i,j];
a[j,i]:=a[i,j];
a[j,i]:=y;
end;
end;
writeLn(' ');
writeLn(' ');
For i:=1 to 4 do
begin
For j:=1 to 4 do
Write(a[i,j]:5);                 {Выводим полученную матрицу}
WriteLn;
end;
Readln;
end.
end.
Проблема в том, что программа обнуляет все элементы кроме элементов глав. диагонали, что делать не знаю
HIP-H0P вне форума Ответить с цитированием
Старый 11.11.2009, 19:40   #2
anGeee
Пользователь
 
Аватар для anGeee
 
Регистрация: 18.11.2008
Сообщений: 94
По умолчанию

Я бы реализовал замену так :
Код:
k := 1;
for i := 2 to 4 do
  begin
    for j := 1 to k do
      if ((a[i,j]=0)and(a[j,i]<>0))or((a[i,j]<>0)and(a[j,i]=0)) then
        begin
          y := a[i,j];
          a[i,j] := a[j,i];
          a[j,i] := y;
        end;
    inc(k);
  end;

Последний раз редактировалось anGeee; 11.11.2009 в 21:08.
anGeee вне форума Ответить с цитированием
Старый 11.11.2009, 21:00   #3
HIP-H0P
 
Регистрация: 06.10.2009
Сообщений: 9
По умолчанию

Все, всем спс, я решил задачу:
Код:
program andrei4ik(nuLi_otnositelno_glav_diagonali);
var
a: array[1..4,1..4] of integer;
x,y,i,j:integer;
begin
For i:=1 to 4 do
For j:=1 to 4 do
begin
WriteLn('Vvedite element');
ReadLn(a[i,j]);
end;
For i:=1 to 4 do
begin
For j:=1 to 4 do
Write(a[i,j]:5);        {Выводим начальную матрицу}
WriteLn;
end;
For i:=1 to 4 do
For j:=1 to 4 do
begin
y:=1;          {зачем это действе - не знаю, но пусть будет}
If a[i,j]=0 then  {Проверяем значение элемента, если равен нулю - меняем на противоположный}
begin          
y:=a[i,j];
a[i,j]:=a[j,i];
a[j,i]:=y;
end 
else 
y:=12;  {зачем это действе - не знаю, но пусть будет}
end;
writeLn(' ');
writeLn(' ');
For i:=1 to 4 do
begin
For j:=1 to 4 do
Write(a[i,j]:5);                 {Выводим полученную матрицу}
WriteLn;
end;
Readln;
end.
end.
anGeee, интересный ход решения, но зачем нужна перем. k, зачем dec? Почему сразу нельзя сделать так:
Код:
for j:=1 to 3 do
HIP-H0P вне форума Ответить с цитированием
Старый 11.11.2009, 21:04   #4
anGeee
Пользователь
 
Аватар для anGeee
 
Регистрация: 18.11.2008
Сообщений: 94
По умолчанию

Потому что я шел по элементам матрицы, которые выше главной диагонали.
Вот мне интересно, какой результат выдаст ваша программа, обработав матрицу
0 0 0 1
0 0 1 2
0 1 2 3
1 2 3 4
Почему-то мне кажется, что ничего не поменяется...
anGeee вне форума Ответить с цитированием
Старый 11.11.2009, 21:47   #5
HIP-H0P
 
Регистрация: 06.10.2009
Сообщений: 9
По умолчанию

anGeee, так правильно, ничего и не должно поменяться!
Вот задание:
Поменять местами элементы двумерного массива равные нулю на соответствующие элементы, расположенные симметрично относительно главной диагонали.
У вас все нули и так симметричны.....
HIP-H0P вне форума Ответить с цитированием
Старый 11.11.2009, 21:50   #6
anGeee
Пользователь
 
Аватар для anGeee
 
Регистрация: 18.11.2008
Сообщений: 94
По умолчанию

Ох ты ж блин, я имел в виду матрицу
1 0 0 0
1 2 0 0
1 2 3 0
1 2 3 4
Такую матрицу ваш алгоритм поменяет ?
ПС Что-то со мной не то - думаю одно, а пишу другое )
anGeee вне форума Ответить с цитированием
Старый 11.11.2009, 22:00   #7
HIP-H0P
 
Регистрация: 06.10.2009
Сообщений: 9
По умолчанию

мде.... не поменял... а где ошибка? что то я вообще не понимаю... объясните пожалуйста
HIP-H0P вне форума Ответить с цитированием
Старый 11.11.2009, 22:04   #8
anGeee
Пользователь
 
Аватар для anGeee
 
Регистрация: 18.11.2008
Сообщений: 94
По умолчанию

Просто вы просматриваете все элементы матрицы, при этом меняя их.
То есть, например, у вас элемент (1,2) равен нулю, а элемент (2,1) равен, например, 5. Вот вы в первый раз встретили элемент (1,2), увидели там ноль и поменли его с элементом (2,1). Теперь (2,1) равен нулю. Однако, вскоре вы добираетесь до элемента (2,1) - он равен нулю.. И вы меняете его обратно..
Попробуйте мой вариант. Там я прохожу по элементам ниже главной диагонали, просматривая сразу два элемента (i,j) и (j,i) - если один из них нуль, то меняем их местами.
anGeee вне форума Ответить с цитированием
Старый 11.11.2009, 23:09   #9
HIP-H0P
 
Регистрация: 06.10.2009
Сообщений: 9
По умолчанию

Спасиб огромное, работает!
Код:
program andrei4ik(nuLi_otnositelno_glav_diagonali);
var
a: array[1..4,1..4] of integer;
x,y,i,j:integer;
begin
For i:=1 to 4 do
For j:=1 to 4 do
begin
WriteLn('Vvedite element');
ReadLn(a[i,j]);
end;
For i:=1 to 4 do
begin
For j:=1 to 4 do
Write(a[i,j]:5);        
WriteLn;
end;
x:=1;
For i:=2 to 4 do
begin
For j:=1 to x do
begin        
If (a[i,j]=0) or (a[j,i]=0) then 
begin
y:=a[i,j];
a[i,j]:=a[j,i];
a[j,i]:=y;
end
else  
end;
inc(x);
end;
writeLn(' ');
writeLn(' ');
For i:=1 to 4 do
begin
For j:=1 to 4 do
Write(a[i,j]:5);             
WriteLn;
end;
Readln;
end.
end.
Только я вот эту вашу строчку
Код:
 if ((a[i,j]=0)and(a[j,i]<>0))or((a[i,j]<>0)and(a[j,i]=0)) then
заменил так:
Код:
 if (a[i,j]=0) or (a[j,i]=0) then
Т.к. не вижу смысла в проверке второго элемента, на его "не равность нулю".
anGeee, спасиб огромное!

Последний раз редактировалось HIP-H0P; 11.11.2009 в 23:13.
HIP-H0P вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дана матрица 6х4, найти и выдать на экран строки содержащие нулевые элементы >>arty<< Помощь студентам 19 04.07.2009 13:59
Удалять нулевые эл. массива quartzz Общие вопросы C/C++ 6 28.05.2009 13:44
поменять местами научите Паскаль, Turbo Pascal, PascalABC.NET 13 08.01.2009 13:43
ПОменять значения местами qip2005 Паскаль, Turbo Pascal, PascalABC.NET 6 24.12.2008 23:38
Нулевые элементы в матрицах ufoman Помощь студентам 5 26.04.2007 20:08