1 / 11

第 11 回演習課題の解説

第 11 回演習課題の解説. 前回の積み残し 第 11 回のところに提出(アップロード)する. 第10回演習課題(4). 4. 以下のプログラムを作成する 以下の仕様を満たすクラスを作れ オブジェクト作成時に整数 k を引き数とし、 new を使って (k+1)*(k+1) の 2 次元配列を確保する オブジェクト破棄時に delete でメ モリを解放する 任意の座標 ( x,y ) に値を代入できる 任意の座標 ( x,y ) の値を表示できる. 第10回演習課題(4). 続き. プログラムを実行すると、キーボード から整数 k を 入力することを求められる

Download Presentation

第 11 回演習課題の解説

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第11回演習課題の解説

  2. 前回の積み残し 第11回のところに提出(アップロード)する 第10回演習課題(4) • 4. 以下のプログラムを作成する • 以下の仕様を満たすクラスを作れ • オブジェクト作成時に整数kを引き数とし、newを使って(k+1)*(k+1)の2次元配列を確保する • オブジェクト破棄時にdeleteでメモリを解放する • 任意の座標(x,y)に値を代入できる • 任意の座標(x,y)の値を表示できる

  3. 第10回演習課題(4) 続き • プログラムを実行すると、キーボードから整数kを入力することを求められる • このkを引数として、前述のクラスのオブジェクトを作る • (0,0)から(k-1,k-1)までには、乱数で適当な値を入れる • 列毎の和を(k,0)から(k,k-1)に入れる • 行毎の和を(0,k)から(k-1,k)に入れる • (0,0)から(k-1,k-1)までの合計を(k,k)に入れる • (0,0)から(k,k)までを出力した後、オブジェクトを破棄する 行毎の和 k=4のとき 合計 列毎の和

  4. 第10回演習課題(4)の回答 定型のパターン • ans10-4.cc • 2次元配列の動的確保:2段階の処理 mem2d(int_size) { // コンストラクタ size = _size; array = new double*[size+1]; // 配列のメモリ確保(1次元目; size+1個分) for (inti=0; i<size+1; i++) { array[i] = new double[size+1]; // 配列のメモリ確保(2次元目; size+1個分) } }

  5. 第10回演習課題(4)の回答 続き • 2次元配列の動的解放:2段階の処理 ~mem2d() { // デストラクタ if (array!=NULL) { // 配列にメモリが確保されている場合のみ,メモリを開放する for (inti=0; i<size+1; i++) { delete [] array[i];// 配列のメモリの開放確保(2次元目; size+1個分) } delete [] array; } }

  6. 第10回演習課題(4)の回答 続き • 乱数発生方法 • rand関数とRAND_MAXを使って任意の範囲の乱数を求めることができる • srand関数を使って、乱数の種を初期化 #include <stdlib.h> // rand関数のため #include <time.h> // 乱数の種のため srand((unsigned) time(NULL)); // 乱数の初期化 double get_rand() { // 乱数を得る return min + (double)rand() * (max - min) / ((double)RAND_MAX+1.0); } 最小値と最大値を指定して、一様乱数を得る方法 http://homepage3.nifty.com/mmgames/c_guide/21-02.html

  7. 第10回演習課題(4)の回答 続き • coutで表示を揃える方法 • cout << setw(7) によって、出力の幅を7文字にできる • ただし、iomanipをincludeする必要がある #include <iomanip> // setwのため cout<< setw(7) // 出力の幅を7文字にする << x; 他にも桁数を指定したり、余白を埋める文字を指定したりできる

  8. 第11回演習課題(1) • 1. 乱数を使って円周率πを求めよ。 • 例えば、x座標とy座標を乱数で生成して、点を発生させる • 1x1の正方形と直径1の円を考えて、発生させた点の数と、円の内側にできた点の数を比べると、円周率が求まる • 発生させた点の数と求まった円周率の関係を図示するとなお良い 使った手法をTAに分かるように説明する 何かを参考にした場合は、その旨を述べる。書いてない場合は0点

  9. 第11回演習課題(1)の回答 • ans11-1.cc • 円周率の求め方 • 円の内側に落ちる確率をとすれば、が満たす条件はとおける • したがって、円周率で推定できる • 乱数は ans10-4.cc で作ったclass random_numberを流用

  10. 第11回演習課題(2) • 2. 以下の条件を満たすプログラムを作成せよ。 • 引数として自然数を1つとり、その数が完全数であるかどうかを判定する関数を持つ。 • 1から100以上の適当な値までの自然数が完全数かどうかを調べて、完全数を表示する。 完全数 その数自身を除く約数の和が、その数自身と等しい自然数 (例:6=1+2+3、 28=1+2+4+7+14)

  11. 第11回演習課題(2)の回答 • ans11-2.cc • 単純な方法 • 割り切れるかどうかは、演算子%で調べれば良い • 後は、地道に計算

More Related