2017年度「プログラミング言語1」「プログラミング言語演習」のページ

練習問題

2017年7月21日出題
  1. 三角形の頂点の座標を入力し、心などの座標を出力するプログラムを書け。 ただし、入力形式・出力形式・プログラムの構造については、以下の指示に従うこと。 プログラムの構造については複数の指示があるので、指示ごとにプログラムを作成すること。

    入力
    三角形\(ABC\)についての次の形式のデータセット。
    頂点\(A\)の\(x\)座標 頂点\(A\)の\(y\)座標 頂点\(B\)の\(x\)座標 頂点\(B\)の\(y\)座標 頂点\(C\)の\(x\)座標 頂点\(C\)の\(y\)座標 文字列1
    ただし、文字列1 は、アルファベットと数字だけからなる120文字以内の文字列。
    出力
    文字列1に含まれる文字ごとに以下のものを出力。
    文字出力するもの
    A 頂点\(A\)の\(x\)座標 頂点\(A\)の\(y\)座標
    B 頂点\(B\)の\(x\)座標 頂点\(B\)の\(y\)座標
    B3 第三ブロカール点の\(x\)座標 第三ブロカール点の\(y\)座標
    Bm ブロカール中点の\(x\)座標 ブロカール中点の\(y\)座標
    C 頂点\(C\)の\(x\)座標 頂点\(C\)の\(y\)座標
    Cl クローソン点の\(x\)座標 クローソン点の\(y\)座標
    D1 第一等力点の\(x\)座標 第一等力点の\(y\)座標
    D2 第二等力点の\(x\)座標 第二等力点の\(y\)座標
    Ex エクセター点の\(x\)座標 エクセター点の\(y\)座標
    F1 第一等角心の\(x\)座標 第一等角心の\(y\)座標
    F2 第二等角心の\(x\)座標 第二等角心の\(y\)座標
    Fe フォイエルバッハ点の\(x\)座標 フォイエルバッハ点の\(y\)座標
    Fo Far-out pointの\(x\)座標 Far-out pointの\(y\)座標
    G 重心の\(x\)座標 重心の\(y\)座標
    Ge ジェルゴンヌ点の\(x\)座標 ジェルゴンヌ点の\(y\)座標
    H 垂心の\(x\)座標 垂心の\(y\)座標
    I 内心の\(x\)座標 内心の\(y\)座標
    Ia \(\angle A\)に対応する傍心の\(x\)座標 \(\angle A\)に対応する傍心の\(y\)座標
    Ib \(\angle B\)に対応する傍心の\(x\)座標 \(\angle B\)に対応する傍心の\(y\)座標
    Ic \(\angle C\)に対応する傍心の\(x\)座標 \(\angle C\)に対応する傍心の\(y\)座標
    K 類似重心の\(x\)座標 類似重心の\(y\)座標
    Lo ド・ロンシャン点の\(x\)座標 ド・ロンシャン点の\(y\)座標
    M ミッテンプンクトの\(x\)座標 ミッテンプンクトの\(y\)座標
    Ma 辺\(BC\)の中点の\(x\)座標 辺\(BC\)の中点の\(y\)座標
    Mb 辺\(CA\)の中点の\(x\)座標 辺\(CA\)の中点の\(y\)座標
    Mc 辺\(AB\)の中点の\(x\)座標 辺\(AB\)の中点の\(y\)座標
    N 九点円の中心の\(x\)座標 九点円の中心の\(y\)座標
    N1 第一ナポレオン点の\(x\)座標 第一ナポレオン点の\(y\)座標
    N2 第二ナポレオン点の\(x\)座標 第二ナポレオン点の\(y\)座標
    Na ナーゲル点の\(x\)座標 ナーゲル点の\(y\)座標
    O 外心の\(x\)座標 外心の\(y\)座標
    P2 三線二乗点の\(x\)座標 三線二乗点の\(y\)座標
    P3 三線三乗点の\(x\)座標 三線三乗点の\(y\)座標
    P4 三線四乗点の\(x\)座標 三線四乗点の\(y\)座標
    P5 三線五乗点の\(x\)座標 三線五乗点の\(y\)座標
    P6 三線六乗点の\(x\)座標 三線六乗点の\(y\)座標
    Sc シフラー点の\(x\)座標 シフラー点の\(y\)座標
    Sp シュピーカー心の\(x\)座標 シュピーカー心の\(y\)座標
    ただし、出力は項目ごとに数値2個からなる1行で出力すること。 文字列1に出現する文字の順に出力すること。 同じ文字が出現したらそのとおりに繰り返し出力すること。
    プログラムの構造
    • 心などの座標の計算はひとつひとつを独立した関数として実装すること。 その関数は、計算以外の動作は一切行ってはならない。 たとえば、入出力などは行なってはならない。
    • 計算を行う各関数の形式は以下の通りとする。
      1. 2017年6月2日出題の課題1aの形式

        void
        関数名(double x1, double y1, double x2, double y2, double x3, double y3, double *xp, double *yp);
        x1 頂点 \(A\) の \(x\) 座標
        y1 頂点 \(A\) の \(y\) 座標
        x2 頂点 \(B\) の \(x\) 座標
        y2 頂点 \(B\) の \(y\) 座標
        x3 頂点 \(C\) の \(x\) 座標
        y3 頂点 \(C\) の \(y\) 座標
        *xp 心の \(x\) 座標を代入
        *yp 心の \(y\) 座標を代入

        補足「const double (*a)[2];

      2. 2017年6月2日出題の課題1bの形式

        void
        関数名(const double *a, const double *b, const double *c, double *p);
        a[0] 頂点 \(A\) の \(x\) 座標
        a[1] 頂点 \(A\) の \(y\) 座標
        b[0] 頂点 \(B\) の \(x\) 座標
        b[1] 頂点 \(B\) の \(y\) 座標
        c[0] 頂点 \(C\) の \(x\) 座標
        c[1] 頂点 \(C\) の \(y\) 座標
        p[0] 心の \(x\) 座標を代入
        p[1] 心の \(y\) 座標を代入
      3. 2017年6月2日出題の課題1cの形式

        void
        関数名(const double *a, double *p);
        a[0] 頂点 \(A\) の \(x\) 座標
        a[1] 頂点 \(A\) の \(y\) 座標
        a[2] 頂点 \(B\) の \(x\) 座標
        a[3] 頂点 \(B\) の \(y\) 座標
        a[4] 頂点 \(C\) の \(x\) 座標
        a[5] 頂点 \(C\) の \(y\) 座標
        p[0] 心の \(x\) 座標を代入
        p[1] 心の \(y\) 座標を代入
      4. 2017年6月2日出題の課題1dの形式

        void
        関数名(const double (*a)[2], double *p);
        a[0][0] 頂点 \(A\) の \(x\) 座標
        a[0][1] 頂点 \(A\) の \(y\) 座標
        a[1][0] 頂点 \(B\) の \(x\) 座標
        a[1][1] 頂点 \(B\) の \(y\) 座標
        a[2][0] 頂点 \(C\) の \(x\) 座標
        a[2][1] 頂点 \(C\) の \(y\) 座標
        p[0] 心の \(x\) 座標を代入
        p[1] 心の \(y\) 座標を代入
      5. 2017年7月7日出題の課題1eの形式

        struct point {
                double  x, y;
        };
        
        void
        関数名(const struct point *a, const struct point *b, const struct point *c, struct point *p);
        a->x 頂点 \(A\) の \(x\) 座標
        a->y 頂点 \(A\) の \(y\) 座標
        b->x 頂点 \(B\) の \(x\) 座標
        b->y 頂点 \(B\) の \(y\) 座標
        c->x 頂点 \(C\) の \(x\) 座標
        c->y 頂点 \(C\) の \(y\) 座標
        p->x 心の \(x\) 座標を代入
        p->y 心の \(y\) 座標を代入
      6. 2017年7月7日出題の課題1fの形式

        struct point {
                double  x, y;
        };
        
        void
        関数名(const struct point *a, struct point *p);
        a[0].x 頂点 \(A\) の \(x\) 座標
        a[0].y 頂点 \(A\) の \(y\) 座標
        a[1].x 頂点 \(B\) の \(x\) 座標
        a[1].y 頂点 \(B\) の \(y\) 座標
        a[2].x 頂点 \(C\) の \(x\) 座標
        a[2].y 頂点 \(C\) の \(y\) 座標
        p->x 心の \(x\) 座標を代入
        p->y 心の \(y\) 座標を代入
      7. 2017年7月7日出題の課題1gの形式

        struct point {
                double  x, y;
        };
        struct triangle {
                struct point    a, b, c;
        };
        
        void
        関数名(const struct triangle *t, struct point *p);
        t->a.x 頂点 \(A\) の \(x\) 座標
        t->a.y 頂点 \(A\) の \(y\) 座標
        t->b.x 頂点 \(B\) の \(x\) 座標
        t->b.y 頂点 \(B\) の \(y\) 座標
        t->c.x 頂点 \(C\) の \(x\) 座標
        t->c.y 頂点 \(C\) の \(y\) 座標
        p->x 心の \(x\) 座標を代入
        p->y 心の \(y\) 座標を代入
      8. 2017年7月7日出題の課題1hの形式

        struct point {
                double  x[2];
        };
        struct triangle {
                struct point    a[3];
        };
        
        void
        関数名(const struct triangle *t, struct point *p);
        t->a[0].x[0] 頂点 \(A\) の \(x\) 座標
        t->a[0].x[1] 頂点 \(A\) の \(y\) 座標
        t->a[1].x[0] 頂点 \(B\) の \(x\) 座標
        t->a[1].x[1] 頂点 \(B\) の \(y\) 座標
        t->a[2].x[0] 頂点 \(C\) の \(x\) 座標
        t->a[2].x[1] 頂点 \(C\) の \(y\) 座標
        p->x[0] 心の \(x\) 座標を代入
        p->x[1] 心の \(y\) 座標を代入

戻る
奈良女子大学生活環境学部情報衣環境学科生活情報通信科学コース