三天打渔,两天晒网

 

中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。用C或C++语言/java/python实现程序解决问题。

设计方法与思路:

步骤一:建立时间类,里边分别有年、月、日,以及判断时间是否正确函数和计算总天数函数。

步骤二:写入类中的两个函数判断时间正确函数其中包括年份与2010的比较,各个月份输入时间与每月最大天数的比较、以及闰年2月天数的区分;计算总天数函数其中先将年份与2010的差值算出来,先不计其中的闰年,每年用365天计算,最终再次判断其中的闰年,给每个闰年加上一天,而最后一年的月份会最终加上。

步骤三:将天数除余,判断余数是否为1、2、3则为“打渔”,否则他是在“晒网”。

步骤四:将程序与两个TXT文件链接在一起,其中包括文件的读取,文件的写入,以及文件的关闭。

源程序:

#include<iostream>
#include<fstream>
using namespace std;
class Time
{
public:
int test();
int days();
    int a;
    int b;
    int c;
};//时间类,包括年、月、日。

int Time::test ()
{
    if(a<2010)
{printf("年份输入错误!");
return 0;}
if(b<0||b>12)
{printf("月份输入错误!");
return 0;}
int s[13]={0,31,28,31,30,31,30,31,31,30,31,30,31,};
for(int i=0;i<14;i++)
{if(a%4!=0&&b==i&&c>s[i]||c<1)
{printf("月份与对应天数不符!");
return 0;}
if(a%4==0&&b!=2&&b==i&&c>s[i]||c<1)
{printf("月份与对应天数不符!");
return 0;}
if(a%4==0&&b==2&&c>29||c<1)
{printf("月份与对应天数不符!");
return 0;}
}
return 1;
}//判断时间正确性的函数

int Time::days()//对时间的计算
{
    int y,e;
    int s[13]={0,31,28,31,30,31,30,31,31,30,31,30,31,};
    if(a>2009&&(b>0&&b<13))  
         y=(a-2010)*365;//年数的统计,先忽略闰年
        for(int i=0;i>b;i++)
        y=y+s[i];//在最后一年的月份天数
    for(e=0;e<14;e++)
    {if(b==e&&c<s[e]+1)    y=y+c;}//加上最后一个月的天数    
    int j;
    j=(y-2)/4;
    y=y+j;//有几个闰年,加上几个一
    return (y);
    
}

void main ()
{int z,g;
Time t;
    long x=0;
    ofstream outfile("in.txt",ios::out);
    cin>>x;
        outfile<<x;
    outfile.close();
    int a=0,b=0,c=0;
    a=x/10000;
    b=(x-a*10000)/100;
        c=x-a*10000-b*100;//分解年、月、日    
    t.a =a;
    t.b=b;
    t.c=c;
    t.test ();//给类中的所有变量赋值
    if(t.test()==1)
    {g=t.days ();
    ofstream out1file("out.txt",ios::out);
    if(0<g%5&&g%5<4)
    {out1file<<"这天他在打渔。" ; printf("这天他在打渔。");}//写入文件out.txt
    else {printf("这天他在晒网。");out1file<<"这天他在晒网。" ; }//写入文件out.txt
    }
    else{
        cin>>x;
        outfile<<x;
        outfile.close ();
 a=x/10000;
    b=(x-a*10000)/100;
        c=x-a*10000-b*100;//分解年、月、日    
    t.a =a;
    t.b=b;
    t.c=c;
    t.test ();
    }//如果输入时间正确,就可以得出结论,如果时间错误需要重新输入
}

流程图:

程序代码已经解决的问题:

时间的准确判断、从20100101到所输入时间的整天数、天数的除5余数的判断、文件的导入与跟源程序的链接程序、

未解决的问题:

输入时间错误后,如何又接着进行判断,由于程序的包比较零散,这个问题还没有完全解决。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注