質問<1085>2003/1/20
from=まー太郎
「プログラム」


次のプログラムの意味を教えてください。
program test(input,output);
var  i,j,n,s:integer;
begin
  read(n);
  s:=0;
  i:=1;
  j:=1;
  while i<=n do
    begin
      s:=s+J;
      i:=i+1;
      j:=j*(-1)
    end;
   writeIn('n=',n:3,'のときs=',s:5)
 end


お便り2003/1/21
from=phaos


これは Pascal の program ですね。
program test(input, output)
これは program の名前が test で, 入出力を行うものであることの宣言です。
var i,j, n, s: integer
これは整数の変数として i, j, n, s を使うということを宣言しています。
begin
program 本体の開始。
read(n)
端末から一つ読んで来て, 変数 n に格納します。
s := 0
s に 0 を入れます。
i := 1
i に 1 を入れます。
j := 1
j にも 1 を入れます。
while i <= n do
 begin
 end
i が n 以下の時に begin と end の間を実行します。
ここの中で i が一つずつ大きくなっている (i := i + 1) ので
n 回 loop を回っていることになります。
j := j*(-1) ですから j は 最初 1, 次に -1 という具合に, 
1 と -1 を行き来します。
従って
s は最初 1, 次に 0, 次に 1, 次に 0 というように,
n が 1 ならば 1, n が 2 ならば 0, n が 3 ならば 1, ...
となりますが n が 0 以下なら何もしないので s が 0 のままです。
writeln('n=',n:3,'のときs=',s:5)
これは 「n=」 と書いたあと, n の値を 3 ます使って書き,
「のときs=」 と書いたあと, s の値を 5 ます使って書き,
改行して終了します。

program 自体は実質的には
n が 0 以下の場合は 0, それ以外は n を 2 で割った余りを
出していることになります。

※これは数学の質問<1021>の問1の答でもあります。