知能情報工学演習I 第12回(後半第6回) 課題の回答

Slides:



Advertisements
Similar presentations
知能情報工学演習 I 第 12 回( C 言語第6 回) 課題の回答 岩村雅一
Advertisements

情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
問題 1 フィボナッチ数列 xn は次で定義される。
配列の扱い、探索 有効範囲と記憶域期間 第12回 [7月10日、H.15(‘03)] 今日のメニュー 1 前回の課題の復習
配列の扱い、探索 有効範囲と記憶域期間 第12回 [7月6日、H.16(‘04)] 今日のメニュー 1 前回の課題の復習
関数 関数とスタック.
演習問題の答え #include #include #define NUM 5 typedef struct { // 構造体の定義 float shincho; // 身長 float taiju; // 体重 } shintai; void hyouji(shintai.
精密工学科プログラミング基礎Ⅱ 第3回資料 今回の授業で習得してほしいこと: 2次元配列の使い方 (前回の1次元配列の復習もします.)
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
関数と配列とポインタ 1次元配列 2次元配列 配列を使って結果を返す 演習問題
関数の定義.
第10回関数 Ⅱ (ローカル変数とスコープ).
プログラミング演習I 2003年5月7日(第4回) 木村巌.
プログラミング入門2 第2回 型と演算 条件分岐 篠埜 功.
知能情報工学演習I 第9回( C言語第3回) 課題の回答
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
高度プログラミング演習 (03).
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
indentについて forやifの「中身」を右に寄せる. forやifの「外枠」は右に寄せない. int x; x = 3;
知能情報工学演習I 第9回(後半第3回) 課題の回答
第7回 条件による繰り返し.
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
高度プログラミング演習 (08).
知能情報工学演習I 第8回( C言語第2回) 課題の回答
知能情報工学演習I 第7回( C言語第1回) 課題の回答
関数の再帰呼び出しとは ハノイの塔 リダイレクト レポート課題
関数への道.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
岩村雅一 知能情報工学演習I 第12回(C言語第6回) 岩村雅一
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
プログラミング序論演習.
知能情報工学演習I 第7回(後半第1回) 課題の回答
IF文 START もしも宝くじが当たったら 就職活動する 就職活動しない YES END NO.
知能情報工学演習I 第11回( C言語第5回) 課題の回答
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
情報基礎演習B 後半第2回 担当 岩村 TA 谷本君.
精密工学科プログラミング基礎 第7回資料 (11/27実施)
ループだよ!難しいよ! 第5章 while(ループ);.
知能情報工学演習I 第8回(後半第2回) 課題の回答
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
岩村雅一 知能情報工学演習I 第12回(後半第6回) 岩村雅一
知能情報工学演習I 第12回( C言語第6回) 課題の回答
精密工学科プログラミング基礎Ⅱ 第2回資料 今回の授業で習得してほしいこと: 配列の使い方 (今回は1次元,次回は2次元をやります.)
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
高度プログラミング演習 (07).
関数と再帰 教科書13章 電子1(木曜クラス) 2005/06/22(Thu.).
プログラミング演習I 2003年6月11日(第9回) 木村巌.
第10回 関数と再帰.
プログラミング1 プログラミング演習I 第2回.
湘南工科大学 2013年10月22日 情報理論2 湘南工科大学情報工学科 准教授 小林 学.
プログラミング序論演習.
第2章 数値の入力と変数 scanfと変数をやります.
知能情報工学演習I 第11回(後半第5回) 課題の回答
知能情報工学演習I 第9回(後半第3回) 課題の回答
計算技術研究会 第5回 C言語勉強会 関数(function)を使う
C言語講座 四則演算  if ,  switch 制御文.
岩村雅一 知能情報工学演習I 第13回(後半第7回) 岩村雅一
知能情報工学演習I 第10回( C言語第4回) 課題の回答
プログラミング演習I 補講用課題
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
第1章 文字の表示と計算 printfと演算子をやります 第1章 文字の表示と計算.
第1章 文字の表示と計算 printfと演算子をやります.
= 55 課題6-1 #define _CRT_SECURE_NO_WARNINGS
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
Presentation transcript:

知能情報工学演習I 第12回(後半第6回) 課題の回答 岩村雅一 masa@cs.osakafu-u.ac.jp

前回の課題1 球の体積を計算するマクロを作り、球の半径(小数とする)を入力したとき、球の体積を返すプログラムを作成しなさい。 マクロ中の #include<math.h> #include<stdio.h> #define V(r) 4.0/3.0*M_PI*r*r*r int main(void){ float i; printf("半径を小数で入力: "); scanf("%f",&i); printf("半径%fの球の体積は%fです。\n",i,V(i)); return(0); } 球の体積を計算するマクロを作り、球の半径(小数とする)を入力したとき、球の体積を返すプログラムを作成しなさい。 マクロ中の rをiに置き換える

課題1で実際にあった間違い(その1) 球の体積を計算するマクロを作っていない。 (題意に反する) 係数が整数扱い(4/3=1)になっている #define V(r) 4/3*M_PI*r*r*r 体積の公式を間違っている。 3/4π r3

課題1で実際にあった間違い(その2) マクロの使い方が正しくない。 (たまたま動いた) #define ts(r) 4*M_PI*a*a*a/3 … printf("その球の体積は%f\n",ts(a)); 間違いではないが、ファイル名がおかしいため、危うく見落とすところだった。 0710-10801070**-1.c rをaに置き換えようとしても、 もともとrがない。 今回はたまたまaを 使っていたので、うまくいった。 もし、呼び出し側でa以外の変数を使っていたら、正しく動かなかった。

前回の課題2 階乗(1からnまでの自然数の積)を計算する関数を作り、順列と組み合わせを表示しなさい 順列 組み合わせ

前回の課題の回答例1 (for文を使った場合) #include <stdio.h> /* 階乗を計算する関数 */ int fact(int x) { int i, fact = 1; for(i = 2; i <= x; i++) { fact *= i; } return(fact); int main (void){ int n, r, p, c; printf("n: "); scanf("%d", &n); printf("r: "); scanf("%d", &r); p = fact(n) / fact(n-r); c = fact(n) / fact(n-r) / fact(r); printf("nPr = %d\n", p); printf("nCr = %d\n", c); return(0); } fact = 1 * 2 * 3 * 4 *… 0!や1!もok

前回の課題の回答例2 (関数の再帰的呼び出し) main関数は説明 のために消去 #include <stdio.h> /* 階乗を計算する関数 */ int fact(int x) { if (x==1 || x==0) { return(1); } else { return(x*fact(x-1)); } int main (void){ int n, r, p, c; printf("n: "); scanf("%d", &n); printf("r: "); scanf("%d", &r); p = fact(n) / fact(n-r); c = fact(n) / fact(n-r) / fact(r); printf("nPr = %d\n", p); printf("nCr = %d\n", c); return(0); }

前回の課題の回答例2 (関数の再帰的呼び出し) 例:fact(2)の場合 #include <stdio.h> fact(1)の計算 /* 階乗を計算する関数 */ int fact(int x) { if (x==1 || x==0) { return(1); } else { return(x*fact(x-1)); } /* 階乗を計算する関数 */ int fact(int 2) { if (x==1 || x==0) { return(1); } else { return(2*fact(2-1)); } /* 階乗を計算する関数 */ int fact(int x) { if (x==1 || x==0) { return(1); } else { return(x*fact(x-1)); } /* 階乗を計算する関数 */ int fact(int 1) { if (x==1 || x==0) { return(1); } else { return(1*fact(1-1)); } fact(1) = 1 =

前回の課題の回答例2 (関数の再帰的呼び出し) #include <stdio.h> /* 階乗を計算する関数 */ int fact(int x) { if (x==1 || x==0) { return(1); } else { return(x*fact(x-1)); }

課題2で実際にあった間違い(その1) コンパイルが通らない。 階乗を計算する関数を作っていない。 (題意に反する) 計算式が違う。 順列? 正解は

課題2で実際にあった間違い(その1) コンパイルが通らない。 階乗を計算する関数を作っていない。 (題意に反する) 計算式が違う。 順列? 正解は

課題2で実際にあった間違い(その2) 今回は正解にしました main関数の中で関数を定義している(関数の入れ子)。 GNU Cコンパイラの拡張機能なので、使えない環境がある。 int main(void){ int bikkuri(x){ … return t; } int n,r,nPr,nCr; 今回は正解にしました