次のような1ヶ月分の家計の支出データがある。
このデータの支出費目数と各費目の金額を読み込んで、各費目の支出合計に対する割合(パーセント)を計算するプログラムを作成する。 この例題の処理手順(アルゴリズム)を次に示します。
このデータの例では、各費目の金額が費目の数だけ並んでいます。このように一連のデータを扱う場合は配列を使用するとプログラムが作成しやすくなります。次に 1次元配列を使用したプログラムの例を示します。
このプログラムで使用されている主な文を説明します。 4行目 integer a(20),kei,n,i integer文を用いて、寸法が 1から 20 の配列 a と変数 kei、n、i を整数型と定義します。 5行目 real per real文を用いて、変数 per を実数型と定義します。 6行目 data kei/0/ data文を用いて、変数 kei に初期値ゼロを設定します。 9行目 read(*,*) n read文を用いて、変数 n に標準入力装置(ここではキーボード)からデータを読み込みます。この例では n は支出費目数です。 11行目 read(*,*) (a(i),i=1,n) read文を用いて、配列 a の1番目から n 番目の要素( a(1)からa(n) )にデータを読み込みます。 13行目 do 20 i=1, n 14行目 kei=kei+a(i) 15行目 20 continue 13行目から15行目が費目の合計を求める部分です。合計は、a(1)+a(2)+a(3)+・・・+a(n) ですが、n の値が大きくなると、この式では記述しきれなくなります。そこで次のように考えます。 kei=0 keiの初期値をゼロとしておく kei=kei+a(1) i=1の時 kei=0+a(1) 右辺のkeiの値はゼロ kei=kei+a(2) i=2の時 kei=a(1)+a(2) 右辺のkeiの値はa(1) kei=kei+a(3) i=3の時 kei=a(1)+a(2)+a(3) 右辺のkeiの値はa(1)+a(2) : kei=kei+a(n) i=nの時 kei=a(1)+a(2)+・・・+a(n) 右辺のkeiの値はa(1)+a(2)+・・・+a(n-1) これを do文を使用して13行目から15行目までのように記述します。doは、do文の次の文から、do文で指定された文番号を持つ文(端末文)までの範囲を do変数(ここでは i)の指示にしたがって繰り返します。 17行目 do 30 i=1, n 18行目 per=real(a(i))/real(kei)*100.0 19行目 write(6,*) i,a(i),per 20行目 30 continue 17行目から20行目は、各支出費目について割合(%)を計算し結果を出力する部分です。17行目のdo文で、20行目の文番号30のcontinue文までを do変数 i について1から n まで繰り返すことを記述しています。 21行目 write(6,*) n, kei write文で、支出費目の数(変数n)と支出合計(変数kei)を標準出力装置に自由書式で出力しています。 このプログラムを翻訳し実行してみます。実行時には、まずディスプレイに文字列「支出費目数を入力する」を表示してデータの入力を待っていますので、支出費目数を入力します。次に入力した費目数と文字列「 費目の金額を入力する」を表示してデータの入力を待っていますので、費目の金額を順番にカンマ , か空白で区切って入力します。 装置番号6(ここではディスプレイ)に出力される実行結果は、 1 55210 23.3935719 2 87000 36.8636246 3 12650 5.36005592 4 23400 9.91504383 5 5200 2.20334315 6 3220 1.36437786 7 15000 6.35579777 8 13610 5.76682711 9 0 0.00000000 10 3925 1.66310036 11 16790 7.11425591 11 236005 となります。自由書式では見やすく列を揃えて出力することはできません。出力の形式を整えるには書式仕様を定義する必要があります。 例題3a) のプログラムを、データの支出費目数と各費目の金額をファイル(ファイル名reidai3.dat)から読み込むように修正する。 プログラムの例とデータファイルの内容を示します。
例題3a)のプログラムを修正した部分を説明します。 データをキーボードから入力する部分をファイルから入力するようにします。 9行目 open(11,file='reidai3.dat',status='old') 10行目 read(11,*) n 11行目 read(11,*) (a(i),i=1,n) 12行目 close(11) 9行目はopen文です。データファイル(ファイル名 reidai3.dat)を装置番号11の装置に接続し、 20行目 write(6,101) i,a(i),per 23行目 101 format(i5,i8,f6.1) 20行目のwrite文では出力結果を見やすくするため、書式を指定しています。 22行目 write(6,101) n, kei 22行目のwrite文で、支出費目の数(変数n)と支出合計(変数kei)を文番号101 の format文の書式仕様にしたがって標準出力装置に出力します。 プログラムを翻訳し実行してみます。実行時にファイルreidai3.datが必要です。このリンクreidai3.datを右クリックし表示されたメニューの、「対象をファイルに保存」を選び各自のプログラムと同じ場所(フォルダ)にそのファイル名のまま保存します。ファイルの内容を確認したい時は秀丸エディタで開きます。 装置番号6(ここではディスプレイ)に出力される実行結果は、 1 55210 23.4 2 87000 36.9 3 12650 5.4 4 23400 9.9 5 5200 2.2 6 3220 1.4 7 15000 6.4 8 13610 5.8 9 0 0.0 10 3925 1.7 11 16790 7.1 11 236005 となります。 |