Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/34: Рейтинг темы: голосов - 34, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 26.11.2012
Сообщений: 15
1

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

30.07.2013, 02:23. Показов 6171. Ответов 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
Модератор
64056 / 47472 / 32727
Регистрация: 18.05.2008
Сообщений: 115,185
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
Модератор
64056 / 47472 / 32727
Регистрация: 18.05.2008
Сообщений: 115,185
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
Модератор
64056 / 47472 / 32727
Регистрация: 18.05.2008
Сообщений: 115,185
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
Модератор
64056 / 47472 / 32727
Регистрация: 18.05.2008
Сообщений: 115,185
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
Миниатюры
Проверить матрицу на рефлексивность, симметричность и транзитивность  
Модератор
64056 / 47472 / 32727
Регистрация: 18.05.2008
Сообщений: 115,185
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® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.