Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 9 của 9
  1. #1

  2. #2
    Trích dẫn Gửi bởi khongdaubang
    Đề : 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 tham gia
    Sep 2015
    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 tham gia
    Sep 2015
    Bài viết
    0
    code của Ada thuộc hàng Advance rồi [IMG]images/smilies/biggrin.png[/IMG]
    @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 tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi khongdaubang
    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 tham gia
    Sep 2015
    Bài viết
    0
    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:

    Mã:
    if ((n % 400 == 0) || (n % 4 == 0 && n % 100 != 0))    nhuan = 1;else    nhuan = 0;
    2) Đếm số năm nhuận từ năm 1900 đến năm n (không tính n).

    Mã:
    dem = 0;for (i = 1900; i < n; i++) {    if(i % 400 == 0 || (i % 4 == 0 && i % 100 != 0))        dem++;}
    3) Tính số ngày từ 1/1/1900 đến 1/1 (năm n):

    Mã:
    tong = 365L * (n - 1) + dem;
    4) Tính thêm số ngày từ 1/1 đến 1/th

    Mã:
    for (i = 1; i < th; i++) {    switch(i){        case 1:        case 3:        case 5:        case 7:        case 8:        case 10:        case 12:            songay = 31;            break;        case 4:        case 6:        case 9:        case 11:            songay = 30;            break;        case 2:            if (nhuan)                songay = 29;            else                songay = 28;            break;    }    tong += songay;}
    5) Cộng thêm số ngày từ 1/th đến ng/th

    Mã:
    tong += ng - 1;

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    À quên! Trước khi đếm số ngày thì phải kiểm tra xem ng/th cần đếm tới nhập vào có hợp lệ không nữa.

  8. #8
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    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 tham gia
    Sep 2015
    Bài viết
    0
    các bạn xem đoạn code này rồi góp ý cho mình nha!

    Mã:
    #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 ***
    ");
        printf("
    Nhap thoi diem bat dau:");
        vitri_1=enterday();
        printf("
    Nhap 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("
    Nhap ngay: ");
     scanf("%d",&d);
     printf("
    Nhap thang: ");
     scanf("%d",&m);
     printf("
    Nhap nam: ");
     scanf("%d",&y);
      if(y<1)
      {
        printf("
    Nhap khong hop le");
        goto nl;
      }
      else if(m<1||m>12)
      {
        printf("
    Nhap 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("
    Nhap khong hop le");
    	       goto nl;
    	     }
    	     else
    	       break;
         case 4:
         case 6:
         case 9:
         case 11:
    	     if(d<1||d>30)
    	     {
    	       printf("
    Nhap 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("
    Nhap khong hop le");
    		 goto nl;
    	       }
    	       else
    		break;
    	     }
    	     else
    	     {
    	       if(d<1||d>28)
    	       {
    		 printf("
    Nhap 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 viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •