Xóa k phần tử liên tiếp trong mảng, bắt đầu từ 1 vị trí x cho trước?

http://codepad.org/B0XUh6a4 Do em đang làm 1 bài tập lớn. Bài này chỉ là 1 trong 32 bài em đang làm thôi. Nên code khá dài và nhiều,
Bài này nằm ở line 488-513

vào đây nè kevin

từ từ nhé đọc cái này xong rồi làm theo. forum mình theo hướng thảo luận để cùng học và giải đáp

Anh đã sửa nội dung lại rồi đấy, em thêm phần em bị lỗi chỗ nào nữa là được :smile:

1 Like

cay quá xíu làm mấy hàm thêm xoá cập nhật chèn mảng 1 chiều lun anh nhờ :frowning:

1 Like

ủa, sao em không thấy sữa gì hết :frowning:

A sửa lại cách trình bày câu hỏi của em cho nó dễ hiểu đấy Kelvin ơi :smiley: Anh có biết em bị lỗi gì đâu?

Nếu chung là bài này e chưa biết làm. A chỉ em làm với.Bí lắm luôn rồi :smile:

1 Like

À, tại cách suy nghĩ của em nó bị nhầm lẫn, anh cho em bài giải nhé. Không phải vì em bí mà anh cho bài giải, mà vì em đã làm, và làm không được anh mới đưa em bài giải :smile:

#include <stdio.h>

#define SIZE 10

void xoaNhieuPhanTu(int a[], int *n, int viTriXoa,int soLuongXoa)
{
    for(int i = viTriXoa; i < *n - soLuongXoa; ++i)
        a[i] = a[i+soLuongXoa];
    *n -= soLuongXoa;
}

int main()
{
    int a[SIZE] = {0,1,2,3,4,5,6,7,8,9};
    int n = SIZE;
    xoaNhieuPhanTu(a, &n, 3, 2);

    printf("Mang moi\n");
    for(int i = 0; i < n; ++i)
        printf("%d ", a[i]);
    return 0;
}

P/S: Em đặt tên biến, tên hàm rất tốt, dễ hiểu, anh thích em rồi đấy :heart_eyes:

3 Likes

Con trỏ chưa học anh ơi

1 Like

Thế em đổi con trỏ lại thành reference. Vì cái em đang học là C, nhưng thầy cô lại dạy C++. Tức là sử dụng dấu & (reference) hay còn gọi là tham chiếu.

Em cứ thay con trỏ bằng & nếu em thích và sử đụng như em hiểu. Anh chỉ dùng con trỏ để cập nhật lại giá trị của n.

Đây là code sử dụng & nếu em không biết cách chuyển, vì em chưa học con trỏ.

#include <stdio.h>

#define SIZE 10

void xoaNhieuPhanTu(int a[], int &n, int viTriXoa,int soLuongXoa)
{
    for(int i = viTriXoa; i < n - soLuongXoa; ++i)
        a[i] = a[i+soLuongXoa];
    n -= soLuongXoa;
}

int main()
{
    int a[SIZE] = {0,1,2,3,4,5,6,7,8,9};
    int n = SIZE;
    xoaNhieuPhanTu(a, n, 3, 2);

    printf("Mang moi\n");
    for(int i = 0; i < n; ++i)
        printf("%d ", a[i]);
    return 0;
}

Chú ý quan trọng: & mang ý nghĩa tham chiếu chỉ có trong C++, không có trong C.

4 Likes

Tức là những chổ nào có dấu * thay bằng & hả anh?

2 Likes

Anh đã update ở trên, em để ý nhé. Anh thích những câu hỏi rõ ràng, khó đến mấy anh cũng cố giải quyết (P/S: Khi anh nông nổi)

Chứ mấy câu @Honey_moon hỏi khó quá anh cũng không trả lời :trollface:

2 Likes

thực sự có 1 cách nữa là bạn tạo 1 mảng mới gồm những phần tử còn lại của mảng cũ :smiley: chả bjo thấy A Đạt khen em đặt tên hay code đẹp. em đặt tên biến con lạc đà cơ mà :trollface:

1 Like

khó với lười nó khác nhau. thông thường em bí mới dụ dỗ câu kéo lừa lọc thông đồng gọi anh thôi.

1 Like

Em còn đặt tên biến i,j,l,m,n,k, nữa không? Khen người mới chứ ai khen ma cũ :trollface:

I moved 2 posts to a new topic: sắp xếp các phần tử chẳn dồn về trước và xếp tăng dần, các phần tử lẽ về cuỗi mãng và cũng xếp tăng dần

biến i và j cho for biến n cho số lượng phần tử n=number còn lại là đặt dài. thế hàm hoán vị nhỏ mà a đặt dài loàng ngoàng à :smile:

1 Like

nếu viTriXoa = 6, soLuongXoa =5 thì sao nhỉ?

Vậy thì

if (viTriXoa trong khoảng cho phép) {
    // thực hiện việc xoá 
}
1 Like

Thay vì +1 thì giờ +5 :smiley: bỏ qua 5 pt.

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