第をか第 日 83 売囓たあみなる -0 12 あなたの疑問に答える Q & A ② 2 の倍数を表の中からすべて消す。 ー・エラトステネスのふるい ③ 3 は 1 とそれ自身でしか割れないから素数 ④ 3 の倍数を表の中からすべて消す ・間 ① ~ ④の作業で次のようになります。 工ラトステネスのふるいがというのはどういうことです ( 青森県田中明夫 ) 囘 3 4 5 6 7 8 9 ・回答 11 認 13 14 15 16 17 18 19 2@ 同じ様に考えて , 消されないものをみていくと , 、、エラトステネスのふるい″は , 紀元前 2 年ごろ , 5 は素数ーー巧の倍数を消す 工ラトステネスという人が考え出したといわれる , 7 は素数ーー 7 の倍数を消す 素数を求める方法です。 11 は素数ーー ) 11 の倍数を消す 素数の定義というのは , 1 とそれ自身でしか割り 13 は素数ーー 3 の倍数を消す 切れない数のことをいうのはご存じでしよう。たと 17 は素数ー→ 17 の倍数を消ナ えば , 31 などは素数です。 として , 素数は , 2 , 3 , 5 , 7 , 11 , 13 , 17 ・・・ 素数に関する問題には , と求まります。 ①ある数が素数であるかどうか ー②最初から " 個の素数を求める 素数はどんなに大きなところにもある , つまり最 大の素数というのは存在しないことが証明されてい ③ある数 N までの中で素数であるものを求める ます。大きな素数を求める方法としては、、エラトス などがあります。この③のケースに適当なのが , 工 テネスのふるい″の方法はあまり適していません。 彡ラトステネスのふるいによる方法です。 彡 最近はコンヒ。ュータを使って大きな素数 ( メルセ 2 ~ 20 までの数のうち素数であるものを求めてみ ンヌ素数 ) が求められています。 ます。まず 2 から 20 を書いてみます。 アメリカの高校生が見つけたと話題になったのが 2 3 4 5 6 7 8 9 10 221701 ー 1 で 6533 桁の数です。ついで 223209 ー 1 と 11 12 13 14 15 16 17 18 19 20 いう 6987 桁の素数が発見され , いちばん新しい最大 ① 2 は 1 とそれ自身でしか割れないから素数であ 彡 の素数は 244497 ー 1 で 13395 桁の数です。 か。
60 出題・ ( 学 ) 産業能率大学 実力チェック問題・ FORTRAN 結果の集計ク この、、誌上添削″コーナーは , 本誌言語講座で身につけた知識を , 実際の プログラミング問題で実力確認をするためのものです。問題だけでは解け ない読者は , ヒント 1 を , それで解けなければヒント 2 をみてください。 以下に示すある企業の入社試験志願者データがあ < 結果の印刷 > 装置番号 6 ります。これを読んで , 男女別 , 全体の受験率 , 合 JUKEN GOKAKU 格率 , 入社率を求めるプログラムを作りなさい。 ZENTAI XXX. X XXX. X こで求める各比率は öT 0 XXX. X XXX. X 志願した人一一一受験しなかった人 ( にタ件 ) I- 受験した人 öNNA 合格しなか XXX. X った人 l—ーー入社しな 合格した人 人 締切り朝第料月 30 白、 コンビ三トタ ) ヨ月 10 は = にかげる場合 NYUSHA ・・全体 XXX. X XXX. X ・・女 XXX. X 入社率 合格率 受験率 < ヒント 1 > この問題ではデータを 1 件読むごとに , 必要な件 数を数え上げる部分と , データをすべて読み終わっ た後 , 各比率を求め , 結果を印刷する部分に分ける ことができます。 ここで必要となる各件数とは男女別の志願者数 , 受験者数 , 合格者数 , 入社人数です ( 全体は , 男女 の和として , 後でも求められる ) 。 これらの各件数を単純変数に割り当てた場合や , 配列にした場合 , さらにサプルーチン副プログラム を用いるなど , いろいろな方法について考えてみま しよう。 < ヒント 2 > 工 1 工 1 工 5 工 5 工 1 ・最後のデータの次に志願者番号 99999 の終 以下プログラムの流れとしては , 次のように考え 了記録がある。 られます。 ・データに論理的矛盾はないものとする。 ①各件数の数え上げ領域を初期化しておきます。 ・データの意味 ②次にデータを読み込み , 各件数を数え上げます。 志願した人・・・ ・・・全データ このとき , データの構造を利用し , 例えば受験しな 受験した人・・・ ・・・筆記 , 面接欄のうち少なく ければ , 志願者を数えるだけで , 無条件に次のデー とも 1 つはゼロでない。 タを入力するという制御があるとよいでしよう。 ( 共にゼロであれば , 受験 ③以上を繰り返し , データがなくなった時点で , 各 しなかったものとする ) 比率を求め , 印刷します。このとき , 実数演算でな 合格した人・・・ ・・・合否欄がゼロでない ければ , 正しい比率が得られないこと , または分母 入社した人・・・ ・・・入社欄がゼロでない をゼロとする除算は実行時にエラーを起こすことな 性別・・ ・・ゼロ : 男ゼロ以外 : 女 どに注意しましよう。 において , 受験した人の数 受験率 = 志願した人の数 合格した人の数 合格率 = 受験した人の数 入社した人の数 入社率 = 合格した人の数 とします。 < 志願者データ > 装置番号 5 筆記 志願者番号 X 18 ー x 18 一 x 100 入社 合否 面接 性 工 5 ( 1 月号の問題は休み )
読上コ一イス勲 6 / ☆今月のことば ■マイコン応用特集を読みこなせ , ー、 ~ 、・〃 / 〃 / , 、 ~ 〃〃 / / , 、 ~ 衂 システム研究センター理事長・工学博士片方善治 マイコンの応用が各分野に広がるにつれていろいろな雑誌が 特集を組むようになった。しかし , その多くは中途半端に終わ っているような感じがする。我田引水のようだが , やはり本誌 のこのマイコン・スクールが一番充実しているのではないか。 一方 , 学会雑誌のマイコン特集は , 専門分野の人たちへ , よ り詳しい情報を提供していることを紹介しておきたい。たとえ ば , 計測自動制御学会の学会誌「計測と制御」の 9 月号は , 、、プ ロセス計装におけるマイクロコンヒ。ュータ″の特集を組んでい て , この分野における主要なマイコンの応用を網羅していて興 味深い。編集後記に , 「毎年マイコンを特集として取り上げて もよい」という意見があったことにふれていたが , おそらく今 後も各理工系学会雑誌に , マイコン応用特集が組まれることで あろう。それらを読みこなすためにも , このスクールでしつか りと基礎を身につけてほしい。 片方善冶ワ ☆今月の学習 ソフトウェアの基礎は , アセンプラ言語による応用プログラムの作成に入り ます。その第 1 回目は , 基本的な統計値である分散の求め方です。 ・ソフトウェアの基礎・分散を求めるプログラムの作成・・ ・マイコン新製品 / マイコン情報・ ・ MZ ー 80K トライ・ルーム 8 ^ 0 8 6 7 7- < マイコン・スクールのカリキュラム > 月 ソフトウェアの基礎 マイコンの言語 4 マイコン応用の世界 BASIC へのいざない 5 マイコンの構造と動作 BASIC 入門 ( 1 ) 6 ソフトウェアと言語 7 フ。ログラム作成の手順 8 加算サブルーチンの作成 9 アセンプラ言語 ( 1 ) 10 トライ・ルーム ( 1 ) 11 12 分散を求めるプログラム 4 1 【お知らせ】次号は情報処理技術者試験特集のため , ンフトウェアの基礎は休講させていただきます。
70 く片方善治の誌上マイコン・スクール > ソフトウェアの基礎 D : 分散 実は , この応用問題のために考えている加減乗除 の計算サプルーチンに , 次のような前提がありま す。 つまり , これらのサプルーチンで扱える数値デ ータは , 整数であり , 日常われわれが取り扱う小 数などを含んだ実数ではありません。ということ は , 小数点以下をもっているデータは扱うことが できず , 演算の結果小数が発生しても切り捨てら れることになります。 このことから , の一のように減算回数が多く なる演算方法では , 誤差が多くなります。これ は , このサブルーチン以外を使用する場合でも少 なからず問題となるところです。 そこで , ①式を次のように展開してみます。 1 1 1 分散 = ー ( 一の 2 ー野ーー工面十一嵳 ー ( 2 ー 2 工面十 2 ) ー 2 ー 2 十一 2 YES B = B 十 A を求める テを求める B = 0 START. ・ ¯N 注 ) = 1 から誘導 ②式をみると , 減算は 1 回ですみ , なおかっ , と各データ値が必要であり , 出力としては , 分散 図 4 に示すように , 入力としては , データ個数 か整理してみましよう。 ( 図 4 ) まず , 入出力データとしてどんなものがあるの みます。 は , データの入出力等の外まわりについて考えて ーチャートにより表されていますので , フ。ログラムの内部構造については , 図 3 のフロ 3. 1 プログラム設計 ストの各手順がありました。 フローチャート化 , コーディング , デバッグ・テ プログラミングの手順には , プログラム設計 , グしてみましよう。 図 3 のフローチャートに基づき , プログラミン プログラミング 図 3 にそのフローチャートを示します。 ②式をプログラム化してみましよう。 誤差が少なくなりそうです。 新とも 2 乗されますので数値は大きくなり , 入力 : データの個数 : 各データの値 ーは N か ? 0 ま = ま十 1 分散 プログラム 出力 分散値 図 4 必要な サブルーチン ・加算サブルーチン ・減算サブルーチン ・乗算サブルーチン ・除算サブルーチン C =B/N D = C ーエ 2 STOP 図 3 分散を求めるフローチャート② 入出力データ
物嵋 51 ワンポイント征服・ COBOL 纔型と二分脈 = テーブル・サーチで国鉄運賃を求める = 先月号では 2 次元テーブルの定義と集計のとり 方などを紹介したが , 今月は , 距離と運賃を対比 させた国鉄運賃一覧表から , 目的の運賃を探しだ す索表 ( テーブル・サーチ ) の 2 つのテクニック を紹介しよう。 高校 COBOL 研究会 3. 表の探索・一テーブル・サーチ 現在 , 国鉄の運賃は , 右下の表のように定められています。このとき , 次の図 1 のよう なレコードを入力して , 乗車距離に対する運賃を求め処理を考えながら , 表の利用の仕方 ( 一般に索表 - ーテープル・サーチという ) につい 乗車距離 (JöSHAKYöR 工 ) 0 4 8 6 て研究してみましょラ。 9 ( 4 ) 図 1 4 桁の乗車距離レコード ( 1 ) 3.1 線型探索 ( リニア・サーチ ) ( 2 ) ( 3 ) 文字どおり , 線型に , すなわち入力した距離数 ( 4 ) に相当する表の位置を上から順に , あるいは下か ( 5 ) ら順に探していく方法で , もっとも単純な方法と ( 34 ) 461 ~ 480 いえます。 ( 35 ) 481 ~ 58 上の「 0486 」の場合には , 表の上の位置から ( 5 の 961 ~ 1 , 网 探していき , 35 番目で該当する位置を見出し , 4 , 88 円を運賃として求めることになります。 2 , 921 ~ 2 , 960 ( 99 ) (IOO) 2 , 961 ~ 3 , 08 このとき , 表を構成しているひとつひとつのレ コード , たとえば 1 ~ 3 , 18 , 58 といったデー ア . lkm 未満は切り上げで計算している。 イ . この表は 3 , 000km までの部分を示している。 タの集まりをエントリ (entry) といい , 1 ~ 3 , 表 1 国鉄運賃一覧表 100 , 500 , といった項目をエントリ・フィール ド (entry field), また , この場合の距離のように表の索引に使用するキーの含まれた項目 を索引フィールド , その他の項目を内容フィールドと呼ぶのが一般的です。 したがって , 上の処理は , 入力された JöSHAKYöR 工によって , 索引フィールドの 距離の部分を見つけ , おなじ工ントリの内容フィールドを引きだす処理となることがわか ります。 円 距 CO 0 戸 0 0 1 1 っ 3 っ朝 1 4 1 ( 0 1 1 一 1 っ 1 18 120 140 4 , 78 4 , 88 7 , 68 16 , 88 17 , 网
☆ 10 月号実力チェック問題 高速道路において , 先行車が停止動作 ( プレーキをふんで車 を止めようとすること ) に入ってから , 何秒以内に後続車が停 止動作に入れば , 後続車が先行車に追突せずにすむか ( 以降こ れを最大許容時間という ) を求めるフ。ログラムを作りなさい。 こでは , 先行車の速度 = & ( km ) , 先行車の制動距離 = WI(m), 後続車の速度 = & ( km ) , 後続車の制動距離 = 幵 (m), 両車の車間距離 = 4 ( m ) , とすれば , 最大許容時間 ( の V Ⅵ十 4 ー W2 ・ 3600 秒 , として求める。 10g & これを図示すれば次図のとおりである。 は , t= < 10 月号問題の解答解説 > = 車間距離 , 速度別による追突防止の最大許容時間は ? = ・安の満の余裕時間 " SI = 80 S2 = 80 U = 10 なお制動開始から停 車するままでの制動距 離 ( ) は , 制動開始 時点の速度 ( & ) から 仮に , & < 100km / h な 圏咽 55 語講座 先行事 制動開始位置 : 停止位置 ら幵 = 0.7 & , Si2100km/h ならル↓ = 0.9 & として求め ることにします。 以上について , 先行車 , 後続車ともに 10 km/h きざみで 80 km/h から 120km/h まで , また両車の車間距離を 20 m きざ みで 10m から 90m までに変化させながら , そのすべての組 み合わせについて , 最大許容時間を印刷するものとします。 ( 出力データの形式 ) 様式は 10 月号問題参照。 川ⅢⅢⅢⅢⅧ創ⅧⅢⅢ旧劇ⅡⅡⅢⅢⅧⅢⅢ旧ⅧⅢⅢ旧創ⅧⅢⅱⅢⅢ川ⅡⅢⅢⅢⅡ編ⅧⅢ川ⅡⅡⅢⅢⅧⅢ川劇川ⅧⅢ膕ⅢⅢⅡにⅢⅧⅧ宿ーⅡ ( 学 ) 産業倉皀率大学岩田安雄 最近特に高速道路における追突事故が多発し , 問題と されていますが , 今回は , これにちなんだ問題です。 一般的に , 車両が停止動作に入ってから停止するまで のいわゆる制動距離は , 速度はもちろん , 車両重量 , 制 動装置やタイヤの良否 , 路面状態など , いろいろな要因 に影響されているといわれます。しかし , この問題では そのような現実を簡略化 , 模型 ( モデル ) 化し , 制動距 離を速度の関数として求めるわけですが , この関数も簡 フローチャート ーチャートのように 3 重のル ープを作ります。 に下表のように変化します。 車の速度 , 先行車の速度の順 ャートでは , 車間距離 , 後続 回り出すため , 左のフローチ 常にループは内側から先に く SI > く S2 > 略化したものです。 制 距 さて問題そのものの解説はさておき , ラムについて考えてみましよう。 1. データの発生 処 理 速度 さっそくプログ YES YES YES U = U 十 20 U 90 NO S2 = S2 十 10 S2W120 0 SI = S ー十 10 SI 120 NO 8 0 9 0 8 0 12 0 8 0 1 0 5 0 5 0 7 0 9 0 1 0 5 0 5 0 7 0 9 0 1 0 5 0 5 0 , 7 0 9 0 1 0 5 0 まず , ここではデータを , 外部から入力しないかわり にプログラム内で , データを発生させなければなりませ 両車の車間距離 後続車の速度 先行車の速度 ん。 4 ( 10 , 30 , 50 , 70 , 90 ) S 2 ( 80 , 90 , 18 , 110 , 120 ) S 1 ( 80 , 90 , 18 , 110 , 120 ) この発生すべきデータとその値は , 次のとおりです。 これらのすべての組み合わせを得るためには , 次のフロ △各変数の値の変化 それではざっそく山口さんのプログラムを見てみまし よう。 よってつくっています。 車間距離 ( 翻 ) の順に変化する 3 重ループを Dö文に こでは先行車の速度 ( KSI ) , 後続車の速度 ( KS2 ) ,
69 これは 分散 = ー ( 一の 2 B = A2 とが多く行われています。 次は , ( シグマと読みます ) ですが , 総和をとる意味の記号です。 は , 個々のデータの値 , つまり , 先の例では 各人の身長になります。は , 平均身長を表し , N は人数 ( データの個数 ) を表しています。 この式の意味を簡単に説明しましよう。 工↓ーエ まず , 数学や工学の世界では , このように 2 乗をとるこ 絶対値をとって加えていってもよいのですが , 均との差が全部プラスで表現されますね。 に 2 乗をとるわけです。こうすると , データと平 ナスのバラッキもバラッキとして意味をもつよう これではマズイので , プラスのバラッキもマイ るように選んだのが平均なのですから。 計していくとゼロになります。なぜなら , そうな マイナス ( 平均より小 ) があり , 単純にこれを合 これは , バラッキにはプラス ( 平均より大 ) と ( 一の 2 次に , ーっーっのデータのバラッキを表しています。 これは , 任意のデータと平均との差ですから , つまり , ( ーの 2 の意味は , 1 個のデータか ら平均をひいたものの 2 乗値を , 全データ分加算 するということです。これで全データのバラッキ が加算されたというわけです。 最後に , 1 個あたりのデータがどのくらいバラ ツイているかという , 本来の分散の尺度に戻すた めに , N で割るわけです。 分散のとりうる値は , 0 ~ 十までの範囲です。 分散がゼロということは , バラッキがまったくな く , 全部同じデータということになります。 2 式の展開どプログラムへの適用 ①式は , そのままでもプログラム化することが バラッキ バラッキ 分散が大 ( 赤ちゃんから大人まで ) 平均身長 できます。 題があります。 START C = 0 〒を求める それは , ( ーのの計算を N 回行うことです。 図 2 のフローチャートでは , 計算上ちょっと問 そのフローチャートを図 2 に示しましよう。 N : はあらかじめメモリー 上にセットしている。 平均身長 分散が小 ( 大人だけ ) バラッキ バラッキ ロ〇ロ C = C 十 B ーは N か ? NO YES D=C/N ・ STOP D : 分散 図 1 分散の考え方 図 2 分散を求めるフローチャート①
68 く片方善治の誌上マイコン・スクール > IHIIIIIIIHIIIIIIIHIIIIIIIHIIIIIIIHIIIIIIIHII!IIIIHIIIIIIIHIIIIIIIHIIIIIIIHIIIIIIIHIIIIIIIHIIIIIIIHIIIIIIIHIIIIIIIHIIIIIIIHIIIIIIIHIIIIIII> ソフトウェアの基礎 0 0 分散を求めるプログラムの作成 0 マイコンを現実に応用するとなると , いろいろな知識が必要となります。 今月は , 統計数値の一つである分散を求めるプログラムに挑戦します。 <IIIIIIIHIIIIIIIHIIIIIIIHIIIIIIIHIIIIIIIHIIIIIIIHIIIIIIIHIIIIIIIHIIIIIIIHIIIIIIIHIIIIIIIHIIIIIIIHIIIIIIIHIIIIIIIHIIIIIIIHIIIIIIIHIIIIIIIHIIIIIIIHIIIIIIIHIIIIIIIHIIIIIIIHIIIIIIIHIIIII でも , この用語を知らなくてもご心配なく。 われわれは , 統計の専門家になりたいわけでは はじめに なく , 単に命令の使い方の練習問題として取り組 皆さん , こんにちは。 11 月号までで , 8080A の主要な命令の機能と使 むわけですから / さて , この分散について大急ぎでその考え方を い方について理解されたことと思います。 今月号から , いよいよ応用問題に入りますが , 吸収しましよう。 分散という言葉からは , 、、バラバラ″とか , 、、チ その内容としては , 科学計算の問題 , 制御にかか わる問題 , 事務処理的な問題について取り上げる ラバリ″というような感じがイメージできますね。 統計でいう分散は , このバラバラの状態の度合 予定です。 いを表す一つの尺度として設けられたものです。 しかし , この主題は , あくまで今まで学んだ命 つまり , 「分散」は , ある値をとるもので , そ 令をどう使うかということの練習ですから , 中心 の数値の意味として値が大きければバラッキが強 の考え方の説明や新たな疑問の提示と学習にポイ く , 小さければバラッキが弱い ( 換言すると , ま ントをおいています。 とまっている ) というわけです。 今月号では , 科学計算の問題 ( ほんの入り口で もっと具体的な例で説明しましよう。例えば人 すが ) として「分散」について取り組んでみまし 間の身長を例にとると , 赤ちゃんから大人までの よう。この主題で , 皆さんは数値の取り扱いにつ 全人間の身長は「かなりのバラッキ」があります いて , まだまだ学習しなければならない部分があ が , 大人だけの身長というように範囲を限定すれ ることを発見されるでしよう。 ば , バラッキは少なくなります。それを統計学的 に表現すると , 前の例は分散が大きく , 後の例は 一分散ぎは 分散が小さいということになります。 さて , このチラバリの度合いは , 何からのチラ 、、分散″という用語を耳にされたことがあります か。この用語は , 統計という数学の一分野でよく バリなのでしよう。 使われるものです。 これは , 平均値からのチラバリの度合いなので す。前の例で考えると , ちょうど図 1 のようにな く執筆者 > 石川徹也・図書館短期大学文献情報学科 ります。 株式会社システム科学研究所 谷口啓ー こで , 分散を表す式を紹介しましよう。 株式会社システム科学研究所 川西弘志
1 1 0 -12 0 15 0 14 0 ・ 1 5 0 ・ 1 6 0 1 7 0 ユ 8 0 19 0 A ( 工 , 2 ) =A ( K , 2 ) : A ( 工 , 1 ) =A ( K , A ( K , 2 ) =w T : A ( K , 1 ) =WB N E X T K N X T 工 PR 工 NT 、、テンスウ″ , 、、バンゴウ″ : PR 工 N E N D N X T 工 PR 工 NT A ( 工 , 2 ) , A ( 工 , 1 ) FöR 工 = 1 Tö N 物嵋 DEF FNf ( ェ ) = 算術式 DEF (Define) は定義するという意味で , 81 F N 文番号 10 では次のように領域がとられます。 A ( 0. 0 ) ( 1 , 1 ) A ( 1 , 2 ) 未 用 (function name ・・・・・・関数名 ) として , アには変数 名 (A—ZZ まで ) と同じ名前をつけます。右辺 の算術式でえられた結果はこの名前に入れられる ことになります。 【例題 9 】 1 , 2 , 3 のいずれかを読みこんで 1 だった ら。 , 2 だったらみ , 3 だったら c の値を求めよ。ただ し , 。 , わ , c の関数は次式で与えられ , 工 , リ , 名の値 は入力するものとする。 0 = 工十 V2x2 十 1 み = 〃 2 十 V'2 ″ 4 十 1 c=sin 名十・、 / 2 毫贏事 ・プログラム 9 ・ 2 1 65 A ( 49 , A ( 49 , A ( 49 , A ( 50 , A ( 50 , A ( 50 , 0 ) 1 ) 2 ) 0 ) 1 ) 2 ) 49 100 70 50 文番号 50 では , こまれます。 文番号 60 では , 出席番号と点数が交互に読み 変数名が 2 つになっています 1 0 2 0 5 0 4 0 5 0 6 0 7 0 8 0 9 0 1 0 0 11 0 D F F N F ( X ) =X 十 S Q R ( 2 * X * X 十 1 ) 工 N P U T 、、 1 , 2 , 5 ? ″ ; 工 öN 工 Gö T 0 5 0 , 7 0 , 9 0 工 N P U T 、、 Z ? ″ ; Z G 0 T 0 2 0 工 N P U T 、、 Y 凵 ? ″ ; Y P R 工 N T 、、 A = 工 N P U T 、、 X 凵 ? ″ ; X G 0 T 0 110 P R 工 N T 、、 B = ″ ; Y * Y / F N F ( Y * Y ) : ; FN F ( X ) : G 0 T 0 2 0 E N D T 0 2 0 ー ; FN F ( S 工 N ( z ) ) : Gö P R 工 N T 、、 C ー がこの場合 , 内側のループの変数名が先にこなけ ればいけません。 文番号 170 では , 点数が先に出力されます。 データを並べかえる作業を分類 (sorting) とい います。大きい順あるいは小さい順に並べかえる ことを , それぞれ降順 Cdescending), 昇順 Cas- cending) といい , いくつものアルゴリズムが考 え出されています。他のアルゴリズムも勉強して , 効率の違いを調べるとおもしろいと思います。 8. 文関数 s 工 N ( x ) や c 0 s ( x ) のような標準関数とし てあらかじめ用意されている組込み関数以外に フ。ログラマ自身が任意の関数を定義して自由に使 用することができます。定義はプログラムのはじ めに一文だけ行いますのでフォートランではこの ような関数を文関数と呼んでいます。 文番号 1 0 で F という名の関数を定義しました 文番号 50 は , öN ・・・ ・・ G 0 T 0 文といって , 工 の値 ( この例では変数ですが算術式でも可 ) が 1 のとき 5 0 へ , 2 のとき 7 0 へ , というふうに G 0T0 以下に並んでいる文番号へとびます。 文番号 80 では , 関数に与える変数ェが y2 に代 えて FNf02) として , 文番号 1 0 0 では FN f(sinz) として計算されます。このように , 文関 数はひとつのプログラム中で同じ式か似かよった 式が何度も出てくる場合に有効です。 ( 宿題 ) ッ = 2 ー 3 ェ 3 十 4 ェ 2 ー 5 ェ十 6 について , ェ = 0 から 10 まで 0.2 きざみでの値を求め , その中の最大値 と最小値を求めよ。ただし , ツは文関数で定義すること。
56 10 月号問題の解答解説 【山口良孝さんのプログラム】 1 5 : 6 1 6 1 5 14 15 12 11 1 0 2 0 5 0 6 0 0 コンヒ。ュター カ″クシュー D 0 1 0 KU=10 , 9 0 , 2 0 D 0 2 0 K S 2 = 8 0 , 12 0 , 1 0 D 0 5 0 K S 1 = 8 0 , 12 0 , 1 0 工 F ( K S 1 ー 1 0 0 ) 11 , 12 , 12 KW 1 =K S 1 * 7 / 1 0 G 0 T 0 1 5 KW 1 =K S 1 * 9 / 1 0 工 F ( KS 2 ー 1 0 0 ) 14 , 1 5 , 1 5 K W 2 = K S 2 * 7 / 1 0 G 0 T 0 1 6 K W 2 = K S 2 * 9 / 1 0 N 0 ・ 1 0 M 0 N D A 工 Y . Y A M A G U C H 工 F L 0 A T ( 1 0 0 0 * K S 2 ) とする T = F L 0 A T ( ( K W 1 十 K U—K W 2 ) * 5 6 0 0 ) / T = ( KW 1 十 K U—K W 2 ) * K S 2 * 5 6 0 0 / 1 0 0 0 ←ーー WR 工 T ( 6 , 6 0 0 ) K S 1 , KW 1 , K S 2 , KW2 , KU , T N D S T 0 P C 0 N T 工 N U E C 0 N T 工 N U C 0 N T 工 N U E F öRMAT ( 1 H 0 , 2 0 X , 5 工 1 0 , 1 0 . 1 ) このように増分値を指定することにより , 10 間隔や 20 間隔の制御をすることができます。 なお各 Döの端末文を分けなければならないのは , 外 側のループから飛び込みがある場合だけで , つの端末文にまとめることもできます。 こでは 1 この分岐は内 ・・側に飛び込む ため文法ェラ す。 W= C 0 N ( 工 S ) * FL 0 A T ( S ) 工 F ( 工 S . G T . 2 ) 工 S = 2 ← 工 S= S / 1 0 0 十 1 DATA C 0 N / 0 . 7 , 0 . 9 / D 工 M E N S 工 0 N C 0 N ( 2 ) 工 N T G R S これは速度が nkm/h 以上 ではない。 ・にならないので必すしも必要 1 0 0 2. Dö 1 0 0 工 = 8 0 , 1 2 0 , 1 0 工 F ( 工 . G T . 1 0 0 ) G 0 T 0 1 0 0 ・ Dö 1 0 0 J= 8 0 , 12 0 , 1 0 C 0 N T 工 N U E 制動距離の計算 さて , 発生したデータにより余裕時間を求めるわけで すが , そのため先行車 , 後続車それぞれの制動距離を求 めなければなりません。 これは速度 (s) から s < 1 0 0 Ⅳ = の 5 > 1 0 0 として求めます。 山口さんのプログラムに もあるようにこの手続きを フローチャートに示せば右 のようになりましよう。 このように 1 0 0 を境界 として係数が変化するた のとき のとき = 0 . 7 4 = 0 . 9 S>IOO Ⅳ 0 W = 0.7S YES W = 0.9S め , その判定と算術式が 2 つ必要となります。そこで , この算術式を 1 つにまとめる方法を考えてみましよう。 先の式Ⅳ = の の 4 は , が 18 未満なら 0 ・ 7 , 5 が 18 以上なら 0 ・ 9 となりますから , この 2 つの定数を配列の初期値として おき , $ が 100 未満なら 1 , 18 以上なら 2 となるよう な添字式によって , この配列を引用すればよいわけで この制動距離を求める手続きは先行車 , 後続車の双方に 必要となるため , 同じ処理が繰り返されることになりま す。一般に処理の重複を避ける方法には次の 3 つがあり ます。 ①配列によるループ化 ②関数やサプルーチンによる手続き まず配列によるループ化について考えてみましよう。 * w ( 2 ) , U , T WR 工 T E ( 6 , 1 0 0 ) s い ) , w ( 1 ) , s ( 2 ) , 1 0 C 0 N T 工 N U E 1 5 w ( 工 ) = 0 ・ 9 * s ( 工 ) G 0 T 0 1 0 w ( 工 ) = 0 ・ 7 * s い ) 工 F ( S ( 工 ) . G . 1 0 0 . 0 ) G 0 T 0 1 5 w ( 工 ) = 0 ・ 0 D 0 1 0 工 = 1 , 2 引 6 マ 【今井哲さんのプログラム】 w ( 2 ) 先行車 , 後続車の制動距離 s ( 2 ) 先行車 , 後続車の速度 れぞれ次のように割り当てています。 こでは 2 つの配列 s ( 2 ) と w ( 2 ) を確保し , そ ることによって処理の重複を避けています。 今井さんのプログラムはこの配列を用いてルーフ。化す めようとするものです。 に , 2 要素の配列に格納しておき , 制動距離も配列に求 これは先行車と後続車の速度を別々の単純変数とせず