第4回レポート課題の解答例
課題 4-1 の解答例
入力する数値により i は 3,4,5,6,7 の五つのいずれかになる。
よって while /* c1 */ は i+1 回の判定を行ない、ループは i 回の
反復をする。次に、そのループのなかでは /* c2 */ の if 文により
c2,p3,p5, 或は c2,p4,p5 のどちらかのルートを通過して i 回の
反復後 c1,p6 で終わる。
例として i が 3 の場合は
p1 p2 c1 c2 p4 p5 c1 c2 p3 p5 c1 c2 p4 p5 c1 p6
課題 4-2 の解答例
{ i=1; while(i<=n-1){ maxj=i; max=a[maxj]; j=i+1; while(j<=n){ if(a[j]>max){ <-- 必要な不等号を入れる。 max=a[j]; maxj = j ; <-- 適切な代入にする。 } j=j+1; } a[maxj]=a[i]; a[i]=max; i=i+1 <-- 適切な代入にする。 } }
課題 4-3 の解答例
(A) b-a > ε ( >= でも可)
(B) (a+b)/2
(C) a
理由
(A) 区間の幅b-aが、目的の精度εより大きい間は区間の更新を繰り返す。
(B) 中点を求める式。
(C) 現在の区間(a,b)を新しい区間(c,d)に更新する。
課題 4-4 の解答例
{ a,b,c,の値を読む; if(a==0.0){ 「2次方程式ではありません」と表示; }else{ det=b*b-4.0*a*c; /* 掛け算を*で表す */ /* 判別式をdetとする */ if(det>0.0){ x1=(-b+sqrt(det))/(2.0*a); /* sqrtは平方根 */ x2=(-b-sqrt(det))/(2.0*a); 2実解 x1,x2を表示する; }else if(det==0.0){ x1=-b/(2.0*a); 重解 x1を表示する; }else{ re=-b/(2.0*a); /* 実際に計算できるのはre,im */ im=sqrt(-det)/(2.0*a); /* reとimを使って表示するだけ */ 2虚数解を re + im i, re - im yi のように表示する; } } } *注意 分岐にpad2psの多分岐命令である switch{ case D>0: 処理; case D=0: 処理; case D<0: 処理; } を使用している人が多数見られたが、これはあくまでPADを 書くための命令である。 C言語擬似コードのswitch case文は、 switch(式){ /*式が必要*/ case 定数値: /*定数値には数値しかいれられない*/ 処理; /*つまり不等式は入れられない!*/ case 定数値: 処理; case 定数値: 処理; } である。 "擬似コード"とは、C言語の制御文(if文、switch文、while文、do文、for文) を借用し、その中に用いる条件や処理の部分を自然言語で表した "擬似プログラム"である。制御文は正しく使用しなければならない。