我可以在pascal语句中使用case if语句

时间:2017-09-30 11:59:54

标签: if-statement pascal freepascal case-statement

我想在if语句中使用case,我可以使用它吗?因为我编译时总是出错; w;

我得到的错误:

Tahun.pas(26,21) Fatal: Syntax error, ";" expected but "ELSE" found
Tahun.pas(0) Fatal: Compilation aborted

这是我的代码:

uses Crt;
var
sisa, bulan, tahun : integer;

begin
ClrScr;
writeln('masukkan tahun'); read(tahun);
sisa := tahun mod 4;
if sisa =0 then
writeln('masukkan bulan 1-12'), read(bulan);
 case bulan of
  1: write('31');
  2: write('29');
  3: write('31');
  4: write('30');
  5: write('31');
  6: write('30');
  7: write('31');
  8: write('30');
  9: write('31');
  10: write('30');
  11: write('31');
  12: write('30');
  else write('bulan tidak lebih dari 12');
end;
else
writeln('masukkan bulan 1-12'), read(bulan);
 case bulan of
  1: write('31');
  2: write('28');
  3: write('31');
  4: write('30');
  5: write('31');
  6: write('30');
  7: write('31');
  8: write('30');
  9: write('31');
  10: write('30');
  11: write('31');
  12: write('30');
else write('bulan tidak lebih dari 12')
end;
 readln;
 readln;

end.

或许您知道如何改进代码? ; W;

感谢您的回答; w;

1 个答案:

答案 0 :(得分:0)

我希望你已经阅读了昨天评论中给出的建议的链接。所以这个问题有几个可能的答案:

修复代码的 1st -

begin
  writeln('masukkan tahun');
  readln(tahun);
  writeln('masukkan bulan 1-12');
  readln(bulan);
  case bulan of
    1, 3, 5, 7, 8, 10, 12: writeln('31');
    2: if tahun mod 4 = 0 then
         writeln('29')
       else
         writeln('28');
    4, 6, 9, 11: writeln('30');
  else
    write('bulan tidak lebih dari 12');
  end;
  readln;
end.

第二 - 来优化它:

const
  DinM: array [boolean, 1 .. 12] of byte =
  ((31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31),
   (31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31));

begin
  writeln('masukkan tahun');
  readln(tahun);
  writeln('masukkan bulan 1-12');
  readln(bulan);
  writeln(DinM[tahun mod 4 = 0, bulan]);
  readln;
end.

第3名

使用预先设计的函数:Delphi的函数DaysInAMonth描述为here. 拉撒路has it也是如此。

注意

请记住,所有这些方法(包括标准函数)都会在计算闰年时产生错误,因为并非所有year mod 4 = 0跳跃的年份。例如,1700年,1800年,1900年,2100年等都没有飞跃。