Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 11 kết quả

Đề tài: switch...case khi rẽ nhánh có hơn và kém?

  1. #1
    Ngày gia nhập
    07 2011
    Nơi ở
    Moscow-Russia
    Bài viết
    154

    Mặc định switch...case khi rẽ nhánh có hơn và kém?

    Mình muốn thể hiện hàm sau bằng switch...case, ai giúp mình với.
    - Nếu x<20 và x>=2 thì y=15+x;
    - nếu x<2 và x>=-1 thì y=4x;
    - các trường hợp còn lại y=2x

    Mình xin cảm ơn.
    A good beginning and a good ending !

  2. #2
    Ngày gia nhập
    02 2014
    Nơi ở
    TP.HCM
    Bài viết
    996

    Nhu cầu của bạn cũng hiếm gặp thật, dùng if...else if...else thì đẹp quá. Nhưng nếu muốn rắc rối thì
    C Code:
    1. int aaa(int x)
    2. {
    3.     int y = 2 * x;
    4.     // Nếu dùng mặc định: [B]int y;[/B]
    5.     switch (x)
    6.     {
    7.     case -1:case 0:case 1:
    8.         y = 4 * x;
    9.         break;
    10.     case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:
    11.     case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 19:
    12.         y = 15 + x;
    13.         break;
    14.     // Nếu dùng mặc định: [B]default: y = 2 * x; break;[/B]
    15.     }
    16.     return y;
    17. }
    .
    .

  3. #3
    Ngày gia nhập
    07 2011
    Nơi ở
    Moscow-Russia
    Bài viết
    154

    Ôi, đó là một thử thách của thầy mình. Mà không ai trong lớp có thể nghĩ ra được. Còn cách bạn đề xuất cho mình thì không phải ý của thầy, vì dải của mình là số thực, không phải số nguyên. Thật khó cho điều này. Cũng cảm ơn bạn rất nhiều đã hỗ trợ mình.
    A good beginning and a good ending !

  4. #4
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất đông người
    Bài viết
    742

    Bạn xem cách này có hợp ý thầy bạn không.

    C++ Code:
    1. #include <iostream>
    2.  
    3. int loc(float x)
    4. {
    5.    return (x < -1) + (x < 2) + (x < 20);
    6. }
    7.  
    8. int main()
    9. {
    10.    float const a[] {-2, -1, 0, 1, 2, 3, 19, 20, 21};
    11.  
    12.    for(auto x:a){
    13.       std::cout << "loc(" << x << ")=" << loc(x) << std::endl;
    14.    }
    15. }

    Kết quả
    Code:
    loc(-2)=3
    loc(-1)=2
    loc(0)=2
    loc(1)=2
    loc(2)=1
    loc(3)=1
    loc(19)=1
    loc(20)=0
    loc(21)=0
    Đã được chỉnh sửa lần cuối bởi Ada : 02-10-2021 lúc 08:35 AM.
    -...- -.- .. .-.. .-.. - .... . -... . .- ... - .-.-.

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

    Trích dẫn Nguyên bản được gửi bởi Ada Xem bài viết
    Bạn xem cách này có hợp ý thầy bạn không.

    C++ Code:
    1. #include <iostream>
    2.  
    3. int loc(float x)
    4. {
    5.    return (x < -1) + (x < 2) + (x < 20);
    6. }
    7.  
    8. int main()
    9. {
    10.    float const a[] {-2, -1, 0, 1, 2, 3, 19, 20, 21};
    11.  
    12.    for(auto x:a){
    13.       std::cout << "loc(" << x << ")=" << loc(x) << std::endl;
    14.    }
    15. }

    Kết quả
    Code:
    loc(-2)=3
    loc(-1)=2
    loc(0)=2
    loc(1)=2
    loc(2)=1
    loc(3)=1
    loc(19)=1
    loc(20)=0
    loc(21)=0
    Quá đẹp!...........

  6. #6
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất đông người
    Bài viết
    742

    Mặc định switch...case khi rẽ nhánh có hơn và kém?

    Trích dẫn Nguyên bản được gửi bởi khoaph Xem bài viết
    Quá đẹp!...........
    khoaph, cảm ơn bạn!
    -...- -.- .. .-.. .-.. - .... . -... . .- ... - .-.-.

  7. #7
    Ngày gia nhập
    07 2011
    Nơi ở
    Moscow-Russia
    Bài viết
    154

    Trích dẫn Nguyên bản được gửi bởi Ada Xem bài viết
    Bạn xem cách này có hợp ý thầy bạn không.

    C++ Code:
    1. #include <iostream>
    2.  
    3. int loc(float x)
    4. {
    5.    return (x < -1) + (x < 2) + (x < 20);
    6. }
    7.  
    8. int main()
    9. {
    10.    float const a[] {-2, -1, 0, 1, 2, 3, 19, 20, 21};
    11.  
    12.    for(auto x:a){
    13.       std::cout << "loc(" << x << ")=" << loc(x) << std::endl;
    14.    }
    15. }

    Kết quả
    Code:
    loc(-2)=3
    loc(-1)=2
    loc(0)=2
    loc(1)=2
    loc(2)=1
    loc(3)=1
    loc(19)=1
    loc(20)=0
    loc(21)=0
    Cảm ơn bạn. Nó vẫn chưa phải là switch-case. Để mình trao đổi với thầy xem sao. Cảm ơn tất cả mọi người nhé. Cũng có thể thầy đang đợi một câu trả lời là "không có phuơng án nào cho yêu cầu như vậy".
    A good beginning and a good ending !

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

    Trích dẫn Nguyên bản được gửi bởi Moscow Xem bài viết
    Cảm ơn bạn. Nó vẫn chưa phải là switch-case. Để mình trao đổi với thầy xem sao. Cảm ơn tất cả mọi người nhé. Cũng có thể thầy đang đợi một câu trả lời là "không có phuơng án nào cho yêu cầu như vậy".
    Được gợi ý đến đấy rồi mà bạn vẫn chưa nghĩ ra sao.
    C++ Code:
    1. double tinhy(double x)
    2. {
    3.     int i = (x < -1) + (x < 2) + (x < 20);
    4.     switch(i) {
    5.         case 2:
    6.             return 4 * x;
    7.         case 1:
    8.             return x + 15;
    9.         default:
    10.             return 2 * x;
    11.     }
    12. }

  9. #9
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất đông người
    Bài viết
    742

    khoaph, một lần nữa, cảm ơn bạn.
    -...- -.- .. .-.. .-.. - .... . -... . .- ... - .-.-.

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

    Trích dẫn Nguyên bản được gửi bởi Moscow Xem bài viết
    Cảm ơn bạn. Nó vẫn chưa phải là switch-case. Để mình trao đổi với thầy xem sao. Cảm ơn tất cả mọi người nhé. Cũng có thể thầy đang đợi một câu trả lời là "không có phuơng án nào cho yêu cầu như vậy".
    Kết luận hơi sớm trước khi hiểu luật của switch-case.
    switch (biểu thức có giá trị là kiểu integer hoặc char)
    case (hằng số kiểu integer hoặc char)
    Như vậy chỉ cần đổi kiểu logic thành kiểu integer hoặc char.

    - Nếu x<20 và x>=2 thì y=15+x;
    - nếu x<2 và x>=-1 thì y=4x;
    - các trường hợp còn lại y=2x ===> (x >= 20. || x < -1)? 0 : ((x < 2.)? 1 : 2)

    switch ( (x >= 20. || x < -1)? 0 : ((x < 2.)? 1 : 2) )
    {
    case 1: y = 4*x; break;
    case 2: y = 15. + x; break;
    default: y = 2 * x;
    }

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