Hỏi đáp

Chia sẻ kiến thức, cùng nhau phát triển

e mới học cấp phát động gần đây chưa quen lắm ạ và còn nhiều khái niệm cần học tiếp...

15:05 09-10-2022 392 lượt xem 0 bình luận

a chị nào giúp e giải quyết bài này với ạ, thầy e mới cho cả lớp bài tập này nhưng e k hiểu phải làm j lắm ạ, ai có thể giúp em hướng đi với ạ...

Mảng cấp phát động có 03 thông tin quan trọng. Đầu tiên là địa chỉ vùng nhớ đã cấp cho mảng, kích thước chúng ta đã cấp phát cho mảng và số lượng phần tử thực có trong mảng.

Cố nhiên số lượng phần tử có trong mảng không thể vượt quá số lượng cho phép bởi kích thước ta đã cấp phát cho mảng. Tuy nhiên trong trường hợp số phần tử ta quan tâm đã bằng với kích thước cấp phát cho mảng mà ta vẫn muốn thêm phần tử vào mảng thì ta có thể dùng cách sau: (1) Cấp phát một mảng mới với kích thước to hơn mảng cũ. (2) Copy tất cả phần tử của mảng cũ qua mảng mới. (3) Thêm phần tử vào mảng mới. (4) Giải phóng vùng nhớ của mảng cũ.

Hãy viết hàm thêm phần tử mang giá trị x vào vị trí cuối cùng trong mảng cấp phát động. Hàm nhận vào 04 tham số:

  1. Mảng số nguyên: A
  2. Số thực có trong mảng: na
  3. Kích thước đã cấp phát cho mảng: capacity_a
  4. Giá trị phần tử cần chèn thêm: x

Hàm phải có khả năng thêm phần tử ngay cả khi mảng A đã đầy phần tử, phải đảm bảo khi hàm chạy xong, giá trị capacity_a đúng bằng kích thước đã cấp phát cho mảng, đảm bảo capacity_a <= 2*na trong mọi trường hợp.

Ví dụ: cho mảng A={1, 2, 3}, na = 3, capacity_a = 3, x = 4

Hàm sẽ biến mảng A thành {1, 2, 3, 4}, na = 4, 4 <= capacity_a <= 8

 

Đây là phần template (k thế chỉnh sửa ạ), phần sau comment insert code là phần code cần thêm vào

/*###Begin banned keyword - each of the following line if appear in code will raise error. regex supported
define
include
new
delete
map
BOOK
###End banned keyword*/

#include <iostream>
#include <map>
using namespace std;

map<int*, int> BOOK;

void cap_phat(int*& a, int size) {
    int* x = new int[size];
    BOOK[x] = size;
    a = x;
}

void giai_phong(int* a) {
    delete a;
    BOOK.erase(a);
}

//###INSERT CODE HERE -


void check(Array A, int n, int l, int r) {
    if (BOOK.size() > 1) cout << "WRONG";
    if (BOOK.begin()->second > 2 * n) cout << "WRONG";

    for (int i = l; i <= r; i++) {
        cout << A.A[i] << " ";
    }
    cout << endl;
}


int main() {
    Array A;

    int x;
    A.na = 0;
    while (cin >> x) {
        A.array_insert(x);

        int l, r; cin >> l >> r;
        check(A, A.na, l, r);
    }
}
 

 

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập

Câu hỏi mới nhất