Напишите программу, на вход которой подаются прямоугольные матрицы в виде последовательности строк. После последней строки каждой матрицы идёт строка, содержащая только строку "end" (без кавычек). Программа должна вывести результат произведения указанных матриц, либо строку "Error", если произведения не существует.
Sample Input 1:
3 2
1 4
end
2
2
end
Sample Output 1:
10
10
Sample Input 2:
1 2 3
end
3
3
end
Sample Output 2:
Error
Программу написать в Python.
```python
def read_matrix():
matrix = []
while True:
line = input()
if line == 'end':
break
row = [int(x) for x in line.split()]
matrix.append(row)
return matrix
def multiply_matrices(m1, m2):
if len(m1[0]) != len(m2):
return None
result = []
for i in range(len(m1)):
row = []
for j in range(len(m2[0])):
cell = 0
for k in range(len(m2)):
cell += m1[i][k] * m2[k][j]
row.append(cell)
result.append(row)
return result
def print_matrix(matrix):
for row in matrix:
print(' '.join(str(x) for x in row))
def main():
matrices = []
while True:
matrix = read_matrix()
if not matrix:
break
matrices.append(matrix)
result = matrices[0]
for i in range(1, len(matrices)):
result = multiply_matrices(result, matrices[i])
if result is None:
print('Error')
return
print_matrix(result)
if __name__ == "__main__":
main()
```
Давайте разберем программу по шагам:
1. В начале программы у нас есть функция `read_matrix()`, которая считывает одну матрицу из входных данных. Она продолжает считывать строки до тех пор, пока не встретит строку "end". Каждая строка разбивается на числа, которые преобразуются в целые числа и добавляются в список. Затем функция возвращает полученную матрицу.
2. Далее у нас есть функция `multiply_matrices(m1, m2)`, которая принимает две матрицы в качестве аргументов и возвращает их произведение. Для произведения матриц необходимо убедиться, что количество столбцов первой матрицы равно количеству строк второй матрицы. Если это не так, функция возвращает значение `None`.
3. В функции `multiply_matrices()` мы проходим по строкам первой матрицы (переменная `i`), а затем по столбцам второй матрицы (переменная `j`). Для каждой ячейки в результирующей матрице (переменная `cell`) мы вычисляем сумму произведений элементов строки первой матрицы и столбца второй матрицы. Затем полученная ячейка добавляется в текущую строку `row`, а после завершения строки `row` добавляется в результирующую матрицу.
4. Функция `print_matrix(matrix)` просто выводит матрицу на экран, разделяя числа в каждой строке пробелами.
5. В функции `main()` мы создаем пустой список `matrices`, в который будем добавлять все матрицы из входных данных. Мы считываем матрицы с помощью функции `read_matrix()`, пока не получим пустую матрицу (что означает конец входных данных).
6. После того, как мы считали все матрицы, мы устанавливаем переменную `result` равной первой матрице из списка. Затем мы последовательно умножаем `result` на каждую следующую матрицу из списка, используя функцию `multiply_matrices()`. Если в какой-то момент результат умножения равен `None` (т.е. произведение не существует), мы выводим "Error" и завершаем выполнение программы.
7. Если произведение всех матриц было успешно вычислено, мы выводим результат с помощью функции `print_matrix()`.
Надеюсь, это обстоятельное объяснение поможет вам понять программу. Если остались какие-либо вопросы, пожалуйста, задавайте!