12.よいプログラム,わるいプログラム

全文

(1)

14 12.よいプログラム,わるいプログラム

正しいプログラム→明確な基準,実行させればわかる よい,わるい→基準はない,実行してもわからない わるくないプログラム

早い

短い(ソースが短い,機械語のソースが短い)

わかりやすい

デバッグしやすい

モジュール化

演習問題4の解答例

#include<stdio.h>

#include<ctype.h>

void main(void){

int c;

while((c=getchar())!=EOF){

if(isspace(c)!=0){ /* 空白,タブ,改行文字なら0,そうでないとき非0 */

c='\n';

}

c=tolower(c); /* 大文字を小文字に変換 */

putchar(c);

} }

演習問題5(b)の解答例

#include <stdio.h>

#include <ctype.h>

void main() {

char s[100],prev[100]; /* 1行は100文字以内とする */

strcpy(prev,""); /* 空文字列を prev へコピー */

while(scanf("%s",s)!=EOF){ /* ファイルの終端が来るまでループ */

if(strcmp(s,prev)!=0){ /* s prev を比較,同じならば0 */

printf("%s\n",s);

strcpy(prev,s); /* s prev へコピー */

} } }

(2)

15 レポートに対するコメント

①GUIの短所(Shellの長所)が不十分

処理に対応したアイコンが必要,などのようなことが書いてあれば2点.

②演習問題4:1行しか処理できないものが多かった(1点).2行以上処理できるもの(2 点)

演習問題5(b):正しい終了条件(EOF)のもの(2点).その他の終了条件(ENDと入 力,Enter キーを2回など)は1点.

③それぞれ,実行例を含めて正しくできていた(2点).中途半端(1点).

④倍精度(double型),大きいkから足し算をする,整数もlong型で計算する,1000000000 ぐらいまで足し込んでみる(ここまでは基本).

1 k2 は 1k k で計算する(関数powは使用しない). 計算結果は小数点以下十数桁まで表示してみる(%2.14f ).

本当の円周率よりも大きな値を出していた人がいましたが,これは論外.

(表示を含めて)小数点以下9桁(5点),8桁(4点),7桁(3点),それ以下(2点). 以上を,平均5点となるように調整.

その他

よい実行例が少ない.実行例にも気を配ること.

プログラムと,実行例を別の紙に書かない.

演習問題

11.以下のプログラムについて.

(a) 何を行うプログラムであるか.プログラミングせずに推測せよ.

(b) プログラムに誤りがあれば訂正を,また,改良できる点があれば,改良せよ.

/* プログラムの始まり */

#include <stdio.h>

#include <math.h>

#define GAMMA 0.618

#define PAI 3.14159265

#define A -1.0

#define B 3.0

#define EPS 0.000001

static double x = A;

static double step;

double f(double t) {

return (pow(t,3)+3*t*t-9*t);

}

(3)

16 void main(void)

{

int i = 0;

double u,v,a,b,fu,fv;

a = A;

b = B;

u = a + GAMMA*(b-a);

v = b - GAMMA*(b-a);

fu = f(u);

fv = f(v);

while((b-a) > EPS) {

{

if(fu >= fv) {

b = u;

u = v;

v = b - GAMMA*(b - a);

fu = fv;

fv = f(v);

}

else {

a = v;

v = u;

u = a + GAMMA*(b - a);

fv = fu;

fu = f(u);

} }

step = (a + b)/2.0;

printf("%d \t %3.10f \t %3.10f\n",i,step,f(step));

i++;

}

step = (a + b)/2.0;

i++;

printf("%d \t %3.10f \t %3.10f\n",i,step,f(step));

}

/* プログラムのおわり */

(4)

17

***レポート課題***

③,④いずれか一方を選んで解答せよ(両方選んでもよい). なお,プログラムA,Bはともに別紙.

③  プログラムAFORTRANで書かれたものである.

(a) 何をするプログラムであるか,簡潔に答えよ.

(b) 同じ動作をする.わかりやすいCのプログラムに書き換えよ.

(c) 改善点があれば,改善するなど,このプログラムを批評せよ.

④  プログラムBについて.

(a) 何をするプログラムであるか,簡潔に答えよ.

(b) 改善点があれば,改善するなど,このプログラムを批評せよ.

締 切

      :2001年2001年2001年2001年1月1月1月1月11121222日(日(日(日(金金金)金))) 変更しました 提出先:システム事務室

Updating...

参照

Updating...

関連した話題 :