その9のプログラムは、整数10と0とを入力すると、「10 10 0 ?」と1行だけ出力するというものでした。この出力の後に、「The second input integer should not be zero.」(二番目に入力される整数は0であってはならない)という文を次の行に出力したいときには、
program kantan10(input,output); var i,j,s,d,p,q:integer; begin read(i,j); if j = 0 then begin writeln(i,i,0,'?'); writeln('The second input integer should not be zero.') end else writeln(i+j,i-j,i*j,i div j) end.
とすればよいのです。ここででてきた新しい事柄は、
if <式> then begin <文> ; <文> end else <文>
というbegin ... endという部分を含んだ形のif文です。
begin <文> ; <文> ; <文> ; <文> ; <文> end
は複合文と呼ばれる文です。この複合文の実行とは、内側にある文を左から順番に実行するということを意味します。これは実行文部と同じ形で、同じ意味をもっています。if文のelseのところに複合文を置くことはもちろんできますし、複合文の内部に更に複合文をおくこともできます。
if <式> then <文> else begin <文> ; <文> end
begin <文> ; begin <文> ; <文> end ; <文> ; <文> ; <文> end
次に実数の取り扱いについてみていくのですが、前の部分で紹介した、二つの整数の最大値を表示するプログラムkantan8を変更してみました。これは、二つの実数の最大値を表示するプログラムです。
program kantan11(input,output); var x,y:real; begin writeln('Please input two real numbers'); read(x,y); if x>y then writeln(x) else writeln(y) end.
kantan8とkantan11との違いは、
ということです。本質的に新しい事柄は
などがあります。実数というデータの種類を表現する型として、Pascalでは実数型が提供されています。その型名はrealです。実数型の変数の宣言の仕方は、整数型の変数の場合と同様です。
整数型の式の間で可能であった、実数型の式と実数式との大小比較も可能です。
例:x < y や x <> y + zなど
整数型の式の間では、加減乗除の演算ができましたが、実数型の式の間でも、加減乗除の演算が用意されています。但し、割り算については、別の記号「/」を用います。
例:x+y x-y x*y x/y
その他、sin(x)をはじめとして、いろいろな関数があらかじめ用意されていますが、それらについては後で紹介します。心得ておいてほしいこととしては、Pascalの世界では、整数型のデータと実数型のデータとは基本的には別物としてみなされているということです。
従って、Pascalでは整数の「いち」と実数の「一」とは異なる表わし方をします。整数は「1」と書きますが、実数では「1.0」というふうに書いて区別します。
ここまでの知識で、入力された五つの正の実数の最大値を出力するというプログラムを作成することができます。プログラムを作る前に考えておかなければならないこととして、五つの実数がすべて負であったときのことですが、そのときには最大値を0とすることにします。この仮定は若干作為的ですが、教科書の例題1.2に倣って定めました。
program kantan12(input,output); var x,max:real; begin max := 0; read(x); if x > max then max := x; read(x); if x > max then max := x; read(x); if x > max then max := x; read(x); if x > max then max := x; read(x); if x > max then max := x; writeln('maximum = ', max) end.
その12のプログラムでは…
program kantan12(input,output); var x,max:real; begin max := 0; read(x); if x > max then max := x; read(x); if x > max then max := x; read(x); if x > max then max := x; read(x); if x > max then max := x; read(x); if x > max then max := x; writeln('maximum = ', max) end.
if文「read(x); if x>max then max := x」が5回繰り返されていました。このような同一の文の繰り返しは、for文というものを使用するとうまく記述することができます。
program kantan12(input,output); var x,max:real; i:integer; begin max := 0; read(x); for i := 1 to 5 do begin read(x); if x > max then max := x end; writeln('maximum = ', max) end.
for文は一般には次のような形をしています。
for <変数名> := <式1> to <式2> do <文>
for文の意味は次の通りです。
<変数名>という名前の変数を(for文の)「制御変数(control variable)」と呼びます。kantan12のプログラムのなかのfor文の制御変数の変数名は「i」ということになります。<式1>を初期値(initial value)と呼び、<式2>を最終値(もしくは終値、final value)と呼びます。
上の例で勉強したfor文を使うと、級数の計算は簡単にできます。例えば
10 Σ i * i i=1
を計算しするプログラムは次のようになります。iが1から10まで増えていく間、 和の値がどうなっていくかという途中経過も表示します。
program kantan14(input,output); var i,sum:integer; begin sum := 0; for i := 1 to 10 do begin sum := sum + i; writeln(i,sum) end end.
sino% kantan14 1 1 2 3 3 6 4 10 5 15 6 21 7 28 8 36 9 45 10 55 sino%
for文を使う上でいろいろ注意すべきことはあります。一つには、制御変数は 変数宣言部で宣言しておかなければならないということです。for文の内部の 文のなかで、制御変数のなかの値を変更してはいけないという規則があります。 代入文などで勝手に変えると何がおこるか保証されていないのです。