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

Đề tài: thắc mắc về bài tập tính thứ trong tuần

  1. #1
    Ngày gia nhập
    02 2009
    Bài viết
    1

    Wink thắc mắc về bài tập tính thứ trong tuần

    mình có thắc mắc về bài C này...các bạn sửa giùm mình
    C Code:
    1. #include"stdio.h"
    2. #include"conio.h"
    3.  
    4. void nhap(int &d, int &m, int &y);
    5. int tinhtoan(int &d, int &m, int &y);
    6.  
    7.  
    8. void main()
    9. {
    10.     clrscr();
    11.  
    12.         int d, m, y;
    13.     nhap(d,m,y);
    14.  
    15.     tinhtoan(d,m,y);
    16.  
    17.     getch();
    18. }
    19.  
    20. void nhap(int &d, int &m, int &y)
    21. {
    22.         int maxday;
    23.     nhan:
    24.     {
    25.         printf("Nhap Ngay, Thang, Nam: ");
    26.         scanf("%d%d%d", &d, &m, &y);
    27.     }
    28.  
    29.     if( m<1 || m>12 )
    30.     {
    31.         printf("Ban nhap Thang khong hop le \n");
    32.         goto nhan;
    33.     }
    34.  
    35.     if( y<1582 )
    36.     {
    37.         printf("Lich Gregorian bat dau tu nam 1582 \n");
    38.         goto nhan;
    39.     }
    40.  
    41.     switch( m )
    42.     {
    43.         case 4: case 6: case 9: case 11: maxday=30; break;
    44.         case 2: maxday = ( ( y%4==0 && y%100!=0 ) || y%400==0 ) ? 29: 28; break;
    45.         default: maxday=31;
    46.     }
    47.  
    48.     if( d<1 || d>maxday )
    49.     {
    50.         printf("Ban nhap Ngay khong hop le \n");
    51.         goto nhan;
    52.     }
    53.        
    54. }
    55.  
    56. int tinhtoan(int &d, int &m, int &y)
    57. {
    58.     int dayofweek;
    59.  
    60.     // Cong thuc Zeller
    61.  
    62.     y-= (14-m)/12;
    63.     m+= 12*( (14-m)/12 ) -2;
    64.     dayofweek=  ( d + y + y/4 - y/100 + y/400 + ( 31*m )/12 ) %7;
    65.  
    66.     printf("Ngay, Thang, Nam hop le \n");
    67.     if( !dayofweek )
    68.     {
    69.         printf("Ngay %d Thang %d Nam %d la ngay Chu Nhat \n", d, m, y);
    70.     }
    71.     else
    72.     {
    73.         printf("Ngay %d Thang %d Nam %d la ngay Thu %d \n", d, m, y, dayofweek + 1 );
    74.     }
    75.         return 0;
    76.  
    77. }
    không biết tại sao tháng hiển thị lại lệch đi 2 đơn vị mặc dù kết quả ra đúng...không biết mình sai chỗ nào nữa...
    Attached Thumbnails Attached Thumbnails error.jpg  
    Đã được chỉnh sửa lần cuối bởi QuangHoang : 03-02-2009 lúc 07:22 PM.

  2. #2
    Ngày gia nhập
    01 2009
    Nơi ở
    Hà Nội
    Bài viết
    205

    Dài quá bạn ơi, nhìn là thấy ớn luôn. Lên google search còn có cả lịch cả năm luôn.

  3. #3
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    không biết tại sao tháng hiển thị lại lệch đi 2 đơn vị mặc dù kết quả ra đúng...không biết mình sai chỗ nào nữa...
    Trong hàm tinhtoan() giá trị y, m đã được bạn sử dụng tính toán ở trên, vậy làm sao nó còn giữ nguyên giá trị nhập được nữa.

    Công việc xuất kết quả ra màn hình hãy chuyển nó qua hàm main(). Và sửa tham biến truyền vào hàm tinhtoan() thành tham trị. Hàm tính toán hãy return dayofweek;

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

    không được rồi bạn ơi...khi mình chuyển hàm if xuất kết quả vào hàm main như vầy....
    #include"stdio.h"
    #include"conio.h"

    void nhap(int &d, int &m, int &y);
    int tinhtoan(int d, int m, int y);


    void main()
    {
    clrscr();

    int d, m, y, dayofweek;
    nhap(d,m,y);

    tinhtoan(d,m,y);

    if( !dayofweek )
    {
    printf("Ngay %d Thang %d Nam %d la ngay Chu Nhat \n", d, m, y);
    }
    else
    {
    printf("Ngay %d Thang %d Nam %d la ngay Thu %d \n", d, m, y, dayofweek + 1 );
    }

    getch();
    }

    void nhap(int &d, int &m, int &y)
    {
    int maxday;
    nhan:
    {
    printf("Nhap Ngay, Thang, Nam: ");
    scanf("%d%d%d", &d, &m, &y);
    }

    if( m<1 || m>12 )
    {
    printf("Ban nhap Thang khong hop le \n");
    goto nhan;
    }

    if( y<1582 )
    {
    printf("Lich Gregorian bat dau tu nam 1582 \n");
    goto nhan;
    }

    switch( m )
    {
    case 4: case 6: case 9: case 11: maxday=30; break;
    case 2: maxday = ( ( y%4==0 && y%100!=0 ) || y%400==0 ) ? 29: 28; break;
    default: maxday=31;
    }

    if( d<1 || d>maxday )
    {
    printf("Ban nhap Ngay khong hop le \n");
    goto nhan;
    }

    }

    int tinhtoan(int d, int m, int y)
    {
    int dayofweek;

    // Cong thuc Zeller

    y-= (14-m)/12;
    m+= 12*( (14-m)/12 ) -2;
    dayofweek= ( d + y + y/4 - y/100 + y/400 + ( 31*m )/12 ) %7;

    printf("Ngay, Thang, Nam hop le \n");

    return dayofweek;

    }
    ......thì kết quả xuất ra lại sai phần Thứ trong tuần....T_______T

  5. #5
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Chuyển như trên sao đc, bạn chuyển lên thì phải gọi hàm chứ.
    C Code:
    1. #include"stdio.h"
    2. #include"conio.h"
    3.  
    4. void nhap(int &d, int &m, int &y);
    5. int tinhtoan(int d, int m, int y);
    6.  
    7.  
    8. int main()
    9. {
    10.     //clrscr();
    11.  
    12.         int d, m, y;
    13.     nhap(d,m,y);
    14.     printf("Ngay, Thang, Nam hop le \n");
    15.     tinhtoan(d,m,y);
    16.  
    17.     if( !tinhtoan(d,m,y) )
    18.     {
    19.         printf("Ngay %d Thang %d Nam %d la ngay Chu Nhat \n", d, m, y);
    20.     }
    21.     else
    22.     {
    23.         printf("Ngay %d Thang %d Nam %d la ngay Thu %d \n", d, m, y, tinhtoan(d,m,y) + 1 );
    24.     }
    25.     getch();
    26. }
    27.  
    28. void nhap(int &d, int &m, int &y)
    29. {
    30.         int maxday;
    31.     nhan:
    32.     {
    33.         printf("Nhap Ngay, Thang, Nam: ");
    34.         scanf("%d%d%d", &d, &m, &y);
    35.     }
    36.  
    37.     if( m<1 || m>12 )
    38.     {
    39.         printf("Ban nhap Thang khong hop le \n");
    40.         goto nhan;
    41.     }
    42.  
    43.     if( y<1582 )
    44.     {
    45.         printf("Lich Gregorian bat dau tu nam 1582 \n");
    46.         goto nhan;
    47.     }
    48.  
    49.     switch( m )
    50.     {
    51.         case 4: case 6: case 9: case 11: maxday=30; break;
    52.         case 2: maxday = ( ( y%4==0 && y%100!=0 ) || y%400==0 ) ? 29: 28; break;
    53.         default: maxday=31;
    54.     }
    55.  
    56.     if( d<1 || d>maxday )
    57.     {
    58.         printf("Ban nhap Ngay khong hop le \n");
    59.         goto nhan;
    60.     }
    61.  
    62. }
    63.  
    64. int tinhtoan(int d, int m, int y)
    65. {
    66.     int dayofweek;
    67.  
    68.     // Cong thuc Zeller
    69.  
    70.     y-= (14-m)/12;
    71.     m+= 12*( (14-m)/12 ) -2;
    72.     dayofweek=  ( d + y + y/4 - y/100 + y/400 + ( 31*m )/12 ) %7;
    73.     return dayofweek;
    74. }

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

  1. iPhone 5 hứa hẹn thắng lớn trong tuần đầu ra mắt
    Gửi bởi quynhcute trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 08-09-2012, 08:19 PM
  2. Làm thế nào để xác định được thứ trong tuần?
    Gửi bởi M.C.R trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 30
    Bài viết cuối: 21-08-2012, 11:19 AM
  3. Làm sao thấy thứ trong tuần từ ngày hệ thống.
    Gửi bởi sinhvien_ct trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 2
    Bài viết cuối: 02-10-2011, 04:51 PM
  4. Thắc mắc về "giao diện khả tuần tự trong C#"
    Gửi bởi _adam_ trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 3
    Bài viết cuối: 27-07-2011, 08:10 AM
  5. Biểu diễn một số thập phân tuần hoàn dưới dạng phân số?
    Gửi bởi huynguyen trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 13-02-2007, 01:49 PM

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