01/10/2018, 09:10

Giúp fix lỗi tính tich của 2 ma trận

mình đang lập trình để tính tich của 2 ma trận nhưng chạy bị lỗi, mình không biết sai ở đâu, mong mọi người giải đáp

import math
i=int(raw_input('so hang ma tran a'))
j=int(raw_input('so cot ma tran a'))
m=int(raw_input('so hang ma tran b'))
n=int(raw_input('so cot ma tran b'))
if j<>m:
     print 'error'
else:
    A= range(1,i+1)
    B=range(1,m+1)
    C=A
    for k in range(1,i+1):
     A[k-1]=range(1,j+1)
     C[k-1]=range(1,n+1)
     for x in range(1,j+1):
         A[k-1][x-1]=int(raw_input("nhap so thu A%r%r la:"%(k,x)))
    for k in range(1,j+1):
         B[k-1]=range(1,n+1)
         for x in range(1,n+1):
             B[k-1][x-1]=int(raw_input('nhap so thu B%r%r la:'%(k,x)))
    for x in range(0,i):
        for y in range (0,n):
            for k in range (0,j):
               C[x][y]+=A[x][k]*B[k][y]
               if k==j-1:
                   break
for c in C:
    print c
Vangiang Do viết 11:14 ngày 01/10/2018

Stupid viết 11:25 ngày 01/10/2018

line 6: if i<>m
Python đâu có <> đâu bạn, thay bằng !=
line :13,14,15:
Sao có cái thụt lề kì vậy, chỉ được thụt đồng loạt bằng 1 kiểu thôi nhé

Vangiang Do viết 11:19 ngày 01/10/2018

mình vẫn chạy được nhưng chạy không đúng :(. mình mới học nên ngồi tự mò làm

*grab popcorn* viết 11:26 ngày 01/10/2018

C=A

C=A -> C với A đang xài chung 1 list
Cứ tưởng tượng h bạn đang xài chung 1 khoảng tiền w ai đó, thì 1 trong 2 người xài -> khoảng tiền chung đó đều bị thay đổi.

Thì C với A nó cũng xài chung như trên -> C thay đổi sẽ ít nhiều dẫn tới A theo đổi theo.(trừ khi gán C bằng cái khác)
-> C[k-1] = range(1, n+1)
tương đương A[k-1] = range(1, n+1) -> bị lỗi

Nói chung bạn nên tìm hiểu kỹ hơn về khái niệm con trỏ

Cách sửa rất đơn giản, bạn chỉ cần gán C = range(1,i+1) thay vì C = A

Và có vẻ như kq bị sai o-o
Do đâu thì do bạn chưa khởi tạo các tất cả giá trị trong ma trận C về 0.

Vangiang Do viết 11:13 ngày 01/10/2018

thank bạn nha. mình đã sửa nhưng khi chạy chỉ đúng dc 1 cột đầu, các cột tiếp theo tăng thêm 1 đơn vị mà mình k hiểu sao?

import math
i=int(input('so hang ma tran a:'))
j=int(input('so cot ma tran a:'))
m=int(input('so hang ma tran b:'))
n=int(input('so cot ma tran b:'))
if j<>m:
     print 'error'
else:
    A=range(0,i) #số hàng ma trận
    B=range(0,m)
    C=range(0,i)
    for k in range(0,i):
     A[k]=range(0,j) #số phần tử của từng hàng
     C[k]=range(0,n)
     for x in range(0,j):
         A[k][x]=int(raw_input("nhap so thu A%r%r la:"%(k+1,x+1)))#nhập giá trị 
    for k in range(0,j):
         B[k]=range(0,n)
         for x in range(0,n):
             B[k][x]=int(raw_input('nhap so thu B%r%r la:'%(k+1,x+1)))
    for b in B:
          print B
    for x in range(0,i):
        for y in range (0,n):
            for k in range (0,j):
               C[x][y]+=A[x][k]*B[k][y]
               if k==j-1:
                   break
            if y==n-1:
                break
for c in C:
    print c
*grab popcorn* viết 11:21 ngày 01/10/2018

các cột tiếp theo tăng thêm 1 đơn vị mà mình k hiểu sao?

Do đâu thì do bạn chưa khởi tạo các tất cả giá trị trong ma trận C về 0.

20 ký tự. 20 20 20 20

Bài liên quan
0