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ố 13 kết quả

Đề tài: nhập vào 1 tháng sau đó đưa ra kết luận tháng đó có bao nhiêu ngày (giải bằng cấu trúc Switch)

  1. #1
    Ngày gia nhập
    03 2011
    Bài viết
    54

    Mặc định nhập vào 1 tháng sau đó đưa ra kết luận tháng đó có bao nhiêu ngày (giải bằng cấu trúc Switch)

    Bài tập : trong 1 năm có 30 ngày là 4,6,9,11 còn các tháng có 31 ngày là 1,3,5,7,8,12. Riêng tháng 2 có thể có 28 hoặc 29 ngày. Viết chương trình nhập vào 1 tháng sau đó đưa ra kết luận tháng đó có bao nhiêu ngày( giải bằng cấu trúc Switch )
    em mới học, nghĩ mãi mà ko ra cách giải, bác nào giải đáp giúp với

  2. #2
    Ngày gia nhập
    04 2010
    Bài viết
    1,537

    Bài này tôi đã giải rồi. Chính xác theo yêu cầu. Chịu khó tìm.

  3. #3
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    2,990

    Trích dẫn Nguyên bản được gửi bởi vungtroicuabo Xem bài viết
    Bài tập : trong 1 năm có 30 ngày là 4,6,9,11 còn các tháng có 31 ngày là 1,3,5,7,8,12. Riêng tháng 2 có thể có 28 hoặc 29 ngày. Viết chương trình nhập vào 1 tháng sau đó đưa ra kết luận tháng đó có bao nhiêu ngày( giải bằng cấu trúc Switch )
    em mới học, nghĩ mãi mà ko ra cách giải, bác nào giải đáp giúp với
    em à, em chú ý đọc nội quy kẻo bị del bài viết ko bít vì sao nhé, lần này châm trước sửa lại tiêu đề cho em


    còn về bài em hỏi thì mình làm như sau

    Bước 1 : khai báo 1 biến nguyên n

    Bước 2 : Nhập n

    Bước 3 :
    switch(n)
    {
    case 1: viết ra màn hình tháng này 31 ngày
    break;
    case 2: viết ra màn hình tháng này 28 hoặc 29 ngày
    break;
    ...... vân vân......
    }
    ^_,^
    Mình là 1 con gà trong công nghệ.
    Nếu mình có nói gì làm bạn không vui thì mong bạn bỏ qua cho, vì cá nhân mình còn gà lắm, và mình có ý tốt thôi.

    Bùi Tấn Quang

  4. #4
    Ngày gia nhập
    03 2011
    Bài viết
    54

    hix, sao em ko hiểu gì cả nhẻ Y__Y, chị có thể giải thích rõ ràng hơn chút đc ko, em mới học đc vài ngày hà
    Anh votichsu ơi em tìm mãi ko thấy bài của anh

  5. #5
    Ngày gia nhập
    03 2011
    Nơi ở
    Bình Dương, Hồ Chí Minh
    Bài viết
    392

    C Code:
    1. // Nhap vao thang, nam
    2. // Hay cho biet thang do co bao nhieu ngay
    3.  
    4. #include <stdio.h>
    5.  
    6. void main()
    7. {
    8.     int th, nm, songay;
    9.    
    10.     printf("Nhap thang, nam: ");
    11.     scanf("%d%d", &th, &nm);
    12.    
    13.     if (th>=1 && th<=12)
    14.     {
    15.         switch (th)
    16.         {
    17.         case 1:
    18.         case 3:
    19.         case 5:
    20.         case 7:
    21.         case 8:
    22.         case 10:
    23.         case 12: songay = 31; break;
    24.         case 4:
    25.         case 6:
    26.         case 9:
    27.         case 11: songay = 30; break;
    28.         case 2:
    29.             if (nm % 400 == 0 || (nm % 4 == 0 && nm % 100 != 0))    // nam nhuan
    30.                 songay = 29;
    31.             else
    32.                 songay = 28;
    33.         }
    34.  
    35.         printf("=> Thang %d/%d co %d ngay\n", th, nm, songay);
    36.     }
    37.     else
    38.         printf("=> Thang khong hop le!\n");
    39. }

  6. #6
    Ngày gia nhập
    04 2010
    Bài viết
    1,537

    Mặc định nhập vào 1 tháng sau đó đưa ra kết luận tháng đó có bao nhiêu ngày (giải bằng cấu trúc Switch)

    Bài này hoàn toàn không cần if-else, chỉ cần cho cái default ở cuối block switch. Sau khi soát hết, không lọt giữa 1-12 thì nó sẽ tự động biết là tháng dỏm, lúc đó đặt số ngày là 0.

    Tại sao đặt số ngày là 0 nếu tháng dỏm? Vì ta có thể đặt code vào hàm trả về số ngày, khi ấy code gọi hàm sẽ phân biệt được thảng dỏm.

  7. #7
    Ngày gia nhập
    03 2011
    Bài viết
    2

    Ý bạn là sao mình chưa hiểu, bạn post code lên đi

  8. #8
    Ngày gia nhập
    03 2009
    Bài viết
    45

    Trích dẫn Nguyên bản được gửi bởi vitbau1412 Xem bài viết
    C Code:
    1. // Nhap vao thang, nam
    2. // Hay cho biet thang do co bao nhieu ngay
    3.  
    4. #include <stdio.h>
    5.  
    6. void main()
    7. {
    8.     int th, nm, songay;
    9.    
    10.     printf("Nhap thang, nam: ");
    11.     scanf("%d%d", &th, &nm);
    12.    
    13.     if (th>=1 && th<=12)
    14.     {
    15.         switch (th)
    16.         {
    17.         case 1:
    18.         case 3:
    19.         case 5:
    20.         case 7:
    21.         case 8:
    22.         case 10:
    23.         case 12: songay = 31; break;
    24.         case 4:
    25.         case 6:
    26.         case 9:
    27.         case 11: songay = 30; break;
    28.         case 2:
    29.             if (nm % 400 == 0 || (nm % 4 == 0 && nm % 100 != 0))    // nam nhuan
    30.                 songay = 29;
    31.             else
    32.                 songay = 28;
    33.         }
    34.  
    35.         printf("=> Thang %d/%d co %d ngay\n", th, nm, songay);
    36.     }
    37.     else
    38.         printf("=> Thang khong hop le!\n");
    39. }
    Cho mình hỏi: nm%4==0 là OK sao còn cần xét cả chia cho 100? Còn nữa, nếu xét theo tối ưu hóa tốc độ code thì hàm switch của bạn sẽ tốn nhiều time đấy.

  9. #9
    Ngày gia nhập
    03 2011
    Nơi ở
    Bình Dương, Hồ Chí Minh
    Bài viết
    392

    Trích dẫn Nguyên bản được gửi bởi Mingyu Xem bài viết
    Cho mình hỏi: nm%4==0 là OK sao còn cần xét cả chia cho 100? Còn nữa, nếu xét theo tối ưu hóa tốc độ code thì hàm switch của bạn sẽ tốn nhiều time đấy.
    Đây là lí do:http://vi.wiktionary.org/wiki/n%C4%83m_nhu%E1%BA%ADn

  10. #10
    Ngày gia nhập
    04 2010
    Bài viết
    1,537

    Trích dẫn Nguyên bản được gửi bởi Mingyu Xem bài viết
    Cho mình hỏi: nm%4==0 là OK sao còn cần xét cả chia cho 100? Còn nữa, nếu xét theo tối ưu hóa tốc độ code thì hàm switch của bạn sẽ tốn nhiều time đấy.
    Đề bài bảo phải dùng switch! GV ra bài này cốt ý cho HS hiểu luật 'tuột' case của block switch. Mắc mớ gì phải tính đến chuyện tối ưu hóa.

    C Code:
    1. int SoNgay(int thang, int nam) {
    2.   switch (thang) {
    3.     case 1: case 3: case 5: case 7: case 8: case 10: case 12:  return 31;
    4.     case 4: case 6: case 9: case 11:  return 30;
    5.     case 2: return (nam % 4 != 0 || nam % 100 == 0 && nam % 400 != 0)? 28 : 29;
    6.     default: return 0; /* tháng dởm*/
    7.   }
    8. }  
    9. /* code gọi hàm sẽ xét số ngày return để biết có phải là tháng dởm */

    Nếu không dùng hàm thì phải dùng break như sau:
    C Code:
    1.   int soNgay;
    2.   switch (thang) {
    3.     case 1: case 3: case 5: case 7: case 8: case 10: case 12:  soNgay = 31; break;
    4.     case 4: case 6: case 9: case 11:  soNgay = 30; break;
    5.     case 2: soNgay = (nam % 4 != 0 || nam % 100 == 0 && nam % 400 != 0)? 28 : 29; break;
    6.     default: soNgay = 0; /* tháng dởm*/
    7.   }

    Chú ý: code trên viết theo kiểu đọc cho dễ hiểu, nếu cần hiệu quả hơn thì phải dùng nguyên tắc case ít số dặt trước. Tức là chuyển case 2 lên trước, sau đó đến 4 case 30 ngày, rồi đến 6 case còn lại

Các đề tài tương tự

  1. Cấu trúc dữ liệu Cho biết tổng cộng bao nhiêu byte lưu trong 1 cấu trúc (struct).
    Gửi bởi tuvan1011 trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 13
    Bài viết cuối: 12-08-2012, 11:31 PM
  2. Cấu trúc rẽ nhánh if chuyển sang switch
    Gửi bởi maiyeuriengem123 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 8
    Bài viết cuối: 13-02-2012, 08:37 PM
  3. một máy chú có thể nối được với bao nhiêu switch
    Gửi bởi snoit trong diễn đàn Thắc mắc chung
    Trả lời: 1
    Bài viết cuối: 02-11-2011, 01:23 PM
  4. chỉ dùng Cấu trúc if/if…else và switch
    Gửi bởi ngocvientk91 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 01-10-2010, 05:09 PM
  5. [Khác]Bàn luận về Cấu trúc số thực, sai số hệ thống và việc làm tròn số
    Gửi bởi PoPoPoPo trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 30-07-2007, 09:40 AM

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