2019 年度版 画像情報学実験 コンピュータ プログラミング 藤田医科大学放射線学科寺本篤司 (11 号館 410 号室 ) 1
午前 コンピュータプログラミング 法の説明プログラミング練習 午後 プログラミング基礎演習 C 語による画像処理プログラミング演習 レポート 実験予定 プログラミング演習で作成したプログラムおよび処理結果を記録してレポート作成 USB メモリに保存して提出 2
コンピュータプログラミング コンピュータはソフトウエアの介在により利 ソフトウエアはプログラミングによって作成 応 ソフトウエア 基本ソフトウエア Internetブラウザ Mailソフト Word, Excel, ゲーム etc. Windows コンピュータ 3
プログラムは, コンピュータの う処理の 順を指 したもの 複数のプログラムを組み合わせて 1 つの きな プログラムができている プログラムは プログラミング 語 で記述 機械語 アセンブラ C Java Python などが ある プログラムとは何か? あーしてこーしてそーして 4
2.2 C 語について 1972 年にAT&T ベル研究所にて開発された 語 ハードウエアを細かく制御できるため 由度が い 画像などのバイナリデータを扱い易く処理が速い C 語から派 した 語も多く 応 しやすい 無料で使 できるものが多い 就職後も利 可 医 画像処理ソフトウエアの多くはC 語で開発されており 企業就職しても即戦 になる 5
C 語のプログラムができるまで ソースコード ( 原始プログラム ) コンパイラ 的プログラムリンカ #include <stdio.h> void main() int I,j,k; i=1; j=2; ****.c 01101111 01010100 00000011 110 010. ****.obj 実 モジュール ****.exe 6
2.3 C 語によるプログラミング 画 に 字を表 したり, キーボードから数値の を受け付けたり, 繰り返し計算や条件判断を う 命令 を組合せ, ユーザの望む処理を う 数値や 字を格納する 変数 を いて加減乗除な どの数値計算や論理演算を うことができ, 命令と 組み合わせることで複雑な処理を実現 7
C 語の基本的ルール (), などの括弧や英数字 記号を中 に記述 括弧の記号は開くもの ( と閉じるもの ) を必ずペアにする ソースコードの先頭から順番に処理が実 される 8
C 語に出てくる重要な記号 記号よみかた役割 ; セミコロン 1 つの処理の終わりに れる記号 /* */ 中括弧開く中括弧閉じる スラッシュ アスタリスクアスタリスク スラッシュ プログラム中のまとまりの開始と終了を表す記号 2 つの記号で挟んだ範囲がコメントとして扱われ 処理されない // スラッシュ スラッシュこの記号から改 までがコメントとして扱われる スペース タブ 改 空 記号の つ 空 記号の つ スペースと同じように使えるが 他の と段を揃えるときに便利に使える 空 記号の つ プログラムの を改めるときに使う 9
4.3 C プログラムの編集 実 CPad for Borland C++Compiler スタートメニュー すべてのプログラム Tools Programming CPad を実行 10
4.4 C 語プログラミングの実際 #include <stdio.h> #include <math.h> インクルードファイル int main() float enshuritsu,hankei,menseki; enshuritsu=3.14; hankei=5; menseki=hankei*hankei*enshuritsu; printf(" 半径 %f の円の面積は %f です n",hankei,menseki); return 0; 処理記述部 main 関数 11
4.4 C 語プログラミングの実際 #include <stdio.h> #include <math.h> int main() float enshuritsu,hankei,menseki; enshuritsu=3.14; hankei=5; menseki=hankei*hankei*enshuritsu; main 関数 関数とは命令や式を組み合わせて一連の処理を実行するものの総称 main 関数は,C 言語プログラムで最初に実行される関数 main 関数はプログラム中に必ず 1 つ必要であり, 関数の記述範囲は で明示する printf(" 半径 %f の円の面積は %f です n",hankei,menseki); return 0; 12
4.4 C 語プログラミングの実際 #include <stdio.h> #include <math.h> int main() float enshuritsu,hankei,menseki; enshuritsu=3.14; hankei=5; menseki=hankei*hankei*enshuritsu; 処理記述部 main 関数で行われる実際の処理内容を記述した部分 "" ( ダブルクオーテーション ) で囲まれた部分以外は, すべて半角英数字で記述命令の後ろには ; ( セミコロン ) が必要 空白 ( 半角スペース ) や改行はプログラムが見易いように加えてもよい. printf(" 半径 %f の円の面積は %f です n",hankei,menseki); return 0; 13
4.4 C 語プログラミングの実際 #include <stdio.h> #include <math.h> int main() float enshuritsu,hankei,menseki; インクルードファイル プログラム中で使用する関数に関する情報を定義したもの インクルードファイルを使用する場合, プログラム先頭に定義しておく. enshuritsu=3.14; hankei=5; menseki=hankei*hankei*enshuritsu; printf(" 半径 %f の円の面積は %f です n",hankei,menseki); return 0; 14
4.4 C 語プログラミングの実際 #include <stdio.h> #include <math.h> int main() float enshuritsu,hankei,menseki; インクルードファイル プログラム中で使用する関数に関する情報を定義したもの インクルードファイルを使用する場合, プログラム先頭に定義しておく. enshuritsu=3.14; hankei=5; menseki=hankei*hankei*enshuritsu; printf(" 半径 %f の円の面積は %f です n",hankei,menseki); return 0; 15
4.4.2 字列の表 #include <stdio.h> int main() printf( 藤田医科大学 nfujita HEALTH UNIVERSITY n"); return 0; プログラムを入力し 実行してみよう 文字列表示は printf で行う で囲われた文字列が表示されている n を削除してみたらどうなるか? エスケープ文字 の後ろにアルファベットを付加したものをエスケープ文字とよび, 特殊な文字操作を行うことができる. 例 ) n : 改行, t : 水平タブ, v : 垂直タブ, b : 1 文字後退 16
4.4.3 変数と数式 #include <stdio.h> int main() //1 変数宣言 int a,b,c,e; 変数 a,b,c を いて (a+b)/c を算出し, 変数 e に結果を代 するプログラム 左のプログラムを し動作を確認してみよう //2 数値代入 a=1; b=2; c=3; //3 数式による演算 e=(a+b)/c; //4 表示 printf(" 計算結果 :%d n",e); return 0; 17
変数とは? 4.4.3 変数と数式 数値や 字列を れておくための 箱 変数 a=123; プログラムで演算などを うときは 数値を直接記述するので はなく 旦変数に値を れて変数同 で演算を うと良い 18
4.4.3 変数と数式 1 変数宣 変数を利 する際 変数の名前と型を指定し, 変数の利 をコンピュータに宣 する必要がある 変数の名前はアルファベットで始まる任意の 字列が利 でき 変数型は取り扱う数値の数値範囲や種類を考慮して決定する 今回実験で用いる変数型 int 型整数数値範囲 :-2147483648 ~ 2147483647 float 型実数数値範囲 :+/- 3.4 10-38 ~ 3.4 10 38 19
4.4.3 変数と数式 例 ) 数値代 数式による演算 a=123; c=a+b; a=a+1; 変数 a に 123 を代 する 変数 a と変数 b の和を変数 c に代 する 変数 a に 1 を加えた数値を変数 a に代 する a を 1 増やす イコール (=) は等しいという意味ではなく代 する意味 右辺で計算した結果が左辺の変数に代 される 20
変数と数式 演習 イコール (=) は等しいという意味ではなく代 する意味 右辺で計算した結果が左辺の変数に代 される 問 1 問 2 問 3 以下の演算を実 したとき a の値は? a=15/3; 以下の演算を実 したとき a の値は? a=10; a=a+2; 以下の演算を実 したとき c の値は? a=1; b=2; c=3; c=a+b+c; 21
2 数式による演算 4.4.3 変数と数式 例 :d=(a+b)/c; 数式の右辺は左側から順番に計算され, 優先順位は ( ) で囲んだ部分が最も く,*,/ は +,- よりも優先 順位が い 主な算術演算 四則演算和 :+ 差 :- 積 :* 除 :/ 剰余 % ( 整数同 の演算のみ ) 22
4.4.4 数値の表 作成したプログラムは演算を うだけであり, 演算結果の数値は表 されない. 以下のように printf 関数に書式と変数を記述することで数値を表 できる. //4 表示 printf(" 計算終了 n"); //4 表示 printf("(%d+%d)/ %d=%d n",a,b,c,e); 変更後の printf の書式に記述した %d という記号は, 表 する数値の型を表現 変数の型に応じて下記のように記述する. printf 文の書式指定 ( 抜粋 ) %s 文字 %d 整数 %f 実数 23
4.4.4ʼ 数値の キーボードから数値を させ それらの数値を変数に代 して演算に利 することもできる C 語では数値の に scanf 関数を利 する 書式は printf と同様 プログラムに以下の変更を加え 動作を確認してみよう //2 数値代入 a=1; b=2; c=3; //2 数値代入 scanf("%d",&a); scanf("%d",&b); scanf("%d",&c); 24
数値の表 と 演習 これまでに してきたプログラムは整数演算しか えなかった 数点を持つ値 ( 実数 ) でも計算できるように改良してみよう 変数宣 scanf, printf の書式 25
4.4.5 条件分岐処理 条件によって処理を変えたいときは条件分岐処理を記述する 条件式 Yes No 処理 1 処理 2 条件式 が成り てば 処理 1 を 成り たなければ 処理 2 を実 if ( 条件式 ) 処理 1; else 処理 2; 26
4.4.5 条件分岐 if ( 条件式 ) 処理 1; else 処理 2; 較演算 条件の成 可否を判断する際 較演算 を いる 等しい == if ( a==b ) else 等しくない!= if ( a!=b) else より大きい < if ( a<b ) else より小さい > if ( a>b ) else より大きいか等しい <= if ( a<=b ) else より小さいか等しい >= if ( a>=b ) else 論理演算 複数の条件を組み合わせて条件分岐する場合などで論理演算 を利 する 論理和 (OR) if ( a==b c==0 ) 論理積 (AND) && if ( a==b && c==0 ) 論理否定 (NOT)! if ( a==b!(a>b)) 27
4.4.5 条件分岐 #include <stdio.h> int main() //1 変数宣言 int a,b,c,e; //2 数値代入 scanf("%d",&a); scanf("%d",&b); scanf("%d",&c); if (c==0) printf("c は 0 以外を入力してください n"); else //3 数式による演算 e=(a+b)/c; 入力した c が 0 かどうかを判別し 0 であれば メッセージを出す ( その後 何も計算せず終了 ) 0 以外なら計算して結果を表示する //4 表示 printf("(%d+%d)/%d=%d n",a,b,c,e); return 0; 28
条件分岐 演習 以下のプログラムを実 したとき b の値は? 問 1 a = 7; b = 1; if (a 1 < 6) b=2; 問 2 a = 3; b = -1; if (b < 0) b = a * b; 29
4.4.6 反復処理 初期式 特定の処理を反復 ( ループ ) したい場合は for 文を用いる 条件式 yes 処理 no for ( 初期式 ; 条件式 ; 再設定式 ) 処理 ; 再設定式 30
4.4.6 反復処理 for ( 初期式 ; 条件式 ; 再設定式 ) 処理 ; #include <stdio.h> int main() // 変数宣言 int i; for (i=0;i<10;i++) printf("i=%d n",i); return 0; i を 0 にして反復を開始 内の処理を実行し 実行し終わったら i に 1 を加える i が 10 未満の間は処理を実行する 再設定式にて良く使う記述 a++ a に 1 を加えて反復実 a a から 1 を減じて反復実 ++,-- は 1 ずつ増減することを意味する a+=2, a-=2 と書くと 2 ずつ増減する a=a+2, a=a-2 と書いても同じ 31
反復処理 演習 問 1 以下のプログラムを実 したとき bの値はいくら? b=1; for (a = 1; a<=3; a++) b=b*a; 問 2 以下のプログラムを実 したとき bの値はいくら? b=0; for (a = 0; a<=10; a+=2) b=b+a; 32