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