課題5


 以下の課題に関するレポートを、buturi-johoshori@tiger.kobe-u.ac.jp までメイルで送りなさい 

メイルのsubjectは、report5   とし
レポートの一番最初に、氏名、学籍番号を記すこと
送付するのは、ソースコードのみ(実行ファイルは不要)


5−A:
    以下のプログラム report5a.c は、2次方程式
        X2 + BX + C = 0
 の解(実根のみ)を求めるプログラム( kadai5a.c )である。プログラムの左端の数字は行を表すために付記している。
 プログラムとして使う場合は、消去するか上のリンクのファイルを用いよ。
 このプログラムは、コンパイルが通らない。
 ( gcc -lm -o kadai5a kadai5a.c )
    エラーは以下の通り
vostok2:~/joho-shori/lesson5 okubo$ gcc -o kadai5a kadai5a.c

report4a.c: In function 'main':
report4a.c:16: error: subscripted value is neither array nor pointer
report4a.c:17: error: subscripted value is neither array nor pointer
report4a.c: At top level:
report4a.c:23: error: parse error before "else"

report4a.c: に続く数字がプログラムの最初の行からの行数である。

 このプログラムの間違いを正せ。正したプログラムをレポートとして提出せよ。

report4a.c

1:    #include <stdio.h>
2:    #include <math.h>
3:   
4:    int main()
5:    {
6:      double b =10.0;
7:      double c = 9.0;
8:   
9:      printf("x^2 + %fx + %f = 0 ¥n",b,c);
10:   
11:      double d, x1, x2;
12:   
13:      d=(b*b-4*c);
14:   
15:      if(d>0) {
16:        x1=-b/2+sqrt[d]/2;
17:        x2=-b/2-sqrt[d]/2;
18:        printf("anwswer: x=%f,  %f¥n¥n",x1,x2);
19:   
20:      } else if (d==0)
21:        printf("answer:  x=%f ¥n¥n",-b/2);
22:   
23:      } else {
24:        printf("No answer in real number¥n");
25:    
26:      return 0:
27:    }

 Hint: 平方根を求めるためには、関数 sqrt (  )  を使用すること。
    この場合
                #include <math.h>
    をプログラムの冒頭に記し、コンパイルには
                gcc -lm -o kadai5a kadai5a.c
            とすること。


5−B:
    2次方程式
           AX2 + BX + C = 0
    の解を
            実根 (重根)
            虚根
    の場合全てについて求めるプログラム(kadai5b.c)を作成せよ。
    (Aが 0 の場合も解を求めよ。)

 但し、係数A, B, C は標準入力より入力し(*1)、結果は標準出力(*2)に出力するものとする。

    *1:  倍精度実数(double)変数aに、標準入力から値を読み込むには、以下のようなscanf関数を用いる。
            double a;
            scanf ("%f", a);

    *2: 倍精度実数(double)変数aの値を標準出力へ出力するには、以下の様にprintfを使う。
            double a;
        printf("%f", a);
 

5−C:
    自然数 M, N (M, N<10000) の最小公倍数、最大公約数を求めるプログラムを作りなさい。
    但し、M, N は標準入力から読み込むものとする

    数学的背景:
        最大公約数の求め方: ユークリッドの互除法を用いる。
        (Greatest Common Divisor)
              1.  入力を m, n とする。
              2.  nが0なら、mを出力して終了
              3.  nがmを割り切るなら nを出力してアルゴリズムを終了する
              4.  そうでないならmをnで割った余りを新たにmとし、更に mと nを取り替えて3に戻る。
            このm が解

        最小公倍数の求め方:
        (Least Common Multiple)
                LCM = a * b / gcd