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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2008, 08:24   #1
AlexLAN
 
Аватар для AlexLAN
 
Регистрация: 15.11.2008
Сообщений: 9
Вопрос Проблема с симметричной матрицой

Проблема в следующей задаче:
Квадратная матрица, симметричная относительно главной диагонали, задана верхним треугольником в виде одномерного массива. Восстановить исходную матрицу и напечатать ее по строкам.

Вот то что я уже сделал:
Код:
var
   A:array [1..100,1..100] of integer;
   B:array [1..100] of integer;
   I,J,N,c:integer;
Begin
     Writeln ('Vvedite razmer matricy');
     readln(N);
     Writeln ('Vvedite elementy odnomernogo massiva');
     for I:=1 to N do
     readln(B[i]);
     for I:= 1 to N do begin
     for J:= 1 to N do
     if (J>I) then A[i,j]:=B[i];
     if (I>J) then A[j,i]:=B[i];
     end;
     for I:=1 to N do begin
     for J:=1 to N do
     write (' ',A[i,j]);
     writeln;
     end;

readln;
end.
Проблема в том, что у меня заполняеться только половина матрицы а вторая половина, та что ниже главной диагонали, вся заполнена нулями.

Если я правильно понял смысл задачи то нужно сформировать одномерный массив и его элементы перенести в матрицу так, чтобы они были симметричны относительно главной оси.
Но как это сделать?
Подскажите пожалуйста!
Есть такие люди которые пока не наступит критический момент - ничего делать не будут. Но когда он наступает трудоголизм просыпаться слишком сильно.
AlexLAN вне форума Ответить с цитированием
Старый 20.12.2008, 09:15   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Надо заполнить и вторую половину матрицы.

какие индексы будут у элемента симметричного относительно диагонали если исходный элемент имеет индексы r (строка) и c (столбец).
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 20.12.2008 в 09:17.
evg_m вне форума Ответить с цитированием
Старый 20.12.2008, 10:47   #3
AlexLAN
 
Аватар для AlexLAN
 
Регистрация: 15.11.2008
Сообщений: 9
По умолчанию

Мне понятно что нужно заполнить и вторую половину.
Я могу запонить матрицу полностью но тогда она будет выглядеть к примеру так:
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
5 5 5 5 5
А мне надо вот так:
1 2 3 4 5
2 2 3 4 5
3 3 1 4 5
4 4 4 1 5
5 5 5 5 1
А вот что получаеться:
0 1 2 3 4
0 0 1 2 3
0 0 0 1 2
0 0 0 0 1
0 0 0 0 0
Действие типа A[i,j]:=A[j,i] не помогает
Есть такие люди которые пока не наступит критический момент - ничего делать не будут. Но когда он наступает трудоголизм просыпаться слишком сильно.

Последний раз редактировалось AlexLAN; 20.12.2008 в 12:35.
AlexLAN вне форума Ответить с цитированием
Старый 20.12.2008, 17:22   #4
Костя КС
Пользователь
 
Аватар для Костя КС
 
Регистрация: 22.01.2008
Сообщений: 78
По умолчанию

получается симметрично, почти как ты хотел.. но не совсем

Код:
program qw;
var
   A:array [1..100,1..100] of integer;
   B:array [1..100] of integer;
   I,J,N,c:integer;
Begin
     Writeln ('Vvedite razmer matricy');
     readln(N);
     Writeln ('Vvedite elementy odnomernogo massiva');
     for I:=1 to N do
     readln(B[i]);
     for I:= 1 to N do begin
     for J:= 1 to N do   A[i,j]:=B[j];
     end;
     c := 2;
     for I:= 1 to N do begin
     for J:= 1 to N do if j<c then   A[i,j]:=A[j,i];
     c := c+1;
     end;  
     for I:=1 to N do begin
     for J:=1 to N do
     write (' ',A[i,j]);
      writeln(' ');
     end;
end.
Костя КС вне форума Ответить с цитированием
Старый 20.12.2008, 17:24   #5
Костя КС
Пользователь
 
Аватар для Костя КС
 
Регистрация: 22.01.2008
Сообщений: 78
По умолчанию

Цитата:
А мне надо вот так:
1 2 3 4 5
2 2 3 4 5
3 3 1 4 5
4 4 4 1 5
5 5 5 5 1
я не понимаю откуда берутся такие числа на главной диагонали
Костя КС вне форума Ответить с цитированием
Старый 20.12.2008, 20:20   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

for j:=1 to n //проход по верхней
for i:=j+1 to n //треугольной части без главной диагонали
a[i,j]:=a[j,i];

for i:=j to n //а это если нужно включить и главную диагональ
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 20.12.2008, 20:24   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

k:=1;

for i:=1 to N
for j:=i to N
begin
a[i,j]:=b[k];
k:=k+1;
end; //формирование верхнетреугольной матрицы из одномерного массива

for i:=1 to N
for j:=i+1 to N
a[j,i]:=a[i,j]; // заполнение нижнего треугольника
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 21.12.2008, 06:30   #8
AlexLAN
 
Аватар для AlexLAN
 
Регистрация: 15.11.2008
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Костя КС Посмотреть сообщение
я не понимаю откуда берутся такие числа на главной диагонали
Это я случайно не правильно набрал

Спасибо что откликнулись! Я вам очень благодарен!
Есть такие люди которые пока не наступит критический момент - ничего делать не будут. Но когда он наступает трудоголизм просыпаться слишком сильно.
AlexLAN вне форума Ответить с цитированием
Старый 12.04.2011, 22:03   #9
ZhannaPostnykh
Новичок
Джуниор
 
Регистрация: 12.04.2011
Сообщений: 1
По умолчанию

Помогите, пожалуйста.
Пишу программу для определения, симметрична ли матрица относительно главное диагонали?
ввод матрицы должен быть произведен с текстового файла на компьютере.
Вроде написала, но похоже накосячила

Program my_tt
const n=5;
type matrix=array[1..n,1..n] of integer;
Var x:matrix;
i.j:integer;
s:boolean;
f1:text;
Begin
Assign (f1,' :\matrix.txt');
reset(f1);
Writeln('Enter matrix 'n:2);
for i to n do
begin
for j to n do
read( :\ \matrix.txt',x[i,j]);
readln;
end;
s:=true;
for i:=1 to n do
begin
For j:=1 to n do
begin
if x[i,j]<>x[j,i] then
s:=false
end;
end;
if s then write('yes') else write('no');
readln;
close(f1);
end.
ZhannaPostnykh вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
turbo C работа с матрицой ddos Помощь студентам 9 01.06.2008 22:37
Проблема. kupulau Общие вопросы C/C++ 19 05.02.2008 21:11
проблемы с матрицой!!! kommunist Помощь студентам 4 19.10.2007 09:07