今回は、多少なりとも実用(?)的なプログラムを作成すべく、データ処理プログラムを作ってみましょう。これは、キーボードからいくつか数値データを打ち込むと、そのデータ群に一定の処理を加えて出力する、という形式のプログラムです。入力したデータの平均値やら最大最小値やら偏差値やらといった統計的なデータを計算させても良いですし、データの中で順位付けをしたり、データがどういった傾向を持つか「分析」するプログラムを作ってみるのも面白いですね。 まず、数値データを入力する処理を考えてみましょう。INPUTで変数に数字を入力していく、という形になるのでしょうが、今回は一つではなくいくつもの数字を入れるんですよね。たとえば、3つのデータを入れるなら変数NUM1、NUM2、NUM3という変数を用意し 10 INPUT "1番目の数字:", NUM1 20 INPUT "2番目の数字:", NUM2 30 INPUT "3番目の数字:", NUM3 として数字を入力していく。4つならNUM1、NUM2、NUM3、NUM4という変数で同様のことを行い、5つなら……などとやるしかないのでしょうか? いくらなんでも、入力する数字の数だけ変数を用意したりINPUTするのは面倒なので、今回は配列を使ってみることにしましょう。配列とは、いくつものデータを一つの名前(配列変数名)で利用できる仕組みです。この配列を使うと、3つの数字の集まりにNUMという配列の名前をつけて、それぞれの数字をNUM(0)、NUM(1)、NUM(2)として使うことができるようになります。つまり、「配列名(番号)」という形ですね。 10 FOR I = 0 TO 3 20 INPUT " " + STR$(I) + "番目の数:", NUM(I) 30 NEXT と書くことができます(STR$()は、渡された数字を文字列に変換する関数)。ただし、配列を使う前には、DIMで配列の宣言をしておく必要があるので、実際のプログラムは以下のようになります。 10 DIM NUM(3) 20 FOR I = 0 TO 3 30 INPUT " " + STR$(I) + "番目の数:", NUM(I) 40 NEXT プログラムを実行し、適当な数字を入れてみましょう。そして、その後 PRINT NUM(1) などとして、実際に入力した数字が配列に記録されているか、確かめてみてください。 数字の入力ができたら、いよいよ入力した数字を使っていろいろな処理をやってみます。まず、入力された数字の合計でも求めてみましょうか。 入力された処理のデータでは、入力のとき同様FOR文で配列の各要素を処理する、という形が多いと思いますので、FOR文で変数SUMに配列の合計を求めるプログラムを書くと 50 SUM = 0 60 FOR I = 0 TO 3 70 SUM = SUM + NUM(I) 80 NEXT 90 PRINT "合計:" + SUM といった感じになるでしょう。まぁ合計を求めるだけなら、別に配列を使う必要はない(70行の処理を数字を入れるときに行っておけばよい)んですけどね(^^;。 次に、入力された(配列内の)各数字の「順位」を求めてみましょう。入力された数字(配列)の中で一番大きなものを1位、2番目に大きな数字を2位、などと表示していくわけです。 配列の中にある数の「順位」とは、言い換えれば「配列の中にその数より大きな数がいくつあるか」ということですね。より大きな数が一つもなければ、その数が1位になりますし、大きな数が1つあれば2位になる。つまり、「より大きな数の個数+1」を順位とすればよいでしょう。 10 DIM NUM(3) 20 FOR I = 0 TO 3 30 INPUT " " + STR$(I + 1) + "番目の数:", NUM(I) 40 NEXT 50 I = 0 60 JUNI = 1 70 FOR J = 0 TO 3 80 IF NUM(J) > NUM(I) THEN JUNI = JUNI + 1 90 NEXT 100 PRINT " " + STR$(I + 1) + "番目の数の順位:" + STR$(JUNI) このプログラムを、50行目のIの値を1,2,3と変えながら実行してみましょう。また、Iの値を0から3まで順番に変える、つまりFOR文を使うと 10 DIM NUM(3) 20 FOR I = 0 TO 3 30 INPUT " " + STR$(I + 1) + "番目の数:", NUM(I) 40 NEXT 50 FOR I = 0 TO 3 60 JUNI = 1 70 FOR J = 0 TO 3 80 IF NUM(J) > NUM(I) THEN JUNI = JUNI + 1 90 NEXT 100 PRINT " " + STR$(I + 1) + "番目の数の順位:" + STR$(JUNI) 110 NEXT といった配列内の各要素の順位を順番に表示していくプログラムを書くこともできます。 |