2026年度「計算機実験1」makeの練習

お知らせ

(まだ、ありません)

資料

  1. 「複数ファイルからなるソースコード」 スライド
  2. 「インクルードガード」 スライド
  3. 「makeについて」2020年度版make2020
  4. 三角形の心
  5. プログラム例
    1. 分割コンパイルの例
    2. main関数の引数を表示するプログラム
    3. コマンドライン引数を浮動小数点数に変換して総和を計算して出力するプログラム(エラー処理の手を抜いた版)

練習問題

提出物
問題3のファイル一式と解説文書(LaTeXソース)
提出方法
電子メールに添付して送ってください。メールアドレスは授業中に指示します。
  1. 三角形の頂点の座標を入力し重心と内心と外心と垂心とジェルゴンヌ点とナーゲル点と類似重心の座標を出力するプログラムをCで書け。ただし、以下のようにファイルを分割すること。

    input.c 点の座標の入力
    output.c 点の座標の出力
    calc_G.c 重心の座標の計算
    calc_I.c 内心の座標の計算
    calc_O.c 外心の座標の計算
    calc_H.c 垂心の座標の計算
    calc_Ge.c ジェルゴンヌ点の座標の計算
    calc_Na.c ナーゲル点の座標の計算
    calc_K.c 類似重心の座標の計算
    main.c 入力・計算・出力を順に呼び出す
    ヘッダファイル (必要に応じて)
    その他のソースファイル (共通の下請け関数などのために必要ならば)
    1. 重心、内心、外心、垂心、ジェルゴンヌ点、ナーゲル点、類似重心を出力する一つのプログラムを書け。
    2. 重心、内心、外心、垂心、ジェルゴンヌ点、ナーゲル点、類似重心のそれぞれについて、それだけを出力するプログラムを、あわせて7個書け。
      ヒント1
      プログラムが7個なので素朴に実装するとmain関数を定義するファイルが7個必要になりますが、そのファイルの名前はmain.cと指定されているので、同じディレクトリに7個作ることはできません。対策としては、たとえば、次のようなものがあります。(他にもあります)
      1. (削除)
      2. マクロ定義を活用して、一つのmain.cから7個の.oが作れるようにする。(参考プログラムをダウンロード
      3. 心の計算を行う関数を定義する7個のファイルで、計算を行う関数が同名となるように定義する。(参考プログラムをダウンロード
      ヒント2
      それぞれの心について、以下の手順を実行する関数を書くとよいでしょう。
      1. 三角形の頂点の座標 A = ( x A , y A ) ,  B = ( x B , y B ) ,  C = ( x C , y C ) とする。
      2. B C , C A , A B の長さ a , b , c a = ( x B x C ) 2 + ( y B y C ) 2 b = ( x C x A ) 2 + ( y C y A ) 2 c = ( x A x B ) 2 + ( y A y B ) 2 で計算する。
      3. λ = f ( a , b , c ) ,  μ = f ( b , c , a ) ,  ν = f ( c , a , b ) を計算する。 ただし、 f は心ごとに決まっている関数で、「三角形の心」に書かれている。
      4. 心の座標 ( xX , yX ) x X = λ x A + μ x B + ν x C λ + μ + ν y X = λ y A + μ y B + ν y C λ + μ + ν で計算する。
      ヒント3
      参考データ
  2. 問題1の成果に、Makefileを追加せよ。(詳細は口頭で)
  3. 問題2の成果のMakefileをmake変数とサフィックスルルールを活用するように書き換えよ。(詳細は口頭で)

参考書


奈良女子大学生活環境学部文化情報学科生活情報通信科学コース
数学科出身だけどプログラミングを教えている人