Comments
Description
Transcript
11月24日課題の解答
11月24日課題の解答 問題1 半径rをキーボードから入力し,円周(2πr),円 の面積(πr2),球の体積(4πr3/3)を求め,次の例のよ うに出力するプログラムを作成せよ.ただし,円周率は 3.14159とせよ. 例 HANKEI=○○○.○○ ENSHU=○○○○.○○ MENSEKI=○○○○○.○○ TAISEKI=○○○○○○.○○ 出力は,いずれも小数点以下2桁とする. 作成したプログラムおよび半径rの整数部を自分の誕生月, 小数部を誕生日としたとき(11月25日なら11.25を代入)の 出力結果を印刷して提出しなさい. 1 問題の観点 キーボードから変数の値を正しく入力できるか 簡単な計算(四則計算,べき乗)ができるか 算術演算子の優先順位を認識しているか 指定された形式で出力できるか 解答例 2 問題2 以下のプログラムは、整数(簡単のため二桁以内の数とす る)を成分とするベクトルA, Bの内積を計算し出力するものである. integer jigen, naiseki real a(2:100), b(2:100) open(10,file='vec.txt', status='old') read(10,100) jigen read(10,110) (a(i), i=1, jigen) read(10,110) (b(i), i=1, jigen) close(10) naiseki= 0 do 10 i=1, jigen naiseki = a(i)*b(i) 10 continue write(6,*) naiseki 100 format(i4) 110 format(2i4) end 問題の観点 ・FORTRANプログラムを読むことができ、その内容 を理解できる ・ プログラム中のミスを見つけ出し、訂正できる 3 (1)上記のプログラムの間違い三点を訂正せよ。 integer jigen, naiseki, i integer a(1:100), b(1:100) open(10,file='vec.txt', status='old') read(10,100) jigen read(10,110) (a(i), i=1, jigen) read(10,110) (b(i), i=1, jigen) close(10) naiseki= 0 do 10 i=1, jigen naiseki = naiseki+a(i)*b(i) 10 continue write(6,*) naiseki 100 format(i4) 110 format(2i4) end (2) Aの成分を (1, 5, 10)とし、Bの成分を自分の学籍番号 の数字を左から二桁ずつとったもの(例えば,04T2300Xな らばB=(4, 23, 0))として内積を計算する場合に、入力デー タvec.txtの内容を書け(フォーマットに気をつけ、空白文字 はわかり易いよう_(下線)により表すこと)。 ___3 ___1___5 __10 ___4__23 ___0 4 中間試験の解答 問題 1 三角形の面積 S は、三辺の長さ a 、 b 、 c から次式(ヘロンの公式)で計算できる。 S = s ⋅ (s − a ) ⋅ (s − b ) ⋅ (s − c ), (1) ただしs = (a + b + c ) / 2 三辺の長さ a 、 b 、 c をキーボードから入力し、面積を計算して下の出力例のように入力値およ び面積を画面に出力するプログラムを作成せよ。 出力例 (「_ _ 」は2マス空けることを意味する) A=○○○.○_ _ B=○○○.○_ _ C=○○○.○ MENSEKI=○○○○.○ (2) 三辺の長さ a 、b 、c をそれぞれ 20.5、23.2 および 30.0 として、作成したプログラムを実行し、 その際に画面上に表示される「コンパイル~実行~出力」の部分を解答用紙にコピーせよ。 問題の観点 ・ キーボードから値を正しく入力できるか ・ 簡単な計算(四則計算,べき乗)ができるか ・ 算術演算子の優先順位を認識しているか ・ 指定された形式で出力できるか 5 (1) READ(*,*) A,B,C S=(A+B+C)/2.0 SS=(S*(S-A)*(S-B)*(S-C))**0.5 WRITE(*,1000) A,B,C WRITE(*,2000) SS 1000 FORMAT(' ','A=',F5.1,2X,'B=',F5.1,2X,'C=',F5.1) 2000 FORMAT(' ','MENSEKI=',F6.1) STOP END 採点基準(全40点) ・ キーボードから値を正しく入力できれば(read文がわかっていれば):10点 ・ S=(A+B+C)/2.0 、SS=(S*(S-A)*(S-B)*(S-C))**0.5 が正しくできていれば:10点、どちら か一方が正解であれば:5点 ・ FORMAT文を使って指定された形式で正しく出力できれば:10点、出力はできるが指定 された形式になっていない場合には:5点 (以上は、文法が合っていれば、プログラムが動いていなくてもOK) ・ どんな形であれ、プログラムが動いて面積が正しく計算できれば:10点 (2) konno@hcs[8]:f77 HERON.F -o heron /tmp/fpp.27720.0.f: MAIN: konno@hcs[10]:./heron 20.5,23.2,30.0 A= 20.5 B= 23.2 C= 30.0 MENSEKI= 237.3 採点基準(全10点): 問題(1)のチェックをかねています。(プログラムが動いていないのに 出力結果をワード等で作成したケースなどを排除するなど) ・ プログラムを動かしたときの画面が正しく印刷されていれば:10点。コンパイル、 実行のどちらかでも正しくできていれば:5点 6 問題2 以下は、10 個の実数をキーボードから読み込み、その平均値を求めて結果を画面に出力するプ ログラムであるが、3箇所が間違っているため正しい答えを求められないものである。 INTEGER I, J, N REAL A(100), SUM, AVE PARAMETER(N=10) DO 10 I=1,N READ(*,*) A(I) 10 CONTINUE C SUM=A(I) DO 20 J=1,N SUM=SUM+A(I) 20 CONTINUE AVE=SUM/10.0 WRITE(*,100) AVE 100 FORMAT(F8.8) STOP END (1)このプログラムを(間違いを直さずに)実行し、1,2,3,…,9,10 の 10 個の値を入力した場合につい て以下の問いに答えよ。 (a) 出力結果はどのように表示されるか。 (b) 7 行目(注釈行)の部分において変数 I の値を出力させ、その値を調べよ。 (c) 同様に、最終的な(12 行目以降での)変数 SUM の値を調べよ。 (2)上記プログラムの間違い3箇所を訂正せよ。 問題の観点 ・ 簡単なプログラムの理解 ・ プログラムのバグの検出(基本的なデバッグの仕方) ・ 簡単なプログラムの修正 7 (1) 各8点 方針: プログラムを打ち込み実行してみる。 write文を挿入しIやSUMを出力して調べてみる。 (プログラムのデバッグの基本) (a) ******** (個数が違う場合5点) (b) 11 (c) 0 (2) ①13行目:F8.8 ⇒ F8.4 (Fx.yでx≧y+3ならOK) 10点 例1 各8点 ②8行目: SUM=A(I) ⇒ SUM=0.0 ③9行目: J=1,10 ⇒ I=1,10 例2 ②8行目: SUM=A(I) ⇒ SUM=0.0 ③10行目: SUM=SUM+A(I) ⇒ SUM=SUM+A(J) 8 例3 ②8行目: SUM=A(I) ⇒ SUM=A(1) ③9行目: J=1,10 ⇒ I=2,10 例4 この場合4箇所直さないといけない(各5点x2) ②8行目: SUM=A(I) ⇒ SUM=A(1) ③9行目: J=1,10 ⇒ J=2,10 ④10行目: SUM=SUM+A(I) ⇒ SUM=SUM+A(J) 関数 (1) 文関数: ユーザーが定義する簡単な関数 (2) 組み込み関数: あらかじめ用意されている関数 SQRT, SIN, COS, LOG,MOD, …(テキストp.115) (3)外部関数 ⇒ 関数副プログラム (文関数よりも複雑な処理が必要な場合、次回) 9 例題15 使用する関数 f の型宣言 関数 f の定義 f(x)=x3-x-1 関数 f の使用 y=f(x1) 10