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

Определить свойства заданного бинарного отношения: рефлексивность, симметричность, антисимметричность, транзитивность

25.08.2019, 16:49. Показов 4942. Ответов 3
Метки нет (Все метки)

Здравствуйте!
Помогите пожалуйста переписать программу с Паскаля на C++

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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
[PASCAL]
const
  Nmax = 15; //Максимальное количество элементов множества А
 
type
  T = Char;
  TPair = Record
    a, b: T;
  end;
  TSet = Array[1..Nmax] of T;
  TMatrix = Array[1..Nmax, 1..Nmax] of Byte;
 
//Сортировка выбором по неубыванию
procedure Sort(var A: TSet; const N: Integer);
var
  i, j, k: Integer;
  tmp: T;
begin
  for i := 1 to N - 1 do begin
    k := i;
    for j := i + 1 to N do
      if A[j] < A[k] then k := j;
    tmp := A[i];
    A[i] := A[k];
    A[k] := tmp;
  end;
end;
 
//Возвращает индекс элемента x в А. Если такой элемент отсутствует, возвращает -1
function Search(const x: T; const A: TSet; const N: Integer): Integer;
var
  i: Integer;
begin
  for i := 1 to N do
    if x = A[i] then begin
      Search := i;
      Exit;
    end;
  Search := -1;
end;
 
//Проверка на рефлексивность
function Reflex(const M: TMatrix; const N: Integer): Boolean;
var
  i: Integer;
begin
  Reflex := False;
  for i := 1 to N do
    if M[i, i] = 0 then Exit;
  Reflex := True;
end;
 
//Проверка на симметричность
function Symmetry(const M: TMatrix; const N: Integer): Boolean;
var
  i, j: Integer;
begin
  Symmetry := False;
  for i := 1 to N - 1 do
    for j := i + 1 to N do
      if M[i, j] <> M[j, i] then Exit;
  Symmetry := True;
end;
 
//Проверка на антисимметричность
function Antisymmetry(const M: TMatrix; const N: Integer): Boolean;
var
  i, j: Integer;
begin
  Antisymmetry := False;
  for i := 1 to N do
    for j := 1 to N do
      if (i <> j) and (M[i, j] * M[j, i] <> 0) then Exit;
  Antisymmetry := True;
end;
 
//Проверка на транзистивность
function Transit(const M: TMatrix; const N: Integer): Boolean;
var
  i, j, k: Integer;
  S: TMatrix;
begin
  Transit := False;
  for i := 1 to N do
    for j := 1 to N do begin
      S[i, j] := 0;
      for k := 1 to N do
        S[i, j] := S[i, j] or M[i, k] and M[k, j];
    end;
  for i := 1 to N do
    for j := 1 to N do
       if M[i, j] < S[i, j] then Exit;
  Transit := True;
end;
 
//Меню
procedure Keys;
begin
  ClrScr;
  WriteLn('Выберите действие.');
  WriteLn;
  WriteLn('1 - показать список элементов множества A');
  WriteLn('2 - показать список пар бинарного отношения');
  WriteLn('3 - показать матрицу бинарного отношения');
  WriteLn('4 - показать свойства бинарного отношения');
  WriteLn('5 - изменить одну пару бинарного отношения');
  WriteLn('6 - удалить одну пару бинарного отношения');
  WriteLn('7 - добавить одну пару бинарного отношения');
  WriteLn('0 - очистить экран');
  WriteLn('Esc - закрыть программу');
  WriteLn
end;
 
var
  i, j, N, k, z: Integer;
  x, y: T;
  A: TSet;
  M: TMatrix;
  P: Array[1..Nmax] of TPair;
  F: Boolean;
  v: Char;
begin
  ClrScr;
  WriteLn('Введите множество А, через пробел');
  N := 0;
  while not SeekEoLn do begin
    Inc(N);
    Read(A[N]);
  end;
  Sort(A, N);
  F := False;
  i := 1;
  while i < N do begin
    if A[i] = A[i + 1] then begin
      F := True;
      Dec(N);
      for j := i to N do
        A[j] := A[j + 1];
    end
    else
      Inc(i);
  end;
  if F then WriteLn('Повторяющиеся элементы множества удалены.');
  for i := 1 to Nmax do
    for j := 1 to Nmax do
       M[i, j] := 0;
  WriteLn;
  WriteLn('Введите список пар, каждую новую пару - в новой строке, а её элементы - через пробел.');
  WriteLn('После завершения ввода (вместо ввода новой пары) нажмите клавишу Enter.');
  Reset(Input);
  k := 0;
  while not SeekEoLn do begin
    Read(x);
    if SeekEoLn then Reset(Input);
    ReadLn(y);
    if (Search(x, A, N) = -1) or (Search(y, A, N) = -1) then begin
       WriteLn('Элемент не из множества A. Пара будет пропущена.');
       Continue;
    end;
    F := False;
    for i := 1 to k do
      if (P[i].a = x) and (P[i].b = y) then begin
         WriteLn('Повторная пара, пропущено.');
         F := True;
         Break;
      end;
    if F then Continue;
    M[Search(x, A, N), Search(y, A, N)] := 1;
    Inc(k);
    P[k].a := x;
    P[k].b := y;
  end;
  Keys;
  repeat
    v := ReadKey;
    case v of
    '1':
      begin
        WriteLn('Элементы множества A:');
        for i := 1 to N do
          Write(A[i], ' ');
        WriteLn;
      end;
    '2':
      begin
        WriteLn('Список пар бинарного отношения:');
        for i := 1 to k do
          WriteLn(i, '. (', P[i].a, ', ', P[i].b, ')');
      end;
    '3':
      begin
        WriteLn('Матрица бинарного отношения:');
        Write('    ');
        for i := 1 to N do
          Write(A[i]:3, ' ');
        WriteLn;
        for i := 1 to N do
        begin
          Write(A[i]:3, ' ');
          for j := 1 to N do
            Write(M[i, j]:3, ' ');
          WriteLn;
        end;
      end;
    '4':
      begin
        WriteLn('Введённое отношение');
        if Symmetry(M, N)     then  WriteLn('- симметрично')     else WriteLn('- не симметрично');
        if Antisymmetry(M, N) then  WriteLn('- антисимметрично') else WriteLn('- не антисимметрично');
        if Reflex(M, N)       then  WriteLn('- рефлексивно')     else WriteLn('- не рефлексивно');
        if Transit(M, N)      then  WriteLn('- транзитивно')     else WriteLn('- не транзитивно');
      end;
    '5':
      begin
        WriteLn('Введите номер пары для изменения:');
        {$I-}
        ReadLn(z);
        {$I+}
        while IOResult <> 0 do begin
          WriteLn('Неправильный ввод. Повторите:');
          {$I-}
          ReadLn(z);
          {$I+}
        end;
        if (z > k) or (z < 1) then
          WriteLn('Пара отсутствует.')
        else begin
          WriteLn('Введите новое значение пары через пробел:');
          Reset(Input);
          Read(x);
          if SeekEoLn then Reset(Input);
          ReadLn(y);
          if (Search(x, A, N) = -1) or (Search(y, A, N) = -1) then
            WriteLn('Значения должны быть из множества А. Изменения не произведены.')
          else begin
            F := False;
            for i := 1 to k do
              if (P[i].a = x) and (P[i].b = y) then begin
                WriteLn('Повторная пара, пропущено.');
                F := True;
                Break;
              end;
            if not F then begin
              M[Search(P[z].a, A, N), Search(P[z].b, A, N)] := 0;
              P[z].a := x;
              P[z].b := y;
              M[Search(x, A, N), Search(y, A, N)] := 1;
              WriteLn('Готово.');
            end;
          end;
        end;
      end;
    '6':
      begin
        WriteLn('Введите номер пары для её удаления:');
        {$I-}
        ReadLn(z);
        {$I+}
        while IOResult <> 0 do begin
          WriteLn('Неправильный ввод. Повторите:');
          {$I-}
          ReadLn(z);
          {$I+}
        end;
        if (z > k) or (z < 1) then
          WriteLn('Пара отсутствует:')
        else begin
          M[Search(P[z].a, A, N), Search(P[z].b, A, N)] := 0; //Удаление пары из матрицы
          Dec(k);
          for i := z to k do  //Удаление пары из списка
            P[i] := P[i + 1];
          WriteLn('Готово.');
        end;
      end;
    '7':
      begin
        WriteLn('Введите пару элементов:');
        Reset(Input);
        Read(x);
        if SeekEoLn then Reset(Input);
        ReadLn(y);
        if (Search(x, A, N) = -1) or (Search(y, A, N) = -1) then
          WriteLn('Значения должны быть из множества А. Добавление не произведено.')
        else begin
          F := False;
          for i := 1 to k do
            if (P[i].a = x) and (P[i].b = y) then begin
              WriteLn('Повторная пара, пропущено.');
              F := True;
              Break;
            end;
          if not F then begin
            Inc(k);
            P[k].a := x;
            P[k].b := y;;
            M[Search(P[k].a, A, N), Search(P[k].b, A, N)] := 1;
          end;
        end;
        if not F then WriteLn('Готово.');
      end;
      '0': Keys;
    end;
  until v = #27;
end.
[/PASCAL]
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.08.2019, 16:49
Ответы с готовыми решениями:

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

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

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

Проверить матрицу на рефлексивность, симметричность и транзитивность
Ошибка: массив имеет другое количество размерностей Задание: проверить матрицу на рефлексивность,...

3
Модератор
Эксперт С++
10906 / 9014 / 5419
Регистрация: 18.12.2011
Сообщений: 24,097
25.08.2019, 16:58 2
Не уверен, что кто-то станет переводить такое количество кода.
Лучше напишите постановку задачи.
Тогда можно будет найти здесь уже готовый C++ код.
0
1 / 1 / 0
Регистрация: 15.04.2016
Сообщений: 39
25.08.2019, 17:26  [ТС] 3
Цитата Сообщение от zss Посмотреть сообщение
Не уверен, что кто-то станет переводить такое количество кода.
Лучше напишите постановку задачи.
Тогда можно будет найти здесь уже готовый C++ код.
Это лабораторная по дискретной математике.

Бинарное отношение R на конечном множестве A: R является подмножеством A2 – задано списком упорядоченных пар вида (a,b), где a,b принадлежат A. Требования на множество – те же, что и раньше (в нем не должно встречаться повторяющихся элементов, кроме того, оно должно быть упорядочено по возрастанию). Программа должна определять свойства заданного отношения: рефлексивность, симметричность, антисимметричность, транзитивность. Проверку свойств выполнять по матрице бинарного отношения, сопровождая необходимыми пояснениями.
Работа программы должна происходить следующим образом:
1. На вход подается множество A из n элементов и список упорядоченных пар, задающий отношение R (мощность множества, элементы и пары вводятся с клавиатуры).
2. Результаты выводятся на экран (с необходимыми пояснениями) в следующем виде:
а) матрица бинарного отношения размера nxn;
б) список свойств данного отношения.
В матрице отношения строки и столбцы должны быть озаглавлены (элементы исходного множества, упорядоченного по возрастанию).
3. После вывода результатов предусмотреть возможность изменения заданного бинарного отношения либо выхода из программы.
Это изменение может быть реализовано различными способами. Например, вывести на экран список пар (с номерами) и по команде пользователя изменить что-либо в этом списке (удалить какую-то пару, добавить новую, изменить имеющуюся), после чего повторить вычисления, выбрав соответствующий пункт меню. Другой способ – выполнять редактирование непосредственно самой матрицы отношения, после чего также повторить вычисления. Возможным вариантом является автоматический пересчет – проверка свойств отношения – после изменения любого элемента матрицы.
Дополнительно: предусмотреть не только изменение отношения, но и ввод нового множества (размер нового множества может тоже быть другим).
0
Модератор
Эксперт С++
10906 / 9014 / 5419
Регистрация: 18.12.2011
Сообщений: 24,097
25.08.2019, 17:31 4
НУ вот, есть, например, такой код:
Свойства нечеткого отношения (рефлексивность, симметричность, транзитивность)
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.08.2019, 17:31

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Найти мощность этого бинарного отношения, определить его свойства
В пространстве на прямой x=1+2t, y= -2-4t, z=3+2t,t€(-inf;+inf), заданы точки M1,M2,...,M5,...

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

Выявить свойства бинарного отношения
Здравствуйте. Не могу справится с задачей, подскажите как ее решить:

Указать свойства данного бинарного отношения
Указать свойства бинарного отношения p (рефлексивность, антирефлексивность, симметричность,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.