# Đề 1:
- **Câu 1**:
- Tạo chương trình với hàm `main` (1đ)
- Tạo mảng số nguyên `arrNum` với 10 phần tử sau: `1,7,9,14,9,16,2,1,18,1` (1đ)
- Viết hàm `showMenu` không có giá trị trả về và không có tham số. Hàm này sẽ vẽ Menu của phần mềm như sau: (1đ)
```
-------------------------------------
| My First Application |
-------------------------------------
| 1. Print numbers |
| 2. Find numbers |
| 3. Find average |
| 4. Sort numbers by asc/desc |
| 5. Group by numbers |
| 6. Clear screen |
| 7. Exit |
-------------------------------------
```
- Viết hàm `printNumber` không có giá trị trả về và có 2 tham số đầu vào là mảng số `numbers` và độ dài mảng `size`. Hàm này sẽ tiến hành in ra màn hình kết quả như sau: (1.5đ)
```
// The last character of the string is the `!`
Numbers : 1 , 7 , 9 , 14 , 9 , 16 , 2 , 1 , 18 , 1 !
```
- Viết hàm `findNumbers` không có giá trị trả về và có 3 tham số đầu vào là một `int flag`, mảng số `numbers` và độ dài mảng `size`. Hàm này sẽ tiến hành in ra màn hình những số trong dãy số NHỎ HƠN giá trị `flag` (1.5đ)
- Viết hàm `findAverage` trả về một giá trị `double` và mảng số `numbers` và độ dài mảng `size`. Hàm này sẽ tiến hành tính toán giá trị trung bình của mảng số trên và TRẢ VỀ giá trị đó (2.5đ)
- Viết hàm `sortBy` không có giá trị trả về và có 3 tham số đầu vào là một `int flag`, mảng số `numbers` và độ dài mảng `size`. Hàm này sẽ tiến hành kiểm tra xem tham số `flag` nếu là số chẵn thì sẽ sắp xếp theo chiều tăng dần, nếu là số lẻ thì sắp xếp theo chiều giảm dần (2.5đ)
- Viết hàm `groupByNumber` không có giá trị trả về và có tham số đầu vào là mảng số `numbers` và độ dài mảng `size`. Hàm này sẽ tiến hành đếm số lần xuất hiện của một số trong mảng số ban đầu như sau: (1đ)
```
-----------------------
| Number | Count |
-----------------------
| 1 | 3 Time |
| 7 | 1 Time |
| 9 | 2 Time |
| 14 | 1 Time |
| 16 | 1 Time |
| 2 | 1 Time |
| 18 | 1 Time |
-----------------------
```
- **Câu 2**:
- Viết chương trình chạy trong hàm `main` và triển khai các yêu cầu sau:
- Hiển thị menu bằng cách gọi hàm `showMenu` khi bắt đầu chương trình.
- Yêu cầu người dùng lựa chọn theo menu:
- Nếu người dùng chọn 1: Gọi hàm `printNumber` để hiển thị các số (0.5 đ)
- Nếu người dùng chon 2: Yêu cầu người dùng nhập vào một số, gọi hàm `findNumbers` với tham trị tương ứng và tiến hành thực hiện chức năng của hàm. (1 đ)
- Nếu người dùng chọn 3: Gọi hàm `findAverage` với tham trị tương ứng và in kết quả dưới dạng tối đa 2 số trong phần thập phân (1 đ)
- Nếu người dùng chon 4: Yêu cầu người dùng nhập vào một số, gọi hàm `sortBy` với tham trị tương ứng và tiến hành thực hiện chức năng của hàm. (1 đ)
- Nếu người dùng chon 5: Yêu cầu người dùng nhập vào một số, gọi hàm `groupByNumber` với tham trị tương ứng và tiến hành thực hiện chức năng của hàm. (0.5 đ)
- Nếu người dùng chon 6: Clear màn hình nhưng không làm tắt phần mềm. (1 đ)
- Nếu người dùng chon 7: Tắt phần mềm. (1 đ)
- Yêu cầu triển khai phần mềm trong vòng lặp vô hạn để mỗi khi chọn một chức năng, có thể chọn lại chức năng đó (2đ)