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

Đề tài: Xây dựng lớp ngày tháng với lập trình C++. Các bạn cho ý kiến nhé!

  1. #1
    Ngày gia nhập
    08 2006
    Nơi ở
    Chương Mỹ-Hà Tây
    Bài viết
    27

    Mặc định Xây dựng lớp ngày tháng với lập trình C++. Các bạn cho ý kiến nhé!

    C++ Code:
    1. #include<iostream.h>
    2. #include<conio.h>
    3. #include<math.h>
    4. #include<stdlib.h>
    5. #include<stdio.h>
    6. int thang31[7]={1,3,5,7,8,9,12};
    7. //int thang30[4]={4,6,10,11};
    8. class Date
    9. {
    10.  private:int day,month,year;
    11.  public:
    12.      void nhap()
    13.      {
    14.       cout<<"\nban nhap vao ngay thang nam (phai la nhung so duong)";
    15.       cout<<"nhap ngay: ";cin>>day;
    16.       cout<<"nhap thang: ";cin>>month;
    17.       cout<<"nhap nam: ";cin>>year;
    18.      }
    19.      void nhap(int a,int b,int c)
    20.      {  if((a>0)&&(b>0)&&(c>0))
    21.            {    day=a; month=b;year=c;}
    22.          else
    23.           { cout<<"\nloi do nhap so am ban hay nhap lai";
    24.         getch();
    25.         exit(1);
    26.           }
    27.      }
    28.      int GetYear()
    29.      {
    30.        return year;
    31.      }
    32.      void Tostring()
    33.      {
    34.        cout<<day<<":"<<month<<":"<<year;
    35.      }
    36.       void Dislay()
    37.        {
    38.         cout<<"\n dd:mm:yyyy-->"<<day<<":"<<month<<":"<<year;
    39.        }
    40.      friend Date Cong(Date d);
    41.      friend Date Tru(Date d);
    42.      friend Date CongSoNguyen(Date d,int k);
    43.      friend int FindIndex(Date d);
    44.      friend int khoangcach(Date d1,Date d2);
    45. };
    46.  
    47.     int ktnhuan(int nam)
    48.      //kiem tra xem nam nao la nam nhuan
    49.      {
    50.       if ((((nam%4)==0)&&((nam%100)!=0))|| ((nam%400)==0))
    51.         return 1;
    52.       else return 0;
    53.      }
    54.      int ktthang31(int thang)
    55.       //kiem tra thang nao la thang co 31 ngay
    56.       {
    57.         int j=0;
    58.          while((j<7)&&(thang!=thang31[j]))
    59.         j++;
    60.         if(j<7) return 1;
    61.         else return 0;
    62.       }
    63.       Date Cong(Date d1)
    64.        { Date d;
    65.          d.year=d1.year;d.month=d1.month;
    66.          d.day=d1.day+1;
    67.          if(ktthang31(d.month))
    68.           {
    69.         if(d.day>31)
    70.           {
    71.            d.month=d.month+d.day/31;
    72.            d.day=d.day%31;
    73.              if(d.month>12)
    74.               {
    75.             d.year++;d.month=d.month-12;}
    76.           }
    77.           }
    78.           else
    79.            {
    80.           if(d.month==2)
    81.             {
    82.               if(ktnhuan(d.year))
    83.              { if(d.day>29)
    84.                  { d.month=d.month+d.day/29;
    85.                    d.day=d.day-29;
    86.                 if(d.month>12)
    87.                   { d.year++;
    88.                     d.month-=12;
    89.                   }
    90.                  }
    91.               }
    92.                else
    93.              {
    94.               if(d.day>28)
    95.                  { d.month=d.month+d.day/28;
    96.                    d.day=d.day-28;
    97.                 if(d.month>12)
    98.                   {d.year++;d.month-=12;}
    99.                  }
    100.              }
    101.             }
    102.            else
    103.             {
    104.              if(d.day>30)
    105.             {
    106.                 d.month=d.month+d.day/30;
    107.                 d.day=d.day%30;
    108.                    if(d.month>12)
    109.                     { d.year++;d.month=d.month-12;}
    110.             }
    111.             }
    112.         }
    113.          return d;
    114.       }
    115.       Date Tru(Date d1)
    116.       {
    117.         Date d;
    118.          d.year=d1.year;d.month=d1.month;
    119.          d.day=d.day-1;
    120.         if(d.day==0)
    121.           {
    122.            d.month--;
    123.  
    124.            {
    125.             if(ktthang31(d.month))
    126.              d.day=31;
    127.             else
    128.              {
    129.               if(d.month==2)
    130.                { if(ktnhuan(d.year))
    131.               d.day=29;
    132.              else
    133.               d.day=28;
    134.             }
    135.                else d.day=30;
    136.              }
    137.            }
    138.            if(d.month==0)
    139.              { d.month=12;
    140.                d.day=31;
    141.                d.year=d.year-1;
    142.               }
    143.           }
    144.         return d;
    145.            }
    146.        Date  CongSoNguyen(Date d1,int k)
    147.         //ham cong mo tso nguyen vao mot ngay thang nao do
    148.         //tri tra ve la mo tmoc thoi gian khac
    149.         {  Date d ;
    150.            d.year=d1.year;d.month=d1.month;
    151.            d.day=d1.day+k;
    152.           if(ktthang31(d.month))
    153.            {
    154.         if(d.day>31)
    155.           {
    156.            d.month=d.month+d.day/31;
    157.            d.day=d.day%31;
    158.              if(d.month>12)
    159.               {
    160.             d.year+=d.month/12;d.month=d.month%12;
    161.               }
    162.           }
    163.            }
    164.           else
    165.         {
    166.           if(d.month==2)
    167.             {
    168.               if(ktnhuan(d.month))
    169.              { if(d.day>29)
    170.                  { d.month=d.month+d.day/29;
    171.                    d.day=d.day%29;
    172.                 if(d.month>12)
    173.                   { d.year+=d.month/12;
    174.                     d.month=d.month%12;
    175.                   }
    176.                  }
    177.               }
    178.                else
    179.              {
    180.               if(d.day>28)
    181.                  { d.month=d.month+d.day/28;
    182.                    d.day=d.day-28;
    183.                 if(d.month>12)
    184.                   {d.year++;d.month-=12;}
    185.                  }
    186.              }
    187.             }
    188.            else
    189.             {
    190.              if(d.day>30)
    191.             {
    192.                 d.month=d.month+d.day/30;
    193.                 d.day=d.day%30;
    194.                    if(d.month>12)
    195.                     { d.year+=d.month/12;
    196.                       d.month=d.month%12;
    197.                     }
    198.             }
    199.             }
    200.         }
    201.           return d;
    202.         }
    203.         int FindIndex(Date d)
    204.         //ham cho biet vi tri cua ngay nay trong nam la ngay thu bao nhieu
    205.         {
    206.          int thu=d.day;
    207.           for(int i=1;i<d.month;i++)
    208.           {
    209.         if(ktthang31(i))
    210.           thu=thu+31;
    211.         else
    212.           {
    213.            if(i==2)
    214.             { if(ktnhuan(d.year))
    215.                thu+=29;
    216.               else  thu+=28;
    217.             }
    218.            else
    219.              thu+=30;
    220.            }
    221.         }
    222.         return thu;
    223.         }
    224.          int khoangcach(Date d1,Date d2)
    225.          //ham nay tinh khoang cach giua hai moc thoi gian tri tra ve la integer
    226.          {  int d=0;long kc=0;
    227.         int max,min;
    228.         if(d1.year>d2.year) {max=d1.year;min=d2.year;}
    229.         else {min=d1.year;max=d2.year;}
    230.         for(int i=min;i<=max;i++)
    231.             if(ktnhuan(i)) d++;
    232.          int demnam=max-min;
    233.            kc=demnam*365;
    234.            kc=kc+d;
    235.            kc=kc+FindIndex(d2);
    236.            kc=kc-FindIndex(d1);
    237.          return kc;
    238.          }
    239.  
    240. void main()
    241. {clrscr();
    242.  Date d1,d2,d3,d4;
    243.  cout<<"\nthuc hien chuong trinh ...ban nhan Enter...";
    244.  getch();
    245.  d1.nhap(28,2,1930);
    246.  d2=Cong(d1);
    247.  d4=Tru(d1);
    248.  d3=CongSoNguyen(d2,25000);
    249.  d1.Dislay();
    250.  d2.Dislay();
    251.  d3.Dislay();
    252.  d4.Dislay();
    253.  getch();
    254.  cout<<"\nvi thu no trong nam: "<<d1.GetYear()<<" la: "<<FindIndex(d1);
    255.  cout<<"\nkhoang cach giua hai moc thoi gian tu "<<khoangcach(d1,d3);
    256.  getch();
    257. }


    các bác đọc rồi cho ý kiến nhé
    Đã được chỉnh sửa lần cuối bởi Kevin Hoang : 29-10-2006 lúc 01:16 PM. Lý do: !

  2. #2
    Ngày gia nhập
    10 2006
    Nơi ở
    Hà Nội
    Bài viết
    146

    Mình đã đọc và chạy thử bài của bạn.
    Chưa kĩ lắm, nhưng có vài nhận xét sau.
    Có lẽ ý tưởng của bài này là nhập vào 1 ngày tháng năm, sau đó cho biết ngày đó là ngày thứ mấy trong năm, hơn nữa có thể cho biết khoảng cách giữa hai ngày là bao nhiêu.
    Theo mình có thể thêm các chức năng này vào bài:
    1.Cho biết ngày đó là thứ mấy, tuần mấy
    2. can chi của năm đó
    3.Đổi ra lịch âm
    Thân!
    Re:Không nên spam nhiều!

  3. #3
    Ngày gia nhập
    08 2006
    Nơi ở
    Chương Mỹ-Hà Tây
    Bài viết
    27

    bác ơi em làm đến thế đã hêt 2 đêm rôi bác định nói reawng em thúc thêm vài đem nữa đẻ làm hả
    em có cái nhược diểm là thuật toán kém lên khi suy nhghix chậm và làm bài khá dài, ậy ai có thể nào nói cho em để em khẵc phục không nhỉ

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

    Trích dẫn Nguyên bản được gửi bởi tuyetton Xem bài viết
    bác ơi em làm đến thế đã hêt 2 đêm rôi bác định nói reawng em thúc thêm vài đem nữa đẻ làm hả
    em có cái nhược diểm là thuật toán kém lên khi suy nhghix chậm và làm bài khá dài, ậy ai có thể nào nói cho em để em khẵc phục không nhỉ
    đã test bài của bạn trên nền Bordland C nên k biết ý tưởng của bạn như thế nào, bạn có thể viết riêng đoạn code xuất ra thứ mấy của ngày giúp mình được k? xong phần này rồi mới ngâm cứu tiếp được bạ àh!

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

    Tôi ko dám ý kiến gì ngoài câu sau : quá loằng ngoằng và khó hiểu
    tôi xin tặng bạn và C việt 1 công thức tính khoảng cách giữa 2 ngày ngắn gọn như sau :
    C++ Code:
    1. int khoangcach(int ngay,int thang,int nam,int ngay2,int thang2,int nam2)
    2. {
    3.     int a1  = (14 - thang)/12;
    4.     int y1  = nam+4800-a1;
    5.     int m1  = thang+12*a1-3;
    6.     int a2  = (14 - thang2)/12;
    7.     int y2  = nam2+4800-a2;
    8.     int m2  = thang2+12*a2-3;
    9.     return ngay + (153*m1+2)/5 + 365*y1 + y1/4 - y1/100 + y1/400 - (ngay2 + (153*m2+2)/5 + 365*y2 + y2/4 - y2/100 + y2/400) ;
    10. }
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

  6. #6
    Ngày gia nhập
    12 2010
    Nơi ở
    Cần thơ
    Bài viết
    273

    Mặc định Xây dựng lớp ngày tháng với lập trình C++. Các bạn cho ý kiến nhé!

    Trích dẫn Nguyên bản được gửi bởi langman Xem bài viết
    Tôi ko dám ý kiến gì ngoài câu sau : quá loằng ngoằng và khó hiểu
    tôi xin tặng bạn và C việt 1 công thức tính khoảng cách giữa 2 ngày ngắn gọn như sau :
    C++ Code:
    1. int khoangcach(int ngay,int thang,int nam,int ngay2,int thang2,int nam2)
    2. {
    3.     int a1  = (14 - thang)/12;
    4.     int y1  = nam+4800-a1;
    5.     int m1  = thang+12*a1-3;
    6.     int a2  = (14 - thang2)/12;
    7.     int y2  = nam2+4800-a2;
    8.     int m2  = thang2+12*a2-3;
    9.     return ngay + (153*m1+2)/5 + 365*y1 + y1/4 - y1/100 + y1/400 - (ngay2 + (153*m2+2)/5 + 365*y2 + y2/4 - y2/100 + y2/400) ;
    10. }
    anh langman này...cho em xin hỏi tí ạ:
    - em đang gặp vấn đề với ngày tháng năm,những thuật toán của em để so sánh về ngày tháng năm và tính toán trên đó thì quá mệt, anh có thể giải thích cho em về thuật toán của anh không với lại em cũng xin hỏi tài liệu đó ở đâu anh có thể chỉ cho em không...
    - em còn 1 vấn đề về chuyển từ ngày dương sang ngày âm...nhưng mà về ngày âm thì quá rắc rối về tính năm nhuận...
    Nhờ anh và các bác giúp dùm ạ, nếu reply của em mà có spam thì xin các bác chém nhẹ :(
    Ai bất tài, tôi nhìn hoài chẳng thấy,
    Đi khắp phòng tôi lấy 1 tấm gương,
    Khẽ đặt lên một góc phía bức tường,
    Nhìn vào đó, tôi tận tường kẻ đó.

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

  1. [Kiếm Thế] Kiếm Thế Ngạo Thiên Kiếm Chạy Thử Nghiệm vào 10h ngày 15/09
    Gửi bởi c0jskull trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 5
    Bài viết cuối: 29-09-2013, 10:45 AM
  2. [Kiếm Thế] Kiếm Thế Kiếm Linh Chạy Thử Nghiệm vào 10h ngày 4/7
    Gửi bởi c0jskull trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 1
    Bài viết cuối: 05-07-2013, 12:16 PM
  3. [Kiếm Thế] Kiếm Thế Kiếm Linh Chạy Thử Nghiệm vào 10h ngày 4/7
    Gửi bởi c0jskull 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: 03-07-2013, 10:30 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