01/10/2018, 11:09

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	1.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.	Moi 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()

Trần Hoàn viết 13:16 ngày 01/10/2018

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é.

Henry viết 13:22 ngày 01/10/2018

Mảng là kiểu dữ liệu không thể thay đổi kích thước.

Bạn học cấp phát động chưa?

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ỉ?

Thùy Linh viết 13:24 ngày 01/10/2018

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

Thùy Linh viết 13:11 ngày 01/10/2018

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

Henry viết 13:16 ngày 01/10/2018

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

Thùy Linh viết 13:18 ngày 01/10/2018

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

Thùy Linh viết 13:22 ngày 01/10/2018

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

Henry viết 13:10 ngày 01/10/2018

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
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.

Thùy Linh viết 13:15 ngày 01/10/2018

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

Thùy Linh viết 13:13 ngày 01/10/2018

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ì đó ạ?

Henry viết 13:10 ngày 01/10/2018

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

Thùy Linh viết 13:16 ngày 01/10/2018

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()
Henry viết 13:24 ngày 01/10/2018

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)
Thùy Linh viết 13:17 ngày 01/10/2018

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

Henry viết 13:21 ngày 01/10/2018

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

Thùy Linh viết 13:12 ngày 01/10/2018

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

Henry viết 13:17 ngày 01/10/2018

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()
Thùy Linh viết 13:11 ngày 01/10/2018

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 ạ.

Henry viết 13:16 ngày 01/10/2018

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.

Thùy Linh viết 13:19 ngày 01/10/2018

:))) nhưng e k nhâp được khi để dòng code đó mà a

Bài liên quan
0