Đếm số phần tử trong mảng C | Laptrinhcanban.com

HOME › >>

Đếm số phần tử trong mảng C

Hướng dẫn các cách đếm số phần tử trong mảng C. Bạn sẽ học được cách đếm số phần tử giống nhau trong mảng C, cách đếm số phần tử khác nhau trong mảng C, cách đếm số lần xuất hiện của một phần tử trong mảng C cũng như cách đếm số lần xuất hiện của các phần tử trong mảng C sau bài học này.

Chúng ta có 4 cách đếm số phần tử trong mảng C như sau:

  • Đếm số phần tử giống nhau trong mảng C
  • Đếm số phần tử khác nhau trong mảng C
  • Đếm số lần xuất hiện của một phần tử trong mảng C
  • Đếm số lần xuất hiện của các phần tử trong mảng C

Đếm số phần tử giống nhau trong mảng C

Để đếm số phần tử giống nhau trong mảng C, chúng ta cần phải xác định được các phần tử giống nhau tồn tại trong mảng đó.

Để lấy phần tử giống nhau trong mảng C, chúng ta sẽ dùng tới hàm tự tạo mà Kiyoshi đã hướng dẫn trong bài:

Chúng ta sẽ biến tấu hàm này và viết hàm đếm số phần tử giống nhau trong mảng C trong chương trình như sau:

#include <stdio.h>

/*Tạo macro SIZE_OF_ARRAY để lấy độ dài (số phần tử) của mảng chỉ định*/
#define SIZE_OF_ARRAY(array) (sizeof(array)/sizeof(array[0]))


/*Tạo hàm in phần tử trong mảng*/
void show_array(int array[], int length){
for(short i = 0; i < length; i++) printf("%d ", array[i]);
printf("\n");
}


/*Tạo hàm đếm số phần tử giống nhau trong mảng C*/
int take_duplicate_element(const int* array, size_t size){
int result[100], count=0;

for (size_t i = 0; i < size - 1; ++i) {
for (size_t j = i + 1; j < size; ++j) {
if (array[i] == array[j]) { //Tìm thấy phần tử giống nhau
result[count]=array[i];
++ count;
}
}
}
show_array(result,count);
return count;
}

int main(void){
int array1[] = {1,2,3,3,2,5};
int array2[] = {1,1,2,3,2,5,5,8,9,6};

//Lấy phần tử trùng nhau
int check1 = take_duplicate_element(array1,SIZE_OF_ARRAY(array1));
printf("So phan tu giong nhau: %d\n",check1);

int check2 = take_duplicate_element(array2,SIZE_OF_ARRAY(array2));
printf("So phan tu giong nhau: %d\n",check2);

return 0;
}

Kết quả phép đếm số phần tử giống nhau trong mảng C như sau:

2 3 
So phan tu giong nhau: 2
1 2 5
So phan tu giong nhau: 3

Đếm số phần tử khác nhau trong mảng C

Để đếm số phần tử khác nhau trong mảng C, chúng ta đơn giản xóa đi tất cả các phần tử trùng trong mảng, rồi đếm số phần tử khác nhau còn lại trong mảng là xong.

Để xóa phần tử trùng trong mảng C, chúng ta sẽ sử dụng tới một trong 2 cách mà Kiyoshi đã hướng dẫn trong bài:

Và dưới đây là cách đếm số phần tử khác nhau trong mảng C sử dụng phương pháp Xóa phần tử trùng trong mảng C đã được sắp xếp:

#include <stdio.h>
#include <stdlib.h>

/*Tạo macro SIZE_OF_ARRAY để lấy độ dài (số phần tử) của mảng chỉ định*/
#define SIZE_OF_ARRAY(array) (sizeof(array)/sizeof(array[0]))

/*Tạo hàm in phần tử trong mảng*/
void show_array(int array[], int length){
for(short i = 0; i < length; i++) printf("%d ", array[i]);
printf("\n");
}

/*Tạo hàm so sánh tăng dần sử dụng trong hàm qsort*/
int compareIntAsc(const void* a, const void* b)
{
int aNum = *(int*)a;
int bNum = *(int*)b;

return aNum - bNum;
}

/*Tạo hàm xoá phần tử trùng trong mảng C*/
size_t array_unique(int* array, size_t size)
{
size_t end = 0;

for (size_t i = 1; i < size; ++i) {
if (array[i] != array[end]) { //Tìm thấy phần tử trùng nhau
++end; //Tăng dần vị trí đầu mảng để gán phần tử trùng nhau
array[end] = array[i]; //Ghi đè phần tử trùng nhau vào vị trí đầu mảng
}
}
show_array(array, end+1);

return end + 1;
}

int main(void)
{
int array1[] = { 7, 2, 6, 7, 4, 9, 8 };
int array2[] = { 7, 2, 6, 7, 7 };
int array3[] = { 7, 7, 7 };

// Sắp xếp các mảng theo thứ tự tăng dần
qsort(array1, SIZE_OF_ARRAY(array1), sizeof(int), compareIntAsc);
qsort(array2, SIZE_OF_ARRAY(array2), sizeof(int), compareIntAsc);
qsort(array3, SIZE_OF_ARRAY(array3), sizeof(int), compareIntAsc);

//Xoá phần tử trùng nhau và đếm số phần tử khác nhau trong kết quả
size_t size1 = array_unique(array1, SIZE_OF_ARRAY(array1));
printf("So phan tu khac nhau: %d\n", size1);

size_t size2 = array_unique(array2, SIZE_OF_ARRAY(array2));
printf("So phan tu khac nhau: %d\n", size2);

size_t size3 = array_unique(array3, SIZE_OF_ARRAY(array3));
printf("So phan tu khac nhau: %d\n", size3);

return 0;
}

Kết quả phép đếm số phần tử giống nhau trong mảng C như sau:

2 4 6 7 8 9 
So phan tu khac nhau: 6
2 6 7
So phan tu khac nhau: 3
7
So phan tu khac nhau: 1

Đếm số lần xuất hiện của một phần tử trong mảng C

Để đếm số lần xuất hiện của một phần tử trong mảng C, ví dụ như là đếm số lần xuất hiện của phần tử x trong mảng có n phần tử chẳng hạn, chúng ta đơn giản tạo một vòng lặp và so sánh phần tử đó với từng phần tử trong mảng xem có bao nhiêu phần tử trong mảng giống nó là xong.

Chúng ta viết hàm đếm số lần xuất hiện của một phần tử trong mảng C trong chương trình như sau:

#include <stdio.h>

/*Tạo macro SIZE_OF_ARRAY để lấy độ dài (số phần tử) của mảng chỉ định*/
#define SIZE_OF_ARRAY(array) (sizeof(array)/sizeof(array[0]))


/*Tạo hàm đếm số lần xuất hiện của một phần tử trong mảng C*/
int count_element_in_array(int* array, int size, int x){
int count = 0;
for(int i=0;i<size;i++){
if(array[i]==x) //Tìm thấy phần tử giống x trong mảng thì cộng biến đếm
count ++;
}
return count;
}

int main(void){
int array[] = { 7, 2, 6, 7, 4, 9, 8 };

int x = 7;

int count = count_element_in_array(array, SIZE_OF_ARRAY(array) , x);
printf("Phan tu %d xuat hien %d lan\n",x,count);

x = 4;
count = count_element_in_array(array, SIZE_OF_ARRAY(array) , x);
printf("Phan tu %d xuat hien %d lan",x,count);

return 0;
}

Kết quả phép đếm số lần xuất hiện của một phần tử trong mảng C như sau:

Phan tu 7 xuat hien 2 lan
Phan tu 4 xuat hien 1 lan

Đếm số lần xuất hiện của các phần tử trong mảng C

Đây là bài toán Cho một mảng 1 chiều có n phần tử. Hãy đếm số lần xuất hiện của từng phần tử trong mảng.
Ví dụ chúng ta có mảng sau

int array= {1, 2, 3, 1, 3, 2, 4};

Khi đó, số 1 xuất hiện 2 lần, số 2 xuất hiện 2 lần, số 3 xuất hiện 2 lần, và số 4 chỉ xuất hiện 1 lần trong mảng đã cho.

Để đếm số lần xuất hiện của các phần tử trong mảng C, trước tiên chúng ta cần sắp xếp mảng đã cho theo thứ tự tăng dần hoặc giảm dần.

Khi đó, các phần tử trùng nhau (nếu có) sẽ nằm cạnh nhau trong mảng. Và bằng phép so sánh một phần tử với một phần tử bên cạnh nó, nếu như chúng giống nhau thì chúng là phần tử trùng nhau, vầ chúng ta cần đếm chúng với số lần xuất hiện. Ngược lại nếu như một phần tử không giống với phần tử nằm cạnh nó, thì phần tử này chỉ tồn tại duy nhất 1 lần trong mảng mà thôi.

Để so sánh lần lượt như vậy, chúng ta cần sử dụng một vòng lặp để có thể tiến hành lấy lần lượt và so sánh từ đầu đến cuối mảng. Lưu ý là hai vị trí đầu mảng và cuối mảng do không có phần tử kế tiếp nào với nó để so sánh cả, nên chúng ta sẽ cần phải kiểm tra nó riêng.

Và chúng ta có thể tạo hàm đếm số lần xuất hiện của các phần tử trong mảng C như sau:

#include <stdio.h>
#include <stdlib.h>

/*Tạo macro SIZE_OF_ARRAY để lấy độ dài (số phần tử) của mảng chỉ định*/
#define SIZE_OF_ARRAY(array) (sizeof(array)/sizeof(array[0]))

/*Tạo hàm in phần tử trong mảng*/
void show_array(int array[], int length){
for(short i = 0; i < length; i++) printf("%d ", array[i]);
printf("\n");
}

/*Tạo hàm so sánh tăng dần sử dụng trong hàm qsort*/
int compareIntAsc(const void* a, const void* b)
{
int aNum = *(int*)a;
int bNum = *(int*)b;

return aNum - bNum;
}


/*Tạo hàm đếm số lần xuất hiện của các phần tử trong mảng C*/
void array_unique(int* array, size_t size){
int count =1;
for (size_t i = size-1; i > 0; --i) {
//printf("Phan tu %d",array[i-1]);
if (array[i] == array[i-1]) ++count; //Tìm thấy phần tử trùng nhau
else{
printf("Phan tu %d xuat hien %d lan\n",array[i], count);
count = 1;
}

}
printf("Phan tu %d xuat hiẹn %d lan\n",array[0], count);
}

int main(void)
{
int array1[] = { 7, 2, 6, 7, 4, 9, 8 };

// Sắp xếp các mảng theo thứ tự tăng dần
qsort(array1, SIZE_OF_ARRAY(array1), sizeof(int), compareIntAsc);
show_array(array1, SIZE_OF_ARRAY(array1));

//Đếm số lần xuất hiện của các phần tử trong mảng C
array_unique(array1, SIZE_OF_ARRAY(array1));

return 0;
}

Kết quả phép đếm số lần xuất hiện của các phần tử trong mảng C như sau:

2 4 6 7 7 8 9 
Phan tu 9 xuat hien 1 lan
Phan tu 8 xuat hien 1 lan
Phan tu 7 xuat hien 2 lan
Phan tu 6 xuat hien 1 lan
Phan tu 4 xuat hien 1 lan
Phan tu 2 xuat hiẹn 1 lan

Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn các cách đếm số phần tử trong mảng C rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.

Và hãy cùng tìm hiểu những kiến thức sâu hơn về C trong các bài học tiếp theo.

URL Link

https://laptrinhcanban.com/c/lap-trinh-c-co-ban/mang-trong-c/dem-so-phan-tu-trong-mang-c/

Hãy chia sẻ và cùng lan tỏa kiến thức lập trình Nhật Bản tại Việt Nam!

HOME  › >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.