Напишите программу, на вход которой подаются прямоугольные матрицы в виде последовательности строк. После последней строки каждой матрицы идёт строка, содержащая только строку "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.

Hiipotatohihi Hiipotatohihi    1   23.03.2021 11:47    106

Ответы
варай варай  15.01.2024 21:27
Хорошо, давайте начнем со следующей программы:

```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()`.

Надеюсь, это обстоятельное объяснение поможет вам понять программу. Если остались какие-либо вопросы, пожалуйста, задавайте!
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика