曜日の判定

課題 年月日を入力して曜日を判定するプログラム

Kimland氏提供。僕の作成したものと見比べると勉強になるのでは、と思います。

program week;
{$APPTYPE CONSOLE}
uses
SysUtils;

var y,m,d,year,youbi:integer;
yj:array[0..6] of string;
procedure dagain; //適切な数字を入力させるよう指示する
begin
writeln('正しい数を入力してください。');
readln(d);
end;
begin
writeln('年、月、日を入力してその日の曜日を求めます。');
writeln('年を入力してください。');
readln(y);
writeln('月を入力してください。');
readln(m);
if (m<1) or (m>12) then begin
repeat
writeln('正しい数を入力してください。');
readln(m);
until (m>=1) and (m<=12);
end;
writeln('日を入力してください。');
readln(d);
if (m=1) or (m=3) or (m=5) or (m=7) or (m=8) or (m=10) or
(m=12) then begin
if (d<1) or (d>31) then begin
repeat dagain until (d>=1) and (d<=31);
end;
end
else if (m=4) or (m=6) or (m=9) or (m=11) then begin
if (d<1) or (d>30) then begin
repeat dagain until (d>=1) and (d<=30);
end;
end
else if m=2 then begin
if ((y mod 4=0) and (y mod 100<>0)) or (y mod 400=0) then  //閏年の判定
begin
if (d<1) or (d>29) then begin
repeat dagain until (d>=1) and (d<=29);
end;
end
else if (y mod 4<>0) or ((y mod 100=0) and (y mod 400<>0))
then begin
if (d<1) or (d>28) then begin
repeat dagain until (d>=1) and (d<=28);
end;
end;
end;
if (m=1) or (m=2) then begin
y:=y-1;
m:=m+12;
end;
yj[0]:='日'; yj[1]:='月'; yj[2]:='火'; yj[3]:='水';
yj[4]:='木'; yj[5]:='金'; yj[6]:='土';
year:=y+(y div 4)-(y div 100)+(y div 400);
youbi:=(year+((13*m+8)div 5)+d)mod 7;
writeln('その日は',yj[youbi],'曜日です。');
readln
end.

プログラムの説明
年、月、日を入力して、曜日を表示させるプログラムを作成した。今までの総復習ということで、できるだけ多くの種類の構文を使いプログラムを作成した。
工夫した点は手続き、配列、関数を用いることで、プログラムの簡略化に努めた点である。

もどる

SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送