Xóa số nguyên tố trong mảng code C/C++ – phanmemcntt.com

Bài tập số 14 trong list bài tập luyện tập lập trình tiếp tục về số nguyên tố trong C/C++. Xóa phần tử là số nguyên tố trong mảng một chiều.

1.Giới thiệu bài toán

Bài toán này tiếp tục liên quan đến số nguyên tố. Tuy nhiên bài này ở mức độ cao hơn một chút.

Đề bài:

Viết hàm xóa tất cả các số nguyên tố trong mảng.

Một bài toán gồm cả hai vấn đề, kiểm tra số nguyên tố và xóa phần tử khỏi mảng.

2.Giải quyết bài toán

Theo mình đánh giá, đây là một bài tập ở mức trung bình. Bài tập đòi hỏi tư duy lập trình một xíu.

Yêu cầu: Nắm chắc kiến thức lập trình, đặc biệt là phần vòng lặp for với mảng.

2.1 Hàm kiểm tra số nguyên tố

Hàm kiểm tra số nguyên tố mình đã giới thiệu nhiều ở các bài viết trước, nên bài viết này mình không đề cập đến nữa.

Các bạn có thể xem lại cách viết hàm kiểm tra số nguyên tố tại đây.

2.2 Hàm xóa một phần tử khỏi mảng code C/C++

Để xóa phần tử khỏi mảng bạn cần biết được vị trí phần tử cần xóa. Hàm truyền vào mảng cần xóa, vị trí cần xóa và số phần tử ban đầu của mảng. Kết quả trả về là mảng sau khi đã xóa phần tử.

Ý tưởng:

  • Sử dụng vòng for chạy từ vị trí cần xóa đến cuối mảng.
  • Gán phần tử a[i] bằng phần tử a[i+1]
  • giảm n đi một đơn vị (xóa đi một cái nó trừ đi một)

Bạn xem code của mình dưới đây nhé:

void Delete(int a[], int vt, int&n){
	for(int i=vt;i<n;i++)
		a[i]=a[i+1];
	n--;
}

2.3 Hàm xóa số nguyên tố trong mảng code C/C++

Chúng ta đã có hàm kiểm tra số nguyên tố, chúng ta đã có hàm xóa phần tử bất kì chỉ cần biết vị trí do đó code xóa số nguyên tố khỏi mảng rất đơn giản.

Ý tưởng: Sử dụng vòng for duyệt từ đầu mảng tới cuối mảng, nếu gặp phần tử nào thỏa mãn là số nguyên tố, tiến hành xóa phần tử khỏi mảng.

Tham khảo code C/C++:

void DeleteSont(int a[], int&n){	
	for(int i=0;i<n;i++){
		if(ktrant(a[i])){
			Delete(a,i,n);
			i--;
		}
	}
}

Chương trình hoàn chỉnh code C++

Các bạn chỉ cần sửa phần nhập xuất mảng và các câu lệnh in ra màn hình là thành code C nhé.

#include<bits/stdc++.h>
using namespace std;
void nhap(int a[], int &n){
	do{
		cout<<("Nhap n: ");
		cin>>n;
	}
	while(n<2||n>99);
	for(int i=0; i<n; i++){
		cout<<"a["<<i<<"]: ";
		cin>>a[i];
	}
}

void xuat(int a[], int n){
	for(int i=0;i<n;i++){
		cout<<"  "<<a[i];
	}
}

int ktrant(int n){
    if(n<2)
        return 0;
    else{
        for(int i=2;i<=n/2;i++)
            if(n%i==0)
                return 0;
        return 1;
    }
}
void Delete(int a[], int vt, int&n){
	for(int i=vt;i<n;i++)
		a[i]=a[i+1];
	n--;
}

void DeleteSont(int a[], int&n){	
	for(int i=0;i<n;i++){
		if(ktrant(a[i])){
			Delete(a,i,n);
			i--;
		}
	}
}
int main(){
	int a[100];
	int n;
	nhap(a,n);
	DeleteSont(a,n);
	cout<<"\nMang sau khi xoa het so nguyen to: "<<endl;
	xuat(a,n);
	return 0;
}

Kết quả của chạy chương trình phía trên:

xoa cac phan tu la so nguyen to trong mang

Bài viết của mình đến đây là hết, càm ơn bạn đã quan tâm bài viết.

Xem tiếp bài 15: Tìm kiếm vị trí phần tử trong mảng

Xem lại bài 13: In ra màn hình các số nguyên tố trong mảng

Tải về 67 bài tập đề cương lập trình C/C++