program sssssssssssssss;{$APPTYPE CONSOLE}uses
  SysUtils;
  var
  year :integer;
  total:integer;
  day  :integer;
  month:integer;
  leapyear:char;  procedure dayborn;
  begin
    total:=total mod 7;
       if(total=1)or(total=2)or(total=3)or(total=4)or(total=5)or(total=6)or(total=0) then
         case total of
       1:writeln('您输入的日期是星期天。');
       2:writeln('您输入的日期是星期一。');
       3:writeln('您输入的日期是星期二。');
       4:writeln('您输入的日期是星期三。');
       5:writeln('您输入的日期是星期四。');
       6:writeln('您输入的日期是星期五。');
       7:writeln('您输入的日期是星期六。');
          end;
       readln;
    end;
begin
  { TODO -oUser -cConsole Main : Insert code here }
Writeln('请输入年份:');
readln(year);
total:=year div 4+year;
writeln;
writeln('(char)是否是闰年');
readln(leapyear);
writeln;
writeln('请输入日期:');
readln(day);
total:=total+day;
writeln;
writeln('输入月份:'); 
readln(month);if(leapyear='y')and(month=2)or(month=1)then(*请解释从这一行到最后的代码意思*)
total:=total-1;
  if month=1 then
     begin
       total:=total+1;
       dayborn;
       end;
  if month=2 then
       begin
       total:=total+4;
       dayborn;
       end;
  if month=3 then
       begin
       total:=total+4;
       dayborn;
       end;
  if month=4 then
       begin
       total:=total+0;
       dayborn;
       end;
  if month=5 then
       begin
       total:=total+2;
       dayborn;
       end;
  if month=6 then
       begin
       total:=total+5;
       dayborn;
       end;
  if month=7 then
       begin
       total:=total+0;
       dayborn;
       end;
  if month=8 then
       begin
       total:=total+3;
       dayborn;
       end;
  if month=9 then
       begin
       total:=total+6;
       dayborn;
       end;
  if month=10 then
       begin
       total:=total+1;
       dayborn;
       end;
  if month=11 then
       begin
       total:=total+4;
       dayborn;
       end;
  if month=12 then
       begin
       total:=total+6;
       dayborn;
       end;
end.

解决方案 »

  1.   

    此程序的原理是,计算出某年的第一天是星期几,加上某月的第一天相对于某年第一天的天数,再加上日期的天数,最后对7取模,算出星期,当然在过程中,月的算法先对7取了模另外,这个程序的结果可能不正确,问题好像出在下面一行:total:=year div 4+year;
      

  2.   

    粗略的看了一下,程序是计算某一天是星期几的。
    如果这个程序是想说明某特殊的写法或者算法还说得过去,起码格式挺整齐,虽然是控制台程序,但就算法来看简直就是垃圾,不说有现成的函数,就这个计算方法也该挨抽了。case 和 集合 能省去大段的代码。
      

  3.   

    好像是为了说明if 语句,全局变量和 procedure 的使用。
      

  4.   

    只不过是一个数学变换而已,把简单的问题弄复杂了。这个程序是谁写的啊,真丢程序员的脸!
    而且这个程序中对闰年的理解显然有错。
    function IsLeapYear(N: Word): Boolean;
    begin
      Result := (((N mod 4) = 0) and ((N mod 100) <> 0)) or ((N mod 400) = 0);
    end;
      

  5.   

    如果是平年, 365 天,比如今年的 1月1日周五,那么明年的1月1日一定是周六,因为365除7余1,如果是闰年,那么在加一天,就是说这要累计这个余数就能判断星期了。其实利用timestamp 来判断星期是比较简单的,timestamp的date部分是从0001年1月1日开始天数,除以7看看余数,余数是几今天就是星期几,0表示周日。
      

  6.   

    实在太业余了吧,垃圾代码啊,一个CASE就搞定的判断,楞是写了10多个IF,晕死
      

  7.   

    我看的是<delphi6编程指南>电子工业出版社的,这本书是不是很烂呀!