Hàm tính giá trị trung bình số nguyên tố trong mảng C

0
61
ham tinh gia tri trung binh so nguyen to co trong mang

Bài toán viết hàm tính giá trị trung bình các số nguyên tố có trong mảng một chiều bằng ngôn ngữ C. Bài toán xoay quanh số nguyên tố trong C. Đây là bài viết số 4 trong chuỗi 67 bài viết công phá đề cương nhập môn lập trình của mình.

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

Đây là một bài toán chủ để về mảng và số nguyên tố có trong C. Bài toán số nguyên tố là một trong những bài toán hay trong việc học lập trình.

Đề bài:

Viết hàm tính giá trị trung bình các số nguyên tố trong mảng một chiều a có n phần tử. Hàm trả về giá trị trung bình của các phần tử là số nguyên tố. Ngược lại hàm trả về giá trị 0.

Theo quan điểm cá nhân của mình, đây là một bài toán ở mức trung bình.

2. Cách giải bài toán

Bài toán ở mức trung bình, chính vì thế đòi hỏi bạn đọc phải nắm vững tương đối các thành phần trong ngôn ngữ lập trình C. Nắm được cách sử dụng hàm, các vòng lặp (for, while. . .), các câu lệnh điều kiện (if, else. . .) các toán tử và các cú pháp nhập xuất cơ bản.

2.1 Ý tưởng giải quyết

Bài toán có hai phần chính đó là:

  • Tìm số nguyên tố, kiểm tra xem số nguyên trong mảng có phải là số nguyên tố không.
  • Tính giá trị trung bình

Về tìm số nguyên tố, chúng ta cần viết một hàm tìm số nguyên tố trong C. Hàm này trả về giá trị đúng hoặc sai (1 hoặc 0).

Chúng ta cần phải hiểu định nghĩa về số nguyên tố:

Số nguyên tố là số chia hết cho 1 và chính nó.

Về cách kiểm tra số nguyên tố, có hai cách:

  • Dùng sàng số nguyên tố
  • Dùng vòng for xem số đó có chia hết cho số thứ 3 hay không (ngoài 1 và chính nó)

Ở bài viết này, mình sẽ sử dụng cách số 2.

Sau khi viết được hàm tìm số nguyên tố, tiến hành duyệt mảng C để tìm ra các phần tử thỏa mãn. Tiếp tục sử dụng 3 biến tong, biến dem và biến tb giống như mình đã trình bày ở hai bài trước. (lưu ý, cái tên biến kia là do mình đặt và gọi thôi nhé, bạn thích đặt sao là tùy ý)

Nếu phần tử thỏa mãn, tăng biến đếm, cộng thêm phần tử vào tổng. Cuối cùng gán biến trung bình là tổng chia số lượng (tong/dem).

Nếu như đếm bằng 0, tức là mảng không có phần tử nào thỏa mãn, trả về giá trị 0.

2.2 Code gợi ý tính giá trị trung bình các số nguyên tố có trong mảng một chiều bằng ngôn ngữ C

Để code được bài hoàn chỉnh, bạn cần có phần xuất nhập mảng, tuy nhiên mình đã có bài viết riêng về phần này, nên mình không nhắc lại nữa nhé.

2.2.1 Hàm kiểm tra số nguyên tố bằng code C

Số nguyên tố là số từ 2 trờ lên, vì vậy nhỏ hơn 2, loại (return 0)

Mình sử dụng vòng for duyệt từ số 2 đển <=n/2, mục đích kiểm tra xem đoạn này có số nào mà n chia hết không. Nểu có tức là không phải số nguyên tố (return 0)

Nếu n không bị return ở 2 bước trên, tức là n thỏa mãn là số nguyên tố, return 1

Code gợ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;
	}
}

2.2.2 Hàm tính giá trị trung bình

Hàm này sử dụng hàm bên trên (hàm kiểm tra số nguyên tố) để làm điều kiện duyệt.

Cách thức giống với phần ý tưởng giải quyết của mình đưa ra ở phía trên

Code gợi ý:

float tinhtb(int a[], int n){
	float tb, tong=0;
	int dem=0;
	for(int i=0;i<n;i++){
		if(ktrant(a[i])){
			tong=tong+a[i];
			dem++;
		}
	}
	
	if(dem==0)
		return 0;
	else
		{
			tb=tong/dem;
			return tb;
		}
}

2.2.3 Chương trình hoàn chỉnh

Code gợi ý chương trình hàm tính giá trị trung bình các số nguyên tố có trong mảng một chiều bẳng ngôn ngữ C:

#include<stdio.h>
void nhap(int a[], int &amp;n){
	do{
		printf("Nhap n: ");
		scanf("%d",&amp;n);
	}
	while(n<2||n>99);
	
	for(int i=0; i<n; i++){
		printf("a[%d]: ",i);
		scanf("%d",&amp;a[i]);
	}
}

void xuat(int a[], int n){
	printf("Mang vua nhap la: \n");
	for(int i=0;i<n;i++){
		printf("%5d",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;
	}
}

float tinhtb(int a[], int n){
	float tb, tong=0;
	int dem=0;
	for(int i=0;i<n;i++){
		if(ktrant(a[i])){
			tong=tong+a[i];
			dem++;
		}
	}
	
	if(dem==0)
		return 0;
	else
		{
			tb=tong/dem;
			return tb;
		}
}
int main(){
	int a[100];
	int n;
	nhap(a,n);
	xuat(a,n);
	printf("\nGia tri trung binh la: %0.2f",tinhtb(a,n));	
	return 0;
}

Khi chạy chương trình trên sẽ có kết quả như sau:

ham tinh gia tri trung binh so nguyen to trong c 1

các số nguyên tố ở ví dụ trên là: 3, 7, 11, 2

Ví dụ về nhập mảng không có số nguyên tố nào:

ham tinh gia tri trung binh so nguyen to co trong mang 3

Trên đây là chi tiết về phương pháp giải bài toán.

Để hiểu chi tiết hơn, các bạn có thể xem video hướng dẫn của mình:

Cảm ơn bạn đã quan tâm bài viết, nhớ đừng bỏ lỡ những bài viết, video tiếp theo, subscribe ủng hộ mình nữa nhé!

Xem tiếp bài 5: Hàm tính giá trị trung bình các số hoàn hảo trong C

Xem lại bài 3: Hàm tính giá trị trung bình các số dương trong C

Tải về đề cương nhập môn lập trình

Trong quá trình làm bài tập, tham khảo bài viết, bạn đọc có bất kì thắc mắc nào đừng ngại comment xuống dưới bài viết để được hỗ trợ.

Rất mong nhận được ý kiến đóng góp, các thuật toán hay để bài chia sẻ của mình hoàn thiện hơn.

LEAVE A REPLY

Please enter your comment!
Please enter your name here