Nhập và in ra ma trận?

Chào ac ạ. E đang muốn nhập và in một ma trận, nhưng e chưa làm được đối với ma trận vuông có kích cỡ ng dùng chọn mà chỉ dừng lại ở chỗ tự mình đặt trước trong phần khai báo…mong ac chỉ giáo ạ???

def main():

mt=[[],[],[]]
def NhapMaTran():
    for i in range(l):
        for j in range(c):
            print ("Phan tu hang",i,"cot",j)
            pt=int(input(""))
            mt[i].append(pt)

def InCheoChinh():
    print ("Duong cheo chinh cua ma tran vua nhap la:")
    for i in range(l):
        for j in range(c):
            if i!=j:
                mt[i][j]="*"
    for i in range(l):
        for j in range(c):
            print (mt[i][j],'   ',mt[i][j+1],'  ',mt[i][j+2])
            break        
print ("MENU\t1.Chon 1 de Nhap vao ma tran.")
print ("2. Chon 2 de In cac phan tu duong cheo chinh.")
print ("3. Chon 3 de Ket thuc.\tMoi ban chon")
ch=0
while ch!=3:
    ch=int(input("CHON:"))
    if ch==1:
        l=int(input("Nhap so hang:"))
        c=int(input("Nhap so cot:"))
        NhapMaTran()
    elif ch==2:
        InCheoChinh()
    else:
        print("Chon khong hop le, moi chon lai!")
        main()    

if name==“main”:
main()

Mảng là kiểu dữ liệu không thể thay đổi kích thước.
Để tạo một kiểu dữ liệu có dạng tương tự như mảng mà kích thước không nhất thiết phải đưa ra trong phần khai báo, trong C thường sử dụng kiểu con trỏ.

Bạn tìm hiểu thêm về “khai báo mảng động bằng con trỏ” nhé.

1 Like

Mới đầu mình còn tưởng cái này là C, C++ cơ, mà tự dưng lại có tag Python3. Không biết cuối cùng là của cái nào nhỉ?

2 Likes

em chưa học cấp phát động ạ

e show code lên được k ạ?

Đúng rồi, show lên trên câu hỏi đi

Vâng e up lên rồi đó ạ

e đang bắt đầu học python nên e lấy đề C để làm trên python ạ

Hm…Này đơn giản thôi. Mình sẽ hướng dẫn đơn giản cho bạn.

# hàm tạo ma trận
def make_matrix(n):
    # n là số dòng của ma trận, ma trận vuông nên 2 thứ bằng nhau
    # sử dụng list comprehension
    return [[0] * n for i in range(n)]

# Hàm nhập
def set_matrix(matrix):
    n = len(matrix)
    for i in range(n):
        for j in range(n):
            ele = input('Enther element at row %d, col %d\n>>> ' %(i, j))
            matrix[i][j].append(ele) # bạn có thể rút gọn 2 dòng thành 1 cũng được
            # matrix[i][j].append(input())

# hàm in đường chéo chính
def print_primary_diagonal(matrix):
    n = len(matrix)
    for i in range(n):
        print(matrix[i][i])

Còn lại là việc bạn sắp xếp lại hàm thôi. Có gì thắc mắc thì hỏi thêm :wink:
EDIT: Bạn lưu ý đây là ma trận vuông nhé. Vì đề bài có yêu cầu in đường chéo chính nữa.

2 Likes

Vâng, em cảm ơn ạ…:))

Cho e hỏi cái matrix trong set_matrix(matrix) với print_primary_diagonal(matrix) là nhập ma trận vào hay là biến gì đó ạ?

Hàm make_matrix là sẽ tạo ra một ma trận nxn với n được cho từ trước và sẽ return kết quả này về cho một biến gì đó. Còn set_matrix là hàm nhập matrix. print_primary_diagonal là in đường chéo chính, và đương nhiên mấy cái truyền vào là cái matrix được tạo mởi hàm make_matrix

ch=0

while ch!=3:
    print ("MENU\t1.Chon 1 de Nhap vao ma tran.")
    print ("2. Chon 2 de In cac phan tu duong cheo chinh.")
    print ("4. Chon 4 de In ma tran .")
    print ("3. Chon 3 de Ket thuc.\tMoi ban chon.")
    ch=int(input("Nhap y/c ban chon:"))
    if ch==1:
        print ("Moi nhap vao MA TRAN!!!")
        make_matrix(2)
        set_matrix(matrix)#??????đây là dòng e không biết phải nhập matrix vào là gì đây ạ 

    elif ch==2:
        print_primary_diagonal(matrix)#??????????
    else:
        print("Nhap sai, moi nhap lai.")
        main()

Mình đã đề cập đến viện hàm make_matrix phải có một cái biến nào đó ra hứng cái giá trị trả về rồi.

matrix_2x2 = make_matrix(2)
set_matrix(matrix_2x2)

Vâng e đã thử nhưng kq :
= RESTART:
MENU 1.Chon 1 de Nhap vao ma tran.
2. Chon 2 de In cac phan tu duong cheo chinh.
4. Chon 4 de In ma tran .
3. Chon 3 de Ket thuc. Moi ban chon.
Nhap y/c ban chon:1
Moi nhap vao MA TRAN!!!
Enther element at row 0,col 0

và c trình dừng
nó k cho nhập các phần tử trong ma trận luôn

Bạn thử đưa lên đây code của bạn lúc gắn mọi thứ lại với nhau

1 Like

code đây ạ
def main():

def make_matrix(n):
    return [[0]*n for i in range(n)]

def set_matrix(matrix):
    n=len(matrix)
    for i in range(n):
        for j in range(n):
            ele = int(input('Enther element at row %d,col %d\n>>>'%(i,j)))
            matrix[i][j].append(ele)
            
def print_primary_diagonal(matrix):
    n=len(matrix)
    for i in range(n):
        print (matrix[i][i])

ch=0
while ch!=3:
    print ("MENU\t1.Chon 1 de Nhap vao ma tran.")
    print ("2. Chon 2 de In cac phan tu duong cheo chinh.")
    print ("4. Chon 4 de In ma tran .")
    print ("3. Chon 3 de Ket thuc.\tMoi ban chon.")
    ch=int(input("Nhap y/c ban chon:"))
    if ch==1:
        print ("Moi nhap vao MA TRAN!!!")
        matrix_2x2=make_matrix(2)
        set_matrix(matrix_2x2)
    elif ch==2:
        print_primary_diagonal(matrix_2x2)
    else:
        print("Nhap sai, moi nhap lai.")
        main()

if name==“main”:
main()

Mình xin lỗi, hàm mình viết sai một chỗ

def set_matrix(matrix):
    n=len(matrix)
    for i in range(n):
        for j in range(n):
            ele = int(input('Enther element at row %d,col %d\n>>> '%(i,j)))
            matrix[i][j] = ele

Và bạn kết hợp các hàm cực kì không hợp lí, nó sẽ gây ra lỗi vì các biến sẽ bị reset. Mình làm như thế này

def make_matrix(n):
    print(n)
    return [[0]*n for i in range(n)]

def set_matrix(matrix):
    n=len(matrix)
    for i in range(n):
        for j in range(n):
            ele = int(input('Enther element at row %d,col %d\n>>> '%(i,j)))
            matrix[i][j] = ele
                
def print_primary_diagonal(matrix):
    n=len(matrix)
    for i in range(n):
        print (matrix[i][i])

def main():
    ch = 0
    matrix_2x2 = make_matrix(2)
    while ch!=3:
        print ("MENU\t1.Chon 1 de Nhap vao ma tran.")
        print ("2. Chon 2 de In cac phan tu duong cheo chinh.")
        print ("4. Chon 4 de In ma tran .")
        print ("3. Chon 3 de Ket thuc.\tMoi ban chon.")
        ch=int(input("Nhap y/c ban chon:"))
        if ch==1:
            print ("Moi nhap vao MA TRAN!!!")
            set_matrix(matrix_2x2)
        elif ch==2:
            print_primary_diagonal(matrix_2x2)
        elif ch==4:
            print(matrix_2x2)
        elif ch==3:
            pass
        else:
            print("Nhap sai, moi nhap lai.")

if __name__=="__main__":
    main()
1 Like

Vâng, Nếu không hỏi chắc e bỏ qua mấy cái hay ho này mất…:))
Nhưng e đã sửa dòng
ele = int(input('Enther element at row %d,col %d\n>>> '%(i,j)))
—>print (" row:",i,“col:”,j,“is:”)
—>ele=int(input())
thì mới nhập được từng giá trị của ma trận.
Em cảm ơn ạ.

Không, bạn nhầm rồi, như vậy là rườm rà, code mình đưa cho bạn chỉ sai ở chỗ ta sử dụng append thôi. :slight_smile:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?