Advertisement
lpjakewolfskin

lab3(modelling)

Oct 4th, 2018
260
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.65 KB | None | 0 0
  1. ## (с) 51i\/4|)^^|\| ##
  2.  
  3. def get_n(): # считает n для матрицы из файла input.txt
  4.     file = open("input.txt", "r")
  5.     s = file.readline()
  6.     spaces = 0
  7.     for i in s:
  8.         if i == " ":
  9.             spaces += 1
  10.     file.close()
  11.     return spaces + 1
  12.  
  13.  
  14. def init(n): # возвращает пустую матрицу n*n
  15.     mat = []
  16.     for i in range(n):
  17.         s = []
  18.         for j in range(n):
  19.             s.append(0)
  20.         mat.append(s)
  21.     return mat
  22.  
  23.  
  24. def print_mat(mat): # выводит матрицу mat на экран
  25.     for i in range(n):
  26.         s = ""
  27.         for j in range(n):
  28.             s += str(mat[i][j]) + " "
  29.         s = s[:len(s)-1]
  30.         print(s)
  31.  
  32.  
  33. def write_mat(mat, file): # записывает матрицу mat в файл file
  34.     for i in range(n):
  35.         s = ""
  36.         for j in range(n):
  37.             s += str(result[i][j]) + " "
  38.         s = s[:len(s)-1] + '\n'
  39.         file.write(s)
  40.  
  41.  
  42. def mult(matrix1, matrix2, n): # умножает матрицу matrix1 на матрицу matrix2 размерами n*n и возвращает результат  
  43.     mat = init(n)
  44.     for h in range(n):
  45.         for i in range(n):
  46.             for j in range(n):
  47.                 mat[i][j] +=  matrix1[i][h] * matrix2[h][j]
  48.     return mat
  49.  
  50.  
  51. def k_pow(matrix, n, k): # возводит матрицу matrix n*n в степень k и возвращает результат
  52.     if k == 0:
  53.         return get_unit(n)
  54.     if k == 1:
  55.         return matrix
  56.     if k == 2:
  57.         return mult(matrix, matrix, n)
  58.     else:
  59.         return mult(k_pow(matrix, n, k - 1), matrix, n)
  60.  
  61.  
  62. def get_unit(n): # возвращает единичную матрицу n*n
  63.     result = init(n)
  64.     for i in range(n):
  65.         for j in range(n):
  66.             if i == j:
  67.                 result[i][j] = 1
  68.     return result
  69.  
  70.  
  71. # там бэкенд
  72. #----------------------------------------------------------------------
  73. # тут фронтенд
  74.  
  75.  
  76. n = get_n() # получаем n
  77. matrix = []
  78.  
  79. inp = open("input.txt", "r")
  80. out = open("output.txt", "w")
  81.  
  82. for i in range(n):
  83.     matrix.append([int(j) for j in inp.readline().split()]) # считываем матрицу из файла
  84.  
  85. print("Matrix that was read from ./input.txt :")
  86. print()
  87. print_mat(matrix)
  88. print()
  89. k = int(input("Enter the pow: "))
  90. print()
  91. print("----------------------------------------------------------")
  92. print()
  93. result = k_pow(matrix, n, k) # считаем результат
  94. write_mat(result, out)
  95. print_mat(result)
  96.  
  97. print()
  98. print("The result was wrote to ./output.txt")
  99. print()
  100.  
  101. inp.close()
  102. out.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement