Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 14 kết quả

Đề tài: Chương trình in ra lịch của một tháng

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

    Mặc định Chương trình in ra lịch của một tháng

    Code:
    #include <iostream>
    #include <conio.h>
    using namespace std;
    struct date
    {
        int d,m,y,a;
    };
    
    int nhuan(date x) //Kiem tra nam nhuan hay ko
    {
        return (x.y%4==0)?1:0;
    }
    
    long daycount(date x) //Tinh khoang cach tu ngay nhap vao voi ngay 1/1/1
    {
        return x.d-1+(x.m-1)*30+(x.y-1)*365+x.a+(x.y-1)/4;
    }
    
    main()
    {
        date x;
        int month[42];
        int i,j,ngaymax,ngaydu,k,thu,ok;
        cout<<"\nChuong trinh in ra cac ngay trong thang cua nam nao do\n------\n\n";
        do
        {
            if(ok==0)
            cout<<"\nXin loi, thang (nam) ban vua nhap ko hop le,xin nhap lai\n-\n";
            ok=1;
            cout<<"Nhap thang, nam (vi du 11 2007): ";
            fflush(stdin); cin>>x.m>>x.y;
            if(x.y<0||x.m<1) ok=0; //Kiem tra tinh hop le cua
            else if (x.m>12) ok=0; //so lieu nhap vao tu ban phim
        } while(ok==0);
        switch(x.m)
            {
                case 1: ngaymax=31; ngaydu=0; break;
                case 2: if(nhuan(x)) ngaymax=29; else ngaymax=28; ngaydu=1;  break;
                case 3: ngaymax=31; ngaydu=-1+nhuan(x); break;
                case 4: ngaymax=30; ngaydu=0+nhuan(x); break;
                case 5: ngaymax=31; ngaydu=0+nhuan(x); break;
                case 6: ngaymax=30; ngaydu=1+nhuan(x); break;
                case 7: ngaymax=31; ngaydu=1+nhuan(x); break;
                case 8: ngaymax=31; ngaydu=2+nhuan(x); break;
                case 9: ngaymax=30; ngaydu=3+nhuan(x); break;
                case 10: ngaymax=31; ngaydu=3+nhuan(x); break;
                case 11: ngaymax=30; ngaydu=4+nhuan(x); break;
                case 12: ngaymax=31; ngaydu=4+nhuan(x); break;
            }
            x.a=ngaydu;
            x.d=1; //Gan ngay la ngay mung 1
            thu=daycount(x)%7; //de tinh thu cua ngay dau tien cua thang
            
            for(i=0;i<5;i++)
            {
                for(j=0;j<7;j++)
                {
                    if(7*i+j+1<=ngaymax) *(month+7*i+j+thu)=7*i+j+1;
                }
            } //Gan tat ca ngay trong thang vao mot day
            for(i=0;i<thu;i++)
                *(month+i)=32; //Gan gia tri tam thoi bieu thi nhung ngay ko ton tai
            for(i=ngaymax+thu;i<42;i++)
                *(month+i)=32; //Gan gia tri tam thoi bieu thi nhung ngay ko ton tai
            cout<<"----\n\nLich thang "<<x.m<<"\\"<<x.y<<"\n------\n\n";
            cout<<"CN\tThu 2\tThu 3\tThu 4\tThu 5\tThu 6\tThu 7\n\n";
            for(i=0;i<6;i++)
            {
                for(j=0;j<7;j++)
                {
                    if(*(month+7*i+j)==32) cout<<"\t"; //Thay the gia tri tam thoi bang null
                    else cout<<*(month+7*i+j)<<"\t";
                }
                cout<<"\n";
            }
        getch();
    }
    welcome to http://fotech.org
    bắt đầu với C/C++

  2. #2
    Ngày gia nhập
    11 2007
    Bài viết
    21

    Chào bạn !
    Bài này hay đó nhưng sao bạn không viết theo OOP cho dễ hơn, với lại mình đề ghị hạn chế sư dụng thèng switch, case trong trường hợp này bạn xài mảng sẽ hay hơn !

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

    Tớ cũng có một bài in ra lịch của một năm bất kỳ >= 1700
    http://forums.congdongcviet.com/show...7&postcount=31
    PHP Code:
    #include <iostream.h>
    #include <conio.h>
    #include <stdlib.h>
    int songay(int,int);
    bool namnhuan(int nam);
    void InLich(int,int);
    int ThuDauTien(int,int);
    void main()
    {
        
    int nam;
       
    char chon;
       do
       {
           do
           {
                
    cout<<"Nhap vao nam(> 1700): ";
              
    cin>>nam;
           }while(
    nam 1700);
           for(
    int i 1;<= 12;i++)
           {
               
    cout<<"Thang "<<i<<endl;
              
    InLich(i,nam);
              
    cout<<endl;
           }
          
    cout<<"\nBan co muon tiep tuc khong(y/n): ";
          
    cin>>chon;
          
    system("cls");
       }while(
    chon == 'y');
       
    cout<<"Thanh Nam cam on ban da su dung chuong trinh {an Enter de thoat)";
       
    getch();
    }
    int songay(int thang,int nam)
    {
         switch(
    thang)
       {
           case 
    1:
           case 
    3:
          case 
    5:
          case 
    7:
          case 
    8:
          case 
    10:
          case 
    12:
              return 
    31;
          case 
    2:
              if(
    namnhuan(nam))
                 return 
    29;
             else
                 return 
    28;
          case 
    4:
          case 
    6:
          case 
    9:
          case 
    11:
              return 
    30;
       }
       return 
    0;
    }
    bool namnhuan(int nam)
    {
       return ((
    nam == && nam 100 != 0)||(nam 400 == 0));
    }
    void InLich(int thang,int nam)
    {
        
    int ngayd ThuDauTien(thang,nam);
       if(
    ngayd == 0)
       
    ngayd 7;
         
    int i;
       
    int sn songay(thang,nam);
       
    cout<<"\nMon\tTUE\tWED\tTHU\tFRI\tSAT\tSun\n";
       for(
    1;<= ngayd 1;i++)
       
    cout<<"\t";
       for(
    1;<= sn;i++)
       {
             
    cout<<i<<"\t";
          if((
    ngayd 1) % == 0)
          
    cout<<endl;
       }
    }        

    long int funct1 (int nam,int thang)                                    
    {                                                                       
          
    long int result;                                                
       if ( 
    thang <= )                                                    
       
    nam -= 1;   //                                                       
       
    result nam;                                                        
       return (
    result);                                                     
    }                                                                       
                                                                            
    long int funct2 (int thang)                                             
    {                                                                       
        
    long int result;                                                
        if ( 
    thang <= )                                               
        
    result thang 13;                                            
        else                                                            
        
    result thang 1;                                             
        return(
    result);                                                 
    }                                                                       
                                                                            
    long int day_count (int thangint nam)                                 
    {                                                                       
        
    long int number;                                                     
        
    number 1461 *  funct1(nam,thang) / 153 funct2(thang) / 1;
        return (
    number);                                                     
    }                                                                      

    int ThuDauTien(int thang,int nam)                                      
    {                                                                       
        
    long int number_of_days1;                                          
       
    int day_of_week;                                                   
       
    number_of_days1 day_count (thangnam);                            
       
    day_of_week = (number_of_days1 621049) % 7;                                                                         
        return 
    day_of_week;                                             


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

    Chào bạn !
    -Bạn viết cũng hay đấy nhưng bạn viết như vậy ứng dụng của bạn chỉ sử dụng duy nhất 1 việc là In Lich thôi ! thế thì tệ phải ko ạ !
    -Chẳng hạn khi mình muốn sử dụng lại với việc khác như tính lãi chẳng hạn thì người dùng sẽ nhập vào 1 ngày nào đó rồi tính số tiền lời trong tương lai chẳng hạn ... có rất nhìu ứng dụng sẽ sử dụng lại cái nì phải ko ?
    - Mình đề nghị viết theo OOP tạo 1 class Date và 1 Display.cpp riêng để thật hiện việc in lịch ! Các bạn thấy sao ?
    Thân !
    Đã được chỉnh sửa lần cuối bởi zZKiddyZz : 20-11-2007 lúc 11:28 AM. Lý do: Class Date

  5. #5
    Ngày gia nhập
    10 2007
    Bài viết
    8

    À,em đang học C++ trên lớp, mới học đến phần cấu trúc thôi ạ, mấy tuần nữa mới học hướng đối tượng nên em thử một bài thôi ạ. Lúc đầu đề bài cô cho chỉ là tìm thứ qua ngày tháng năm, em áp dụng thêm thôi
    welcome to http://fotech.org
    bắt đầu với C/C++

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

    Mặc định Chương trình in ra lịch của một tháng

    Trích dẫn Nguyên bản được gửi bởi zZKiddyZz Xem bài viết
    Chào bạn !
    -Bạn viết cũng hay đấy nhưng bạn viết như vậy ứng dụng của bạn chỉ sử dụng duy nhất 1 việc là In Lich thôi ! thế thì tệ phải ko ạ !
    -Chẳng hạn khi mình muốn sử dụng lại với việc khác như tính lãi chẳng hạn thì người dùng sẽ nhập vào 1 ngày nào đó rồi tính số tiền lời trong tương lai chẳng hạn ... có rất nhìu ứng dụng sẽ sử dụng lại cái nì phải ko ?
    - Mình đề nghị viết theo OOP tạo 1 class Date và 1 Display.cpp riêng để thật hiện việc in lịch ! Các bạn thấy sao ?
    Thân !
    Mình thấy ý kiến của bạn cũng hay đó, hay là bạn thử up code bài này lên cho mình tham khảo được không

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

    Chào bạn !

    Mình xin lỗi, mình sẽ post code trong thời gian sớm nhất nhưng hiện giờ mình đang busy về cái project của mình `__`. Vì code LNgay của mình lúc trước cũ rồi ko hay nữa mình mới học thêm 1 số mới sẽ update code rồi post lên lun nha bạn nhé !

    Thân

  8. #8
    Ngày gia nhập
    10 2007
    Bài viết
    3

    Code:
    //file Date.h
    ////////////////////////////
    #include<iostream>
    #include<cmath>
    #include<cstdlib>
    #include<conio.h>
    using namespace std;
    class Date
    {
    private:
    	int year;//chi can nam la du
    public:
    	Date();
    	~Date();
    	int soNgay(int,int);
    	bool namNhuan(int);
    	void inLich(int,int);
    	int thuDauTien(int,int);
    	long int day_count (int, int);
    	long int funct2 (int);
    	long int funct1 (int,int);
    };
    //file Date.cpp(file cai dat)
    
    #include "Date.h"
    using namespace std;
    //////////////////////////////cai dat class Date
    //constructor
    Date::Date():year(0)//khoi tao cho year=0
    {
    	do
    	{
    		cout<<"Nhap vao nam(> 1700): ";
    		cin>>this->year;
    	}while(this->year < 1700);
    	for(int i = 1;i <= 12;i++)
    	{
    		cout<<"Thang "<<i<<endl;
    		this->inLich(i,this->year);
    		cout<<endl;
    	}
    }
    //destructor
    Date::~Date()
    {
    }
    int Date::soNgay(int thang ,int nam)
    {
    	if(thang==1,3,5,7,8,10,12)
    		   return 31;
    	if(thang=2,4,6,9,11)
    			return 30;
    	if(thang==2)
    		if(this->namNhuan(nam))
    			return 29;
    		else
    			return 28;
    
       return 0;
    }
    bool Date::namNhuan(int nam)
    {
       return ((nam % 4 == 0 && nam % 100 != 0)||(nam % 400 == 0));
    }
    void Date::inLich(int thang ,int nam)
    {
    	int ngayd = this->thuDauTien(thang,nam);
    	if(ngayd == 0)
    	ngayd = 7;
        int i;
    	int sn = this->soNgay(thang,nam);
    	cout<<"\nMon\tTUE\tWED\tTHU\tFRI\tSAT\tSun\n";
    	for(i = 1;i <= ngayd - 1;i++)
    		cout<<"\t";
    	for(i = 1;i <= sn;i++)
    	{
    		cout<<i<<"\t";
    		if((i + ngayd - 1) % 7 == 0)
    		cout<<endl;
    	}
    }
    int Date::thuDauTien(int thang,int nam)
    {
    	long int number_of_days1;                                          
    	int day_of_week;                                                   
    	number_of_days1 = this->day_count(thang,nam);                            
    	day_of_week = (number_of_days1 - 621049) % 7;                                                                         
    	return day_of_week; 
    }
    long int Date::day_count(int thang, int nam)
    {
    	long int number;                                                     
        number = 1461 *  this->funct1(nam,thang) / 4 + 153 * this->funct2(thang) / 5 + 1;
        return (number); 
    }
    long int Date::funct1(int nam,int thang)
    {
    	long int result;                                                
    	if ( thang <= 2 )                                                    
    	nam -= 1;   //                                                       
    	result = nam;                                                        
    	return (result);
    }
    long int Date::funct2 (int thang)  //                                           
    {                                                                       
        long int result;                                                
        if ( thang <= 2 )                                               
        result = thang + 13;                                            
        else                                                            
        result = thang + 1;                                             
        return(result);                                                 
    }  
    
    ///ham main
    void main()
    {
        char chon;
    	do
    	{
    		Date y;//khoi tao 1 doi tuong can xet
    		cout<<"\nBan co muon tiep tuc khong(y/n): ";
    		cin>>chon;
    		system("cls");
       }while(chon == 'y');
       cout<<"Thanh Nam cam on ban da su dung chuong trinh {an Enter de thoat)";
       getch();
    }
    Đây là đoạn code mình chỉnh lại thành OOP,vì đang bận nên mình chỉ chỉnh lại phần switch thôi!Có thiếu sót gì các bạn bổ sung nhé!Đây là bài đầu tiên mình post ở diễn đàn này.

    Không có người phụ nữ xấu!!! Chỉ có những người phụ nữ không biết tự làm đẹp, hoặc... làm hoài mà không đẹp!!!

  9. #9
    Ngày gia nhập
    11 2007
    Bài viết
    21

    Chào các bạn !
    Sau khi cày xong mấy cái đồ án mình viết lại class CDate, mấy class dạng này bạn có thể tìm open source trên web nhưng ko vì thế mình lại ko viết 1 cái class này. Code sau đây mình chỉ up file .h thui, để mọi người đánh giá góp ý, cần bổ sung hàm nào nữa không, cũng như hàm nào không cần thiết thì bỏ đi. Mong mọi người góp ý :
    Code:
    /* Date Class */
    
    
    #ifndef _CDate_h_
    #define _CDate_h_
    
    
    #include <iostream>
    #include <string>
    
    #define max(x, y) (x > y) ? x : y
    #define min(x, y) (x < y) ? x : y
    
    using namespace std;
    
    
    class CDate
    {
    	private:
    		
    		int  _Day;
    		int  _Moth;
    		int  _Year;
    		void _Set(int, int, int);
    
    	public:
    
    		CDate();                              /* Constructor default */
    		CDate(int, int, int);                 /* Constructor */
    		CDate(const CDate &);                 /* Copy constructor */
    		~CDate();                             /* Destructor */
    
    		void setDay(int);                     /* Dat lai ngay */
    		void setMonth(int);                   /* Dat lai thang */
    		void setYear(int);                    /* Dat lai nam */
    
    		int  getDay()   const;                /* Lay ngay */
    		int  getMonth() const;                /* Lay thang */
    		int  getYear()  const;                /* Lay nam */
    
    		void addMonth(int m = 1);             /* Them thang */
    		void addYear(int y = 1);              /* Them nam */
    
    		bool IsLeapYear() const;              /* Kiem tra nam nhuan */
    
    		CDate& operator = (const CDate &);    /* Toan tu gan doi tuong ngay */
    
    		CDate  operator + (int);              /* Toan tu cong Obj voi int */
    		CDate  operator - (int);              /* Toan tu tru Obj voi int */
    		CDate  operator - (const CDate &);    /* Toan tu tru Obj voi Obj */
    		
    		CDate& operator ++ ();                /* Toan tu cong don 1 don vi ngay (int) */
    		CDate& operator -- ();                /* Toan tu tru don 1 don vi ngay (int) */
    
    		CDate& operator += (int);             /* Toan tu cong bang Obj voi int (ngay qua tuong lai) */
    		CDate& operator -= (int);             /* Toan tu tru bang Obj voi int (ngay qua khu) */
    
    		bool operator == (const CDate &);
    		bool operator != (const CDate &);
    		bool operator >= (const CDate &);
    		bool operator <= (const CDate &);
    		bool operator >  (const CDate &);
    		bool operator <  (const CDate &);
    
    		friend ostream& operator <<(ostream &, const CDate &);
      		friend istream& operator >>(istream &, CDate &);
    		friend CDate    operator + (const CDate&, int); /* Toan tu cong giua int voi Obj*/
    };
    
    
    
    #endif
    PS: Happy new year, best wishes for all

    Thân

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

    Mình cũng làm thử một bài in lịch thế này, mọi người xem thử
    PHP Code:
    #include <iostream.h>
    #include <stdio.h>
    #include <conio.h>
    //Ham tinh so ngay cua mot thang
    int SoNgayCuaThang(int th,int nam)
    {
        switch(
    th)
        {
        case 
    1:case 3:case 5:case 7:case 8:case 10: case 12:
            return 
    31;break;
        case 
    2:
            if (
    nam == 0) return 29; else return 28; break;
        default:
            return 
    30;
        }
    }

    //Ham chuyen tu ngay -> thu

    int ThuCuaNgay(int ngint thint nam)
    {
        
    //cout<<"Nhap vao nam can in lich: ";
        //cin>>nam;int ThuCuaNgay(int ng,int th,int nam)
        
    int s=(nam-1)/4+(nam-1)*365;
        for (
    int i=1;i<th;++i)
            
    s+=SoNgayCuaThang(inam);
        
    s+=ng;
        if (
    s%== 0) return 7;
        else return (
    s%7);
    }
        
    void main()
    {
        
    int nam;
        
    cout<<"Nhap vao mot nam can in lich : ";
        
    cin>>nam;
        
    printf("Lich cua nam %d la \n",nam);
        
    cout<<endl;
        for (
    int thang 1thang <= 12; ++thang)
        {
            
    printf("  THANG %d\n",thang);
            
    printf("%5s","Hai");
            
    printf("%5s","Ba");
            
    printf("%5s","Tu");
            
    printf("%5s","Nam");
            
    printf("%5s","Sau");
            
    printf("%5s","Bay");
            
    printf("%5s\n","Cn");
            
    int k 2;
            while (
    k)
                if (
    ThuCuaNgay(1,thang,nam) == || (ThuCuaNgay(1,thang,nam) == && == 8)) {printf("%5d",1);break;}
                else {
    printf("%5s"," "); k++;}
            if (
    ThuCuaNgay(1,thang,nam) == 1cout<<endl;
            for (
    int i 2<= SoNgayCuaThang(thangnam); ++i)
            {
                
                if (
    ThuCuaNgay(i,thang,nam) == 1printf("%5d\n",i);
                else 
    printf("%5d",i);
            }
            
    cout<<endl;
            
    cout<<endl;
        }
        
    getch();


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