【コラム】

Hello Worldコレクション

23 C言語とは違う、独自のプログラミング作法をマスターする - Pascal編

    山森丈範  [2008/12/26]

    PascalのHello World

    第23回は、Pascalを使ったHello Worldです。Pascalでは、リスト1のようにwritelnを使って記述します。文字列はシングルクォートで囲みます。writelnでは、文字列の後に改行コードが自動的に付加されます。

    Pascalでは、プログラムのブロックをbegin~endで囲みます。これは、C言語での{ ~ ;}に相当します。プログラムの最後のendには、ピリオドを付けて終了します。

    リスト1 writelnを使う(pascal_writeln.p)

    Pascalのコンパイラとして、本稿ではPascalのソースをC言語に変換するp2cというソフトを使い、変換後のC言語をgccでコンパイルするという方法をとっています。このp2cには、PascalからC言語への変換と、gccでのコンパイルを自動的に行うp2ccというPerlスクリプトが付属しており、実行例1のようにp2ccコマンドを実行すれば、一気にPascalのコンパイルが行えます。

    実行例1 Pascalのコンパイルと実行

    writeを使う

    writelnではなく、writeを使うと改行なしでの出力ができます。リスト2では、writeを使って改行なしで文字列を出力しています。その後、writelnを引数なしで実行し、改行のみを出力しているため、結局、前掲リスト1とまったく同じ出力が得られます。

    なお、Pascalでは、C言語とは異なり、セミコロンは文と文の区切りに入れれば良いため、endの直前の文(リスト2ではwriteln)の後ろにはセミコロンは不要です。

    リスト2 writeを使う(pascal_write.p)

    文字列型変数に代入

    少しプログラムらしく、文字列をいったん文字列型変数に代入してからwritelnで出力するようにしてみましょう(リスト3)。Pascalでは、変数はvarを使って宣言し、変数名の後ろにコロン(:)で区切って変数の型を記述します。string[11]は、長さ11の文字列型を意味します。また、Pascalでは代入の記号は「=」ではなく、「:=」になります。

    リスト3 文字列型変数に代入(pascal_string.p)

    文字列を連結してみる

    さらに、文字列を分割して2つの変数に代入したあと、それらを連結してみましょう(リスト4)。Pascalでは、文字列に対して、単純に足し算を行うことにより、文字列の連結を行うことができます。

    リスト4 文字列を連結してみる(pascal_string2.p)

    配列を使う

    今度は、文字列ではなく、配列を使ってみましょう(リスト5)。Pascalでは、C言語とは違って、文字型の配列は文字列とは異なります。

    ここでは、要素数11の文字型配列messageを宣言し、同時に各要素をHello Worldの文字で初期化しています。C言語の文字列とは違って、終端に0のヌル文字が付いていないことにも注目してください。終端の0がなくても、writelnを実行すると、文字型配列messageの型からその要素数が11であることが言語的に判断できるため、文字列は正しく出力されます。

    リスト5 配列を使う(pascal_array.p)

    forを使ったループ

    さらにプログラムらしく、ループを使ってみましょう。まずはforを使ったループです(リスト6)。

    ここでは、前項と同様に文字型配列を宣言し初期化したあと、その各要素の文字を1文字ずつ、forループで出力しています。forループ中では、改行が出力されないようにwriteを使い、forループを抜けたあとに、writelnで改行のみを出力しています。

    なお、このforループの中には、文としてwriteという1つの文しかないため、forループ本体を囲むbegin~endは省略してもかまいません。ただし、省略する場合はwrite()の直後にセミコロンを付ける必要があります。

    リスト6 forを使ったループ(pascal_for.p)

    whileを使ったループ

    前項のforループをwhileループに書き換え、さらに文字型配列の最後の要素に終端を表す0を付加し、この0を見てループの終了を判定するようにしたのがリスト7です。文字型配列の要素数は1つ増やして12で宣言します。

    whileループでは、条件が真である限りループが実行されます。ここでは、配列の要素が0ではないことを条件にしていますが、判定に使っているC言語での「!=」に相当する演算子は、Pascalでは「<>」になります

    リスト7 whileを使ったループ(pascal_while.p)

    repeat~untilを使ったループ

    Pascalにはrepeat~untilというループもあります。これはC言語でのdo~whileに相当するループで、ループ条件の判定がループの最後に行われ、最低1回はループ内容が実行されます。

    前項のwhileループを、repeat~untilに書き直したのがリスト8です。C言語のdo~whileとは真偽判定が逆で、untilのところに書かれた式の値が真になると、ループを終了します。

    ここでは、配列の要素が0であることを終了条件としていますが、判定に使っているC言語での「==」に相当する演算子は、Pascalでは単に「=」になります。

    なお、repeat~untilのループ内には複数の文が書けるので、ループ部分をbegin~endで囲む必要はありません。

    リスト8 repeat~untilを使ったループ(pascal_repeat.p)

    さいごに

    「Hello Worldコレクション」は、今回をもって終了です。もちろん、世の中にはもっと多数のプログラミング言語が存在し、連載で取り上げたプログラミング言語は、その中のごく一部に過ぎません。連載に登場していないプログラミング言語のHello Worldプログラムについては、みなさん、および今後の筆者自身の課題としたいと思います。

    関連したタグ

    新着記事

    特設サイトの情報

      人気記事

      一覧

        イチオシ記事

        新着記事

        特別企画

        マイナビニュースマガジン