Taro-2分探索木Ⅰ(公開版).jtd
|
|
|
- ふさこ ふじた
- 7 years ago
- Views:
Transcription
1 2 分探索木 Ⅰ 0. 目次 1. 2 分探索木とは 2. 2 分探索木の作成 3. 2 分探索木の走査 3. 1 前走査 3. 2 中走査 3. 3 問題 問題 1 問題 2 後走査 4. 2 分探索木の表示 - 1 -
2 1. 2 分探索木とは 木はいくつかの節点と節点同士を結ぶ辺から構成される 2 つの節点 u,v が直接辺で結ばれているとき 一方を親節点 他方を子節点という ある節点の親節点は高々 1 つであり 子節点は 0 個以上である 節点の中には 親節点をもたない節点がただ 1 つあり 根という また 子節点をもたない節点を葉という 木は つぎのように定義される ( 1 ) ひとつの節点は 木である ( 2 ) v が節点で T 1,T 2,,T k が木で それぞれの木の根が v 1,v 2,,v k とする このとき v を v 1,v 2,,v k の親とするのは 木である 節点 v 1,v 2,,v k は節点 v の子と呼ばれる v v 1 v 2 v k T 1 T k T 2 2 分木は どの節点も高々 2 個の子節点をもつ 2 個の子節点の内 左に書かれる子節点を根とする部分木を左部分木 右に書かれる子節点を根とする部分木を右部分木という A B C D E F G H 節点 : A, B, C, D, E, F, G, H ( A は根でもある ) 辺 : A B, A C, B D, B E, C F, F G, F H ( X Y のとき X が親 Y が子を意味する ) 2 分木の節点に集合 S の要素を割り当てる 各節点において 割り当てられた要素の大きさが 左部分木のどの節点の要素よりも大きく 右部分木のどの節点 の要素よりも小さいとき 2 分探索木という - 2 -
3 2. 2 分探索木の作成 空の 2 分探索木から始める 挿入する要素と節点の要素を比較し 前者が小さい場合 左部分木に追加し 前者が大きい場合 右部分木に追加していく 手順 9 個のデータ (55,33,11,99,44,77,22,66,88) で手順を示す ( 1 ) ( 2 ) ( 3 ) ( 4 ) ( 5 ) ( 6 ) ( 7 ) ( 8 ) ( 9 ) 分探索木を表現するために データを保存する変数 info 左部分木を指すポインタ left 右部分木を指すポインタ right をもつ構造体を用意する 根を指すポインタ変数を root とする ポインタ変数 root は空の同じ構造体を指す このようにすると プログラムが簡潔になる B root A C D E B NULL A NULL D NULL NULL C NULL NULL E NULL - 3 -
4 プログラム 非再帰版 ( bt211.c) 1 /* << bt211.c >> */ 2 /* 2 分探索木の作成 */ 3 #include <stdio.h> 4 #include <stdlib.h> 5 struct NODE { 6 int info; /* 節点がもつデータ */ 7 struct NODE *left; /* 左の子節点を指すポインタ */ 8 struct NODE *right; /* 右の子節点を指すポインタ */ 9 }; 10 struct NODE *mktree(); int main() { 13 struct NODE *root; /* 2 分探索木の作成 */ 16 root = mktree(); 17 } /* 2 分探索木の作成 */ 20 struct NODE *mktree() { 21 int data; 22 struct NODE *p, /* 現節点を指すポインタ変数 */ 23 *q, /* 現節点の親節点を指すポインタ変数 */ 24 *r, /* 作業用ポインタ変数 */ 25 *root; /* 根を指すポインタ変数 */ /* 根を指すポインタ変数と空の構造体の作成 */ 28 root = (struct NODE *)malloc(sizeof(struct NODE)); 29 root->left = NULL; 30 root->right = NULL; while( 1 ) { 33 /* データの読み込み */ 34 scanf("%d",&data); 35 if( data <= 0 ) { break; } 36 r = (struct NODE *)malloc(sizeof(struct NODE)); 37 r->info = data; 38 r->left = NULL; 39 r->right = NULL; root->info = data; /* 2 分探索木にデータを追加するとき 42 空の構造体の左部分木に追加できるように 43 root->info=data としておく */ 44 /* 初期設定 */ 45 p = root->left; 46 q = root; /* 追加する場所を探す */ 49 while( p!= NULL ) { 50 /* 重複データは追加しない */ 51 if( data == p->info ) { goto next; }
5 53 /* データ dataが現在の節点のデータ (p->info) 以下のとき 54 左部分木へ 大きいとき右部分木へ移動する */ 55 q = p; 56 if( data <= p->info ) { 57 p = p->left; 58 } else { 59 p = p->right; 60 } 61 } /* データの追加 */ 64 if( data <= q->info ) { 65 /* 左部分木として追加 */ 66 q->left = r; 67 } else { 68 /* 右部分木として追加 */ 69 q->right = r; 70 } 71 next:; 72 } 73 return root; 74 } - 5 -
6 3. 2 分探索木の走査 2 分探索木の辺を反時計回りに ( 赤い線に沿って ) なぞっていくと 2 分探索木のすべての節点を訪問できる A B C D E F G H 2 分探索木のすべての節点をたどる方法として 前走査 中走査 後走査の 3 通り考えられる 前走査 : まず 親節点を訪問する つぎに 左部分木のすべての節点を訪問する 最後に 右部分木のすべての節点を訪問する 1 A 2 B 5 C 3 D 4 E 6 F 7 G 8 H 訪問順 : A B D E C F G H - 6 -
7 中走査 : まず 左部分木のすべての節点を訪問する つぎに 親節点を訪問する 最後に 右部分木のすべての節点を訪問する 4 A 2 B 5 C 1 D 3 E 7 F 6 G 8 H 訪問順 : D B E A C G F H 後走査 : まず 左部分木のすべての節点を訪問する つぎに 右部分木のすべての節点を訪問する 最後に 親節点を訪問する 8 A 3 B 7 C 1 D 2 E 6 F 4 G 5 H 訪問順 : D E B G H F C A - 7 -
8 3. 1 前走査 プログラム 再帰版 (bt311.c) 1 /* << bt311.c >> */ 2 /* 2 分探索木の走査 ( 前走査 ) */ 3 #include <stdio.h> 4 #include <stdlib.h> 5 struct NODE { 6 int info; /* 節点がもつデータ */ 7 struct NODE *left; /* 左の子節点を指すポインタ */ 8 struct NODE *right; /* 右の子節点を指すポインタ */ 9 }; 10 void preorder(struct NODE *p); 11 struct NODE *mktree(); int main() { 14 struct NODE *root; /* 2 分探索木の作成 */ 17 root = mktree(); /* 前走査 */ 20 preorder(root->left); printf("\n"); 21 } /* 前走査 */ 24 void preorder(struct NODE *p) { 25 if( p == NULL ) { return; } 26 printf(" %d",p->info); 27 preorder(p->left); 28 preorder(p->right); 29 } - 8 -
9 実行結果 % cc bt311.c から 9 の順に訪問する
10 3. 2 中走査 プログラム 再帰版 ( bt321.c) 1 /* << bt321.c >> */ 2 /* 2 分探索木の走査 ( 中走査 ) */ 3 #include <stdio.h> 4 #include <stdlib.h> 5 struct NODE { 6 int info; /* 節点がもつデータ */ 7 struct NODE *left; /* 左の子節点を指すポインタ */ 8 struct NODE *right; /* 右の子節点を指すポインタ */ 9 }; 10 void inorder(struct NODE *p); 11 struct NODE *mktree(); int main() { 14 struct NODE *root; /* 2 分探索木の作成 */ 17 root = mktree(); /* 中走査 */ 20 inorder(root->left); printf("\n"); 21 } /* 中走査 */ 24 void inorder(struct NODE *p) { 25 if( p == NULL ) { return; } 26 inorder(p->left); 27 printf(" %d",p->info); 28 inorder(p->right); 29 }
11 実行結果 % cc bt321.c から 9 の順に訪問する
12 3. 3 問題 問題 1 後走査 プログラム 再帰版 ( bt331.c) 1 /* << bt331.c >> */ 2 /* 2 分探索木の走査 ( 後走査 ) */ 3 #include <stdio.h> 4 #include <stdlib.h> 5 struct NODE { 6 int info; /* 節点がもつデータ */ 7 struct NODE *left; /* 左の子節点を指すポインタ */ 8 struct NODE *right; /* 右の子節点を指すポインタ */ 9 }; 10 void postorder(struct NODE *p); 11 struct NODE *mktree(); int main() { 14 struct NODE *root; /* 2 分探索木の作成 */ 17 root = mktree(); /* 後走査 */ 20 postorder(1 ); printf("\n"); 21 } /* 後走査 */ 24 void postorder(struct NODE *p) { 25 if( p == 2 ) { return; } 26 postorder(3 ); 27 postorder(4 ); 28 printf(" %d",p->info); 29 }
13 実行結果 % cc bt331.c から 9 の順に訪問する
14 問題 2 読み込んだデータから 2 分探索木を構成し 前走査 中走査 後走査でたどる順を示せ 例入力データ : 前走査 : 中走査 : 後走査 : ( 1 ) 入力データ : 前走査 中走査 後走査
15 4. 2 分探索木の表示 2 分探索木を Excel のグラフ機能を使って表示する まず 各節点に座標を割り当てる 節点が交わらないように下図のように座標を決める 根の座標は (0,0) とする (0,0) (-1/2,-1) (1/2,-1) (-3/4,-2) (-1/4,-2) (1/4,-2) (3/4,-2) すなわち 2 分探索木の深さが一つ増えるごとに 節点間の幅を 1/2 倍にする このプログラムで 節点の座標を求める ただし Excel のグラフ機能 ( 散布図 ) を使って表示するため 前走査で節点を通過するたびに座標を出力する プログラム 再帰版 ( bt411.c) 1 /* << bt411.c >> */ 2 /* 2 分探索木の走査 ( 前走査 ) */ 3 /* 節点の座標を出力する */ 4 #include <stdio.h> 5 #include <stdlib.h> 6 struct NODE { 7 int info; /* 節点がもつデータ */ 8 struct NODE *left; /* 左の子節点を指すポインタ */ 9 struct NODE *right; /* 右の子節点を指すポインタ */ 10 }; 11 float width; /* 幅 */ 12 void preorder(struct NODE *p, float v, float h); 13 struct NODE *mktree(); int main() { 16 struct NODE *root; /* 2 分探索木の作成 */ 19 root = mktree(); /* 初期設定 */ 22 width = 1; /* 前走査 */ 25 preorder(root->left,0,0); 26 printf("\n");
16 27 } /* 前走査に従って 節点の x 座標 v,y 座標 hを出力する */ 30 void preorder(struct NODE *p, float v, float h) { 31 if( p == NULL ) { return; } /* 座標 (v,-h) の出力 */ 34 printf("%8.5f,%8.5f\n",v,-h); 35 width = width/2; 36 preorder(p->left,v-width,h+1); /* 座標 (v,-h) の出力 */ 39 printf("%8.5f,%8.5f\n",v,-h); 40 preorder(p->right,v+width,h+1); 41 width = width*2; /* 座標 (v,-h) の出力 */ 44 printf("%8.5f,%8.5f\n",v,-h); 45 } 実行結果 % cc bt411.c , , , , , , , , , , , , , , , , , , , , ,
17 2 分探索木の表示 1 節点の座標を csv ファイル ( 拡張子を csv とする ) にして保存する 2 Excel を起動し csv ファイルを読み込む 3 グラフ機能 ( 散布図 ) 使ってグラフを表示する 余分な座標軸等は削除する x 座標 y 座標
Taro-スタック(公開版).jtd
0. 目次 1. 1. 1 配列によるの実現 1. 2 再帰的なデータ構造によるの実現 1. 3 地図情報処理 1. 4 問題 問題 1 グラフ探索問題 - 1 - 1. は データの出し入れが一カ所で行われ 操作は追加と削除ができるデータ構造をいう 出入口 追加 削除 操作 最初 111 追加 111 222 追加 111 222 333 追加 111 222 333 444 追加 111 222
Taro-ポインタ変数Ⅰ(公開版).j
0. 目次 1. ポインタ変数と変数 2. ポインタ変数と配列 3. ポインタ変数と構造体 4. ポインタ変数と線形リスト 5. 問題 問題 1 問題 2-1 - 1. ポインタ変数と変数 ポインタ変数には 記憶領域の番地が格納されている 通常の変数にはデータが格納されている 宣言 int *a; float *b; char *c; 意味ポインタ変数 aは 整数型データが保存されている番地を格納している
第2回
明星大学情報学科 年後期 アルゴリズムとデータ構造 Ⅰ 第 回 Page 第 回基本データ構造 連結リストとその操作 -. リスト構造 データ部 と ポインタ部 で構成され ポインタをたどることによりデータを扱うことができる構造 -. 単方向リストとその操作 --. 単方向リスト 次のデータへのポインタを つだけ持っているデータ構造 ( データ部は 複数のデータを持っている場合もある ) データ部
Taro-再帰関数Ⅲ(公開版).jtd
0. 目次 1 1. ソート 1 1. 1 挿入ソート 1 1. 2 クイックソート 1 1. 3 マージソート - 1 - 1 1. ソート 1 1. 1 挿入ソート 挿入ソートを再帰関数 isort を用いて書く 整列しているデータ (a[1] から a[n-1] まで ) に a[n] を挿入する操作を繰り返す 再帰的定義 isort(a[1],,a[n]) = insert(isort(a[1],,a[n-1]),a[n])
プログラミングI第10回
プログラミング 1 第 10 回 構造体 (3) 応用 リスト操作 この資料にあるサンプルプログラムは /home/course/prog1/public_html/2007/hw/lec/sources/ 下に置いてありますから 各自自分のディレクトリにコピーして コンパイル 実行してみてください Prog1 2007 Lec 101 Programming1 Group 19992007 データ構造
バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科
バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科 ポインタ変数の扱い方 1 ポインタ変数の宣言 int *p; double *q; 2 ポインタ変数へのアドレスの代入 int *p; と宣言した時,p がポインタ変数 int x; と普通に宣言した変数に対して, p = &x; は x のアドレスのポインタ変数 p への代入 ポインタ変数の扱い方 3 間接参照 (
PowerPoint プレゼンテーション
プログラミング応用演習 第 4 回再帰的構造体 プログラミングを 余談 : 教えることの難しさ 丁寧に説明しないと分かってもらえない 説明すると 小難しくなる学生が目指すべきところプログラム例を説明されて理解できる違うやり方でも良いので自力で解決できる おっけー 動けば良い という意識でプログラミング 正しく動くことのチェックは必要 解答例と自分のやり方との比較が勉強になる 今日のお題 再帰的構造体
alg2015-6r3.ppt
1 アルゴリズムとデータ 構造 第 6 回探索のためのデータ構造 (1) 補稿 : 木の巡回 ( なぞり ) 2 木の巡回 ( 第 5 回探索 (1) のスライド ) 木の巡回 * (traverse) とは 木のすべての節点を組織だった方法で訪問すること 深さ優先探索 (depth-first search) による木の巡回 *) 木の なぞり ともいう 2 3 1 3 4 1 4 5 7 10
memo
数理情報工学演習第一 C プログラミング演習 ( 第 5 回 ) 2015/05/11 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 今日の内容 : プロトタイプ宣言 ヘッダーファイル, プログラムの分割 課題 : 疎行列 2 プロトタイプ宣言 3 C 言語では, 関数や変数は使用する前 ( ソースの上のほう ) に定義されている必要がある. double sub(int
Taro-プログラミングの基礎Ⅱ(公
0. 目次 2. プログラムの作成 2. 1 コラッツ問題 自然数 n から出発して n が偶数ならば 2 で割り n が奇数ならば 3 倍して 1 を足す操作を行う この操作を繰り返すと最後に 1 になると予想されている 問題 1 自然数 aの操作回数を求めよ 問題 2 自然数 aから bまでのなかで 最大操作回数となる自然数を求めよ 2. 2 耐久数 正整数の各桁の数字を掛け 得られた結果についても同様の操作を繰り返す
PowerPoint Template
プログラミング演習 Ⅲ Linked List P. Ravindra S. De Silva e-mail: [email protected], Room F-413 URL: www.icd.cs.tut.ac.jp/~ravi/prog3/index_j.html 連結リストとは? 一つひとつの要素がその前後の要素との参照関係をもつデータ構造 A B C D 連結リストを使用する利点 - 通常の配列はサイズが固定されている
untitled
II 4 Yacc Lex 2005 : 0 1 Yacc 20 Lex 1 20 traverse 1 %% 2 [0-9]+ { yylval.val = atoi((char*)yytext); return NUM; 3 "+" { return + ; 4 "*" { return * ; 5 "-" { return - ; 6 "/" { return / ; 7 [ \t] { /*
C言語によるアルゴリズムとデータ構造
Algorithms and Data Structures in C 4 algorithm List - /* */ #include List - int main(void) { int a, b, c; int max; /* */ Ÿ 3Ÿ 2Ÿ 3 printf(""); printf(""); printf(""); scanf("%d", &a); scanf("%d",
I. Backus-Naur BNF S + S S * S S x S +, *, x BNF S (parse tree) : * x + x x S * S x + S S S x x (1) * x x * x (2) * + x x x (3) + x * x + x x (4) * *
2015 2015 07 30 10:30 12:00 I. I VI II. III. IV. a d V. VI. 80 100 60 1 I. Backus-Naur BNF S + S S * S S x S +, *, x BNF S (parse tree) : * x + x x S * S x + S S S x x (1) * x x * x (2) * + x x x (3) +
Microsoft Word - Cプログラミング演習(10)
第 10 回 (6/25) 3. ファイルとその応用 (3) ファイルの更新 シーケンシャルファイルの更新 シーケンシャルファイルでは, 各レコードが可変長で連続して格納されており, その中の特定のレコードを変更することができない そこで一般的には, マスタファイルからデータを取り出し, 更新処理を行ったあとに新マスタファイルに書き込む 注 ) マスタファイル : 主ファイル, 基本ファイルと呼ばれるファイルで内容は比較的固定的であり,
Microsoft PowerPoint - algo ppt [互換モード]
( 復習 ) アルゴリズムとは アルゴリズム概論 - 探索 () - アルゴリズム 問題を解くための曖昧さのない手順 与えられた問題を解くための機械的操作からなる有限の手続き 機械的操作 : 単純な演算, 代入, 比較など 安本慶一 yasumoto[at]is.naist.jp プログラムとの違い プログラムはアルゴリズムをプログラミング言語で表現したもの アルゴリズムは自然言語でも, プログラミング言語でも表現できる
Taro-ファイル処理(公開版).jtd
ファイル処理 0. 目次 1. はじめに 2. ファイル内容の表示 3. ファイル内容の複写 3. 1 文字単位 3. 2 行単位 4. 書式付き入出力 5. 文字配列への入出力 6. 課題 6. 1 課題 1 ( ファイル圧縮 復元 ) - 1 - 1. はじめに ファイル処理プログラムの形は次のようになる #include main() { FILE *fp1,*fp2; ファイルポインタの宣言
次に示す数値の並びを昇順にソートするものとする このソートでは配列の末尾側から操作を行っていく まず 末尾の数値 9 と 8 に着目する 昇順にソートするので この値を交換すると以下の数値の並びになる 次に末尾側から 2 番目と 3 番目の 1
4. ソート ( 教科書 p.205-p.273) 整列すなわちソートは アプリケーションを作成する際には良く使われる基本的な操作であり 今までに数多くのソートのアルゴリズムが考えられてきた 今回はこれらソートのアルゴリズムについて学習していく ソートとはソートとは与えられたデータの集合をキーとなる項目の値の大小関係に基づき 一定の順序で並べ替える操作である ソートには図 1 に示すように キーの値の小さいデータを先頭に並べる
Taro-数値計算の基礎Ⅱ(公開版)
0. 目次 1. 2 分法 2. はさみうち法 3. 割線法 4. 割線法 ( 2 次曲線近似 ) 5. ニュートン法 ( 接線近似 ) - 1 - 1. 2 分法 区間 [x0,x1] にある関数 f(x) の根を求める 区間 [x0,x1] を xm=(x0+x1)/2 で 2 等分し 区間 [x0,xm],[xm,x1] に分割する f(xm) の絶対値が十分小さい値 eps より小さいとき
Microsoft Word - Cプログラミング演習(11)
第 11 回 (7/2) 4. いくつかのトピック (1) ビットごとの演算子 C 言語には, 次のようなビット単位で演算を行う特別な演算子が用意されている & ビットごとの AND ビットごとの OR ^ ビットごとの XOR( 排他的論理和 ) ~ 1 の補数これらの演算子は文字型と整数型で機能し, 浮動小数点数型では使用できない AND, OR, XOR は, それぞれのオペランドの対応するビットを比較して結果を返す
Microsoft PowerPoint - lec10.ppt
今日の内容, とポインタの組み合わせ, 例題 1. 住所録例題 2. と関数とは. を扱う関数. 例題 3. のリスト とポインタの組み合わせ 今日の到達目標 自分で を定義する 自分で定義したについて, 配列やポインタを作成する データ型 基本データ型 char 文字 (1 文字 ) int 整数 double 浮動小数など その他のデータ型配列 データの並び ( 文字列も, 文字の並び ) ポインタ
C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ
C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 今回のプログラミングの課題 次のステップによって 徐々に難易度の高いプログラムを作成する ( 参照用の番号は よくわかる C 言語 のページ番号 ) 1. キーボード入力された整数 10 個の中から最大のものを答える 2. 整数を要素とする配列 (p.57-59) に初期値を与えておき
Microsoft PowerPoint - kougi2.ppt
C プログラミング演習 第 2 回 Microsoft Visual Studio.NET を使ってみよう 説明 例題 1. プログラム実行の体験 コンピュータを役に立つ道具として実感する 次ページのプログラムを使って, Microsoft Visual Studio.NETでの C++ ソースファイル編集, ビルド, テスト実行の一連の過程を体験する 例題 1 のプログラムの機能 計算の繰り返し
PowerPoint プレゼンテーション
プログラミング応用演習 第 5 回演習 前回までのお話 ポインタ ポインタを用いた文字列処理 構造体 ファイル 再帰的構造体 リスト構造 動的メモリ管理 今日のお題 ポインタやファイルなど これまでの内容の練習 教材 以前 以下に単語を収録したファイルがあることを紹介した : /usr/share/dict/words この中からランダムに単語を取り出したファイルを用意した http://sun.ac.jp/prof/yamagu/2019app/
画像ファイルを扱う これまでに学んだ条件分岐, 繰り返し, 配列, ファイル入出力を使って, 画像を扱うプログラムにチャレンジしてみよう
第 14 回 応用 情報処理演習 ( テキスト : 第 10 章 ) 画像ファイルを扱う これまでに学んだ条件分岐, 繰り返し, 配列, ファイル入出力を使って, 画像を扱うプログラムにチャレンジしてみよう 特定色の画素の検出 ( テキスト 134 ページ ) 画像データが保存されているファイルを読み込んで, 特定色の画素の位置を検出するプログラムを作成しなさい 元画像生成画像 ( 結果の画像 )
Microsoft Word - Cプログラミング演習(12)
第 12 回 (7/9) 4. いくつかのトピック (5)main 関数の引数を利用したファイル処理 main 関数は, 起動する環境から引数を受け取ることができる 例えば 次に示すように,main 関数に引数を用いたプログラムを作成する 01 /* sample */ 02 /* main 関数の引数 */ 03 #include 04 05 main(int argc, char
Microsoft Word - no205.docx
3 応用 3.1 連結リスト 前回 先頭に追加する例を扱いました しかし start が指す node を変更することから 関数 の戻り値として作成しました 今回は ポインタ変数 start の値を関数で変更できるように ポイ ンタ変数へのポインタを利用します 先頭を削除するものと 最後を削除する関数を追加します ex25.c /* リストの追加と削除 */ typedef struct node
Microsoft Word - no15.docx
7. ファイルいままでは プログラムを実行したとき その結果を画面で確認していました 簡単なものならそれでもいいのですか 複雑な結果は画面で見るだけでなく ファイルに保存できればよいでしょう ここでは このファイルについて説明します 使う関数のプロトタイプは次のとおりです FILE *fopen(const char *filename, const char *mode); ファイルを読み書きできるようにする
cp-7. 配列
cp-7. 配列 (C プログラムの書き方を, パソコン演習で学ぶシリーズ ) https://www.kkaneko.jp/cc/adp/index.html 金子邦彦 1 本日の内容 例題 1. 月の日数配列とは. 配列の宣言. 配列の添え字. 例題 2. ベクトルの内積例題 3. 合計点と平均点例題 4. 棒グラフを描く配列と繰り返し計算の関係例題 5. 行列の和 2 次元配列 2 今日の到達目標
PowerPoint Presentation
ファイルの入出力 芝浦工業大学情報工学科 青木義満 今回の講義内容 ファイル入出力 ファイルからのデータ読込み ファイルと配列 2 1 ファイルへのデータ書き込み ( 復習 ) ソースファイル名 :fileio1.c データをファイルに書き込み #include int main(void) { ファイルポインタ宣言 int student_id = 100; char name[
Microsoft Word - 第5回 基本データ構造2(連結リスト).doc
第 5 回基本データ構造 2 連結リストとその操作 第 5 回 Page 1 5-1. リスト構造 データ部 と ポインタ部 で構成され ポインタをたどることによりデータを扱うことができる構造 5-2. 単方向リストとその操作 5-2-1. 単方向リスト 次のデータへのポインタを 1 つだけ持っているデータ構造 ( データ部は 複数のデータを持っている場合もある ) データ部 ポインタ部 ノード リストを構成する要素のことを
情報処理演習 B8クラス
予定スケジュール ( 全 15 回 ) 1 1. 終了 プログラミング言語の基礎 2. 終了 演算と型 3. 終了 プログラムの流れの分岐 (if 文,switch 文など ) 4. 終了 プログラムの流れの繰返し (do, while, for 文など ) 5. 終了 中間レポート1 6. 終了 配列 7. 終了 関数 8. 終了 文字列 ( 文字列の配列, 文字列の操作 ) 9. 終了 ポインタ
Microsoft PowerPoint - CproNt02.ppt [互換モード]
第 2 章 C プログラムの書き方 CPro:02-01 概要 C プログラムの構成要素は関数 ( プログラム = 関数の集まり ) 関数は, ヘッダと本体からなる 使用する関数は, プログラムの先頭 ( 厳密には, 使用場所より前 ) で型宣言 ( プロトタイプ宣言 ) する 関数は仮引数を用いることができる ( なくてもよい ) 関数には戻り値がある ( なくてもよい void 型 ) コメント
C のコード例 (Z80 と同機能 ) int main(void) { int i,sum=0; for (i=1; i<=10; i++) sum=sum + i; printf ("sum=%d n",sum); 2
アセンブラ (Z80) の例 ORG 100H LD B,10 SUB A LOOP: ADD A,B DEC B JR NZ,LOOP LD (SUM),A HALT ORG 200H SUM: DEFS 1 END 1 C のコード例 (Z80 と同機能 ) int main(void) { int i,sum=0; for (i=1; i
r07.dvi
19 7 ( ) 2019.4.20 1 1.1 (data structure ( (dynamic data structure 1 malloc C free C (garbage collection GC C GC(conservative GC 2 1.2 data next p 3 5 7 9 p 3 5 7 9 p 3 5 7 9 1 1: (single linked list 1
:30 12:00 I. I VI II. III. IV. a d V. VI
2018 2018 08 02 10:30 12:00 I. I VI II. III. IV. a d V. VI. 80 100 60 1 I. Backus-Naur BNF N N y N x N xy yx : yxxyxy N N x, y N (parse tree) (1) yxyyx (2) xyxyxy (3) yxxyxyy (4) yxxxyxxy N y N x N yx
ohp07.dvi
19 7 ( ) 2019.4.20 1 (data structure) ( ) (dynamic data structure) 1 malloc C free 1 (static data structure) 2 (2) C (garbage collection GC) C GC(conservative GC) 2 2 conservative GC 3 data next p 3 5
第3回 配列とリスト
連結リスト Algorithms and Data Structures on C この回の要点 連結リストによるリスト 連結リストの構造 連結リストの利点と欠点 C 言語による連結リストの実現 ヘッダファイルによるソースファイルの分割 連結リスト (linked list) リストの実現の一種 リストに含まれる各要素をリンクによって連結した構造 リンクとは 他のデータへの参照のこと 各要素は 自分から次のデータへのリンクを持つ
Taro-再帰関数Ⅰ(公開版).jtd
再帰関数 Ⅰ 0. 目次 1. 階乗関数 2. 基本演算 2. 1 乗算 2. 2 除算 2. 3 剰余 3. 最大公約数. フィボナッチ関数 5. べき乗関数 5. 1 解法 1 5. 2 解法 2-1 - 1. 階乗関数 再帰関数は 関数の中で自分自身を呼び出す関数をいう 関数を簡潔に定義することができる 階乗関数 f(n) (n 0) を明示的に書くとつぎのようになる 再帰的定義 f(n) =
char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く
変数 入出力 演算子ここまでに C 言語プログラミングの様子を知ってもらうため printf 文 変数 scanf 文 if 文を使った簡単なプログラムを紹介した 今回は変数の詳細について習い それに併せて使い方が増える入出力処理の方法を習う また 演算子についての復習と供に新しい演算子を紹介する 変数の宣言プログラムでデータを取り扱う場合には対象となるデータを保存する必要がでてくる このデータを保存する場所のことを
2018年度「プログラミング言語」配布資料 (12)
2018 年度 プログラミング言語 配布資料 (12) 五十嵐淳 2019 年 1 月 1 日 目次 1 2 分探索木 in C (C/bst/) 1 1.1 2 分木の表現............................................. 1 1.2 探索.................................................. 4 1.3 挿入..................................................
Taro-ビット処理(公開版).jtd
0. 目次 1. ビット演算 1. 1 論理積 論理和 排他的論理和 1. 2 左シフト 右シフト 2. ビット列操作 2. 1 char 型変数の表示 2. 2 int 型変数の表示 2. 3 int 型変数のビット数 2. 4 ビット単位の設定 3. 課題 3. 1 文字の詰め込みと取り出し 3. 2 ビット反転 3. 3 巡回シフト - 1 - 1. ビット演算 つぎのビット演算を使って ビット単位の処理ができる
Microsoft PowerPoint - prog04.ppt
プログラミング言語 2 第 04 回 (2007 年 05 月 14 日 ) 今日の配布物 片面の用紙 1 枚 今日の課題が書かれています 本日の出欠を兼ねています 1 今日やること http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/language/ にアクセスすると 教材があります 2007 年 05 月 14 日分と書いてある部分が 本日の教材です 本日の内容
プログラミング実習I
プログラミング実習 I 05 関数 (1) 人間システム工学科井村誠孝 [email protected] 関数とは p.162 数学的には入力に対して出力が決まるもの C 言語では入出力が定まったひとまとまりの処理 入力や出力はあるときもないときもある main() も関数の一種 何かの仕事をこなしてくれる魔法のブラックボックス 例 : printf() 関数中で行われている処理の詳細を使う側は知らないが,
オートマトンと言語
オートマトンと言語 4 回目 5 月 2 日 ( 水 ) 3 章 ( グラフ ) の続き 授業資料 http://ir.cs.yamanashi.ac.jp/~ysuzuki/public/automaton/ 授業の予定 ( 中間試験まで ) 回数月日 内容 4 月 日オートマトンとは, オリエンテーション 2 4 月 8 日 2 章 ( 数式の記法, スタック,BNF) 3 4 月 25 日 2
I ASCII ( ) NUL 16 DLE SP P p 1 SOH 17 DC1! 1 A Q a q STX 2 18 DC2 " 2 B R b
I 4 003 4 30 1 ASCII ( ) 0 17 0 NUL 16 DLE SP 0 @ P 3 48 64 80 96 11 p 1 SOH 17 DC1! 1 A Q a 33 49 65 81 97 113 q STX 18 DC " B R b 34 50 66 8 98 114 r 3 ETX 19 DC3 # 3 C S c 35 51 67 83 99 115 s 4 EOT
プログラミング基礎
C プログラミング Ⅱ 演習 2-1(a) BMI による判定 文字列, 身長 height(double 型 ), 体重 weight (double 型 ) をメンバとする構造体 Data を定義し, それぞれのメンバの値をキーボードから入力した後, BMI を計算するプログラムを作成しなさい BMI の計算は関数化すること ( ) [ ] [ ] [ ] BMI = 体重 kg 身長 m 身長
今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること
C プログラミング演習 1( 再 ) 4 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順
