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

Đề tài: cho biết thứ của một ngày tháng bất kì,

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

    Mặc định cho biết thứ của một ngày tháng bất kì,

    em làm bài này để cho biết thứ của một ngày tháng bất kì, nhưng em k biết là em làm k đúng chỗ nào. mong các huynh giúp em..

    C++ Code:
    1. #include "iostream.h"
    2. #include "conio.h"
    3.  
    4. class LNgay
    5. {
    6. private:
    7.     int mNg,mTh,mNm;
    8. public:
    9.     void nhap(int ng,int th,int nm);
    10.     void xuly();
    11.     void xuat();
    12. };
    13.  
    14. void LNgay::nhap(int ng,int th,int nm)
    15. {
    16.     cout<<"Nhap ngay: ";
    17.     cin>>ng;
    18.     mNg=ng;
    19.     cout<<"Nhap thang: ";
    20.     cin>>th;
    21.     mTh=th;
    22.     cout<<"Nhap nam: ";
    23.     cin>>nm;
    24.     mNm=nm;
    25.     if(((ng<0)||(ng>31))||((th<0)||(th>12))||((th==2)&&(ng>29)))
    26.     {
    27.         cout<<"Ban da nhap sai, vui long nhap lai cho dung.";
    28.     }
    29. }
    30.  
    31. void LNgay::xuly()
    32. {
    33.     int t,s=0;
    34.  
    35.     for(int i=10;i<=mNm;i++)
    36.     {
    37.         if((i%400==0)||((i%4==0)&&(i%100!=0)))
    38.             s+=1;
    39.     }
    40.  
    41.     for(int j=0;j<mTh;j++)
    42.     {
    43.         switch (j)
    44.         {
    45.             case 2:
    46.                 if(((i%400==0)||((i%4==0)&&(i%100!=0))))
    47.                 {
    48.                     s+=29;
    49.                     break;
    50.                 }
    51.                 else
    52.                 {
    53.                     s+=28;
    54.                     break;
    55.                 }
    56.             case 4:
    57.             case 6:
    58.             case 9:
    59.             case 11:
    60.                 s+=30;
    61.                 break;
    62.             default:
    63.                 s+=31;
    64.                 break;
    65.     }
    66.  
    67.         t+=s+mNg;
    68.        
    69.    
    70.         int x=t%7;
    71.         switch (x)
    72.         {
    73.         case 0:
    74.             cout<<"Chu nhat.";
    75.             break;
    76.         case 1:
    77.             cout<<"Thu hai.";
    78.             break;
    79.         case 2:
    80.             cout<<"Thu ba.";
    81.             break;
    82.         case 3:
    83.             cout<<"Thu tu.";
    84.             break;
    85.         case 4:
    86.             cout<<"Thu nam.";
    87.             break;
    88.         case 5:
    89.             cout<<"Thu sau.";
    90.             break;
    91.         case 6:
    92.             cout<<"Thu bay.";
    93.             break;
    94.         }
    95. }
    96. }
    97.  
    98. void LNgay::xuat()
    99. {
    100.     cout<<"Ngay "<<mNg<<" thang "<<mTh<<" nam "<<mNm<<" la ngay ";
    101. }
    102.  
    103. void main()
    104. {
    105.     LNgay a;
    106.     int ng,th,nm;
    107.     a.nhap(ng,th,nm);
    108.     a.xuat();
    109.     a.xuly();
    110. }
    Một ngày 24h

  2. #2
    Ngày gia nhập
    01 2007
    Nơi ở
    Somewhere I belong
    Bài viết
    168

    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3.  
    4. struct date
    5. {
    6.    int     month;
    7.    int    day;
    8.    int    year;
    9. } date_1;
    10.  
    11. long int funct1 (int y,int m)
    12. {
    13.   long int result;
    14.      if ( m <= 2 )
    15.        y -= 1;
    16.      result = y;
    17.      return (result);
    18. }
    19.  
    20. long int funct2 (int m)
    21.     {
    22.      long int result;
    23.      if ( m <= 2 )
    24.        result = m + 13;
    25.      else
    26.        result = m + 1;
    27.        return(result);
    28.     }
    29.  
    30. long int day_count (int m, int d, int y)
    31.     {
    32.      long int number;
    33.      number = 1461 *  funct1(y,m) / 4 + 153 * funct2(m) / 5 + d;
    34.  
    35.      return (number);
    36.     }
    37.  
    38. void main ()
    39. {
    40.     long int number_of_days1;
    41.     int day_of_week;
    42.  
    43.     printf ("Nhap vao mot ngay (dd mm yyyy), vd  12 03 1999  \n");
    44.     scanf ("%d %d %d", &date_1.day, &date_1.month, &date_1.year);
    45.     number_of_days1 = day_count (date_1.month, date_1.day, date_1.year);
    46.     printf ("\nNgay la : " );
    47.  
    48.     day_of_week = (number_of_days1 - 621049) % 7;
    49.     switch (day_of_week)
    50.       {
    51.         case 0 :
    52.             printf ("Chu Nhat,");
    53.             break;
    54.         case 1 :
    55.             printf ("Thu Hai,");
    56.             break;
    57.         case 2 :
    58.             printf ("Thu Ba,");
    59.             break;
    60.         case 3 :
    61.             printf ("Thu Tu,");
    62.             break;
    63.         case 4 :
    64.             printf ("Thu Nam,");
    65.             break;
    66.         case 5 :
    67.             printf ("Thu Sau,");
    68.             break;
    69.         case 6 :
    70.             printf ("Thu Bay,");
    71.             break;
    72.       }
    73.   getch();
    74. }
    Tham khảo bài này nhá.
    Thức ra vtn cũng không hiểu các hàm trong này. Nhất là chỗ
    number = 1461 * funct1(y,m) / 4 + 153 * funct2(m) / 5 + d;
    và chỗ
    day_of_week = (number_of_days1 - 621049) % 7; này
    Nhưng chạy lại ra kết quả rất đúng.

    Bài này VTN làm từ hồi làm cái bài in lịch của một năm bất kỳ (tham khảo trong mục tổng hợp các bài tập C/C++ trong box
    Project C/C++ ), nhưng vẫn khó khăn cái hàm tính thứ thì vớ ngay được bài này, nhưng đọc chẳng hiểu gì.
    Nhân tiên thì VTN hỏi luôn có cao thủ nào thì vô đây chỉ giáo nha.

    Và bạn có thể chú thích công dụng câu lệng vào bài của bạn để mọi người dễ đọc nha.
    Đã được chỉnh sửa lần cuối bởi iamvtn : 04-10-2007 lúc 10:14 PM.

  3. #3
    Ngày gia nhập
    06 2007
    Nơi ở
    một nơi xa xăm...
    Bài viết
    127

    em làm bài này để cho biết thứ của một ngày tháng bất kì, nhưng em k biết là em làm k đúng chỗ nào. mong các huynh giúp em..
    Mình chưa xem thuật toán của bạn nhưng trong phương thức xuly() của bạn bị sai vòng lặp
    C++ Code:
    1. void LNgay::xuly()
    2. {
    3.     int t,s=0;
    4.  
    5.     for(int i=10;i<=mNm;i++)
    6.     {
    7.         if((i%400==0)||((i%4==0)&&(i%100!=0)))
    8.             s+=1;
    9.     }
    10.  
    11.     for(int j=0;j<mTh;j++)
    12.     {
    13.         switch (j)
    14.         {
    15.             case 2:
    16.                 if(((i%400==0)||((i%4==0)&&(i%100!=0))))
    17.                 {
    18.                     s+=29;
    19.                     break;
    20.                 }
    21.                 else
    22.                 {
    23.                     s+=28;
    24.                     break;
    25.                 }
    26.             case 4:
    27.             case 6:
    28.             case 9:
    29.             case 11:
    30.                 s+=30;
    31.                 break;
    32.             default:
    33.                 s+=31;
    34.                 break;
    35.                 } [B]//Chuyển lên Như thế này thì mới đúng[/B]
    36.     }
    37.  
    38.         t+=s+mNg;
    39.        
    40.    
    41.         int x=t%7;
    42.         switch (x)
    43.         {
    44.         case 0:
    45.             cout<<"Chu nhat.";
    46.             break;
    47.         case 1:
    48.             cout<<"Thu hai.";
    49.             break;
    50.         case 2:
    51.             cout<<"Thu ba.";
    52.             break;
    53.         case 3:
    54.             cout<<"Thu tu.";
    55.             break;
    56.         case 4:
    57.             cout<<"Thu nam.";
    58.             break;
    59.         case 5:
    60.             cout<<"Thu sau.";
    61.             break;
    62.         case 6:
    63.             cout<<"Thu bay.";
    64.             break;
    65.         }
    66. } //==> Chỗ này sai này.Bạn nên chuyển dấu này lên trên như mình minh họa ấy
    67. }

  4. #4
    Ngày gia nhập
    09 2007
    Bài viết
    7

    ai giải thích chỗ này dùm em với

    number = 1461 * funct1(y,m) / 4 + 153 * funct2(m) / 5 + d;
    day_of_week = (number_of_days1 - 621049) % 7; này
    Một ngày 24h

  5. #5
    Ngày gia nhập
    06 2007
    Nơi ở
    một nơi xa xăm...
    Bài viết
    127

    number = 1461 * funct1(y,m) / 4 + 153 * funct2(m) / 5 + d;
    và day_of_week = (number_of_days1 - 621049) % 7; này
    Mình cũng không lập trình ngày tháng nên cũng không hiểu rõ lắm nhưng chúng ta cùng bàn luận để tìm ra bản chất vấn đề nằm ở đâu nhé.Mình thấy có mấy điểm sau :
    - Thứ nhất là : cứ 4 năm sẽ có 1 năm nhuận (tức là năm có 366 ngày).Như vậy 4 năm sẽ có tổng số ngày là 1461 ngày.
    - Thứ 2: Cứ 5 tháng liên tiếp ( tháng > 2) thì sẽ có 153 ngày ( vì có 3 tháng 31 ngày)
    - Thứ 3 : Hàm tính số ngày sẽ thừa ra 1 năm và 1 tháng (sau tháng bạn nhập vào) --> Đây là chỗ mình chưa hiểu tại sao tác giả lại làm vậy ?
    - Thứ 4 là cái số 621049 có tác dụng chỉ cho phép tính thứ của những năm > 1700 ( Nếu ko tin bạn cứ thử nhập 1 ngày có năm < 1700 vào và nếu kết quả phép tính !=0 - tức là ko phải ngày chủ nhật thì sẽ không thể in ra được kết quả).Bạn có thể thay số 621049 bằng số 2 để tính thứ từ năm 1.Để hiểu được phép tính
    day_of_week = (number_of_days1 - 621049) % 7
    có lẽ phải hiểu được phép tính đầu tiên.
    Đó là mấy điểm mình nhận thấy...các bạn cùng đóng góp ý kiến để chúng ta tìm ra lời giải nhé.

  6. #6
    Ngày gia nhập
    09 2007
    Nơi ở
    co nhue tu liem ha noi
    Bài viết
    1

    Mặc định cho biết thứ của một ngày tháng bất kì,

    mình cho chạy thử mà kết quả ko như ý muốn. Chỉ cho nhập mỗi ngày tháng năm rồi out luôn vậy

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

  1. Lỗi chương trình không nhận biến(không return được biến từ public sang main)
    Gửi bởi nang trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 4
    Bài viết cuối: 02-10-2011, 06:04 PM
  2. Thuộc tính khóa ngoài( tham chiếu) biến mất khi biến đổi từ file XML sang DataTable
    Gửi bởi itmanhieu trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 17-08-2011, 08:02 PM
  3. làm sao để 2 biến Datetime trừ nhau ra biến float or double?
    Gửi bởi robocon1183 trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 1
    Bài viết cuối: 10-12-2009, 05:11 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