Trong các bài viết trước chúng ta đã làm quen với các kiến thức về mảng một chiều. Các bạn có thể xem lại các bài viết này ở link bên dưới. Hôm nay chúng ta tiếp tục làm quen với thao tác, thêm, xóa phần tử trên mảng.
- Hướng dẫn Dev-C++ căn bản hoặc Hướng dẫn Tạo Project Visual C++ trong Visual Studio 2012
- Lý thuyết Mảng một chiều
- Duyệt mảng một chiều
- Nhập xuất mảng một chiều
Hàm Thêm vào mảng một giá trị x tại vị trí vt (kiểm tra tính hợp lệ của vt)
- Kiểm tra nếu k ∈[0, n] thì:
- Dời các phần tử từ vị trí n-1 đến k lùi lại 1 vị trí.
- Thêm x vào vị trí thứ k của mảng, tăng n thêm 1.
void ThemPhanTu(int a[], int &n, int x, int vt) { if(vt>=0 && vt<=n) { for(int i=n; i>vt; i--) a[i] = a[i-1]; //Dịch các phần tử sang phải 1 vị trí a[vt]=x; //Thêm x vào vị trí vt n++; //Tăng số phần tử lên 1 } else printf("\nVi tri %d khong hop le.", vt); }
Hàm Xóa khỏi mảng một giá trị x
Để xóa một phần tử trong mảng ta phải Kiểm tra nếu x có tồn tại trong mảng thì:
- Dời các phần tử sau x tới 1 vị trí.
- Giảm n bớt 1.
int TimPhanTu(int a[], int n, int x) { for(int i=0; i<n; i++) if(a[i] == x) return i; //Tìm thấy x tại vị trí thứ i return -1; //Không tìm thấy x trong mảng } //======================================================================= void XoaPhanTu(int a[], int &n, int x) { int vt=TimPhanTu(a, n, x); //Tìm vị trí x trong mảng if(vt==-1) printf("\nKhong tim thay phan tu %d muon xoa.", x); else { for(int i=vt; i<=n-2; i++) a[i] = a[i+1]; //Dịch các phần tử sang trái 1 vị trí n--; //Giảm số phần tử bớt 1 } }
[Hàm tìm phần t]:
Nếu mà trong mảng có hai phần tử muốn tìm thì làm sao ạ?
[Hàm xóa phần tử]
Nếu trong mảng có hai phần tử giống nhau mà xóa thì như thế nào ạ?
#include “stdafx.h”
#include
using namespace std;
int ktra(int a[], int n,int x)
{
for (int i = 0;i<n;i++)
{
if (a[i] == x)return i;
}
return -1;
}
void xoa(int a[], int &n, int x)
{
int m;
int k = ktra(a, n, x);
if(k!=-1)
{
for (int i = k;i> n >> x;
k = n;
for (int i = 0;i > a[i];
}
m = ktra(a, n, x);
if (m == -1)cout << "Khong co trong mang.";
else
{
for (int i = 0;i < k;i++)
{
xoa(a, n, x);
}
for (int i = 0;i < n;i++)
{
cout << a[i] << " ";
}
}
system("pause");
return 0;
}
Đây là code xóa phần tử x ( có bao nhiêu x xóa hết) trong mảng và xuất ra mảng mới.
code như ad thì nếu vị cuối cùng của mảng là vị trí cần xóa … thì máy tính sẽ bị bốc khói khi chạy vì không tồn tại giá trị của a[i+1];
đọc kỹ code bạn nhé
chuan lun :))
xóa phần tử lẻ trong mảng ntn ạ?
thêm điều kiện phần tử lẻ mới xóa thôi bạn
vt lúc đầu gán bằng gì ạ
sao lại trừ 2 ?
code thêm thì a[i]=a[i+1] code xóa mới a[i-1] chứ nhỉ
à em nhầm em hiểu rồi
Mình cũng đamg không hiểu giống bạn bạn gt hộ mình vs
mang co hai hoac nhieu phan tu giong nhau muon lay 1 don vi thoi thi lam tn ah:
vidu: A[] = {1, 2, 2, 2, 3};
kq: A[] = {1, 2, 3};
ai biet chi minh voi.
nó là bài toán xóa phần tử trùng thôi mà
tại sạo i<=n-2 vậy ai giải thích hộ mk cái mk ko hiểu.thank ạ
cho e hỏi thêm phần tử ở vòng lặp for (int i=n; i>vt; i–)
tại sao mình phải để ” i>vt ” ạ ? nếu mình đẻ ” i>= vt+1 ” có được không ạ ?
bạn có thể test thử 🙂