- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2024-05-01T15:34:48+09:00","ldap:bbm85148","土村 展之")
#author("2024-06-20T09:51:23+09:00","ldap:bbm85148","土村 展之")
* [[プログラミング実習II知能・機械:https://am.kwansei.ac.jp/prog2/]] の教科書 [#q91895de]
『キックオフC言語 2024年度用』のサポートページです。
#contents
** 配布物 [#yb83e145]
製本した印刷物は、授業の初回で配布します。
A5版以外に、少量ですが大きめのB5版も用意しています。
PDF は以下で公開します。
- [[閲覧用:https://cs.kwansei.ac.jp/~tutimura/debug/KickOffC/KickOffC-2024view.pdf]]
// maintsume.tex と setting.tex まで編集して、つめなし・面付けなし・フッタに日付なしにした。Acrobatでページ移動、ラベル(ナンバリング)しなおした。
-- 1章まで(目次など)を PDF の末尾に移動したので、書籍のページ番号と PDF のページ番号が一致します。
-- ページ番号が、版面の上と下の2ヶ所にあるので、ページ全体が表示されてなくても確認が容易です。
-- リンク部分の文字の色が「赤」です。
- [[印刷用:https://cs.kwansei.ac.jp/~tutimura/debug/KickOffC/KickOffC-2024print.pdf]]
// トンボありとなしを連結した。トンボありからは栞を削除せねば、2重になる。
-- 用紙の端に、章ごとの帯のような印(ツメ)があります。
-- リンク部分の文字の色が「黒」です。
-- B5用紙の中にA5の領域の版面があります。
--- 通常は「A5用紙に原寸」「B5用紙に123%拡大」のどちらかで印刷します。(ツメが用紙の端までは印刷できないでしょう。)
--- 裁断できるのなら「B5用紙に原寸」で印刷してA5に裁断するか、「A4用紙に123%拡大」で印刷してB5に裁断します。(ツメが用紙の端まで印刷されます。)
- [[ソースコード閲覧:https://cs.kwansei.ac.jp/~tutimura/debug/KickOffC/source/]]
-- [[全ファイルダウンロード:https://cs.kwansei.ac.jp/~tutimura/debug/KickOffC/KickOffC-2024source.zip]]
** 正誤表 [#od6e66e7]
*** 2章 [#r50d4d58]
:p.34 問題4.|補足:このスワップ動作は、3変数間で''同時に''行うことを意図しています。順次入れ替えるわけではありません。
:p.34 問題8.|補足:マクロ YEAR_PER_CENTURY は''2回''使用することに気をつけてください。
*** 3章 [#dd329b60]
:p.51|「問題4.の考察」と「問題6.」をオプションにします。
:p.51 問題1.|補足:関数の型(double)と、引数nの型(int)の、一致しないことが正当な例を挙げておく。
/* 正n角形の中心角 360/n を返す */
double central_angle(int n) {
return 360.0 / (double)n;
}
:p.52 問題9.|今回の提出対象から除外します。(7章に移動します。)
*** 4章 [#ca0679d5]
:p.71 問題3.|補足:「else-if」は「elseを1回、ifを1回」と数えます。
:p.71 問題5.|動作確認のmain()と補助関数を例示しておきます。
void print_exist_triangle(int a, int b, int c) {
printf("3辺の長さが %d, %d, %d の三角形は", a, b, c);
if (exist_triangle(a, b, c)) {
printf("存在する\n");
} else {
printf("存在しない\n");
}
}
int main(void) {
print_exist_triangle(1, 1, 1); // する
print_exist_triangle(3, 4, 5); // する
print_exist_triangle(1, 1, 10); // しない
print_exist_triangle(10, 5, 5); // しない
print_exist_triangle(1, 15, 5); // しない
}
*** 8章 [#afde143c]
:p.142 問題8.|オプションの問題を追加しておきます。『問題8. [配列要素の全ペア] 東海道新幹線のぞみ号の停車する6つの駅の、東京駅からの距離(km)は、それぞれ
東京 品川 新横浜 名古屋 京都 新大阪
0.0 6.8 28.8 366.0 513.6 552.6
である。この距離を''1次元配列''に格納し、以下の表のように、各駅の間の距離を''計算で''求めて表示するプログラムを作れ。
&br;・実行結果の、()内の駅名はヒントであるので、''数値部分だけ''を表示すればよい。
&br;・数値は "%8.1f" で表示すると、桁が揃いやすい。
&br;・絶対値を返す数学関数 fabs(x) を用いてよい。
実行結果
( 東京)( 品川)(新横浜)(名古屋)( 京都)(新大阪)
( 東京) 0.0 6.8 28.8 366.0 513.6 552.6
( 品川) 6.8 0.0 22.0 359.2 506.8 545.8
(新横浜) 28.8 22.0 0.0 337.2 484.8 523.8
(名古屋) 366.0 359.2 337.2 0.0 147.6 186.6
( 京都) 513.6 506.8 484.8 147.6 0.0 39.0
(新大阪) 552.6 545.8 523.8 186.6 39.0 0.0
』
*** 9章 [#y034e807]
:p.162 問題4.|関数のプロトタイプと、main()関数を例示しておきます。また、参考にしたURLがコメント中に記載されていれば、採点の際に考慮します。
void print_cancel_or_not(char weather[]) {
/* ここを作る */
}
int main(void) {
print_cancel_or_not("暴風雪警報");
print_cancel_or_not("大雪警報");
print_cancel_or_not("特別警報(大雪)");
}
*** 10章 [#wa5028e8]
:p.178 問題5.|(補足)レポートには「(i)関数呼び出しが有利。なぜなら... (ii)処理をコピーして符号反転が有利。なぜなら... (iii)関数呼び出しが有利。なぜなら...」のように、3項目について、「関数呼び出し」と「処理をコピーして符号反転」の2つの手法のどちらが有利かを述べること。
:p.178 問題6.|(補足)動作検証に用いる数値には、frac_t y = { -1, 4 }; のように、''除数の分子をマイナス''にした例を含めてください。
:p.178 問題7.|動作検証用のmain()を例示しておきます。
int main(void) {
quad_t q;
sol_t s = { 2.0, 3.0 };
sol_t s = { 2.0, 3.0 }, t;
quad_unsolve(&q, &s);
printf("a=%f, b=%f, c=%f\n", q.a, q.b, q.c); // 1.0, -5.0, 6.0
sol_solve(&s, &q);
printf("alpha=%f, beta=%f\n", s.alpha, s.beta); // 2.0 と 3.0
sol_solve(&t, &q);
printf("alpha=%f, beta=%f\n", t.alpha, t.beta); // 2.0 と 3.0
q.a = -2 * q.a;
q.b = -2 * q.b;
q.c = -2 * q.c;
sol_solve(&s, &q);
printf("alpha=%f, beta=%f\n", s.alpha, s.beta); // 2.0 と 3.0 のまま(入れ替わってもよい)
sol_solve(&t, &q);
printf("alpha=%f, beta=%f\n", t.alpha, t.beta); // 2.0 と 3.0 のまま(入れ替わってもよい)
}
なお、判別式の英語は discriminant ですから、関数名は quad_det() ではなく、quad_disc() が適切でした。([[WikiPedia.en:Discriminant]] に指摘されているように、行列式の determinant と混同していました。)また、解から方程式を作るのは unsolve とは言わないようですので、quad_unsolve() ではなく、quad_create() が適切でした。
*** 11章 [#i750d851]
:p.198 問題2.|補足指示です。入力ファイルとして、次の内容を input.txt として保存して用いてください。
123 One Two Three
987 Nine Eight Seven
また、出力結果を提出してください。出力結果は「./11_6_2.exe > 11_6_2.txt」として保存した "11_6_2.txt" か、あるいは画面に出力された文字をコピー&ペーストしてテキストファイルを作成してください。
:p.198 問題3.|補足指示です。入力ファイルとして、次の内容を in-value.txt として保存して用い、出力結果も提出してください。
24
53
95
48
20
75
33
~ (ヒント1) 読み込む数値の範囲が 0 から 100 の間であることを利用してよい。(事前に範囲がわからない場合に INT_MAX, INT_MIN の定数を用いる手法もある。)
~ (ヒント2) 最大値と最小値は同時に求めるように考えてみよ。→192ページの頻出ミス(上)
~ (ヒント3) ファイル末尾に空行を追加した場合、最小値が 0 になることも試してみよ。→192ページの頻出ミス(下)
:p.198 問題5.|新たに追加します。→[[./11_6_5]]