ここからは、いよいよ実際にプログラミングを行ってみましょう。まずは、基本事項を扱います。
最初に、リニアンプロセッサーの画面を最大化しましょう。すると、画面内容がプログラミングに適したデザインに変化します。
このように、INPUTエリアがかなり大きくなりました。ここにプログラムを記述していきます。なお、INPUTエリアの文字サイズは、「Ctrl」+「U」キーで大きく、「Ctrl」+「D」キーで小さく調整できます。
ところで、リニアンプロセッサーは、INPUTエリアの記述内容が、数式か、それともプログラムなのか、一体どうやって判断しているのでしょうか? その答えは、セミコロン記号「 ; 」の有無です。つまり、INPUTエリアの記述内容がセミコロン記号「 ; 」を一個でも含む場合、それは数式ではなく、VCSSLによるプログラムと見なされます。
それでは、まずは何かしらの値を、OUTPUTエリアに表示してみましょう。INPUTエリアに以下のように記述し、「 = 」ボタンを押してください。プログラムが実行されます。
最後のセミコロン記号「 ; 」は忘れがちなので、注意してください。必ず必要です。 実行した結果、OUTPUTエリアに以下のように表示されます。
- OUTPUT -100.0
なお、実行したプログラムを終了させるには、もう一度「 = 」ボタンを押します。
さて、上の例では、output関数を呼びました。この関数は、sin関数やcos関数のように値を返すものではなく、呼ぶ事自体に意味がある関数です。とにかくoutput関数は、呼ばれると、引数の内容をOUTPUTエリアに表示するという機能を持っているのです。
ところで、OUTPUTエリア以外にも、値を表示する事ができます。以下のプログラムを実行してみてください。
- INPUT -このプログラムを実行すると、OUTPUTエリアに「 100.0 」と表示され、CONSOLEエリアに「 200.0 」と表示され、さらに画面中央にメッセージウィンドウが出現し、「 300 」と表示されます。
この例のように、複数行の処理を記述すると、上の行から下の行へ、順番に実行されます。この性質は全ての基本なので、よく把握しておきましょう。
続いて、簡単な計算を行ってみましょう。以下のように記述し、実行してみてください。
実行すると、OUTPUTエリアに以下のように表示されます。
- OUTPUT -0.5
このように、正しく計算できました。
ただし、ここで一つ、注意が必要な点があります。 それは、「 数値には小数点を付けておく 」という点です。もし、小数点を省略したらどうなるのでしょうか? 実際にやってみましょう。
- INPUT -実行すると、OUTPUTエリアに以下のように表示されます。
- OUTPUT -0
このように、0.5ではなく、0と表示されてしまいました。これはなぜでしょうか?
実は、VCSSLをはじめとする多くのプログラミング言語では、整数同士の除算( 割り算 )の結果は、整数になるというルールがあります。そのため、0.5の小数点以下が切り捨てられて、0になってしまったのです。
そこで、特に除算の際などは、数値の末尾に小数点をつけて、整数ではなく小数にしておく事で、この問題を防ぐ事ができるというわけです。
計算結果は、変数に格納する事ができます。例として、「 value 」という名前の変数に計算結果を格納し、表示してみましょう。
- INPUT -※ダブルスラッシュ「 // 」より右は、コメントとして無視されます。
変数を用意する行で、先頭に「 float 」というキーワードが存在します。これは、小数を扱う変数を用意する事を意味するキーワードです。 他にも、整数を扱う事を意味する「 int 」などがあります。
実行すると、OUTPUTエリアに以下のように表示されます。
- OUTPUT -1.5
このように、変数に計算結果を格納する事ができました。
変数を使う事で、プログラム実行中に、ユーザーに値を入力してもらう事ができます。それには、以下のようにinput関数を使用します。
- INPUT -実行すると、ユーザーが入力した値がそのまま出力されます。
なお、上のinput関数のように、文字列を引数とする関数も存在します。プログラム中で文字列を記述する際は、必ずダブルクォーテーション記号「 " 」で挟まなければいけないというルールがあります。慣れない間は忘れがちなので、ご注意ください。
変数に格納されている数値に応じて、処理を分岐させたい場合があるかもしれません。それには、if 制御構文( if 文 )を使用します。以下のように記述し、実行してみてください。
- INPUT -このプログラムを実行すると、入力した値が3.0以上か、未満かを答えてくれます。
このように、if 制御構文では、( ) の中に記述した条件が成立した際に、その直後の { } の中身の処理が実行されます。反対に、条件が成立しなかった場合は、その後の else{ } の中身が実行されます。
なお、条件には以下のような種類があります。
- 条件の種類 -
a <= b … aがb以下か?
a < b … a がb未満か?
a == b … aとbが等しいか?
a != b … aとbが異なるか?
続いて、条件が成立している間、処理を繰り返させてみましょう。それには、while制御構文( while文 )を使用します。以下のように記述し、実行してみてください。
- INPUT -実行すると、CONSOLEエリアに以下のように表示されます。
- CONSOLE -繰り返し中 … 0 繰り返し中 … 1 繰り返し中 … 2 繰り返し中 … 3 繰り返し中 … 4 繰り返し中 … 5 繰り返し中 … 6 繰り返し中 … 7 繰り返し中 … 8 繰り返し中 … 9 繰り返し中 … 10 繰り返しから脱出しました
このように、while 制御構文では、 ( ) の中に記述した条件が成立している間、ずっと { } の中身の処理が繰り返されます。
上のように、一定の回数だけ処理を繰り返すような場合は、while制御構文よりも、for制御構文( for文 )を使用したほうが、シンプルに記述できます。実際に使ってみましょう。
- INPUT -実行すると、CONSOLEエリアに以下のように表示されます。
- CONSOLE -繰り返し中 … 0 繰り返し中 … 1 繰り返し中 … 2 繰り返し中 … 3 繰り返し中 … 4 繰り返し中 … 5 繰り返し中 … 6 繰り返し中 … 7 繰り返し中 … 8 繰り返し中 … 9 繰り返し中 … 10 繰り返しから脱出しました
このように、先ほどと全く同じ結果が得られました。for制御構文の ( ) の中身は、以下のような意味を持っています。
- for制御構文の形式 -このように、一定の回数繰り返すのに必要な、カウンタ変数の用意や、加算していくような処理を、 ( ) の中にまとめて記述する事ができます。
変数は通常、1つの値しか格納できません。しかし、多くの値を格納できる、「 配列 」というものも存在します。配列は、
- 配列宣言の形式 -などと宣言します。そして、例えば3番目の要素に値を格納したければ、
- 配列の要素へのアクセス -などとします。
ここで注意が必要なのは、使用できる要素の番号は、[ 0 ]番目から、[ 要素の個数-1] 番目までであるという事です。[ 要素の個数 ]番目は、容量オーバーで使用できません。
例として、5個の値を格納できる配列を使用してみましょう。以下のように記述し、実行してみてください。
- INPUT -実行すると、CONSOLEエリアに以下のように表示されます。
- CONSOLE -0.0 1.0 4.0 9.0 16.0
このように、配列valuesに、5つの値を格納できた事が分かります。
本章の最後として、数値ファイルの入出力を扱います。これまでと比べて少し難しいですが、便利なのでぜひマスターしましょう。
ファイル入出力を行うには、まず、実行するプログラムを適当な場所に保存しておく必要があります。これは、その場所と同じフォルダ内で入出力が行われるためです。メニューバーから
「 File 」メニュー > 「 Save File ― 保存 」メニュー
を選択し、適当な場所にプログラムを保存してください。ENCODEはAUTOでかまいません。
まずは、ファイル出力を行いましょう。最初に、openw関数でファイルを開き、そのファイルのIDを整数の変数で取得します。そして、writeln関数で内容を書き出し、最後にclose関数でファイルを閉じます。
- INPUT -実行し、「 書き込み完了 」と表示されたら、プログラムと同じフォルダに生成されている、「 test.txt 」というファイルを、テキストエディタで開いてみてください。
- test.txt -0 0 1 1 2 4 3 9 4 16
このように、ちゃんと書き込めました。
続いて、今度はこのファイルを読み込んでみましょう。まずopenr 関数でファイルを開き、そのファイルのIDを整数の変数で取得します。続いて、countln関数でファイル行数を取得します。そして、readln関数で一行の内容を読み込んで配列に格納し、最後にclose関数でファイルを閉じます。
- INPUT -実行すると、CONSOLEエリアに以下のように表示されます。
- test.txt -0 0 1 1 2 4 3 9 4 16 読み込み完了
このように、ちゃんと読み込めました。