Bài tập thực hành đếm số lần xuất hiện của từng phần tử trong mảng. Mỗi phần tử chỉ xuất hiện một lần. Có sử dụng hàm


Bài tập thực hành đếm số lần xuất hiện của từng phần tử trong mảng. Mỗi phần tử chỉ xuất hiện một lần. Có sử dụng hàm

Bài tập thực hành đếm số lần xuất hiện của từng phần tử trong mảng

Đầu vào:

–Cho một danh sách gồm n phần tử

–Hãy in ra: Từng phần tử trong danh sách này xuất hiện bao nhiêu lần.

–Ví dụ:

•A [1,2,3,4,5,4,3,5,4,6,7,8,6]

•Thì KQ   [1,2,3,4,5,6,7,8]

•Với số lượng lần xuất hiện tương ứng  [1,1,2,3,2,2,1,1]


Chú ý: Xây dựng các hàm bổ trợ để thực hiện các việc sau:

1. Hàm kiểm tra 1 phần tử có tồn tại trong 1 danh sách hay không?

2. Hàm In danh sách

...


Hướng dẫn thực hiện

•Khai báo mảng A gồm các phần tử nhập vào.

•Khai báo mảng B gồm các phần tử kết quả

•Khai báo mảng C gồm các phần tử số lượng

•Biến Số lượng = 0;

•Lần lượt duyệt qua A

            •Nếu A[i] chưa có trong B thì thực hiện:

            •Số lần = Đếm số lần A[i] trong A

            •B [Số lượng] = A[i];

            •C [Số lượng] = Số lần;

            •Số lượng = Số lượng +1
• In danh sách B và danh sách C



•Lưu ý: Cần 2 hàm:

•Hàm 1: Kiểm tra xem 1 phần tử có trong danh sách hay chưa?

•Hàm 2: Đếm số lần xuất hiện của 1 phần tử trong mảng

Code lab tại đây:
https://codelabs-preview.appspot.com/?file_id=1xOIxR_rkdEoCWTfixHW8OChOXyP-9A4gQ9zHYcixk1Y#5



Khai báo sử dụng thư viện


#include <stdio.h>
#include <conio.h>

Bổ sung thêm phần khai báo 2 hàm

bool CoTrongDanhSach(int socankiemtra,int dsdain[],int soluongdain);
int SoLanXuatHien(int bien, int ds[],int soluongdanhsach);

Khai báo một mảng các phần tử kiểu int với số lượng là 10 phần tử.

int A[10];
int n;

Khai báo thêm một mảng và 1 biến để lưu số lượng phần tử đã in
   //Can 1 mang de luu nhung dong da in ra
   int B[10];
   int C[10];
   int soluongdain = 0;

Nhập vào số lượng phần tử của mảng

printf("Nhap so luong phan tu:");
   //Nhap vao tu ban phim
   scanf("%d",&n);
   //In n ra
   printf("n=%d\n",n);
   //Nhap cac phan tu trong mang
   for (int i = 0; i<n; i++)
   {
       //In ra loi huong dan nhap phan tu thu may
       printf("Nhap phan tu thu [%d]:",i+1);
       scanf("%d",&A[i]);
   }

Hiện mảng đã nhập

printf("Danh sach da nhap la:");
   for (int i = n-1;i>=0;i--)
   {
       printf("ds[%d]=%d\n",i,A[i]);
   }

Thực hiện Tìm kiếm trên danh sách

    • •Lần lượt duyệt qua A
    •            •Nếu A[i] chưa có trong B thì thực hiện:
    •            •Số lần = Đếm số lần A[i] trong A
    •            •B [Số lượng] = A[i];
    •            •C [Số lượng] = Số lần;
    •            •Số lượng = Số lượng +1
    • • In danh sách B và danh sách C

Code như sau:
for (int i = 0;i<n;i++)
   {
       //Neu ds[i] chua nam trong danh sach da in thi lam
       //if !CoTrongDanhSach(ds[i], dsdain) thi
       if (!CoTrongDanhSach(A[i],B,soluongdain))
       {
           solanxuathien = 0;
           solanxuathien = SoLanXuatHien(A[i],A,n);
           //In xong thi bo sung vao danh sach da in
           B[soluongdain] = A[i];
           C[soluongdain] = solanxuathien;
           soluongdain = soluongdain+1;
       }
   }

Hiện 2 danh sách kết quả

  • 1 phần tử trong danh sách B, xuất hiện mấy lần
//In ket qua
   printf("In danh sach phan tu trong mang:\n");
   for (int i = 0;i<soluongdain;i++)
   {
       printf("Phan tu[%d] xuat hien %d lan\n",B[i],C[i]);
   }
   getch();

Viết code để thực hiện kiểm tra 1 phần tử đã có trong 1 danh sách hay chưa.

bool CoTrongDanhSach(int socankiemtra,int dsdain[],int soluongdain)
{
   //Duyet tu dau den cuoi danh sach.
   //Neu co thi tra ra ngoai la da co
   for (int i = 0; i<soluongdain; i++)
   {
       if (socankiemtra==dsdain[i])
       {
           return true;
       }
   }
   //Den het roi ma khong co thi tra ra la khong co
   return false;
}


Viết code xây dựng hàm đếm số lần xuất hiện của một phần tử trong mảng

int SoLanXuatHien(int bien, int ds[],int soluongdanhsach)
{
   int solan = 0;
   for (int j = 0; j<soluongdanhsach; j++)
   {
       if (bien == ds[j])
           {
               solan = solan+1;
           }
   }
   return solan;
}



Tổng hợp Code

#include <stdio.h>
#include <conio.h>
bool CoTrongDanhSach(int socankiemtra,int dsdain[],int soluongdain);
int SoLanXuatHien(int bien, int ds[],int soluongdanhsach);
int main()
{
   int A[10];
   int n;
   //Can 1 mang de luu nhung dong da in ra
   int B[10];
   int C[10];
   int soluongdain = 0;
   //Hien thong bao moi nguoi dung nhap
   printf("Nhap so luong phan tu:");
   //Nhap vao tu ban phim
   scanf("%d",&n);
   //In n ra
   printf("n=%d\n",n);
   //Nhap cac phan tu trong mang
   for (int i = 0; i<n; i++)
   {
       //In ra loi huong dan nhap phan tu thu may
       printf("Nhap phan tu thu [%d]:",i+1);
       scanf("%d",&A[i]);
   }
   //In ra danh sach
   printf("Danh sach da nhap la:");
   for (int i = n-1;i>=0;i--)
   {
       printf("ds[%d]=%d\n",i,A[i]);
   }

   
   int solanxuathien = 0;
   for (int i = 0;i<n;i++)
   {
       //Neu ds[i] chua nam trong danh sach da in thi lam
       //if !CoTrongDanhSach(ds[i], dsdain) thi
       if (!CoTrongDanhSach(A[i],B,soluongdain))
       {
           solanxuathien = 0;
           solanxuathien = SoLanXuatHien(A[i],A,n);
           //In xong thi bo sung vao danh sach da in
           B[soluongdain] = ds[i];
           C[soluongdain] = solanxuathien;
           soluongdain = soluongdain+1;
       }
   }

   //In ket qua
   printf("In danh sach phan tu trong mang:\n");
   for (int i = 0;i<soluongdain;i++)
   {
       printf("Phan tu[%d] xuat hien %d lan\n",B[i],C[i]);
   }
   getch();
}
bool CoTrongDanhSach(int socankiemtra,int dsdain[],int soluongdain)
{
   //Duyet tu dau den cuoi danh sach.
   //Neu co thi tra ra ngoai la da co
   for (int i = 0; i<soluongdain; i++)
   {
       if (socankiemtra==dsdain[i])
       {
           return true;
       }
   }
   //Den het roi ma khong co thi tra ra la khong co
   return false;
}
int SoLanXuatHien(int bien, int ds[],int soluongdanhsach)
{
   int solan = 0;
   for (int j = 0; j<soluongdanhsach; j++)
   {
       if (bien == ds[j])
           {
               solan = solan+1;
           }
   }
   return solan;
}

Giao diện kết quả




Tham khảo hướng dẫn thực hành cách khác tại đây:




No comments:

Powered by Blogger.