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