[更新日]1998.11.06
問9 次のFortranプログラムの説明及びプログラムを読んで、設問に答えよ。
〔プログラムの説明〕
手持ちのくじ番号を記録したファイルと発表された当選番号を記録したファイルの 二つを比較し,当たりくじを選び出して出力する。
(1) ファイル temochi.dat には手持ちのくじ番号(図 1 )が, ファイル atari.datには発表された当選番号(図 2 )が,1 レコードに一つずつ左詰めで 書き込まれている。両ファイルとも最初のレコードには,データの個数が書き込まれている。この二つのファイルから手持ちのくじ番号を配列 p に,当選番号を配列 q に読み込む。
(2) くじ番号は 6 けたであって先頭の 1 けたが英字,その後の 5 けたが数字で ある。当選番号は 6 けた以下の x けたであり,くじ番号の下 x けたが 一致した場合に当選と判断する。当選番号が 6 けたの場合は 1 等賞,5 けたの場合は 2 等賞というように,6 等賞まである。重複して当選 (例えば,下 2 けた“15”の 5 等と下 3 けた“315”の4等の両方が当選) した場合は、けた数の多い方(この場合は4等)だけを当選とする。
(3) 当選番号のけた数を調べるために組込み関数 len_trim(s) を用いる。 len_trim(s) は,文字列 s から右端の空白文字を取り除いた文字長を返す。
(4) 当たりくじのそれぞれについて,それが何枚目で何等賞かを出力する。最後に各賞ごとに当たりが何枚であったかを出力する(図 3 )。
図3 出力例
〔プログラム〕
program main integer, parameter :: KETA=6 character(len=KETA), dimension(100) :: p, q character(len=KETA) :: s1, s2, s3 character(len=12), parameter :: fname1 = 'temochi.dat' character(len=12), parameter :: fname2 = 'atari.dat' integer, dimension(KETA) :: atari=0 integer i, j, n, m, n1, n2, match, prize open(7, file=fname1) ! ファイル 'temochi.dat' の読込み read(7, *) n read(7, '(a)') (p(i), i=1,n) close(7) open(8, file=fname2) ! ファイル 'atari.dat' の読込み read(8, *) m read(8, '(a)') (q(i), i=1,m) close(8) n1=KETA do i=1, n match=0 do j=1, m n2=len_trim(q(j)) s1=p(i)() s2=q(j) if(s1==s2 .and. ) then match=n2 s3=s2 end if end do if(match > 0) then prize= write(*,100) i, trim(p(i)), trim(s3), prize 100 format(' ',i3,' 枚目の ',a,' は ',a,' と合致して ', & & i2, ' 等賞です ') atari(prize) = atari(prize) + 1 end if end do write(*,110) (i, atari(i), i=1, ) 110 format(' ',i2,' 等賞の当たりくじは ',i3,' 枚です ') end program main
a に関する解答群
ア 1:match イ 1:n1 ウ 1:n2
エ n1:n1-n2+1 オ n1-n2+1:n1 カ n2:1
b に関する解答群
ア n2 == match イ n2 < match ウ n2 > match
エ n2 == n1 オ n2 < n1 カ n2 > n1
c に関する解答群
ア KETA+1-match イ KETA+1-n2 ウ KETA-match
エ KETA-n2 オ match カ n2
d に関する解答群
ア KETA イ m ウ match
エ n オ prize