一月前の日付を求めるプログラム(pascal)
大学の課題で「一月前の日付を求めるプログラムを作れ。その日が無ければその月の最後の日を示す。」というのが出題されました。12月18日(火)と入力すると11月18日(日)、12月31日(月)なら11月30日(金)となる具合です。
列挙型を用い書いてみたのですが、コンパイルしたら「Type-clash」と出てコンパイルできませんでした。どう改善すべきかアドバイスお願いします。
program calender(input,output);
type
months=(Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Nov,Oct,Dec);
weeks=(Mon,Tue,Wed,Thu,Fri,Sat,Sun);
var
x,x1,z,z1:char;
y,y1,p1,p2,i,r:integer;
begin
writeln('月:');
readln(x);
writeln('日:');
readln(y);
writeln('曜日:');
readln(z);
if x=Jan then
begin
x1:=Dec
end
else
begin
x1:=pred(x) {x1=表示する月}
end;
if y>=29 then
if x=Mar then
begin
y1:=28
end
else
begin
y1:=y {y1=表示する日}
end;
case x of
May,Jul,Aug,Nov,Dec : p1:=30;
Jan,Feb,Apr,Jun,Sep,Oct : p1:=31;
Mar : p1:=28 {月の違いによる日数の違い}
end;
p2:=y-y1; {日にちの違い}
r:=(p1+p2)-trunc((p1+p2)/7)*7; {7で割った余り}
for i := 1 to r do
z1:=pred(z); {z1=表示する曜日}
writeln(x1,'月',y1,'日',z1,'曜日')
end.