Tính khoảng cách giữa 2 ngày tháng năm bất kì

Thảo luận trong 'C/C++' bắt đầu bởi jinyotino, 29 Tháng năm 2010.

  1. Offline

    jinyotino

    • Friends

    Số bài viết:
    569
    Đã được thích:
    211
    Điểm thành tích:
    140
    Tính khoảng cách giữa 2 ngày tháng năm bất kỳ :Dining:

    PHP:
    //Tính khoang cach giua 2 ngay thang nam bat ki

    #include <iostream.h>

    struct ngaythang
    {
        
    unsigned int ngay;
        
    unsigned int thang;
        
    unsigned int nam;
    };

    void main()
    {
        
    ngaythang nt1,nt2;
        
    cout<<"Moi ban nhap ngay thang nam thu nhat : ";
        
    cin>>nt1.ngay>>nt1.thang>>nt1.nam;
        
    cout<<"Moi ban nhap ngay thang nam thu hai : ";
        
    cin>>nt2.ngay>>nt2.thang>>nt2.nam;
        
        
    unsigned int count1=0,count2=0,count;

        
    unsigned int i,j,k;
        for(
    i=(nt1.nam);i<=(nt2.nam);i++)
        {
            for(
    j=1;j<=12;j++)
            {
                for(
    k=1;k<=30;k++)
                {
                    
    count1++;
                    if(
    k==(nt2.ngay) && j==(nt2.thang) &&  i==(nt2.nam))
                        break;
                }
                if(
    k==(nt2.ngay) && j==(nt2.thang) &&  i==(nt2.nam))
                        break;
            }
            if(
    k==(nt2.ngay) && j==(nt2.thang) &&  i==(nt2.nam))
                        break;
        }


            for(
    i=1;i<=nt1.thang;i++)
            {
                for(
    j=1;j<=30;j++)
                {
                
    count2++;
                if(
    j==nt1.ngay && i==nt1.thang)
                    break;
                }
                if(
    j==nt1.ngay && i==nt1.thang)
                    break;
            }

        
    count count1 count2;
        
    cout<<"So ngay tu  "<<nt1.ngay<<"/"<<nt1.thang<<"/"<<nt1.nam<<"=>"<<nt2.ngay<<"/"<<nt2.thang<<"/"<<nt2.nam<<"  la : "<<count<<" ngay";

    }
    Ctrl+F9sunboy thích bài này.
  2. Offline

    NoName_DN

    • Thành Viên Mới

    Số bài viết:
    96
    Đã được thích:
    10
    Điểm thành tích:
    0
    cách này khó hiểu thể, có cách khác hay hơn, dễ hiểu hơn đó, màk nhân đây, hỏi cái này luôn, có ai viết được hàm nhập ngày tháng hôk, share ik, thay vì viết nhiều lần trong hàm main thì ta viết 1 hàm nhập cho ngày tháng đoá, ai viết được chính xác share nghe.
  3. Offline

    jinyotino

    • Friends

    Số bài viết:
    569
    Đã được thích:
    211
    Điểm thành tích:
    140
    Cái trên là đơn giản rồi. Còn viết hàm nhập thì có khó gì!

    khai báo cấu trúc như trên

    và khai báo nt thuộc kiểu cấu trúc ngaythang
    muốn nhập nhiều ngày tháng cùng lúc thì khai báo mảng cấu trúc nt[10] thuộc kiểu ngaythang

    và khai báo thêm hàm nhập

    void nhap()
    {
    cout<<"Nhap ngay thang nam : ";
    cin>>nt.ngay>>nt.thang>>nt.nam;
    }

    còn nếu khai báo để nhập nhiều ngày tháng thì viết như sau

    void nhap(int n) //n là số ngày tháng muốn nhập vào
    {
    int i;
    for(i=1;i<=n;i++)
    {
    cout<<"Nhap ngay thang nam : ";
    cin>>nt.ngay>>nt.thang>>nt.nam;
    }
    }
  4. Offline

    NoName_DN

    • Thành Viên Mới

    Số bài viết:
    96
    Đã được thích:
    10
    Điểm thành tích:
    0
    ok - cái này thì chắc chắn ai cũng biết khi bắt đầu viết hàm main, nhưng màk khi xài hàm nhập để nhập 2 ngày thì nó vẫn cho nhập nhưng không trả về giá trị ở hàm main, tức là có nhập được, nhưng sau khi nhập thì giá trị của nó vẫn không có, không thể thực hiện các lệnh tính toán trên hàm main với 2 ngày tháng đó. ( nghĩa là giá trị nhập chỉ ở trong hàm NHẬP chứ hàm main thì hoàn toàn không được gán giá trị đó ).
  5. Offline

    jinyotino

    • Friends

    Số bài viết:
    569
    Đã được thích:
    211
    Điểm thành tích:
    140
    Mình quên nhắc bạn là khi khai báo phải toàn cục .
    Và muốn nó trả về giá trị mà không khai báo toàn cục bạn khai báo kiểu trả về là ngaythang
    Thế thôi!
  6. Offline

    NoName_DN

    • Thành Viên Mới

    Số bài viết:
    96
    Đã được thích:
    10
    Điểm thành tích:
    0
    để thử xem
  7. Offline

    zozophongan

    • Thành Viên Mới

    Số bài viết:
    1
    Đã được thích:
    0
    Điểm thành tích:
    0
    Bai tập C# về hàm tính khoảng cách giữa 2 bộ ngày viết bằng C# nè bạn
    nick :zozophongan@yahoo.com

    public void tinhsongay()
    {

    int sn = 0;
    //--------------------------------------------------
    //**********************************************
    if (nam2 >= nam)
    {


    if (ngay == ngay2 && thang == thang2)
    {

    for (int i = nam; i < nam2; i++)
    {
    if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0)
    {
    sn = sn + 366;
    Console.WriteLine("\nsn= {0}", sn);
    }
    else if ((i % 4 != 0 && i % 100 == 0) || i % 400 != 0)
    {
    sn = sn + 365;
    Console.WriteLine("\nsn= {0}", sn);
    }
    }
    }

    else
    {
    if (ngay != ngay2 || thang != thang2)
    {

    for (int i = nam; i < nam2; i++)
    {
    if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0)
    {
    sn = sn + 366;
    Console.WriteLine("\nsn= {0}", sn);
    }
    else if ((i % 4 != 0 && i % 100 == 0) || i % 400 != 0)
    {
    sn = sn + 365;
    Console.WriteLine("\nsn= {0}", sn);
    }
    }
    }
    if (thang >= thang2)
    {
    for (int i = thang2; i < thang; i++)
    {
    Console.WriteLine("thang ={0}", i);

    if (i == 2 && ((nam % 4 == 0 && nam % 100 != 0) || nam % 400 == 0))
    {
    sn = sn - 29;
    Console.WriteLine("\nsn= {0}", sn);
    }
    else if (i == 2 && ((nam % 4 != 0 && nam % 100 == 0) || nam % 400 != 0))
    {
    sn = sn -28;
    Console.WriteLine("\nsn= {0}", sn);
    }

    if (i == 4 || i == 6 || i == 9 || i == 11 && i != 2)
    {
    sn = sn - 30;
    Console.WriteLine("\nsn= {0}", sn);
    }
    else if (i != 2)
    sn = sn - 31;
    Console.WriteLine("\nsn= {0}", sn);

    }
    }
    else
    {
    for (int i = thang; i < thang2; i++)
    {
    Console.WriteLine("thang ={0}", i);

    if (i == 2 && ((nam % 4 == 0 && nam % 100 != 0) || nam % 400 == 0))
    {
    sn = sn + 29;
    Console.WriteLine("\nsn= {0}", sn);
    }
    else if (i == 2 && ((nam % 4 != 0 && nam % 100 == 0) || nam % 400 != 0))
    {
    sn = sn + 28;
    Console.WriteLine("\nsn= {0}", sn);
    }

    if (i == 4 || i == 6 || i == 9 || i == 11 && i != 2)
    {
    sn = sn + 30;
    Console.WriteLine("\nsn= {0}", sn);
    }
    else if (i != 2)
    sn = sn + 31;
    Console.WriteLine("\nsn= {0}", sn);

    }
    }
    }
    sn = sn + (ngay2 - ngay);
    if (thang > 2 && ((nam % 4 == 0 && nam % 100 != 0) || nam % 400 == 0) && nam2 > nam)
    sn = sn - 1;
    else if (thang2 > 2 && ((nam2 % 4 == 0 && nam2 % 100 != 0) || nam2 % 400 == 0) && nam2 > nam)
    sn = sn + 1;
    Console.WriteLine("\nsn= {0}", sn);


    }
    //*******************************************************************************
    //------------------------------------------------------------------------------nguoc lai cua nam >nam2
    else
    {

    if (ngay == ngay2 && thang == thang2)
    {

    for (int i = nam2; i < nam; i++)
    {
    if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0)
    {
    sn = sn + 366;
    Console.WriteLine("\nsn= {0}", sn);
    }
    else if ((i % 4 != 0 && i % 100 == 0) || i % 400 != 0)
    {
    sn = sn + 365;
    Console.WriteLine("\nsn= {0}", sn);
    }
    }
    }

    else
    {
    //Console.WriteLine("Nam 2={0}", nam2);
    if (ngay != ngay2 || thang != thang2)
    {

    for (int i = nam2; i < nam; i++)
    {
    if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0)
    {
    sn = sn + 366;
    Console.WriteLine("\nsn= {0}", sn);
    }
    else if ((i % 4 != 0 && i % 100 == 0) || i % 400 != 0)
    {
    sn = sn + 365;
    Console.WriteLine("\nsn= {0}", sn);
    }
    }
    }
    if (thang2 >= thang)
    {
    for (int i = thang; i < thang2; i++)
    {
    Console.WriteLine("thang ={0}", i);

    if (i == 2 && ((nam2 % 4 == 0 && nam2 % 100 != 0) || nam2 % 400 == 0))
    {
    sn = sn - 29;
    Console.WriteLine("\nsn= {0}", sn);
    }
    else if (i == 2 && ((nam2 % 4 != 0 && nam2 % 100 == 0) || nam2 % 400 != 0))
    {
    sn = sn - 28;
    Console.WriteLine("\nsn= {0}", sn);
    }

    if (i == 4 || i == 6 || i == 9 || i == 11 && i != 2)
    {
    sn = sn - 30;
    Console.WriteLine("\nsn= {0}", sn);
    }
    else if (i != 2)
    sn = sn - 31;
    Console.WriteLine("\nsn= {0}", sn);

    }
    }
    else
    {
    for (int i = thang2; i < thang; i++)
    {
    Console.WriteLine("thang ={0}", i);

    if (i == 2 && ((nam2 % 4 == 0 && nam2 % 100 != 0) || nam2 % 400 == 0))
    {
    sn = sn + 29;
    Console.WriteLine("\nsn= {0}", sn);
    }
    else if (i == 2 && ((nam2 % 4 != 0 && nam2 % 100 == 0) || nam2 % 400 != 0))
    {
    sn = sn + 28;
    Console.WriteLine("\nsn= {0}", sn);
    }

    if (i == 4 || i == 6 || i == 9 || i == 11 && i != 2)
    {
    sn = sn + 30;
    Console.WriteLine("\nsn= {0}", sn);
    }
    else if (i != 2)
    sn = sn + 31;
    Console.WriteLine("\nsn= {0}", sn);

    }
    }

    }
    sn = sn + (ngay - ngay2);
    if (thang2 > 2 && ((nam2 % 4 == 0 && nam2 % 100 != 0) || nam2 % 400 == 0) && nam > nam2)
    sn = sn - 1;
    else if (thang > 2 && ((nam % 4 == 0 && nam % 100 != 0) || nam % 400 == 0) && nam > nam2)
    sn = sn + 1;
    Console.WriteLine("\nsn= {0}", sn);
    }

    Console.WriteLine("{0}" ,sn);

    }

Chia sẻ trang này

Advertising: Linux system admin | nukeviet | nukeviet 4 | Upload ảnh miễn phí