Bối cảnh và vấn đề nghiên cứu

Đồ án môn học "Cơ sở lập trình" được thực hiện tại Trường Công nghệ và Thiết kế thuộc Đại học Kinh tế TP. Hồ Chí Minh (UEH) bởi Nhóm 4 (Lớp EE001) dưới sự hướng dẫn chuyên môn của TS.GVC Nguyễn Quốc Hùng. Nhóm tác giả gồm ba thành viên: Trịnh Thị Hải Âu (Trưởng nhóm - MSSV: 31211027629), Đặng Thị Như Quỳnh (MSSV: 31221026955), và Hoàng Thị Thanh Thảo (MSSV: 31221024605). Báo cáo được hoàn thành và nghiệm thu vào ngày 30 tháng 9 năm 2023.

Trong chương trình đào tạo khối ngành công nghệ và thiết kế, môn học Cơ sở lập trình đóng vai trò nền tảng nhằm trang bị tư duy giải thuật, kỹ thuật thao tác cấu trúc dữ liệu cơ bản và khả năng hiện thực hóa các mô hình toán học - logic thành chương trình máy tính. Mục tiêu trọng tâm của đồ án là hệ thống hóa các kỹ năng lập trình cấu trúc thông qua việc thiết kế, phân tích thuật toán, vẽ sơ đồ khối và cài đặt mã nguồn cho một chuỗi 10 bài toán thực hành mang tính tổng hợp.

Nhiệm vụ nghiên cứu và triển khai trong đồ án được phân định cụ thể theo các nhóm yêu cầu sau:

  1. Xây dựng chương trình mô phỏng logic trò chơi tương tác ngẫu nhiên giữa người và máy (Trò chơi Bao - Búa - Kéo).
  2. Thiết kế giải thuật giải và biện luận phương trình đại số bậc cao (Phương trình trùng phương $ax^4 + bx^2 + c = 0$).
  3. Ứng dụng công thức toán học - hình học không gian để tính toán tương quan thể tích giữa khối trụ tròn xoay và khối cầu.
  4. Xây dựng các thuật toán xử lý dữ liệu trên mảng một chiều: tính giá trị đa thức bậc $n$, thống kê phân loại số âm/dương, tìm kiếm phần tử thuộc đoạn $[N, M]$.
  5. Xây dựng các thuật toán xử lý dữ liệu trên mảng hai chiều (ma trận): kiểm tra tính đối xứng qua trục giữa, tạo ma trận phản chiếu, tính tổng các phần tử chẵn ở tam giác dưới đường chéo chính.
  6. Thiết kế module quản lý dữ liệu mảng đa chiều chứa thông tin sinh viên, thực hiện thuật toán trích xuất, sắp xếp và in bảng điểm tốt nghiệp theo định dạng mẫu.

Phạm vi thực hiện của đồ án tập trung hoàn toàn vào môi trường ứng dụng dòng lệnh (Console Application) trên nền tảng ngôn ngữ C#, tiếp nhận dữ liệu từ bàn phím và xuất kết quả trực tiếp ra màn hình console.


Cơ sở lý thuyết và phương pháp

Đồ án vận dụng các khái niệm và kỹ thuật lập trình cơ bản của ngôn ngữ C# (.NET Framework) kết hợp với các mô hình toán học rời rạc và hình học không gian.

Khung lý thuyết và cấu trúc kỹ thuật

  • Cấu trúc điều khiển và luồng rẽ nhánh: Sử dụng các lệnh điều kiện if-else, cấu trúc lựa chọn switch-case để phân luồng menu và xử lý logic trò chơi; các vòng lặp while, do-while, for để duyệt mảng và ma trận; lệnh nhảy nhãn goto kết hợp khối try-catch để xử lý ngoại lệ nhập liệu từ người dùng.
  • Cấu trúc dữ liệu:
    • Biến đơn nguyên thủy: int, float, double, string, bool.
    • Mảng một chiều: Lưu trữ các hệ số đa thức, danh sách số nguyên, mảng điểm số trung bình.
    • Mảng hai chiều: Biểu diễn ma trận số thực/số nguyên $A_{m \times n}$.
    • Mảng nhiều chiều không định kiểu cố định: object[,] để lưu trữ hồ sơ sinh viên gồm chuỗi ký tự, số nguyên và số thực trên cùng một tập dữ liệu bảng.
  • Mô hình toán học và giải thuật:
    • Đại số: Đưa phương trình trùng phương $ax^4 + bx^2 + c = 0$ về dạng phương trình bậc hai $at^2 + bt + c = 0$ bằng phương pháp đặt ẩn phụ $t = x^2$ ($t \ge 0$), sau đó tính biệt thức $\Delta = b^2 - 4ac$ để biện luận số nghiệm $x$.
    • Hình học: Thiết lập cân bằng thể tích khối trụ ($V = \pi r^2 h$) và thể tích khối cầu ($V = \frac{4}{3} \pi r_1^3$), suy ra bán kính khối cầu $r_1 = \sqrt[3]{\frac{3V}{4\pi}} = \sqrt[3]{\frac{3 r^2 h}{4}}$.
    • Giải thuật đa thức: Tính giá trị $F(x) = \sum_{i=0}^n a_i x^i$ thông qua vòng lặp tích lũy lũy thừa.
    • Giải thuật ma trận: Duyệt chỉ số dòng $i$ và cột $j$ để kiểm tra điều kiện đối xứng $A[i,j] = A[j,i]$, đảo ngược chỉ số cột $(n - 1 - j)$ để tạo ma trận phản chiếu, và điều kiện $j \le i$ kết hợp kiểm tra tính chẵn $A[i,j] \pmod 2 = 0$ cho tam giác dưới đường chéo chính.
    • Thuật toán sắp xếp: Sử dụng phương thức Array.Reverse() và Array.IndexOf() trên mảng điểm trung bình để xác định thứ hạng học tập.

Phương pháp nghiên cứu và thực nghiệm

Quy trình giải quyết từng bài toán được tiến hành tuần tự qua 4 bước chuẩn hóa:

  1. Phân tích yêu cầu (Analysis): Xác định tập dữ liệu đầu vào (Input) và kết quả cần đạt (Output).
  2. Mô tả thuật toán (Algorithm Description): Trình bày giải thuật theo từng bước logic tuần tự.
  3. Mô hình hóa (Flowchart): Xây dựng sơ đồ khối chi tiết thể hiện luồng dữ liệu và các điểm rẽ nhánh.
  4. Cài đặt và kiểm thử (Implementation & Testing): Viết mã nguồn C#, thực thi chương trình trên console và kiểm thử với các bộ dữ liệu biên, dữ liệu ngẫu nhiên.

Thiết kế và triển khai

Hệ thống được tổ chức thành một chương trình tích hợp tổng thể có tên không gian do_an_cuoi_ki, lớp Program chứa phương thức Main. Giao diện người dùng sử dụng bảng mã Encoding.Unicode / Encoding.UTF8 nhằm đảm bảo hiển thị tiếng Việt đầy đủ dấu trên môi trường dòng lệnh.

Chương trình triển khai hệ thống menu phân cấp linh hoạt:

  • Menu cấp 1: Cho phép người dùng chọn phân hệ bài tập từ Phần 1 đến Phần 4 hoặc nhập lựa chọn 5 để gọi Environment.Exit(0) đóng ứng dụng.
  • Menu cấp 2: Điều hướng chi tiết đến từng bài toán cụ thể trong từng phần, hỗ trợ tùy chọn quay lại menu chính (goto menu) hoặc lặp lại bài toán bằng lệnh hỏi tiếp tục (C/K).
  • Cơ chế bẫy lỗi: Toàn bộ các thao tác nhập từ bàn phím đều được bao bọc trong khối try-catch kết hợp nhãn nhạy luồng (goto nhap...) để ngăn chặn việc người dùng nhập ký tự không hợp lệ làm ngắt luồng thực thi.
Phân hệ Mã bài Tên bài toán Kiểu dữ liệu Input Định dạng Output Kỹ thuật cốt lõi
Phần 1 Bài 1 Bao - Búa - Kéo int (1: Bao, 2: Búa, 3: Kéo, 4: Thoát) Chuỗi kết quả: Thắng, Thua, Hòa System.Random, switch-case
Bài 2 Phương trình trùng phương float a, b, c Nghiệm $x$ (0, 1, 2 hoặc 4 nghiệm) Biện luận $\Delta$, ẩn phụ $t = x^2$
Bài 3 Thể tích hình cầu & hình trụ double r, h double r1 (Bán kính cầu) Thư viện Math.PI, Math.Pow
Phần 2 Bài 4 Tính giá trị đa thức bậc $n$ int n, x, mảng hệ số int[] a int kq ($F(x)$) Vòng lặp for, tính lũy thừa
Bài 5 Thống kê số âm, số dương int n, mảng int[] A Đếm & Tổng số âm; Đếm & Tổng số dương Duyệt tuần tự mảng, tích lũy điều kiện
Bài 6 Tìm phần tử trong đoạn $[N, M]$ int n, int[] arr, int N, M Danh sách giá trị và chỉ số vị trí [i] Kiểm tra điều kiện $N \le arr[i] \le M$
Phần 3 Bài 7 Kiểm tra ma trận đối xứng trục Kích thước $m, n$, mảng float[,] Trạng thái: Đối xứng / Không đối xứng Kiểm tra $m=n$ và so sánh $A[i,j] = A[j,i]$
Bài 8 Sinh ma trận phản chiếu Kích thước $m, n$, mảng int[,] Bảng ma trận ban đầu và ma trận đảo cột Duyệt cột nghịch đảo từ $n-1$ về 0
Bài 9 Tổng số chẵn tam giác dưới Kích thước $n$, mảng int[,] int sum Vòng lặp lồng $j \le i$, toán tử A[i,j] % 2 == 0
Phần 4 Chẵn Bảng điểm tốt nghiệp sinh viên Mảng object[,] (hồ sơ 5 sinh viên) Bảng điểm cá nhân kèm thứ hạng Mảng double[], Array.Reverse, Array.IndexOf

Nội dung chính theo từng chương

Phần 1: Các bài toán cấu trúc rẽ nhánh, phương trình đại số và hình học

Phần đầu tiên tập trung giải quyết các bài toán cơ bản về xử lý điều kiện, toán học và hình học không gian:

  • Bài 1 (Mô phỏng Bao - Búa - Kéo): Xây dựng trò chơi tương tác. Máy tính sinh số ngẫu nhiên trong khoảng $[1, 3]$ bằng Random.Next() tương ứng với Bao, Búa, Kéo. Người chơi nhập lựa chọn từ 1 đến 4 (4 là thoát). Thuật toán so sánh lựa chọn giữa người và máy dựa trên tập luật: Bao thắng Búa, Búa thắng Kéo, Kéo thắng Bao, trùng nhau thì hòa.
  • Bài 2 (Giải phương trình trùng phương $ax^4 + bx^2 + c = 0$): Thuật toán chuyển đổi bài toán về phương trình bậc hai $at^2 + bt + c = 0$ với $t = x^2$. Chương trình xử lý toàn diện các trường hợp:
    • Nếu $a = 0, b \ne 0$: giải phương trình bậc nhất $bt + c = 0 \Rightarrow t = -c/b$. Nếu $t > 0 \Rightarrow x = \pm\sqrt{t}$; $t = 0 \Rightarrow x = 0$; $t < 0 \Rightarrow$ vô nghiệm.
    • Nếu $a \ne 0$: tính $\Delta = b^2 - 4ac$. Nếu $\Delta < 0 \Rightarrow$ vô nghiệm; nếu $\Delta = 0 \Rightarrow$ nghiệm kép $t = -b/(2a)$; nếu $\Delta > 0 \Rightarrow$ hai nghiệm phân biệt $t_1, t_2 = (-b \pm \sqrt{\Delta})/(2a)$. Số nghiệm $x$ được xác định dựa trên dấu của các nghiệm $t$.
  • Bài 3 (Tính bán kính hình cầu tương đương thể tích hình trụ): Nhập bán kính đáy $r$ và chiều cao $h$ của hình trụ. Tính thể tích hình trụ $V = \pi r^2 h$. Bán kính hình cầu $r_1$ được tính thông qua công thức rút gọn $r_1 = \sqrt[3]{\frac{3V}{4\pi}}$ và hiển thị ra màn hình.

Phần 2: Thuật toán xử lý dữ liệu trên mảng một chiều

Phần thứ hai mở rộng sang các kỹ thuật thao tác cấu trúc dữ liệu tuyến tính (mảng một chiều):

  • Bài 4 (Tính giá trị đa thức bậc $n$): Nhập bậc $n$ ($n > 0$), mảng các hệ số $a_0, a_1, \dots, a_n$ và giá trị biến số $X$. Thuật toán tính tổng $F(x) = a_0 + a_1 X + a_2 X^2 + \dots + a_n X^n$ bằng cách lặp qua từng phần tử mảng và nhân dồn lũy thừa của $X$.
  • Bài 5 (Phân loại và thống kê mảng số nguyên): Khởi tạo mảng số nguyên $A$ gồm $N$ phần tử. Duyệt từng phần tử $A[i]$: nếu $A[i] > 0$ thì tăng biến đếm demduong và cộng dồn vào tongduong; nếu $A[i] < 0$ thì tăng demam và cộng dồn vào tongam. Kết thúc vòng lặp xuất ra 4 giá trị thống kê.
  • Bài 6 (Tìm kiếm phần tử trong khoảng giá trị): Nhập mảng số nguyên dương gồm $n$ phần tử và hai mốc giá trị $N, M$ ($N < M$). Thuật toán duyệt qua mảng, xác định các phần tử thỏa mãn $N \le arr[i] \le M$, in ra giá trị phần tử kèm chỉ số vị trí [i]. Nếu không có phần tử thỏa mãn, chương trình xuất thông báo không tìm thấy.

Phần 3: Thao tác trên mảng hai chiều (Ma trận)

Phần thứ ba nâng cao kỹ năng xử lý mảng hai chiều với các bài toán hình học ma trận:

  • Bài 7 (Kiểm tra ma trận đối xứng qua trục giữa): Nhập số dòng và số cột của ma trận $A_{m \times n}$. Thuật toán kiểm tra điều kiện cần là $m = n$ (ma trận vuông). Sau đó duyệt tất cả các cặp chỉ số $(i, j)$ để kiểm tra $A[i,j] = A[j,i]$. Nếu tồn tại bất kỳ cặp phần tử nào khác nhau, kết luận ma trận không đối xứng; ngược lại kết luận đối xứng.
  • Bài 8 (Tạo ma trận phản chiếu): Nhập ma trận $A_{m \times n}$. Ma trận phản chiếu qua trục dọc được sinh ra bằng cách giữ nguyên chỉ số dòng $i$ từ $0$ đến $m-1$, nhưng duyệt chỉ số cột $j$ đảo ngược từ $n-1$ về $0$ khi in ra màn hình.
  • Bài 9 (Tính tổng phần tử chẵn tam giác dưới đường chéo chính): Nhập ma trận vuông cấp $n$. Thuật toán sử dụng hai vòng lặp lồng nhau với điều kiện dòng $i$ chạy từ $0$ đến $n-1$ và cột $j$ chạy từ $0$ đến $i$ (tam giác dưới kể cả đường chéo chính). Nếu $A[i,j]$ là số chẵn ($A[i,j] \pmod 2 = 0$), giá trị này sẽ được cộng tích lũy vào biến sum.

Phần 4: Xử lý dữ liệu phức hợp và in phiếu điểm sinh viên (Đề chẵn)

Phần cuối cùng ứng dụng mảng nhiều chiều không đồng nhất object[,] để quản lý thông tin danh sách sinh viên gồm 5 bản ghi mẫu:

Họ và tên Năm sinh Điểm trung bình Xếp loại
Trịnh Quang Nghị 2004 7.5 Khá
Hồ Xuân Hường 2004 9.8 Giỏi
Lê Quang Duy 2004 8.3 Giỏi
Hoàng Xuân Lại 2004 6.3 Trung Bình
Nguyễn Minh Hoàng 2004 4.5 Yếu

Thuật toán trích xuất toàn bộ điểm trung bình của sinh viên sang mảng một chiều double[] arr, thực hiện sắp xếp giảm dần bằng phương thức Array.Reverse(arr) (sau khi sắp xếp tăng dần). Thứ hạng của từng sinh viên được tính bằng công thức: hang = Array.IndexOf(arr, dtb) + 1. Sau đó, chương trình in lần lượt phiếu điểm tốt nghiệp cho toàn bộ sinh viên theo định dạng chuẩn:

------------------------------------
BẢNG ĐIỂM TỐT NGHIỆP
Cấp cho sinh viên <họ tên>, năm sinh <năm sinh>.
Trong kì thi tốt nghiệp 2021, sinh viên đã đạt điểm trung bình là <điểm trung bình>, và được xếp loại <xếp loại>.
Sinh viên có thứ hạng <thứ hạng> trong lớp.
Hiệu Trưởng Trường Đại học ABC.
Kí tên, Đóng dấu
------------------------------------

Kết quả và đóng góp

Đồ án đã hiện thực hóa thành công 10/10 bài toán với các kết quả thực nghiệm cụ thể được ghi nhận trong báo cáo:

  • Kiểm thử Bài 4 (Tính đa thức): Với bộ dữ liệu thử nghiệm đầu vào gồm $n = 3$, các hệ số $a_0 = 4, a_1 = 2, a_2 = 1, a_3 = 3$ và giá trị $x = 2$, chương trình tính toán chính xác giá trị đa thức $F(2) = 4 + 2(2) + 1(2^2) + 3(2^3) = 4 + 4 + 4 + 24 = 36$.
  • Kiểm thử Bài 5 (Thống kê mảng): Với mảng gồm 6 phần tử [-2, 4, 6, -8, 4, 1], kết quả đầu ra hiển thị chính xác: Số lượng số âm là 2, Tổng số số âm là -10; Số lượng số dương là 4, Tổng số số dương là 15.
  • Kiểm thử Bài 7 (Ma trận đối xứng): Với ma trận vuông $3 \times 3$ có các hàng lần lượt là [2, 1, 3], [1, 2, 1], [3, 1, 1], chương trình xác định chính xác ma trận đối xứng qua trục giữa.
  • Kiểm thử Bài 8 (Ma trận phản chiếu): Với ma trận đầu vào kích thước $3 \times 2$: $$\begin{pmatrix} 1 & 7 \ 2 & 3 \ 4 & 5 \end{pmatrix}$$ Chương trình xuất ra ma trận phản chiếu chính xác: $$\begin{pmatrix} 7 & 1 \ 3 & 2 \ 5 & 4 \end{pmatrix}$$
  • Kiểm thử Phần 4 (Xếp hạng sinh viên): Dựa trên mảng điểm trung bình [7.5, 9.8, 8.3, 6.3, 4.5], chương trình đã tính toán chính xác thứ hạng lần lượt là: Hồ Xuân Hường (Hạng 1 - 9.8), Lê Quang Duy (Hạng 2 - 8.3), Trịnh Quang Nghị (Hạng 3 - 7.5), Hoàng Xuân Lại (Hạng 4 - 6.3), Nguyễn Minh Hoàng (Hạng 5 - 4.5) và xuất đầy đủ 5 phiếu điểm tương ứng.

Đóng góp chính của đồ án thể hiện ở việc xây dựng một khung ứng dụng Console hoàn chỉnh, liên kết mạch lạc giữa lý thuyết giải thuật và mã nguồn C#, cung cấp cấu trúc menu phân cấp rõ ràng và tích hợp các biện pháp kiểm soát lỗi nhập liệu cơ bản.


Hạn chế và hướng nghiên cứu tiếp

Dựa trên nội dung mã nguồn và phạm vi triển khai thực tế trong văn bản, đồ án tồn tại một số hạn chế kỹ thuật:

  • Kiểm soát luồng và kiến trúc mã: Chương trình lạm dụng lệnh nhảy nhãn goto (goto menub..., goto nhap...) để xử lý luồng lặp lại khi nhập sai thay vì đóng gói thành các hàm (methods) riêng biệt hoặc sử dụng các cấu trúc vòng lặp chuẩn tắc (while (true) kết hợp continue/break).
  • Mô hình hóa dữ liệu đối tượng: Trong Phần 4, việc sử dụng mảng đa chiều object[,] để lưu trữ thông tin sinh viên gây khó khăn trong việc ép kiểu và tiềm ẩn rủi ro lỗi kiểu dữ liệu (type safety) trong thời gian chạy. Đồ án chưa áp dụng các nguyên lý lập trình hướng đối tượng (OOP) như xây dựng lớp SinhVien với các thuộc tính định kiểu chặt chẽ.
  • Tính động của dữ liệu: Dữ liệu danh sách sinh viên ở Phần 4 đang được gán cứng (hard-coded) trực tiếp trong mã nguồn, chưa có chức năng nhập động danh sách từ bàn phím hoặc đọc/ghi tệp dữ liệu bên ngoài (như tệp .txt, .csv hoặc cơ sở dữ liệu).

Hướng phát triển tiếp theo được xác định bao gồm: tái cấu trúc toàn bộ mã nguồn theo chuẩn lập trình module và hướng đối tượng (OOP); thay thế mảng tĩnh bằng danh sách động (List<T>); tích hợp chức năng lưu trữ và đọc dữ liệu từ tệp tin; nâng cấp giao diện từ dòng lệnh (Console) lên giao diện đồ họa người dùng (GUI) sử dụng Windows Forms hoặc WPF.


Giá trị tham khảo

Tài liệu đồ án này mang lại giá trị tham khảo hữu ích cho:

  • Sinh viên khối ngành Công nghệ: Sinh viên ngành Công nghệ thông tin, Kỹ thuật phần mềm, Khoa học dữ liệu tại UEH và các trường đại học đang theo học học phần Cơ sở lập trình, Nhập môn lập trình hoặc Lập trình C#.
  • Mẫu tham khảo về phương pháp luận giải quyết bài toán: Cung cấp cấu trúc báo cáo chuẩn mực từ khâu phân tích bài toán (Input/Output), xây dựng giải thuật từng bước, biểu diễn sơ đồ khối cho đến cài đặt mã nguồn thực tế.
  • Tài liệu thực hành: Các thuật toán về ma trận (kiểm tra đối xứng, phản chiếu, duyệt tam giác đường chéo) và thuật toán xếp hạng là các mẫu bài tập điển hình trong kiểm tra, đánh giá môn học.

Câu hỏi thường gặp

1. Đồ án xử lý các trường hợp nghiệm của phương trình trùng phương $ax^4 + bx^2 + c = 0$ như thế nào?
Chương trình chuyển phương trình về dạng bậc hai $at^2 + bt + c = 0$ ($t = x^2 \ge 0$). Thuật toán xét riêng trường hợp $a = 0$ (giải phương trình bậc nhất $t = -c/b$) và trường hợp $a \ne 0$ (tính biệt thức $\Delta = b^2 - 4ac$). Nghiệm $x$ được xác định dựa trên số lượng và dấu của các nghiệm $t$: mỗi nghiệm $t > 0$ sinh ra hai nghiệm đối xứng $x = \pm\sqrt{t}$, nghiệm $t = 0$ cho một nghiệm $x = 0$, còn $t < 0$ hoặc $\Delta < 0$ thì không có nghiệm thực.

2. Giá trị của đa thức $F(x)$ trong bộ kiểm thử mẫu tại Bài 4 được tính ra kết quả bằng bao nhiêu?
Với dữ liệu đầu vào là bậc đa thức $n = 3$, các hệ số $a_0 = 4, a_1 = 2, a_2 = 1, a_3 = 3$ và giá trị $x = 2$, kết quả đầu ra của đa thức $F(x) = 3(2^3) + 1(2^2) + 2(2) + 4$ được chương trình in ra chính xác là $36$.

3. Làm thế nào để chương trình xác định thứ hạng của sinh viên trong Phần 4?
Chương trình trích xuất toàn bộ điểm trung bình từ mảng hồ sơ object[,] sang một mảng một chiều double[] arr, sau đó tiến hành đảo ngược/sắp xếp theo thứ tự giảm dần (Array.Reverse). Thứ hạng của từng sinh viên trong lớp được tính tự động bằng hàm tìm vị trí chỉ số Array.IndexOf(arr, dtb) + 1.

4. Bán kính của hình cầu tương đương thể tích với hình trụ tròn xoay được tính theo công thức nào trong Bài 3?
Chương trình tính thể tích hình trụ tròn $V = \pi \cdot r^2 \cdot h$, sau đó áp dụng công thức rút gọn từ thể tích khối cầu $V = \frac{4}{3}\pi r_1^3$ để tính bán kính khối cầu $r_1 = \text{Math.Pow}((3.0 \cdot V) / (4.0 \cdot \pi), 1.0/3.0)$ (hoặc biểu thức tương đương $\sqrt[3]{\frac{3 r^2 h}{4}}$).

5. Cấu trúc menu của chương trình được tổ chức như thế nào trong mã nguồn toàn bộ?
Chương trình sử dụng vòng lặp while (true) vô hạn bọc lấy cấu trúc điều hướng hai tầng. Tầng ngoài dùng switch (luaChonPhan) để chọn các phần từ 1 đến 4 (hoặc chọn 5 để thoát bằng Environment.Exit(0)), tầng trong dùng switch (luaChonBai) để kích hoạt từng bài toán cụ thể kèm nhãn điều hướng goto menu để quay lại bảng chọn chính.


Kết luận

Đồ án môn học "Cơ sở lập trình" của Nhóm 4 đã giải quyết trọn vẹn 10 bài toán thực hành thuộc các chủ đề lập trình cơ bản trên nền tảng ngôn ngữ C#. Báo cáo thể hiện rõ phương pháp làm việc có hệ thống thông qua việc kết hợp chặt chẽ giữa phân tích logic, mô hình hóa sơ đồ khối và triển khai mã nguồn thực thi. Tài liệu là một nguồn tham khảo chuẩn mực và hữu ích cho sinh viên trong quá trình củng cố tư duy giải thuật và kỹ năng lập trình cấu trúc.