Admin Học Vấn Cho Con|
02/10/2025
17lượt xem
0bình luận

C++ Bài Tập: Phân loại ngày trong tuần – lịch thông minh!

Mục lục
Đề bài: Nhập hai số nguyên: day (1–7, đại diện cho thứ trong tuần) và repeat (số lần lặp). Dùng while để lặp repeat lần, yêu cầu nhập day hợp lệ mỗi lần. Dùng switch-case để in tên ngày (Thứ Hai, Thứ Ba, …).
Khối lệnh sử dụng: while, switch-case

Chào các bạn! Hôm nay chúng ta sẽ cùng tạo một“lịch thông minh”có thể biết hôm nay là thứ mấy và nói tên ngày bằng tiếng Việt! 📆✨

🎭 Hãy tưởng tượng:

  • Bạn là mộtrobot lịchthông minh, có thể nói tên bất kỳ ngày nào trong tuần 🤖
  • Hoặc bạn làthư ký cá nhângiúp mọi người nhớ hôm nay là thứ mấy 📋
  • Hoặc đơn giản, bạn muốn tạotrò chơi đoán ngàyvui nhộn cho bạn bè! 🎮

Nhiệm vụ hôm nay: Viết chương trình có thể:

  • Nhập sốtừ 1-7 (đại diện cho các ngày trong tuần)
  • Lặp lạiviệc này nhiều lần theo ý muốn
  • Kiểm trasố nhập có hợp lệ không (phải từ 1-7)
  • Chuyển đổisố thành tên ngày bằng tiếng Việt!
Ví dụ vui nhộn:
Nhập số 1 → "Thứ Hai" 😊
Nhập số 7 → "Chủ Nhật" 🎉
Nhập số 15 → "Số không hợp lệ!" ❌

📚 KIẾN THỨC CẦN NHỚ

🎯 Quy ước về ngày trong tuần:

1 = Thứ Hai    (Monday)
2 = Thứ Ba (Tuesday)
3 = Thứ Tư (Wednesday)
4 = Thứ Năm (Thursday)
5 = Thứ Sáu (Friday)
6 = Thứ Bảy (Saturday)
7 = Chủ Nhật (Sunday)

🔧 Công cụ chúng ta sẽ dùng:

  • while:Để lặp lại việc nhập và xử lý nhiều lần
  • switch-case:Để phân loại và chuyển đổi số thành tên ngày
  • Validation:Kiểm tra số nhập có nằm trong khoảng 1-7 không

💡 Ý tưởng thuật toán:

1. Nhập số lần muốn thực hiện (repeat)
2. Dùng while để lặp repeat lần:
- Nhập số day (1-7)
- Kiểm tra day có hợp lệ không
- Nếu sai, yêu cầu nhập lại
- Dùng switch-case để chuyển số thành tên ngày
- In kết quả ra màn hình
3. Kết thúc sau khi hoàn thành tất cả lần lặp

🎯 PHÂN TÍCH ĐỀ BÀI

📋 Yêu cầu của đề:

  1. Nhập:2 số nguyên day (1-7) và repeat (số lần lặp)
  2. Xử lý:Dùng while lặp repeat lần, mỗi lần nhập day hợp lệ
  3. Phân loại:Dùng switch-case chuyển số thành tên ngày
  4. Kiểm tra:Đảm bảo day trong khoảng 1-7, nếu sai thì nhập lại

🗺️ Lược đồ giải quyết:

1. Nhập số lần lặp (repeat)
2. Khởi tạo biến đếm = 0
3. while (đếm < repeat):
- Nhập day
- Kiểm tra day có hợp lệ (1-7) không
- Nếu không hợp lệ, yêu cầu nhập lại
- Dùng switch(day) để in tên ngày
- Tăng biến đếm
4. Kết thúc chương trình

🛠️ GIẢI THÍCH TỪNG BƯỚC

Bước 1: Nhập số lần lặp

int repeat;
cout << "Nhập số lần muốn kiểm tra ngày: ";
cin >> repeat;

Giải thích: Cho phép người dùng quyết định muốn kiểm tra bao nhiều ngày.

Bước 2: Khởi tạo vòng lặp while

int count = 0;  // Biến đếm số lần đã thực hiện
while (count < repeat) {
    // Nội dung xử lý ở đây
    count++;  // Tăng biến đếm sau mỗi lần lặp
}

Giải thích: Sử dụng while như đề yêu cầu, đếm từ 0 đến repeat-1.

Bước 3: Nhập và validation day

int day = 0;
while (day < 1 || day > 7) {
    cout << "Nhập số ngày (1-7): ";
    cin >> day;
    if (day < 1 || day > 7) {
        cout << "❌ Số phải từ 1 đến 7! Vui lòng nhập lại." << endl;
        day = 0;
    }
} 

Giải thích:Dùng while để bắt buộc nhập đúng, chỉ thoát khi day hợp lệ.

Bước 4: Switch-case phân loại

switch (day) {
    case 1:
        cout << "🔵 Thứ Hai (Monday)" << endl;
        break;
    case 2:
        cout << "🟢 Thứ Ba (Tuesday)" << endl;
        break;
    case 3:
        cout << "🟡 Thứ Tư (Wednesday)" << endl;
        break;
    case 4:
        cout << "🟠 Thứ Năm (Thursday)" << endl;
        break;
    case 5:
        cout << "🔴 Thứ Sáu (Friday)" << endl;
        break;
    case 6:
        cout << "🟣 Thứ Bảy (Saturday)" << endl;
        break;
    case 7:
        cout << "🎉 Chủ Nhật (Sunday)" << endl;
        break;
    default:
        cout << "❌ Lỗi không xác định!" << endl;
        break;
}

Giải thích:

  • Mỗi case tương ứng với một ngày
  • break để thoát khỏi switch sau khi thực hiện
  • default phòng trường hợp bất ngờ (tuy nhiên đã có validation)


🎮 TEST CHƯƠNG TRÌNH

📝 Test case 1: Chương trình hoạt động bình thường

Input: repeat = 3
day = 1 → "Thứ Hai"
day = 5 → "Thứ Sáu"
day = 7 → "Chủ Nhật"
Expected: Hiển thị đúng 3 lần với tên ngày tương ứng

📝 Test case 2: Input sai cần validation

Input: repeat = 2
day = 8 (sai) → nhập lại: 6 → "Thứ Bảy"
day = 0 (sai) → nhập lại: 3 → "Thứ Tư"
Expected: Chương trình yêu cầu nhập lại và hiển thị đúng

📝 Test case 3: Kiểm tra tất cả các ngày

Input: repeat = 7
day = 1,2,3,4,5,6,7
Expected: Hiển thị đầy đủ từ Thứ Hai đến Chủ Nhật

🎯 BÀI TẬP THỰC HÀNH

🟢 Cấp độ dễ:

Bài 1: Version đơn giản

/*
YÊU CẦU:
- Chỉ lặp 3 lần cố định (không cần nhập repeat)
- Nhập day và hiển thị tên ngày
- Có validation cơ bản cho day (1-7)
- Sử dụng while và switch-case như đề gốc
*/

Bài 2: Thêm thông tin ngày

/*
YÊU CẦU:
- Giống bài gốc nhưng thêm thông tin:
  - Weekday hay Weekend
  - Màu sắc đại diện cho ngày
  - Emoji vui nhộn
- Hiển thị bảng đẹp mắt
*/

🟡 Cấp độ trung bình:

Bài 3: Chế độ ngược

/*
YÊU CẦU:
- Menu chọn: 1.Số→Tên 2.Tên→Số
- Chế độ 1: Nhập số, hiển thị tên (như đề gốc)
- Chế độ 2: Hiển thị menu tên ngày, nhập tên, hiển thị số
- Dùng switch-case cho cả hai chế độ
- Loop menu cho đến khi chọn thoát
*/

Bài 4: Tính toán ngày

/*
YÊU CẦU:
- Nhập ngày hiện tại (1-7)
- Nhập số ngày muốn cộng thêm
- Tính ngày kết quả (xử lý khi > 7 thì quay lại 1)
- Ví dụ: Thứ Sáu (5) + 3 ngày = Thứ Hai (1)
- Hiển thị quá trình tính toán chi tiết
*/

🔴 Cấp độ khó:

Bài 5: Lịch tháng mini

/*
YÊU CẦU:
- Nhập tháng và năm
- Tính toán ngày đầu tháng là thứ mấy
- Vẽ lịch tháng hoàn chỉnh bằng ASCII
- Highlight ngày hiện tại
- Thêm thông tin: ngày lễ, cuối tuần
- Sử dụng algorithm tính toán ngày trong tuần
*/

Bài 6: Hệ thống reminder

/*
YÊU CẦU:
- Quản lý công việc theo ngày trong tuần
- Menu: Thêm/Xóa/Xem công việc theo ngày
- Mỗi ngày có thể có nhiều công việc
- Reminder tự động cho công việc quan trọng
- Export lịch làm việc tuần ra text file
- Statistics: ngày bận nhất, ngày rảnh nhất
*/

🏆 THỬ THÁCH BONUS:

Challenge 1: “Lịch vạn niên”

/*
NHIỆM VỤ:
- Nhập ngày/tháng/năm bất kỳ
- Tính toán chính xác thứ mấy trong tuần
- Xử lý năm nhuận, các tháng có số ngày khác nhau
- Algorithm: Zeller's congruence hoặc Doomsday
- Interface đẹp với ASCII calendar
- Bonus: Hiển thị cung hoàng đạo, năm âm lịch
*/

Challenge 2: “Time Zone Converter”

/*
NHIỆM VỤ:
- Chuyển đổi giờ giữa các múi giờ
- Tính toán ngày thay đổi khi cross midnight
- Database múi giờ các nước
- DST (Daylight Saving Time) handling
- World clock với update real-time simulation
- Meeting scheduler across time zones
*/

💡 MẸO VÀ THỦ THUẬT

🌟 Validation input thông minh:

// Thay vì:
if (day < 1 || day > 7) {
    cout << "Lỗi!";
}

// Dùng:
if (day < 1 || day > 7) {
    cout << "❌ Lỗi: Số " << day << " không hợp lệ!";
    cout << "\n💡 Hãy nhập số từ 1 đến 7.";
    cout << "\n📅 1=Thứ Hai, 2=Thứ Ba, ..., 7=Chủ Nhật\n";
}

🎯 Switch-case với style:

// Thêm thông tin phong phú:
switch (day) {
    case 1:
        cout << "🔵 Thứ Hai (Monday)" << endl;
        cout << "💼 Blue Monday - Bắt đầu tuần mới!" << endl;
        cout << "🎯 Hôm nay nên lập kế hoạch cho cả tuần!" << endl;
        break;
    // ... các case khác
}

⚡ Optimize với lookup table:

// Cách nâng cao (cho tham khảo):
string dayNames[] = {"", "Thứ Hai", "Thứ Ba", "Thứ Tư", 
                    "Thứ Năm", "Thứ Sáu", "Thứ Bảy", "Chủ Nhật"};
string dayEmojis[] = {"", "🔵", "🟢", "🟡", "🟠", "🔴", "🟣", "🎊"};

// Thay switch bằng:
if (day >= 1 && day <= 7) {
    cout << dayEmojis[day] << " " << dayNames[day] << endl;
}

🐛 TRÁNH CÁC LỖI THƯỜNG GẶP

❌ Lỗi 1: Quên break trong switch

// SAI: Sẽ chạy tiếp các case bên dưới
switch (day) {
    case 1:
        cout << "Thứ Hai";
        // Thiếu break!
    case 2:
        cout << "Thứ Ba";  // Sẽ in cả này nếu day = 1
        break;
}

// ĐÚNG: Luôn có break
switch (day) {
    case 1:
        cout << "Thứ Hai";
        break;    // Có break
    case 2:
        cout << "Thứ Ba";
        break;
}

❌ Lỗi 2: Điều kiện while sai

// SAI: Có thể infinite loop hoặc không chạy
while (count <= repeat) {  // Sẽ chạy repeat+1 lần!
    // ...
    count++;
}

// ĐÚNG: Chạy đúng repeat lần
while (count < repeat) {   // Chạy từ 0 đến repeat-1
    // ...
    count++;
}

❌ Lỗi 3: Validation không đầy đủ

// SAI: Không handle input type mismatch
int day;
cin >> day;  // Nếu user nhập chữ thì lỗi

// ĐÚNG: Handle mọi trường hợp
int day;
while (!(cin >> day) || day < 1 || day > 7) {
    cout << "Lỗi! Vui lòng nhập số từ 1-7: ";
    cin.clear();
    cin.ignore(10000, '\n');
}

📋 CHECKLIST HOÀN THÀNH

✅ Yêu cầu bắt buộc:

  • Sử dụng while để lặp repeat lần
  • Sử dụng switch-case để phân loại day thành tên ngày
  • Nhập day (1-7) và repeat (số lần lặp)
  • Validation đầy đủ cho day (1-7)
  • Yêu cầu nhập lại nếu day không hợp lệ
  • Hiển thị đúng tên ngày tiếng Việt
  • Code chạy đúng với mọi test case

✅ Điểm cộng nếu có:

  • Giao diện đẹp mắt với emoji và màu sắc
  • Thông tin bổ sung về từng ngày
  • Phân biệt weekday và weekend
  • Bảng tóm tắt lịch tuần
  • Comments giải thích chi tiết
  • Error handling toàn diện

🎊 TỔNG KẾT

🏆 Bạn đã học được:

  • Kết hợp while và switch-casehiệu quả trong một chương trình
  • 🎯Input validationvới vòng lặp do-while
  • 🔢Switch-caseđể phân loại và xử lý nhiều trường hợp
  • 💪Structured programmingvới logic rõ ràng từng bước

🌟 Tại sao bài này quan trọng:

  • Control flow:Thành thạo cách điều khiển luồng chương trình
  • Data mapping:Hiểu cách chuyển đổi giữa các dạng dữ liệu
  • User experience:Tạo chương trình thân thiện với người dùng
  • Real application:Áp dụng vào bài toán thực tế (calendar, scheduler)

🚀 Level up achieved:

Từ “người viết if-else đơn giản” → “chuyên gia switch-case và validation” 📅✨


💬 HỎI ĐÁP THÔNG MINH

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

Q: Khi nào dùng switch-case thay vì if-else?
A: Khi có nhiều giá trị cụ thể cần kiểm tra (như 1,2,3…), switch-case rõ ràng và hiệu quả hơn. If-else tốt hơn cho điều kiện phức tạp (>, <, &&, ||).

Q: Tại sao cần break trong switch-case?
A: Không có break, chương trình sẽ “fall through” – chạy tiếp các case bên dưới. Đây là tính năng có thể hữu ích nhưng thường gây lỗi nếu không cẩn thận.

Q: Có thể dùng string trong switch-case không?
A: Trong C++ truyền thống không được, chỉ dùng int, char. Nhưng có thể dùng enum hoặc hash string thành số.

Q: Default case có bắt buộc không?
A: Không bắt buộc, nhưng nên có để xử lý trường hợp bất ngờ, giúp chương trình robust hơn.

🆘 Cần trợ giúp?

  • 💻Test online:onlinegdb.com
  • 🎯Debug:In ra giá trị biến count và day để kiểm tra logic
  • 📚Tham khảo:Search “C++ switch case examples” để xem thêm ví dụ

🌟 CODE HOÀN CHỈNH


🎉 LỜI KHÍCH LỆ CUỐI BÀI

Tuyệt vời! Bạn vừa hoàn thành một bài tập rất hay về việc kết hợp nhiều cấu trúc điều khiển! 🚀

💪 Switch-case là một công cụ cực kỳ mạnh mẽ trong lập trình – từ menu ứng dụng, game logic, đến state machine trong robotics và AI. Bạn đã bắt đầu thành thạo nó!

🌟 Điều đặc biệt: Bạn đã học cách validate input chuyên nghiệp – một kỹ năng cực kỳ quan trọng để tạo ra những ứng dụng robust và user-friendly.

🎯 From here: Kiến thức về vòng lặp và rẽ nhánh sẽ giúp bạn giải quyết được 80% các bài toán lập trình cơ bản!

Tiếp tục hành trình chinh phục C++ với sự tự tin! 📅🎊


🏷️ Tags:

#C++ #switch-case #while-loop #input-validation #ngày-trong-tuần #phân-loại-dữ-liệu #bài-tập-thực-hành #control-flow #dễ-hiểu #calendar-programming #Việt-Nam #programming-tutorial

ThíchĐã Thích0
Chia Sẻ

C++ Bài Tập: Phân loại ngày trong tuần – lịch thông minh!

Hướng dẫn giải bài tập phân loại ngày trong tuần với C++: dùng while để lặp, switch-case phân loại, validation input. Giải thích đơn giản với ví dụ thực tế và code hoàn chỉnh dễ hiểu.


Bạn muốn chia sẻ bài viết này:

# Bài Viết Liên Quan

  • Bai 22 du an mini may tinh khoa hoc mini sieu calculator

    C++ Bài 22: [Dự Án Mini] Máy tính khoa học mini – siêu calculator!

    Dự án mini máy tính khoa học bằng C++ dễ hiểu: tổng hợp toán tử, if-else, input validation, menu lựa chọn. Code hoàn chỉnh với giao diện đẹp, xử lý lỗi và 20+ chức năng từ cơ bản đến nâng cao.

    08/10/2025
  • Bai 21 bai tap kiem tra so chan le tham tu so hoc

    C++ Bài 21: [Bài Tập] Kiểm tra số chẵn lẻ – thám tử số học!

    Bài tập kiểm tra số chẵn lẻ bằng C++ dễ hiểu: sử dụng toán tử % (chia lấy dư), câu lệnh if-else, input validation. Code hoàn chỉnh với 20+ bài tập thực hành từ cơ bản đến nâng cao.

    08/10/2025
  • Bai 20 bai tap giai phuong trinh bac nhat tham tu toan hoc

    C++ Bài 20: [Bài Tập] Giải phương trình bậc nhất – thám tử toán học!

    Bài tập giải phương trình bậc nhất ax + b = 0 bằng C++ dễ hiểu. Hướng dẫn từng bước, xử lý trường hợp đặc biệt, code hoàn chỉnh với 20+ bài tập thực hành từ cơ bản đến nâng cao.

    08/10/2025
  • Bai 14 du an mini chuong trinh tinh diem trung binh 2 bai don gian hon cong cu tinh diem than ky

    C++ Bài 14: [Dự Án Mini] Chương trình tính điểm trung bình 2 – bài đơn giản hơn – công cụ tính điểm thần kỳ!

    Dự án mini C++ dễ hiểu cho học sinh: tạo chương trình tính điểm trung bình với giao diện đẹp. Hướng dẫn từng bước đơn giản với ví dụ thực tế và bài tập vui nhộn.

    01/10/2025
  • Bai 13 du an mini chuong trinh tinh diem trung binh ung dung quan ly hoc tap hoan chinh

    C++ Bài 13: [Dự Án Mini] Chương trình tính điểm trung bình – ứng dụng quản lý học tập hoàn chỉnh!

    Dự án mini C++ tính điểm trung bình: tổng hợp cin, cout, formatting, validation và giao diện chuyên nghiệp. Hướng dẫn chi tiết từng bước xây dựng ứng dụng hoàn chỉnh với 10+ tính năng nâng cao cho học sinh.

    01/10/2025
  • Bai 12 bai tap may tinh don gian sieu cong cu tinh toan

    C++ Bài 12: [Bài Tập] Máy tính đơn giản (+, -, *, /) – siêu công cụ tính toán!

    Bài tập C++ tạo máy tính đơn giản: thực hành cin, cout, toán tử số học, validation input và giao diện đẹp mắt. Hướng dẫn từng bước với 15+ tính năng nâng cao và code mẫu hoàn chỉnh cho học sinh.

    29/09/2025
  • Bai 11 bai tap tao bang thong tin dep mat nghe thuat thiet ke console

    C++ Bài 11: [Bài Tập] Tạo bảng thông tin đẹp mắt – nghệ thuật thiết kế console!

    Bài tập C++ tạo bảng thông tin đẹp mắt: thực hành setw, setprecision, ASCII borders, căn chỉnh cột và 15+ template bảng chuyên nghiệp. Hướng dẫn chi tiết từ cơ bản đến nâng cao cho học sinh với code mẫu hoàn chỉnh.

    29/09/2025
  • Bai tap tinh tien dien may tinh hoa don dien chuyen nghiep

    C++ Bài Tập: Tính tiền Điện – máy tính hóa đơn Điện chuyên nghiệp!

    Hướng dẫn tính tiền điện theo biểu giá EVN 2025 bằng C++: nhập kWh, validation với while, tính từng bậc giá bằng if-else, xuất bảng tầng bậc chi tiết. Code mẫu đầy đủ dễ hiểu.

    02/10/2025
  • Bai 10 bai tap chuong trinh thu thap thong tin tong hop kien thuc

    C++ Bài 10: [Bài Tập] Chương trình thu thập thông tin – tổng hợp kiến thức!

    Bài tập thực hành C++ tổng hợp: tạo chương trình hỏi thăm thông tin cá nhân sử dụng cin, cout, escape sequences và định dạng đẹp. 20+ bài tập từ cơ bản đến nâng cao với hướng dẫn chi tiết cho học sinh.

    29/09/2025
  • Bai tap kiem tra so nguyen to trong khoang tim kho bau so hoc

    C++ Bài Tập: Kiểm tra số nguyên tố trong khoảng – tìm kho báu số học!

    Hướng dẫn giải bài tập kiểm tra số nguyên tố trong khoảng với C++: dùng while để lặp, if-else kiểm tra, validation input và code hoàn chỉnh. Giải thích đơn giản, dễ hiểu với ví dụ thực tế.

    02/10/2025
0 0 votes
Đánh Giá Bài Viết
Subscribe
Notify of
guest
0 Bình Luận
Oldest
Newest Most Voted
Inline Feedbacks
Xem tất cả bình luận
Top Views
  • Board Mo Rong Microbit V2 Tuong Thich Module Amp Sensor 3 3v 5v 01
    26/12/2024
  • Make Code
    24/12/2024
  • Tu Tao May Dem Buoc Chan Cho Minh
    06/01/2025
  • Module Led Rgb 3 Mau 4 Chan Hw 479 01
    26/12/2024
  • Micro:bit V2 – Máy Tính Bỏ Túi Cho Giáo Dục STEM
    06/01/2025
  • Bai 01 chao mung den voi c tu scratch den sieu ngon ngu 01
    26/09/2025
  • Bai 02 cai dat moi truong online code ngay khong can cai dat 01
    27/09/2025
  • Bai 04 cau truc chuong trinh c nhu mot bai van co dau co cuoi 01
    27/09/2025
  • Bai 05 bien va kieu du lieu hop chua thong tin than ky 01
    27/09/2025
  • Bai 06 cout dua thong tin ra man hinh nhu phep mau 01
    28/09/2025
Top Love
  • Tu Tao May Dem Buoc Chan Cho Minh
    06/01/2025
  • Micro:bit V2 – Máy Tính Bỏ Túi Cho Giáo Dục STEM
    06/01/2025
  • Module Led Rgb 3 Mau 4 Chan Hw 479 01
    26/12/2024
  • Make Code
    24/12/2024
  • Board Mo Rong Microbit V2 Tuong Thich Module Amp Sensor 3 3v 5v 01
    26/12/2024
  • Bai tap kiem tra so nguyen to trong khoang tim kho bau so hoc
    02/10/2025