2
program date;
uses wincrt;

var
m,ch,ch1,ch2,ch3: string ;
mois,j,a,b: integer ;

begin
write('a');read(a);
write('j');read(j);
write('mois');read(mois);
case mois of
1,3,5,7,8,10: if j<31 then
                          begin
                          b:=j+1;
                          m:=str(b,ch)+'/'+str(mois,ch2)+'/'+str(a,ch3);
                          else  if j=31then
                          b:=1;
                          s:=mois+1;
                          m:=concat(str(b,ch),'/',str(s,ch2),'/',str(a,ch3));
                          end
                          else m:='erreur';    
4,6,9,11:if j<30 then
                 begin
                 b:=j+1;
                 m:=concat(str(b,ch),'/',str(mois,ch2),'/',str(a,ch3));
                 end                         
                 else j=30 then
                 begin
                 b:=1;
                 s:=mois+1;
                 m:=concat(str(b,ch),'/',str(mois,ch2),'/',str(a,ch3));
                 end
                 else m:='erreur';
2:if j<28 then
      begin
      b:=j+1;
      m:=concat(str(b,ch),'/',str(mois,ch2),'/',str(a,ch3));
      end
      else if j=28 then
      begin
      b:=1;
      m:=concat(str(b,ch),'/',str(mois,ch2,'/',str(a,ch3));
      end
      else if((a mod 4=0)AND (a mod 100<>0)) or ((a mod 100=0)and(a mod 400=0)) then
               if j<29 then
               begin
               b:=j+1;
               m:=concat(str(b,ch),'/',str(mois,ch2,'/',str(a,ch3));
               end
               else if j=29 then
               begin
               b:=1;
               m:=concat(str(b,ch),'/',str(mois,ch2,'/',str(a,ch3));
               end
               else m:='erreur';
12:if j<31 then
     begin
     b:=j+1;
     m:=concat(str(b,ch),'/',str(mois,ch2,'/',str(a,ch3));
     end
     else if j=31 then
     begin
     b:=1;
     s:=a+1;
     m:=concat(str(b,ch),'/',str(mois,ch2,'/',str(s,ch3));
     end;       
writeln(m);
end.     

これは私のプログラムです。あなたが私を助けてくれることを願っています

4

1 に答える 1

2

begin/end ブロックに従ってコードをインデントすることをお勧めします。これにより、対応していない begin/end ステートメントを簡単に見つけることができます。

m:=str(b,ch)+'/'+str(mois,ch2)+'/'+str(a,ch3);

Turbo Pascal で何かをしたのは久しぶりですが、私の記憶が正しければ、str はプロシージャです。したがって、何も返されません。

プログラムを単純化するために、case ブロック内の新しい変数 "b"、"mois"、"a" のみを計算するのは良い考えかもしれません。そして、case-block の後に文字列への変換を 1 回行います。

str(b, ch);
str(mois, ch2);
str(a, ch3);
m := ch + '/' + ch2 + '/' + ch3;
于 2010-12-25T13:52:37.787 に答える