Từ 1 tới 9 trên tổng số 9 kết quả

Đề tài: bài tập cung hoàng đạo

  1. #1
    Ngày gia nhập
    09 2018
    Bài viết
    20

    Mặc định bài tập cung hoàng đạo

    cho em hỏi bài này vs ạ
    Viết một chương trình nhận vào từ bàn phím ngày và tháng sinh của một người và in ra cung hoàng đạo tương ứng. Các cung hoàng đạo và thời gian tương ứng là:

    Cung hoàng đạo Thời gian
    Bach Duong 21/3 - 19/4
    Kim Nguu 20/4 - 20/5
    Song Tu 21/5 - 21/6
    Cu Giai 22/6 - 22/7
    Su Tu 23/7 - 22/8
    Xu Nu 23/8 - 22/9
    Thien Binh 23/9 - 23/10
    Thien Yet 24/10 - 22/11
    Nhan Ma 23/11 - 21/12
    Ma Ket 22/12 - 19/1
    Bao Binh 20/1 - 18/2
    Song Ngu 19/2 - 20/3

    dùng lệnh switch case
    em xin cảm ơn

  2. #2
    Ngày gia nhập
    02 2016
    Bài viết
    305

    Bài này khó bỏ bố.
    Nếu bạn không muốn switch cho đủ 365-366 cases thì bắt buộc phải tìm thuật toán công phu. Đại khái 1 cách là:
    - Vẽ đủ 365-366 ngày trên giấy
    - Phân khoảng từng cung
    - Nhận định con số ngày của mỗi cung
    - Tìm một con toán chuyển đổi ngày tháng thành ngày trong năm (vd ngày 10 tháng 3 là ngày thứ 31+29+10 = 70 trong năm)
    - Tìm một con toán chuyển đổi ngày trong năm thành vị trí trong khoảng cung ở trên
    - Dùng con toán này để switch

  3. #3
    Ngày gia nhập
    12 2015
    Nơi ở
    Đà Nẵng
    Bài viết
    443

    Trích dẫn Nguyên bản được gửi bởi NguNhuheo Xem bài viết
    Bài này khó bỏ bố.
    Nếu bạn không muốn switch cho đủ 365-366 cases thì bắt buộc phải tìm thuật toán công phu. Đại khái 1 cách là:
    - Vẽ đủ 365-366 ngày trên giấy
    - Phân khoảng từng cung
    - Nhận định con số ngày của mỗi cung
    - Tìm một con toán chuyển đổi ngày tháng thành ngày trong năm (vd ngày 10 tháng 3 là ngày thứ 31+29+10 = 70 trong năm)
    - Tìm một con toán chuyển đổi ngày trong năm thành vị trí trong khoảng cung ở trên
    - Dùng con toán này để switch
    Đúng rồi
    Nhưng nếu đã có vị trí trong cung hoàng đạo thì tạo mảng string các cung hoàng đạo rồi truy cập bằng chỉ số là vị trí nói trên là nhanh hơn, ai lại dùng switch nhỉ
    Dù thế nào đi nữa, nếu đáp án không có if, else if, else gồm ít nhất 12 cái thì mình đi đầu xuống đất
    Đề nghị chủ thớt khi nào có đáp án(tự tìm ra hoặc ông thầy ra cái đề này giải đáp ) thì cũng post lên đây để mọi người mở rộng tầm mắt

    - - - Nội dung đã được cập nhật ngày 20-09-2018 lúc 08:22 PM - - -

    Ps 2 bước tìm con toán có thể nhập lại làm một

  4. #4
    Ngày gia nhập
    02 2016
    Bài viết
    305

    Hình như phần mở rộng (không phải chuẩn) của trình biên dịch GCC có chuyện switch case theo từng khoảng.
    Dùng ký hiệu .. (2 dấu) chấm hay ... (3 dấu) gì đó.

    Có khả năng là giáo viên ra bài tập này học đâu đó được bài giải kiểu ấy rồi tưởng bở

  5. #5
    Ngày gia nhập
    07 2011
    Bài viết
    463

    khỏi switch case if else gì hết nhoa

    C++ Code:
    1. const char* cungHoangDao(int d, int m)
    2. {
    3.     static int dbm[] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
    4.     static const char* name[] = {
    5.         "Bach Duong", "Kim Nguu", "Song Tu", "Cu Giai", "Su Tu", "Xu Nu",
    6.         "Thien Binh", "Thien Yet", "Nhan Ma", "Ma Ket", "Bao Binh", "Song Ngu"
    7.     };
    8.     return name["jjjjjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkkkkkkkkkkkkkklllllllllll"
    9.                 "lllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbb"
    10.                 "bbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccdddddddd"
    11.                 "dddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeffffff"
    12.                 "fffffffffffffffffffffffffggggggggggggggggggggggggggggggghhhh"
    13.                 "hhhhhhhhhhhhhhhhhhhhhhhhhhiiiiiiiiiiiiiiiiiiiiiiiiiiiiijjjjj"
    14.                 "jjjjj"[dbm[m - 1] + d - 1] - 'a'];
    15. }

  6. #6
    Ngày gia nhập
    02 2016
    Bài viết
    305

    Mặc định bài tập cung hoàng đạo

    Trích dẫn Nguyên bản được gửi bởi INTP Xem bài viết
    khỏi switch case if else gì hết nhoa

    C++ Code:
    1. const char* cungHoangDao(int d, int m)
    2. {
    3.     static int dbm[] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
    4.     static const char* name[] = {
    5.         "Bach Duong", "Kim Nguu", "Song Tu", "Cu Giai", "Su Tu", "Xu Nu",
    6.         "Thien Binh", "Thien Yet", "Nhan Ma", "Ma Ket", "Bao Binh", "Song Ngu"
    7.     };
    8.     return name["jjjjjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkkkkkkkkkkkkkklllllllllll"
    9.                 "lllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbb"
    10.                 "bbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccdddddddd"
    11.                 "dddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeffffff"
    12.                 "fffffffffffffffffffffffffggggggggggggggggggggggggggggggghhhh"
    13.                 "hhhhhhhhhhhhhhhhhhhhhhhhhhiiiiiiiiiiiiiiiiiiiiiiiiiiiiijjjjj"
    14.                 "jjjjj"[dbm[m - 1] + d - 1] - 'a'];
    15. }
    Tưởng gì. Array mapping là giải thuật chính thống rồi còn nói chi nữa.

    Ở đây là làm được switch-case mới đòi hỏi thuật toán tuyệt đỉnh.

    Mặt khác, nếu dùng trình biên dịch của GNU (GCC) thì code đại khái như vầy. Tôi chỉ diễn tả để dân chứng có thể đây là ý của ngừoi ra bài, đây chả phải là thuật toán hay ho gì cả:

    switch (thang * 10 + ngay)
    {
    case 312 ... 419:
    strpcy(hoangdao, "Bach Duong"); break;
    case 420 ... 520:
    strcpy(hoangdao, "Kim Nguu"); break;
    // tiếp tục
    .
    }

    Như ở trên đã nói, trình dịch này KHÔNG PHẢI là chuẩn C.

  7. #7
    Ngày gia nhập
    12 2015
    Nơi ở
    Đà Nẵng
    Bài viết
    443

    Trích dẫn Nguyên bản được gửi bởi INTP Xem bài viết
    khỏi switch case if else gì hết nhoa

    C++ Code:
    1. const char* cungHoangDao(int d, int m)
    2. {
    3.     static int dbm[] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
    4.     static const char* name[] = {
    5.         "Bach Duong", "Kim Nguu", "Song Tu", "Cu Giai", "Su Tu", "Xu Nu",
    6.         "Thien Binh", "Thien Yet", "Nhan Ma", "Ma Ket", "Bao Binh", "Song Ngu"
    7.     };
    8.     return name["jjjjjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkkkkkkkkkkkkkklllllllllll"
    9.                 "lllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbb"
    10.                 "bbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccdddddddd"
    11.                 "dddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeffffff"
    12.                 "fffffffffffffffffffffffffggggggggggggggggggggggggggggggghhhh"
    13.                 "hhhhhhhhhhhhhhhhhhhhhhhhhhiiiiiiiiiiiiiiiiiiiiiiiiiiiiijjjjj"
    14.                 "jjjjj"[dbm[m - 1] + d - 1] - 'a'];
    15. }
    Ôi trơi ơi mình đang đi bằng đâu đay, he he
    Code la qua, hăng chuỗi co´ thê truy cập ki´ tư qua chi số a
    Con năm nhuận thiˋ sao bạn

  8. #8
    Ngày gia nhập
    07 2011
    Bài viết
    463

    năm nhuận thì kệ nó vì 29/2 nếu tính theo kiểu 31 + 29 = 59 + 1 hay coi như là 1/3, cũng nằm trong cung Song Ngư thôi :V

    ở đây dùng switch case mới gọi là khổ dâm tuyệt đỉnh =) Hay viết 1 chương trình khác cout ra 365 cái switch case này rồi copy paste vào cho nó lành =)

  9. #9
    Ngày gia nhập
    02 2016
    Bài viết
    305

    Viết chương trình si ao ra một đống ký tự trước đã.

Tags của đề tài này

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn