0 / 0 / 0
Регистрация: 26.11.2012
Сообщений: 15
1

Проверить матрицу на рефлексивность, симметричность и транзитивность

30.07.2013, 02:23. Показов 7574. Ответов 12
Метки нет (Все метки)

Ошибка: массив имеет другое количество размерностей
Задание: проверить матрицу на рефлексивность, симметричность и транзитивность
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
uses crt;
const n = 3;
var a: array[1..n, 1..n] of boolean;
    i, j, k: integer;
    reflexivity, symmetry, transivity: boolean;
 
begin randomize; clrscr;
     {Initilization}
 
     reflexivity := true;
     symmetry    := true;
     transivity  := true;
 
     {Header output}
     write(' ');
     for i:= 1 to n do
         write('|', i);
     writeln;
 
     write(' ');
     for i := 1 to 2 * n do
         write('_');
     writeln;
 
     {Array generation}
     for i := 1 to n do
     begin
          write(i, '|');
          for j := 1 to n do
          begin
               a[i][j] := boolean(random(2));  {----массив имеет другое количество размерностей}
               write(integer(a[i][j]), ' ');
          end;
          writeln;
     end;
 
     {reflexivity check}
     for i := 1 to n do
     begin
          if not a[i][i] then reflexivity := false;
     end;
     writeln('Reflexivity: ', reflexivity);
 
     {symmetry check}
     for i := 1 to n do
     begin
          for j := i + 1 to n do
          begin
               if a[i][j] <> a[j][i] then
               begin
                    symmetry := false;
                    break;
               end;
          end;
 
          if not symmetry then break;
     end;
     writeln('Symmetry: ', symmetry);
 
     {transivity check}
     for i := 1 to n do
     begin
          for j := 1 to n do
          begin
               for k := 1 to n do
               begin
                    if a[i][k] and a[k][j] and not a[i][j] then
                       transivity := false;
               end;
          end;
     end;
     writeln('Transivity: ', transivity);
 
     if reflexivity and symmetry and transivity then
        writeln('Equivalence relation')
     else writeln('NOT equivalence relation');
 
     readln;
end.
может кто-нибудь поможет разобраться в чем дело?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.07.2013, 02:23
Ответы с готовыми решениями:

Проверить на симметричность
Проверить целочисленную матрицу NxM на симметричность относительно строк. Как объяснил...

Как проверить симметричность в массиве строк?
Дан массив строк.Если стока симметрична,то... Подскажите как проверить симметричность в массиве...

Матрица. Проверить симметричность относительно побочной диагонали
спс большое, можете еще эту посмотреть - Дана матрица, надо проверить симметричность (симметрия...

Проверить множество P на рефлексивность, симметричность, антисимметричность и транзитивность. P={(x,y) | x,y принадлежит
Проверить множество P на рефлексивность, симметричность, антисимметричность и транзитивность....

12
Почетный модератор
64271 / 47570 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
30.07.2013, 07:44 2
Программа написана для Турбо Паскаль и не работает в АВС.
1. Обозначать матрицу как a[i][j] можно, и даже нужно, когда строки или столбцы матрицы описаны как линейный массив, иначе можно писать только так a[i,j].
2. Не допускается прямое приведение типов, исправил
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
uses crt;
const n = 3;
var a: array[1..n, 1..n] of boolean;
    i, j, k: integer;
    reflexivity, symmetry, transivity: boolean;
 
begin randomize; clrscr;
     {Initilization}
 
     reflexivity := true;
     symmetry    := true;
     transivity  := true;
 
     {Header output}
     write(' ');
     for i:= 1 to n do
         write('|', i);
     writeln;
 
     write(' ');
     for i := 1 to 2 * n do
         write('_');
     writeln;
 
     {Array generation}
     for i := 1 to n do
     begin
          write(i, '|');
          for j := 1 to n do
           begin
            k:=random(2);
            a[i,j] := k=0;  {----массив имеет другое количество размерностей}
            write(k, ' ');
          end;
          writeln;
     end;
 
     {reflexivity check}
     for i := 1 to n do
     begin
          if not a[i,i] then reflexivity := false;
     end;
     writeln('Reflexivity: ', reflexivity);
 
     {symmetry check}
     for i := 1 to n do
     begin
          for j := i + 1 to n do
          begin
               if a[i,j] <> a[j,i] then
               begin
                    symmetry := false;
                    break;
               end;
          end;
 
          if not symmetry then break;
     end;
     writeln('Symmetry: ', symmetry);
 
     {transivity check}
     for i := 1 to n do
     begin
          for j := 1 to n do
          begin
               for k := 1 to n do
               begin
                    if a[i,k] and a[k,j] and not a[i,j] then
                       transivity := false;
               end;
          end;
     end;
     writeln('Transivity: ', transivity);
 
     if reflexivity and symmetry and transivity then
        writeln('Equivalence relation')
     else writeln('NOT equivalence relation');
 
     readln;
end.
2
0 / 0 / 0
Регистрация: 26.11.2012
Сообщений: 15
30.07.2013, 13:54  [ТС] 3
Цитата Сообщение от Puporev Посмотреть сообщение
a[i,j] := k=0; *{----массив имеет другое количество размерностей}
элементу массива присваивается k, а дальше - k=0; непойму что означает?. спасибо
0
Почетный модератор
64271 / 47570 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
30.07.2013, 14:10 4
Если k=0 a[i,j]=true иначе a[i,j]=false
0
0 / 0 / 0
Регистрация: 05.06.2017
Сообщений: 41
27.10.2017, 23:40 5
Puporev, Здравствуйте,а как сделать вот в этой программе заполнение с клавиатуры?
0
Почетный модератор
64271 / 47570 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
28.10.2017, 09:48 6
Лучший ответ Сообщение было отмечено ZX Spectrum-128 как решение

Решение

Поскольку не знаю какой у Вас Паскаль,написал для любого.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
writeln('Введите элементы матрицы 0 и 1 ');
for i:=1 to n do
for j:=1 to n do
 begin
  repeat
   write('a[',i,',',j,']=');
   readln(k);
  until k in [0,1];
  a[i,j]:=k=1;
 end;
{Initilization}
 reflexivity := true;
 symmetry    := true;
 transivity  := true;
{Header output}
 write(' ');
 for i:= 1 to n do
 write('|', i);
 writeln;
 write(' ');
 for i := 1 to 2 * n do
 write('_');
 writeln;
 {Array generation}
 for i := 1 to n do
  begin
   write(i, '|');
   for j := 1 to n do
   if a[i,j] then write('1 ')
   else write('0 ');
   writeln;
  end;
1
0 / 0 / 0
Регистрация: 05.06.2017
Сообщений: 41
29.10.2017, 12:10 7
Puporev, Спасибо, большое
0
0 / 0 / 0
Регистрация: 05.06.2017
Сообщений: 41
03.11.2017, 19:17 8
Puporev, Можно еще один вопрос. Как сделать,допустим,ты вводишь 7 чисел от 0 до 9(включительно), и паскаль по ним строил матрицу нулей и единиц,при этом,если число из строки равно числу из столбца там ставится "0". Как это сделать?
0
Почетный модератор
64271 / 47570 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
03.11.2017, 19:27 9
Ничего не понятно.
0
0 / 0 / 0
Регистрация: 05.06.2017
Сообщений: 41
03.11.2017, 20:02 10
Puporev, вводим числа с клавиатуры от 0 до 9(включительно) любые 7 чисел,он их присваивает строке и столбцу и по ним строит матрицу 0 и 1. Если число в строке равно числу в столбце он напротив них 0 ставит
0
0 / 0 / 0
Регистрация: 05.06.2017
Сообщений: 41
03.11.2017, 20:05 11
Puporev, так нагляднее будет,мы вводим числа 1,2,3,4,5 надо чтобы он по ним матрицу сформировал
Миниатюры
Проверить матрицу на рефлексивность, симметричность и транзитивность  
0
Почетный модератор
64271 / 47570 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
03.11.2017, 21:06 12
Лучший ответ Сообщение было отмечено ZX Spectrum-128 как решение

Решение

Примерно так.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
const n=7;
var a:array[0..n,0..n] of byte;
    i,j:byte;
begin
randomize;
for i:=1 to n do
 begin
  a[0,i]:=random(10);
  a[i,0]:=random(10);
 end;
for i:=1 to n do
for j:=1 to n do
if a[i,0]=a[0,j] then a[i,j]:=0 else a[i,j]:=1;
write('   ');
for i:=1 to n do
write(a[0,i]:3);
writeln;
for i:=1 to 3*(n+1) do write('-');
writeln;
for i:=1 to n do
 begin
  write(a[i,0],' |');
  for j:=1 to n do
  write(a[i,j]:3);
  writeln
 end
end.
0
0 / 0 / 0
Регистрация: 05.06.2017
Сообщений: 41
05.11.2017, 22:45 13
Puporev, да,но мне как бы вручную числа надо вводить
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.11.2017, 22:45
Помогаю со студенческими работами здесь

Свойства нечеткого отношения (рефлексивность, симметричность, транзитивность)
Прошу помощи! нужна программа, которая реализует проверку свойств нечеткого...

Отношение исследовать на рефлексивность, антирефлексивность, симметричность, антисимметричность, транзитивность
Всем доброго времени суток! Есть задача и мало времени для её решения. Просто крик о помощи! ...

Исследовать рефлексивность, симметрию, транзитивность
исследовать рефлексивность, симметрию, транзитивность отношения заданного на множественные Х при...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru