Advertisement
_who___

Lab5

Apr 13th, 2023 (edited)
590
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.80 KB | None | 0 0
  1. def reverse_relation(R):
  2.     l = len(R)
  3.     s = [[0 for j in range(l)] for i in range(l)]
  4.     for i in range(0, len(R)):
  5.         for j in range(0, len(R)):
  6.             s[j][i] = R[i][j]
  7.     return s
  8.  
  9.  
  10. def analyze_relation(R):
  11.     p1 = 0
  12.     p2 = 0
  13.     p3 = 0
  14.     for i in range(0, len(R)):
  15.         for j in range(0, len(R)):
  16.             if (i == j) & (R[i][j] == True):
  17.                 p1 += 1
  18.             if R[i][j] <= R[j][i]:
  19.                 p2 += 1
  20.     if p1 == len(R):
  21.         reflexive = True
  22.     else:
  23.         reflexive = False
  24.     if p2 == len(R) * len(R):
  25.         symmetric = True
  26.     else:
  27.         symmetric = False
  28.     for i in range(0, len(R)):
  29.         for j in range(0, len(R)):
  30.             for x in range(0, len(R)):
  31.                 if ((R[i][j] & R[j][x]) <= R[i][x]):
  32.                     p3 += 1
  33.     if p3 == len(R) * len(R) * len(R):
  34.         transitive = True
  35.     else:
  36.         transitive = False
  37.  
  38.     print("Рефлексивность:", reflexive)
  39.     print("Симметричность:", symmetric)
  40.     print("Транзитивность:", transitive)
  41.     print("Сюръективность:", is_surjective(R))
  42.     print("Инъективность:", is_injective(R))
  43.  
  44.  
  45. def is_surjective(R):
  46.     reverse_relation(R)
  47.     for i in range(len(R)):
  48.         if sum(R[i]) == 0:
  49.             return False
  50.     return True
  51.  
  52.  
  53. def is_injective(R):
  54.     for i in range(len(R)):
  55.         for j in range(len(R)):
  56.             if R[i][j] == 1 and sum([R[k][j] for k in range(len(R))]) > 1:
  57.                 return False
  58.     return True
  59.  
  60. def print_relation(R):
  61.     for row in R:
  62.         print(list(map(int, row)))
  63.  
  64.  
  65. A1 = ["Иванов", "Петров", "Сидоров", "Петечкин", "Васечкин"]
  66. n1 = len(A1)
  67.  
  68. R1 = [[0 for _ in range(n1)] for _ in range(n1)]
  69. R1_list = [("Иванов", "Петров"), ("Петров", "Сидоров"),
  70.            ("Иванов", "Петечкин")]  # отношение задано перечислением своих элементов
  71.  
  72. for p in R1_list:
  73.     ind1 = A1.index(p[0])
  74.     ind2 = A1.index(p[1])
  75.     R1[ind1][ind2] = 1
  76.  
  77. print_relation(R1)
  78. analyze_relation(R1)
  79. print("\n")
  80.  
  81. R1 = reverse_relation(R1)
  82. print_relation(R1)
  83. analyze_relation(R1)
  84. print("\n")
  85.  
  86. A2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
  87. n2 = len(A2)
  88.  
  89.  
  90. # отношение задается предикатом - логическим условием
  91.  
  92. def F(x, y):
  93.     return (x + y) % 2 == 0 # отношение: сумма x и y четна
  94.  
  95. R2 = [[0 for _ in range(n2)] for _ in range(n2)]
  96. for i in range(n2):
  97.     for j in range(n2):
  98.         R2[i][j] = int(F(A2[i], A2[j]))
  99.  
  100. print_relation(R2)
  101. analyze_relation(R2)
  102. print("\n")
  103.  
  104. R2 = reverse_relation(R2)
  105. print_relation(R2)
  106. analyze_relation(R2)
  107. print("\n")
  108.  
  109. A3 = [1, 2, 3, 4]
  110. n3 = len(A3)
  111.  
  112. R3 = [[0 for _ in range(n3)] for _ in range(n3)]
  113. R3_list = [(1, 1), (1, 4), (4, 1), (2, 2), (3, 3), (4, 4)]
  114.  
  115. for p in R3_list:
  116.     ind1 = A3.index(p[0])
  117.     ind2 = A3.index(p[1])
  118.     R3[ind1][ind2] = 1
  119.  
  120. print_relation(R3)
  121. analyze_relation(R3)
  122. print("\n")
  123.  
  124. R3 = reverse_relation(R3)
  125. print_relation(R3)
  126. analyze_relation(R3)
  127. print("\n")
  128.  
  129. A4 = ["a", "b", "c", "d", "e"]
  130. n4 = len(A4)
  131.  
  132. R4 = [[0 for _ in range(n4)] for _ in range(n4)]
  133. R4_list = [("a", "a"), ("a", "b"), ("a", "c"), ("b", "b"), ("b", "d"), ("c", "c"), ("d", "d"), ("e", "e")]
  134.  
  135. for p in R4_list:
  136.     ind1 = A4.index(p[0])
  137.     ind2 = A4.index(p[1])
  138.     R4[ind1][ind2] = 1
  139.  
  140. print_relation(R4)
  141. analyze_relation(R4)
  142. print("\n")
  143.  
  144. R4 = reverse_relation(R4)
  145. print_relation(R4)
  146. analyze_relation(R4)
  147. print("\n")
  148.  
  149. A5 = ["x", "y", "z"]
  150. n5 = len(A5)
  151.  
  152. R5 = [[0 for _ in range(n5)] for _ in range(n5)]
  153. print_relation(R5)
  154. analyze_relation(R5)
  155. print("\n")
  156.  
  157. R5 = reverse_relation(R5)
  158. print_relation(R5)
  159. analyze_relation(R5)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement