Cấp phát động mảng 2 chiều

Đề bài là viết hàm int**tichmt(int **A, int **B, int N) để nhân 2 ma trận A và B có kích thước NxN và mảng A B và mảng tích được cấp phát động.
Mọi người xem em sai chỗ nào ạ

#include <iostream>
using namespace std;

int** tichmt(int** A, int** B, int N);
void CapPhat(int** &A, int** &B, int N);

int main()
{
    int N, **A, **B;
    cout << "Ma tran NxN. Nhap N = " ;
    cin >> N;
    CapPhat(A, B, N);
    cout << "Nhap ma tran A: ";
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            cout << "A[" << i << "][" << j << "] = ";
            cin >> A[i][j];
        }
    }
    cout << "Nhap ma tran B: ";
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            cout << "B[" << i << "][" << j << "] = ";
            cin >> B[i][j];
        }
    }
    cout << "Tich 2 mt la: ";
    for (int i = 0; i < N; i++)
        cout << **(tichmt(A,B,N) + i) << " ";
    for (int i = 0; i < N; i++)
    {
        delete[] A[i], B[i];
    }
    delete[] A, B,tichmt(A,B,N);
    return 0;
}

void CapPhat(int** &A, int** &B, int N)
{
    A = new int* [N];
    for (int i = 0; i < N; i++)
        A[i] = new int[N];
    B = new int* [N];
    for (int i = 0; i < N; i++)
        B[i] = new int[N];
    
}
int** tichmt(int** A, int** B, int N)
{
    int** C = new int* [N];
    for (int i = 0; i < N; i++)
        C[i] = new int[N];
    for (int i = 0; i < N; i++)
        for (int j = 0; j < N; j++)
        {
            int s = 0;
            for (int k = 0; k < N; k++)
            {
                s = s + A[i][k] * B[k][j];
            }
            C[i][j] = s;
        }
  
    return C;
}

ko có xuất mảng 2 chiều kiểu này được :V Đầu tiên em phải lấy mảng C ra, rồi mới xuất mảng C đó bằng 2 vòng for lồng nhau như khi input ấy. Cuối cùng phải giải phóng cả mảng C như mảng A, B:

int** C = tichmt(A,B,N);
for (int i = 0; i < N; i++)
{
    for (int i = 0; i < N; i++)
    {
        cout << ...; 
    }
}

ko có viết cẩu thả như vậy được :V delete mỗi dòng 1 biến chứ ko có viết , , được.

cấp phát viết 3 dòng

    A = new int* [N];
    for (int i = 0; i < N; i++)
        A[i] = new int[N];

thì giải phóng cũng phải viết 3 dòng:

    for (int i = 0; i < N; i++)
        delete[] A[i];
    delete[] A;

tương tự với mảng B và mảng C

4 Likes

Làm sao để đưa mảng C ra ngoài hàm main đc ạ

int** C = tichmt(A,B,N); thôi em :V

3 Likes

Dạ em cảm ơn nhìu :3

viết thêm hàm cấp phát cho 1 mảng 2 chiều, và xuất ra một mảng 2 chiểu.

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