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

Đề tài: Chương trình đếm ngày

  1. #1
    Ngày gia nhập
    08 2008
    Bài viết
    0

    Mặc định Chương trình đếm ngày

    Đề : Viết chương trình đếm số ngày từ ngày 1/1/1900 đến một ngày tùy ý sau đó.
    Mình đang bí ở bài tập này mong các bạn giúp đỡ

  2. #2
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất nhiều sóng gió
    Bài viết
    448

    Trích dẫn Nguyên bản được gửi bởi khongdaubang Xem bài viết
    Đề : Viết chương trình đếm số ngày từ ngày 1/1/1900 đến một ngày tùy ý sau đó.
    Mình đang bí ở bài tập này mong các bạn giúp đỡ
    http://forums.congdongcviet.com/show...ller#post45094

  3. #3
    Ngày gia nhập
    08 2008
    Bài viết
    0

    Mình thấy cách giải của bài đó phức tạp bởi hiện giờ mình mới học về c và yêu cầu của thầy mình là giải mà sử dụng vòng lặp như while hay for ,chứ lớp mình vẫn chưa học về mảng hay đệ qui hay những thứ sâu xa khác.

  4. #4
    Ngày gia nhập
    04 2008
    Bài viết
    336

    code của Ada thuộc hàng Advance rồi
    @khongdaubang: bạn cứ tư duy bình thường đi giống thế này :
    _ trg` hợp đặc biệt: cùng tháng,cùng năm lấy 2 số ngày trừ nhau
    _ nếu khác tháng,cùng năm thì tính khoảng cách từ [(tháng 1)->(tháng y)] đổi ra ngày rồi + khoảng cách từ ngày 1/[tháng y] tới [ngày x]/[tháng y]
    _ nếu khác tháng ,khác năm thì tính khoảng cách từ 1/1/[năm z] -> [ngày x]/[tháng y]/[năm z] + (khoảng cách từ năm 1901 -> [năm z] đổi ra ngày) + 365

  5. #5
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất nhiều sóng gió
    Bài viết
    448

    Trích dẫn Nguyên bản được gửi bởi khongdaubang Xem bài viết
    Mình thấy cách giải của bài đó phức tạp bởi hiện giờ mình mới học về c và yêu cầu của thầy mình là giải mà sử dụng vòng lặp như while hay for ,chứ lớp mình vẫn chưa học về mảng hay đệ qui hay những thứ sâu xa khác.
    Cái code mình đưa chỉ có 2 dòng, không có mảng, đệ qui, thậm chí không có vòng lặp, mà vẫn gọi là "phức tạp" ư?

  6. #6
    Ngày gia nhập
    10 2007
    Nơi ở
    TP. HCM
    Bài viết
    52

    Mặc định Chương trình đếm ngày

    Mới học C có lẻ thầy bạn cho làm bài này để học về giải thuật, cách tư duy 1 bài toán. Do đó cách dùng công thức của Ada khó được chấp nhận. Hồi trước lúc dạy C thầy tui bắt làm bài in ra thứ của 1 ngày bất kỳ cũng dạy cách tính thủ công chứ không xài công thức.

    Để làm được bài này nếu không biết công thức có thể làm như sau:

    1) Kiểm tra năm tính đến xem có phải năm nhuận:
    C Code:
    1. if ((n % 400 == 0) || (n % 4 == 0 && n % 100 != 0))
    2.     nhuan = 1;
    3. else
    4.     nhuan = 0;

    2) Đếm số năm nhuận từ năm 1900 đến năm n (không tính n).
    C Code:
    1. dem = 0;
    2. for (i = 1900; i < n; i++) {
    3.     if(i % 400 == 0 || (i % 4 == 0 && i % 100 != 0))
    4.         dem++;
    5. }

    3) Tính số ngày từ 1/1/1900 đến 1/1/n (năm n):
    C Code:
    1. tong = 365L * (n - 1) + dem;

    4) Tính thêm số ngày từ 1/1/n đến 1/th/n
    C Code:
    1. for (i = 1; i < th; i++) {
    2.     switch(i){
    3.         case 1:
    4.         case 3:
    5.         case 5:
    6.         case 7:
    7.         case 8:
    8.         case 10:
    9.         case 12:
    10.             songay = 31;
    11.             break;
    12.         case 4:
    13.         case 6:
    14.         case 9:
    15.         case 11:
    16.             songay = 30;
    17.             break;
    18.         case 2:
    19.             if (nhuan)
    20.                 songay = 29;
    21.             else
    22.                 songay = 28;
    23.             break;
    24.     }
    25.     tong += songay;
    26. }

    5) Cộng thêm số ngày từ 1/th/n đến ng/th/n
    C Code:
    1. tong += ng - 1;
    Đã được chỉnh sửa lần cuối bởi Chautieu47 : 04-08-2008 lúc 05:30 PM.
    /* The thing that I think is the thing that I do. */

  7. #7
    Ngày gia nhập
    10 2007
    Nơi ở
    TP. HCM
    Bài viết
    52

    À quên! Trước khi đếm số ngày thì phải kiểm tra xem ng/th/n cần đếm tới nhập vào có hợp lệ không nữa.
    /* The thing that I think is the thing that I do. */

  8. #8
    Ngày gia nhập
    07 2008
    Bài viết
    2

    Bài này nên đổi lại như sau thì hay quá.
    Nhập vào ngày tháng năm bắt đầu.
    Nhập vào ngày tháng năm kết thúc.
    Tìm tổng số ngày trong khoảng thời gian đó.

  9. #9
    Ngày gia nhập
    07 2008
    Bài viết
    2

    các bạn xem đoạn code này rồi góp ý cho mình nha!

    Code:
    #include<stdio.h>
    #include<conio.h>
    signed long int enterday(void);
    void main()
    {
     signed long int vitri_1,vitri_2,ketqua;
     clrscr();
        printf("*** CT dem so ngay ***\n");
        printf("\nNhap thoi diem bat dau:");
        vitri_1=enterday();
        printf("\nNhap thoi diem ket thuc:");
        vitri_2=enterday();
        ketqua=vitri_2-vitri_1;
        printf("So ngay la %ld",ketqua);
     getch();
    }
    //--------------------------------------------------
    signed long int enterday(void)
    {
     int d,m,y,i;
     signed long int td=0,tm=0,ty=0;
     nl:printf("\nNhap ngay: ");
     scanf("%d",&d);
     printf("\nNhap thang: ");
     scanf("%d",&m);
     printf("\nNhap nam: ");
     scanf("%d",&y);
      if(y<1)
      {
        printf("\nNhap khong hop le");
        goto nl;
      }
      else if(m<1||m>12)
      {
        printf("\nNhap khong hop le");
        goto nl;
      }
      else
      {
        switch (m)
        {
         case 1:
         case 3:
         case 5:
         case 7:
         case 8:
         case 10:
         case 12:
    	     if(d<1||d>31)
    	     {
    	       printf("\nNhap khong hop le");
    	       goto nl;
    	     }
    	     else
    	       break;
         case 4:
         case 6:
         case 9:
         case 11:
    	     if(d<1||d>30)
    	     {
    	       printf("\nNhap khong hop le");
    	       goto nl;
    	     }
    	     else
    	       break;
         case 2:
    	     if((y%400==0)||(y%4==0&&y%100!=0))
    	     {
    	       if(d<1||d>29)
    	       {
    		 printf("\nNhap khong hop le");
    		 goto nl;
    	       }
    	       else
    		break;
    	     }
    	     else
    	     {
    	       if(d<1||d>28)
    	       {
    		 printf("\nNhap khong hop le");
    		 goto nl;
    	       }
    	       else
    		 break;
    	     }
        }
      }
      for(i=1;i<y;i++)
      {
        if((i%400==0)||(i%4==0&&i%100!=0))
         ty=ty+366;
        else
         ty=ty+365;
      }
      for(i=1;i<m;i++)
      {
       switch(i)
       {
         case 1:
         case 3:
         case 5:
         case 7:
         case 8:
         case 10:
         case 12:
    	     tm=tm+31;
    	     break;
         case 4:
         case 6:
         case 9:
         case 11:
    	     tm=tm+30;
    	     break;
         case 2:
    	    if((y%400==0)||(y%4==0&&y%100!=0))
    	    {
    	     tm=tm+29;
    	     break;
    	    }
    	    else
    	    {
    	      tm=tm+28;
    	      break;
    	    }
       }
      }
      for(i=1;i<d;i++)
      {
       td=td+1;
      }
      ty=ty+tm+td;
      return(ty);
    }

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