課題1: レポート課題1-3

以下の課題問題を解き、レポートとして提出せよ。

  1. 有理数(分数)を扱うプログラムを作成せよ。 構造体は以下の定義を用いて四則演算を行なう各関数を作成せよ。
    /* 有理数(分数)を表現する構造体 */
    typedef struct rational_number {
        int    numer;    /* 分子 (numerator) */
        int    denom;    /* 分母 (denominator) */
    } rational_number;
    

    ただし、負の値の場合には常に分子側に '-'(マイナス符号)が表示されるようにすること。 (つまり、分母側の値は必ず正の値として表示するということ)

    また、表示する際に既約分数として表示すること。

    ヒント:既約分数にするには分母と分子をお互いの最大公約数で割ればよい。
    最大公約数の求める方法としては「ユークリッドの互除法」が有名である。
    (「ユークリッドの互除法」については ココを参考にすること。 プログラムの見通しをよくするため、二つの整数の最大公約数を求める関数 int gcd(int a, int b) を作るとよい)

    プログラムの雛型をここに置いておくので、 このプログラムをベースにして必要なコードを追加するとよい。

    以下は実行例である。入力する数値をいろいろ変えてみること。 (最低3パターンを試すこと)

    input number (a.numer) = 10
    input number (a.denom) = 20
    input number (b.numer) = 30
    input number (b.denom) = 40
    [ 1/2 ] + [ 3/4 ] = [ 5/4 ]
    [ 1/2 ] - [ 3/4 ] = [ -1/4 ]
    [ 1/2 ] * [ 3/4 ] = [ 3/8 ]
    [ 1/2 ] / [ 3/4 ] = [ 2/3 ]
    

    オプション課題

    プログラムを機能拡張する。
    (どういう拡張を行なったかをきちんと説明すること)

    例えば、 分母や分子の値に誤って浮動小数点数などが入力された場合にエラーとして 報告したり、同等の有理数に変換して処理を継続するなどの改良を行なう、 などが考えられる。(これに限らず他の機能拡張でもよい)


Last update: Apr. 11, 2022.