PowerPoint プレゼンテーション - 物理学情報処理演習

Similar documents
PowerPoint プレゼンテーション - 物理学情報処理演習

PowerPoint プレゼンテーション - 物理学情報処理演習

PowerPoint プレゼンテーション - 物理学情報処理演習

第1回 プログラミング演習3 センサーアプリケーション

PowerPoint プレゼンテーション - 物理学情報処理演習

Microsoft PowerPoint - 09.pptx

Prog1_10th

講習No.12

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

PowerPoint Presentation

Microsoft Word - Cプログラミング演習(12)

memo

program7app.ppt

02: 変数と標準入出力

Microsoft PowerPoint - 11.pptx

Microsoft PowerPoint - kougi7.ppt

Microsoft PowerPoint - 計算機言語 第7回.ppt

02: 変数と標準入出力

Microsoft PowerPoint ppt

02: 変数と標準入出力

02: 変数と標準入出力

PowerPoint プレゼンテーション

CプログラミングI

新版 明解C++入門編

memo

Microsoft Word - 3new.doc

PowerPoint プレゼンテーション

Microsoft PowerPoint - kougi6.ppt

プログラミング実習I

Microsoft Word - no202.docx

02: 変数と標準入出力

第9回 配列(array)型の変数

6 関数 6-1 関数とは少し長いプログラムを作るようになると 同じ処理を何度も行う場面が出てくる そのたびに処 理を書いていたのでは明らかに無駄であるし プログラム全体の見通しも悪くなる そこで登場す るのが 関数 である 関数を使うことを 関数を呼び出す ともいう どのように使うのか 実際に見て

情報処理Ⅰ演習

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol

解きながら学ぶC++入門編

Microsoft Word - no15.docx

PowerPoint プレゼンテーション

slide5.pptx

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

02: 変数と標準入出力

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdiu.h> #define InFile "data.txt" #define OutFile "surted.txt" #def

プログラミング演習3 - Cプログラミング -

Microsoft PowerPoint - kougi2.ppt

02: 変数と標準入出力

<4D F736F F D20438CBE8CEA8D758DC03389F0939A82C282AB2E646F63>

デジタル表現論・第6回

Microsoft PowerPoint - lec10.ppt

Microsoft PowerPoint - prog07.ppt

PowerPoint プレゼンテーション - 物理学情報処理演習

情報処理演習 B8クラス

Cプログラミング1(再) 第2回

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; } Point; 問題 18. 問題 17 の

プログラミング演習3 - Cプログラミング -

memo

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

* ライブラリ関数 islower(),toupper() を使ったプログラム 1 /* 2 Program : trupper.c 3 Student-ID : K 4 Author : TOUME, Kouta 5 Comments : Used Library function i

Microsoft PowerPoint - prog06.ppt

< F2D837C E95CF CF68A4A94C5816A2E6A>

Microsoft Word - no12.doc

Microsoft PowerPoint - 13th.ppt [互換モード]

プログラミング基礎

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

02: 変数と標準入出力

PowerPoint プレゼンテーション

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

02: 変数と標準入出力

今までの復習 プログラムで最低限必要なもの 入力 ( キーボードから ファイルから ) 出力 ( 画面へ ファイルへ ) 条件分岐 : 条件の成立 不成立により 異なる動作をする 繰り返し : 一定の回数の繰返し 条件成立の間の繰返し 関数の定義 関数の呼び出し C ではそれ以外に ポインタ データ

演算増幅器

1. 入力した正の整数を降順に並べ換えて出力するプログラムを作成せよ プログラムは個別にコンパイルし make コマンドで実行すること 入力データは 50 以下とし 以下の数が混在しているとする 16 進数 : 先頭 1 文字が x または X( エックスの小文字か大文字 ) 8 進数 : 先頭 1

Microsoft PowerPoint - bp02.ppt

Microsoft PowerPoint pptx

情報処理 Ⅱ 2007 年 11 月 26 日 ( 月 )

画像ファイルを扱う これまでに学んだ条件分岐, 繰り返し, 配列, ファイル入出力を使って, 画像を扱うプログラムにチャレンジしてみよう

Prog1_6th

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdio.h> #define InFile "data.txt" #define OutFile "sorted.txt" #def

Microsoft Word - Training10_プリプロセッサ.docx

Microsoft Word - Cプログラミング演習(11)

gengo1-10

デジタル表現論・第4回

Microsoft PowerPoint - program.ppt [互換モード]

gengo1-11

Prog1_6th

プログラミング及び演習 第1回 講義概容・実行制御

2006年10月5日(木)実施

Taro-ファイル処理(公開版).jtd

講習No.9

また 初期化について 以下のサンプルコードのように指定すれば 定義時に値を代入できます * オマケ配列は同名で複数個の箱を用意出来ます 同名ではありますが それぞれは別々の個体であるわけです また この複数個の変数は メモリ上に連続で確保されます 2. 文字と文字列 C 言語では文字と文字列は異なる

プログラミング基礎

Microsoft PowerPoint - kougi9.ppt

kiso2-09.key

gengo1-12

問 2 ( 型変換 ) 次のプログラムを実行しても正しい結果が得られない 何が間違いかを指摘し 正しく修正せよ ただし int サイズが 2 バイト long サイズが 4 バイトの処理系での演算を仮定する #include <stdio.h> int main( void ) { int a =

プログラミング実習I

PowerPoint プレゼンテーション

Prog1_12th

基礎プログラミング2015

Microsoft PowerPoint - adi05.ppt [互換モード]

Transcription:

物理学情報処理演習 9. C 言語 5 2015 年 6 月 19 日 本日の推奨作業 directory lesson09 9.1 乱数 9.2 ポインタ 参考文献 やさしい C++ 第 4 版高橋麻奈 ( 著 ) ソフトバンククリエイティブ プログラミング言語 C++ 第 4 版ビャーネ ストラウストラップ, Bjarne Stroustrup, 柴田望洋 Numerical Recipes: The Art of Scientific Computing, Third Edition in C++ 身内賢太朗レポート提出 :fsci-phys-jouhou@edu.kobe-u.ac.jp

9.1 乱数 乱数はシミュレーションなどを行う際に有用である default では再現する乱数が発生する 挙動の確認のため 真の 乱数を得るためには適切な初期値 ( 乱数の種 ) を与える必要がある 通常 time(null) を用いて 現在時刻を種とする 算術ライブラリ math.h int rand() 0からRAND_MAXまでの整数を発生する int RAND_MAX int srand(); #include <iostream> #include <stdlib.h> rand_1.cxx #include <string.h> #include <math.h> #define MAX 10 int main(int argc, char *argv[] ) { int j; for(j=0;j<max;j++){ cout << j << " t" << rand() << " t" << RAND_MAX<< endl; #include <iostream> #include <stdlib.h> rand_3.cxx #include <string.h> #include <math.h> #define MAX 10 int main(int argc, char *argv[] ) { int j; srand(time(null)); for(j=0;j<max;j++){ cout << j << " t" << rand() << " t" << RAND_MAX<< endl; 演習 9.1( 提出不要 ) rand_1 を何回か走らせてみて 乱数発生が再現していることを確認してみよう rand2.cxx を変更して srand で与える種を変更して実行してみよう rand_1 では乱数の種に何が与えられているだろうか rand_3 を何回か実行してみよう 再現性はあるだろうか rand_3 を変更して rand_4 として 1 列目に j 2 列目に 0~1 までの間の乱数を表示するプログラムとしておこう (double)rand() として int 型を double 型に変更する必要がある

9.2 ポインタ 9.2.1 ポインタ ある変数に対するアドレス ( メモリ上の位置 ) をもつ変数 * を付けて定義する 例 int *p_int; //*p_int というパラメータが int p_int がポインタ変数 ポインタ演算子 * は ポインタの指し示している変数の値を得る演算子 アドレス演算子 & は 変数のアドレスを得る演算子 #include <iostream> #include<string.h> pointer_1.cxx #include<stdio.h> int main(){ int *p_int; int i=1; *p_int=2; cout << "i: "<<i<<endl; //integer cout << "*p_int: "<<*p_int<<endl; // integer cout << "p_int: "<<p_int<<endl; // pointer of integer cout << &(*p_int): <<&(*p_int)<<endl; // pointer of integer 演習 9.1 ( 提出不要 ) pointer_1 を実行 何が起きているか理解しよう double 型のポインタ変数を入れてみよう

9.2.2 配列とポインタ 配列を示す変数には 配列の先頭アドレスが入っている 配列を示す変数は ポインタとしても使用できる 例 1: 次のようにすると moji1, moji2 は同じ文字となる char array[128], moji1, moji2; moji1 = array[0]; /* 0 番目の文字 */ moji2 = *array; /* 配列の先頭の文字 */ 例 2: 次のようにすると moji1, moji2 は同じ文字となる char array[128], moji1, moji2; int i; moji1 = array[i]; /* i 番目の文字 */ moji2 = *(array+i); /* 配列の先頭からi 番目の文字 */

配列とポインタの違い ポインタを宣言したときは 配列とポインタ アドレスの値を入れる メモリ領域 が確保される 配列を示す変数は ポインタとしても使用できる 配列全体を格納する メモリ領域 が確保されると共に アドレスの値を入れる メモリ領域 が確保され 配列の 先頭アドレス がセットされる

多次元配列 ポインタの配列複数の文字列をつくるには ( 文字の ) 多次元配列 char array[a_size][str_size] ( 文字への ) ポインタからなる配列 char *array[a_size] ( 文字への ) ポインタへのポインタ char **array が使用できる

9.2.3 ポインタと関数 これまで : 関数への値渡し 関数へ値を渡す 渡した変数は変更されない 演習 9.2 ( 提出不要 ) hist_1 < grade.dat として実行 上記を確認しよう また 結果をパイプリダイレクションで grade_hist.dat に書き出して gnuplot で描画してみよう ##include <iostream> #include <fstream> #include <stdlib.h> #include <string.h> #include <math.h> #define HIST_MIN 0 #define HIST_MAX 50 #define HIST_BIN 10 int output_hist(int value){ cout <<value<<" t"; value=0; cout <<value<< t ; // 関数内の変数 valueは変更される int main(int argc, char *argv[] ) { int i,num; double hist[3][hist_bin]; double hist_step=(double)(hist_max-hist_min)/hist_bin; double grade; for(i=0;i<hist_bin;i++){ hist[0][i]=hist_step*i;//hist[0] for lower bound hist[1][i]=hist_step*(i+1);// hist[1] for upper bound hist[2][i]=0; //hist[2] for contents num=0; while(cin>>grade){ hist[2][(int)(grade/hist_step)]++; // filling the histgram // cout << grade<< t <<hist[0][(int)(grade/hist_step)]<< t << hist[1][(int)(grade/hist_step)]<<" t"<<hist[2][(int)(grade/hist_step)]<<endl; // check for histgram filling num++; for(i=0;i<hist_bin;i++){ cout<<hist[0][i]<<" t"<<hist[1][i]<<" t"<<hist[2][i]<<" t"; output_hist(hist[2][i]); cout<<hist[2][i]<<endl; hist_1.cxx // main の変数 hist[2][i] は変更されない

#define HIST_MIN 0 hist_2.cxx #define HIST_MAX 50 #define HIST_BIN 10 int hist_init(double hist[3][hist_bin],double *hist_step){ int i; *hist_step=(double)(hist_max-hist_min)/hist_bin; for(i=0;i<hist_bin;i++){ hist[0][i]=(*hist_step)*i; hist[1][i]=(*hist_step)*(i+1); hist[2][i]=0; int hist_fill(double value,double hist[3][hist_bin],double hist_step){ hist_step=(double)(hist_max-hist_min)/hist_bin; hist[2][(int)(value/hist_step)]++; int hist_output(double hist[3][hist_bin]){ int i; for(i=0;i<hist_bin;i++){ cout<<hist[0][i]<<" t"<<hist[1][i]<<" t"<<hist[2][i]<<endl; int main(int argc, char *argv[] ) { int i,num; double hist[3][hist_bin]; double hist_step; double grade; hist_init(hist,&hist_step); num=0; while(cin>>grade){ hist_fill(grade,hist,hist_step); num++; hist_output(hist); 新 : アドレス渡し 呼び出した側の引数としてアドレスを渡す 関数の処理によって変数の値を変えることができる 呼び出し側の引数のアドレス (&hist_step) が 呼び出された側の引数であるポインタ変数 (hist_step) の値 (*hist_step) となる 呼び出された側で hist_step の指し示す変数の値を変更しているので 呼び出し側の変数 hist_step も変化する 演習 9.2 ( 提出不要 ) hist_2 < grade.dat として実行 上記を確認しよう また 結果をパイプリダイレクションで grade_hist.dat に書き出して gnuplot で描画してみよう ( 必要に応じて show_hist.plt を使うこと )

レポート提出 :fsci-phys-jouhou@edu.kobe-u.ac.jp 提出期限 2015 年 6 月 26 日 13:00 ソースコードファイル名 :2015_jouhou_09_ 学籍番号の下 4 桁.cxx 出力画像ファイル名 :2015_jouhou_09_ 学籍番号の下 4 桁.pdf 課題 9: 以下の様なコードを作成せよ 提出はソースコード gnuplot の出力画像ファイル の 2 点とする ( プログラム仕様 ) 1 0 から 1 までの乱数を 100 回発生させ そのうちで 0.01 以下になる回数 X を数える 2 1 を 100 回繰り返し 横軸 X 縦軸頻度確率のグラフを出力する 3 2 の出力と期待値 1 のポアソン分布を gnuplot で重ね書きする