Taro-スタック(公開版).jtd
|
|
|
- つづる たかはし
- 6 years ago
- Views:
Transcription
1 0. 目次 配列によるの実現 1. 2 再帰的なデータ構造によるの実現 1. 3 地図情報処理 1. 4 問題 問題 1 グラフ探索問題 - 1 -
2 1. は データの出し入れが一カ所で行われ 操作は追加と削除ができるデータ構造をいう 出入口 追加 削除 操作 最初 111 追加 追加 追加 追加 は一杯で追加失敗 333 削除 削除
3 1. 1 配列によるの実現 配列での実現 : 変数 top でに保存されるデータの位置を示す 変数 top の初期値は 0 とする データを保存する場合 変数 top が指す位置にデータが保存され 変数 top の値を 1 増やす データを取り出す場合 変数 top の値を 1 減らし 変数 top の指す位置からデータが取り出される 変数 top の値は 要素の数でもある 最初 配列 top= 追加配列 111 top= 追加配列 top= 追加 配列 top= 追加 配列 は一杯で追加失敗 top= 削除配列 top= 削除配列 111 top=1-3 -
4 ( 配列表現 ) へ要素の追加 追加前 0 1 top=2 stack 追加データ : 333 追加後 top=3 stack stack[top] = x; top++; ( 配列表現 ) から要素の削除 削除前 top= 削除データ : 333 削除後 0 1 top= top--; - 4 -
5 プログラム ( st111.c) の操作を行うプログラム 操作 1: 正整数を読み込みに追加 操作 0: からデータを取り出す 操作 -1: 終了 1 /* << st111.c >> */ 2 #include <stdio.h> 3 #define SMAX 2 /* に保存できるデータ数 */ 4 5 int main() { 6 int i, 7 op, /* 操作 */ 8 stack[smax], /* を実現する配列 */ 9 top, /* に保存されるデータの位置 */ 10 x; /* データ */ /* の初期化 */ 13 top = 0; /* 操作 */ 16 while( 1 ) { 17 /* の表示 */ 18 printf(" : "); 19 for( i=0; i<top; i++ ) { printf("%d ",stack[i]); } 20 printf("\n"); /* 操作入力 */ 23 printf(" 操作 : "); scanf("%d",&op); 24 switch( op ) { case 1: /* 追加データを読み込む */ 27 printf(" データ :"); scanf("%d",&x); 28 /* にデータを追加 */ 29 if( top < SMAX ) { 30 stack[top] = x; top++; 31 } else { 32 printf(" が一杯です \n"); 33 } 34 break; case 0: /* からデータを削除 */ 37 if( top > 0 ) { 38 top--; 39 } else { 40 printf(" が空です \n"); 41 } 42 break; - 5 -
6 43 44 case -1: /* 終了 */ 45 exit(0); 46 } 47 } 48 } 実行結果 % cc st111.c %./a.out : 操作 : 1 データ :111 : 111 操作 : 1 データ :222 : 操作 : 1 データ :333 が一杯です : 操作 : 0 : 111 操作 : 0 : 操作 : 0 が空です : 操作 :
7 1. 2 再帰的なデータ構造によるの実現 構造体を用いた再帰的なデータ構造 ( 構造体のメンバに他の構造体を指すポインタを含む ) で実現する head は の先頭を指す NULL はリストの最後を意味する head リストヘッド NULL 操作 最初 head NULL 111 追加 head 111 NULL 222 追加 head NULL 333 追加 head NULL 333 削除 ( 注意 ) 構造体が確保できる間 追加操作が可能 head NULL 222 削除 head 111 NULL - 7 -
8 ( 再帰的表現 ) へ要素の追加 追加前 head a b NULL 追加後 追加データ : x head x a b NULL p p = (struct NODE *)malloc(sizeof(struct NODE)); p->info = x; p->next = head->next; head->next = p; ( 再帰的表現 ) から要素の削除 削除前 head a b c NULL q 削除後 head b c NULL q = head->next; head->next = q->next; - 8 -
9 プログラム ( st121.c) の操作を行うプログラム操作 1: 正整数を読み込みに追加 操作 0: からデータを取り出す 操作 -1: 終了 1 /* << st121.c >> */ 2 #include <stdio.h> 3 #include <stdlib.h> 4 struct NODE { 5 int info; 6 struct NODE *next; 7 }; 8 9 int main() { 10 int op, /* 操作 */ 11 x; /* データ */ 12 struct NODE *head, /* の先頭を指すポインタ変数 */ 13 *p, /* 作業用ポインタ変数 */ 14 *q; /* 作業用ポインタ変数 */ /* リストヘッドの作成 */ 17 head = (struct NODE *)malloc(sizeof(struct NODE)); 18 head->next = NULL; while( 1 ) { 21 /* の表示 */ 22 printf(" : "); 23 p = head->next; 24 while( p!= NULL ) { printf("%d ",p->info); p = p->next; } 25 printf("\n"); /* 操作入力 */ 28 printf(" 操作 : "); scanf("%d",&op); 29 switch( op ) { case 1: /* 追加データを読み込む */ 32 printf(" データ :"); scanf("%d",&x); 33 /* にデータを追加 */ 34 p = (struct NODE *)malloc(sizeof(struct NODE)); 35 p->info = x; 36 p->next = head->next; 37 head->next = p; 38 break; case 0: /* からデータを削除 */ 41 if( head->next!= NULL ) { 42 q = head->next; 43 head->next = q->next; - 9 -
10 44 } else { 45 printf(" は空です \n"); 46 } 47 break; case -1: /* 終了 */ 50 exit(0); 51 } 52 } 53 } 実行結果 % cc st121.c %./a.out : 操作 : 1 データ :111 : 111 操作 : 1 データ :222 : 操作 : 1 データ :333 : 操作 : 0 : 操作 : 0 : 111 操作 : 0 : 操作 : 0 は空です : 操作 :
11 1. 3 地図情報処理 0 と 1 で与えられた地図情報から島 (1 が上下左右に隣接する領域 ) の個数を求める問題を考察する なお 0 は海を表し 1 は陸を表す 地図情報 この場合 島の個数は 4 となる 考え方 1 地図のすべての点について 2 を行う 2 点の値が 1 の場合 隣接する点で値が 1 となる点をひとつの島として登録する 登録した島の点は 再度登録されないように値を変更しておく 動作 ( 1 ) 地図情報 ( 2 ) 地図情報 ( 3 ) 地図情報 ( 4 ) 地図情報 ( 5 ) 地図情報
12 プログラム ( st131.c) 1 /* << st131.c >> */ 2 #include <stdio.h> 3 #include <stdlib.h> 4 #define M 30 /* 行の最大値 */ 5 #define N 30 /* 列の最大値 */ 6 7 int main() { 8 int a[m+2][n+2], /* 地図情報を保存する配列 */ 9 i,j,k,l, 10 m, /* 行数 */ 11 n, /* 列数 */ 12 num, /* 島の番号 */ 13 ti,tj; 14 int si[m*n], /* 関連の配列 */ 15 sj[m*n], /* 関連の配列 */ 16 top; /* 関連の変数 */ /* 地図情報 ( m: 行数 n: 列数 ) の読み込み */ 19 scanf("%d%d",&m,&n); 20 if( (m <= 0) (m > M) 21 (n <= 0) (n > N) ) { exit; } 22 for( i=1; i<=m; i++ ) { 23 for( j=1; j<=n; j++ ) { scanf("%1d",&a[i][j]); } 24 } /* 与えられた地図情報の周囲を海としておくと 処理が簡潔になる */ 27 for( j=0; j<=n+1; j++ ) { 28 a[0][j] = 0; a[m+1][j] = 0; 29 } 30 for( i=1; i<=m; i++ ) { 31 a[i][0] = 0; a[i][n+1] = 0; 32 } /* 地図情報の表示 */ 35 printf(" 探索前 \n"); 36 for( i=1; i<=m; i++ ) { 37 for( j=1; j<=n; j++ ) { printf("%d",a[i][j]); } 38 printf("\n"); 39 } /* 初期設定 */ 42 num = 1; /* 地図情報のすべての点について 探索する */ 45 for( i=1; i<=m; i++ ) { 46 for( j=1; j<=n; j++ ) { 47 /* 点 (i,j) が 0 すなわち 海の場合 スキップ */ 48 if( a[i][j] == 0 ) { continue; }
13 49 50 /* 点 (i,j) が 1 以外 すなわち すでに探索済みの場合 スキップ */ 51 if( a[i][j] > 1 ) { continue; } /* 点 (i,j) が 1 すなわち未探索の場合 島を確定する */ 54 num++; /* の初期化 */ 57 si[0] = i; sj[0] = j; top = 1; /* (si[*],sj[*]) を使って 点 (ti,tj) に隣接する陸の 60 点をすべて同じ島の番号に設定する */ 61 while( top > 0 ) { 62 ti = si[top-1]; tj = sj[top-1]; top--; 63 a[ti][tj] = num; if( a[ti-1][tj] == 1 ) { 66 si[top]=ti-1; sj[top]=tj; top++; 67 } 68 if( a[ti+1][tj] == 1 ) { 69 si[top]=ti+1; sj[top]=tj; top++; 70 } 71 if( a[ti][tj-1] == 1 ) { 72 si[top]=ti; sj[top]=tj-1; top++; 73 } 74 if( a[ti][tj+1] == 1 ) { 75 si[top]=ti; sj[top]=tj+1; top++; 76 } 77 } /* 途中結果の表示 */ 80 printf(" 途中結果 \n"); 81 for( k=1; k<=m; k++ ) { 82 for( l=1; l<=n; l++ ) { printf("%1d",a[k][l]); } 83 printf("\n"); 84 } 85 } 86 } /* 最終結果の表示 */ 89 printf(" 探索後 \n"); 90 for( i=1; i<=m; i++ ) { 91 for( j=1; j<=n; j++ ) { printf("%1d",a[i][j]); } 92 printf("\n"); 93 } 94 printf(" 島の個数 : %d\n",num-1); 95 }
14 実行結果 % cat st131.dat % cc st131.c %./a.out < st131.dat 探索前 途中結果 途中結果 途中結果 途中結果
15 探索後 島の個数 :
16 1. 4 問題 問題 1 グラフ探索問題 与えられたグラフにおいて 開始節点から到達できる節点をすべて求める問題を考察する 考え方 節点に隣接する節点を隣接節点とよぶ ( 手順 a) 始点を訪問済節点とし に格納する 他の節点は未訪問節点とする ( 手順 b) から節点をひとつ取り出す この節点の隣接節点が未訪問の場合 訪問済節点とした後 に格納する 訪問済の場合 何もしない ( 手順 c) 手順 b をが空になるまで繰り返す ( 手順 d) 訪問済節点を表示する 動作開始節点を節点 1 とする ( 1 ) 手順 a 節点 訪問済 未訪問節点は空欄とする ( 2 ) 手順 b 節点 訪問済 2 訪問済 5 3 訪問済 未訪問節点は空欄とする
17 ( 3 ) 手順 b 節点 訪問済 2 訪問済 訪問済 4 4 訪問済 訪問済 未訪問節点は空欄とする ( 4 ) 手順 b 節点 訪問済 2 訪問済 5 3 訪問済 4 4 訪問済 訪問済 未訪問節点は空欄とする ( 5 ) 手順 b 節点 訪問済 2 訪問済 5 3 訪問済 4 訪問済 訪問済 未訪問節点は空欄とする ( 6 ) 手順 b 終了 節点 訪問済 2 訪問済 5 3 訪問済 4 訪問済 訪問済 未訪問節点は空欄とする プログラム ( st141.c) 1 /* << st141.c >> */ 2 #include <stdio.h> 3 #include <stdlib.h> 4 #define N 99 /* 節点の最大数 */ 5 struct NODE { 6 int info; 7 struct NODE *next; /* nextはポインタ変数 */ 8 }; 9 10 int main() { 11 struct NODE *head[n+1], /* 節点 iに隣接する節点のリスト */ 12 *p, /* 作業用ポインタ変数 */
18 13 *q; /* 作業用ポインタ変数 */ 14 int d0,d1, /* (d0,d1) は辺を意味する */ 15 i, 16 n, /* 節点の個数 */ 17 s, /* 開始節点 */ 18 v[n+1]; /* v[i]=0 節点 iが未訪問 19 v[i]=1 節点 iが訪問済を意味する */ 20 int stack[99], /* 関係の配列 */ 21 top; /* 関係の変数 */ /* 節点の個数 nを入力 */ 24 scanf("%d",&n); 25 if( (n <= 0) (n > N) ) { exit; } /* 各節点のリストヘッドの作成 */ 28 for( i=1; i<=n; i++ ) { 29 head[i] = (struct NODE *)malloc(sizeof(struct NODE)); 30 head[i]->info = i; 31 head[i]->next = NULL; 32 } /* グラフの作成 */ 35 while( 1 ) { 36 /* 辺の入力 (d0,d1) は辺を意味する */ 37 scanf("%d%d",&d0,&d1); 38 if( (d0 <= 0) (d0 > n) (d1 <= 0) (d1 > n) ) { break; } q = (struct NODE *)malloc(sizeof(struct NODE)); 41 q->info = d1; 42 q->next = NULL; /* 入力した辺 (d0,d1) をリストの先頭に挿入する */ 45 p = head[d0]->next; 46 head[d0]->next = 1 ; 47 q->next = 2 ; 48 } /* グラフの表示 */ 51 printf(" グラフ \n"); 52 for( i=1; i<=n; i++ ) { 53 printf("%d: ",i); 54 p = head[i]->next; 55 while( p!= NULL ) { 56 printf("%d ",p->info); 57 p = p->next; 58 } 59 printf("\n"); 60 } /* 到達節点の探索 */
19 63 64 while( 1 ) { 65 /* 開始節点の入力 */ 66 scanf("%d",&s); 67 if( s == 0 ) { break; } /* 初期設定 */ 70 for( i=1; i<=n; i++ ) { /* すべての節点を未訪問に設定 */ 71 v[i] = 0; 72 } 73 stack[0] = s; top = 1; /* topは 次に格納する位置を意味する 74 格納されている節点数でもある */ 75 v[s] = 1; /* 開始節点 sを訪問済にする */ /* 操作 */ 78 while( top > 0 ) { 79 /* 節点 v[top-1] に隣接する節点で 未訪問であればに格納 */ 80 p = head[stack[top-1]]->next; top--; 81 while( p!= NULL ) { 82 /* 節点 p->infoが未訪問の場合 */ 83 if( v[p->info] == 3 ) { 84 stack[top] = 4 ; 85 v[stack[top]] = 5 ; 86 top++; 87 } 88 p = p->next; 89 } 90 } /* 到達節点の出力 */ 93 printf(" 開始節点 : %d ",s); 94 printf(" 到達節点 : "); 95 for( i=1; i<=n; i++ ) { 96 if( v[i] == 1 ) { printf(" %d",i); } 97 } 98 printf("\n"); 99 } 100 }
20 グラフ 実行結果 % cat g1.dat % cc st141.c %./a.out < g1.dat グラフ 1: 3 2 2: 4 1 3: : : 4 3 開始節点 : 1 到達節点 : 開始節点 : 5 到達節点 :
21 グラフ 実行結果 % cat g2.dat %./a.out < g2.dat グラフ 1: 3 2 2: 4 1 3: : : 4 3 6: 8 7 7: 8 6 8: 7 6 開始節点 : 1 到達節点 : 開始節点 : 8 到達節点 :
Taro-2分探索木Ⅰ(公開版).jtd
2 分探索木 Ⅰ 0. 目次 1. 2 分探索木とは 2. 2 分探索木の作成 3. 2 分探索木の走査 3. 1 前走査 3. 2 中走査 3. 3 問題 問題 1 問題 2 後走査 4. 2 分探索木の表示 - 1 - 1. 2 分探索木とは 木はいくつかの節点と節点同士を結ぶ辺から構成される 2 つの節点 u,v が直接辺で結ばれているとき 一方を親節点 他方を子節点という ある節点の親節点は高々
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])
Taro-プログラミングの基礎Ⅱ(公
0. 目次 2. プログラムの作成 2. 1 コラッツ問題 自然数 n から出発して n が偶数ならば 2 で割り n が奇数ならば 3 倍して 1 を足す操作を行う この操作を繰り返すと最後に 1 になると予想されている 問題 1 自然数 aの操作回数を求めよ 問題 2 自然数 aから bまでのなかで 最大操作回数となる自然数を求めよ 2. 2 耐久数 正整数の各桁の数字を掛け 得られた結果についても同様の操作を繰り返す
Taro-ポインタ変数Ⅰ(公開版).j
0. 目次 1. ポインタ変数と変数 2. ポインタ変数と配列 3. ポインタ変数と構造体 4. ポインタ変数と線形リスト 5. 問題 問題 1 問題 2-1 - 1. ポインタ変数と変数 ポインタ変数には 記憶領域の番地が格納されている 通常の変数にはデータが格納されている 宣言 int *a; float *b; char *c; 意味ポインタ変数 aは 整数型データが保存されている番地を格納している
バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科
バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科 ポインタ変数の扱い方 1 ポインタ変数の宣言 int *p; double *q; 2 ポインタ変数へのアドレスの代入 int *p; と宣言した時,p がポインタ変数 int x; と普通に宣言した変数に対して, p = &x; は x のアドレスのポインタ変数 p への代入 ポインタ変数の扱い方 3 間接参照 (
プログラミングI第10回
プログラミング 1 第 10 回 構造体 (3) 応用 リスト操作 この資料にあるサンプルプログラムは /home/course/prog1/public_html/2007/hw/lec/sources/ 下に置いてありますから 各自自分のディレクトリにコピーして コンパイル 実行してみてください Prog1 2007 Lec 101 Programming1 Group 19992007 データ構造
memo
数理情報工学演習第一 C プログラミング演習 ( 第 5 回 ) 2015/05/11 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 今日の内容 : プロトタイプ宣言 ヘッダーファイル, プログラムの分割 課題 : 疎行列 2 プロトタイプ宣言 3 C 言語では, 関数や変数は使用する前 ( ソースの上のほう ) に定義されている必要がある. double sub(int
PowerPoint プレゼンテーション
プログラミング応用演習 第 5 回演習 前回までのお話 ポインタ ポインタを用いた文字列処理 構造体 ファイル 再帰的構造体 リスト構造 動的メモリ管理 今日のお題 ポインタやファイルなど これまでの内容の練習 教材 以前 以下に単語を収録したファイルがあることを紹介した : /usr/share/dict/words この中からランダムに単語を取り出したファイルを用意した http://sun.ac.jp/prof/yamagu/2019app/
Microsoft PowerPoint - lec10.ppt
今日の内容, とポインタの組み合わせ, 例題 1. 住所録例題 2. と関数とは. を扱う関数. 例題 3. のリスト とポインタの組み合わせ 今日の到達目標 自分で を定義する 自分で定義したについて, 配列やポインタを作成する データ型 基本データ型 char 文字 (1 文字 ) int 整数 double 浮動小数など その他のデータ型配列 データの並び ( 文字列も, 文字の並び ) ポインタ
PowerPoint プレゼンテーション
プログラミング応用演習 第 4 回再帰的構造体 プログラミングを 余談 : 教えることの難しさ 丁寧に説明しないと分かってもらえない 説明すると 小難しくなる学生が目指すべきところプログラム例を説明されて理解できる違うやり方でも良いので自力で解決できる おっけー 動けば良い という意識でプログラミング 正しく動くことのチェックは必要 解答例と自分のやり方との比較が勉強になる 今日のお題 再帰的構造体
Microsoft Word - no205.docx
3 応用 3.1 連結リスト 前回 先頭に追加する例を扱いました しかし start が指す node を変更することから 関数 の戻り値として作成しました 今回は ポインタ変数 start の値を関数で変更できるように ポイ ンタ変数へのポインタを利用します 先頭を削除するものと 最後を削除する関数を追加します ex25.c /* リストの追加と削除 */ typedef struct node
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 連結リストを使用する利点 - 通常の配列はサイズが固定されている
Microsoft Word - no15.docx
7. ファイルいままでは プログラムを実行したとき その結果を画面で確認していました 簡単なものならそれでもいいのですか 複雑な結果は画面で見るだけでなく ファイルに保存できればよいでしょう ここでは このファイルについて説明します 使う関数のプロトタイプは次のとおりです FILE *fopen(const char *filename, const char *mode); ファイルを読み書きできるようにする
Microsoft Word - Cプログラミング演習(10)
第 10 回 (6/25) 3. ファイルとその応用 (3) ファイルの更新 シーケンシャルファイルの更新 シーケンシャルファイルでは, 各レコードが可変長で連続して格納されており, その中の特定のレコードを変更することができない そこで一般的には, マスタファイルからデータを取り出し, 更新処理を行ったあとに新マスタファイルに書き込む 注 ) マスタファイル : 主ファイル, 基本ファイルと呼ばれるファイルで内容は比較的固定的であり,
Microsoft Word - Cプログラミング演習(11)
第 11 回 (7/2) 4. いくつかのトピック (1) ビットごとの演算子 C 言語には, 次のようなビット単位で演算を行う特別な演算子が用意されている & ビットごとの AND ビットごとの OR ^ ビットごとの XOR( 排他的論理和 ) ~ 1 の補数これらの演算子は文字型と整数型で機能し, 浮動小数点数型では使用できない AND, OR, XOR は, それぞれのオペランドの対応するビットを比較して結果を返す
問 2 ( 型変換 ) 次のプログラムを実行しても正しい結果が得られない 何が間違いかを指摘し 正しく修正せよ ただし int サイズが 2 バイト long サイズが 4 バイトの処理系での演算を仮定する #include <stdio.h> int main( void ) { int a =
問 1 配列の宣言整数型配列 data1 にデータが初期設定されている この配列 data1 のデータを下図のように 整数型配列 data2 に代入しなさい また data2 の内容を printf( "data2[0] = %d\n", data2[0] ); printf( "data2[5] = %d\n", data2[5] ); を用いて出力しなさい 実行結果 data2[0] = 76
Taro-ファイル処理(公開版).jtd
ファイル処理 0. 目次 1. はじめに 2. ファイル内容の表示 3. ファイル内容の複写 3. 1 文字単位 3. 2 行単位 4. 書式付き入出力 5. 文字配列への入出力 6. 課題 6. 1 課題 1 ( ファイル圧縮 復元 ) - 1 - 1. はじめに ファイル処理プログラムの形は次のようになる #include main() { FILE *fp1,*fp2; ファイルポインタの宣言
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) =
cp-7. 配列
cp-7. 配列 (C プログラムの書き方を, パソコン演習で学ぶシリーズ ) https://www.kkaneko.jp/cc/adp/index.html 金子邦彦 1 本日の内容 例題 1. 月の日数配列とは. 配列の宣言. 配列の添え字. 例題 2. ベクトルの内積例題 3. 合計点と平均点例題 4. 棒グラフを描く配列と繰り返し計算の関係例題 5. 行列の和 2 次元配列 2 今日の到達目標
プログラミング基礎
C プログラミング Ⅱ 演習 2-1(a) BMI による判定 文字列, 身長 height(double 型 ), 体重 weight (double 型 ) をメンバとする構造体 Data を定義し, それぞれのメンバの値をキーボードから入力した後, BMI を計算するプログラムを作成しなさい BMI の計算は関数化すること ( ) [ ] [ ] [ ] BMI = 体重 kg 身長 m 身長
Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]
if 文 (a と b の大きい方を表示 ) C 言語 Ⅰ の復習 条件判定 (if, 条件式 ) ループ (for[ 二重まで ], while, do) 配列 ( 次元 次元 ) トレース int a, b; printf( 整数 a: ); scanf( %d, &a); printf( 整数 b: ); scanf( %d, &b); //つのif 文で表現する場合間違えやすい どっちに =
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
1. 入力した正の整数を降順に並べ換えて出力するプログラムを作成せよ プログラムは個別にコンパイルし make コマンドで実行すること 入力データは 50 以下とし 以下の数が混在しているとする 16 進数 : 先頭 1 文字が x または X( エックスの小文字か大文字 ) 8 進数 : 先頭 1
1. 入力した正の整数を降順に並べ換えて出力するプログラムを作成せよ プログラムは個別にコンパイルし make コマンドで実行すること 入力データは 50 以下とし 以下の数が混在しているとする 16 進数 : 先頭 1 文字が x または X( エックスの小文字か大文字 ) 8 進数 : 先頭 1 文字が 0( 零 ) 10 進数 : 先頭 1 文字が 0( 零 ) 以外の数字 1.1 プログラム
Microsoft Word - 第5回 基本データ構造2(連結リスト).doc
第 5 回基本データ構造 2 連結リストとその操作 第 5 回 Page 1 5-1. リスト構造 データ部 と ポインタ部 で構成され ポインタをたどることによりデータを扱うことができる構造 5-2. 単方向リストとその操作 5-2-1. 単方向リスト 次のデータへのポインタを 1 つだけ持っているデータ構造 ( データ部は 複数のデータを持っている場合もある ) データ部 ポインタ部 ノード リストを構成する要素のことを
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
次に示す数値の並びを昇順にソートするものとする このソートでは配列の末尾側から操作を行っていく まず 末尾の数値 9 と 8 に着目する 昇順にソートするので この値を交換すると以下の数値の並びになる 次に末尾側から 2 番目と 3 番目の 1
4. ソート ( 教科書 p.205-p.273) 整列すなわちソートは アプリケーションを作成する際には良く使われる基本的な操作であり 今までに数多くのソートのアルゴリズムが考えられてきた 今回はこれらソートのアルゴリズムについて学習していく ソートとはソートとは与えられたデータの集合をキーとなる項目の値の大小関係に基づき 一定の順序で並べ替える操作である ソートには図 1 に示すように キーの値の小さいデータを先頭に並べる
Microsoft Word - Cプログラミング演習(12)
第 12 回 (7/9) 4. いくつかのトピック (5)main 関数の引数を利用したファイル処理 main 関数は, 起動する環境から引数を受け取ることができる 例えば 次に示すように,main 関数に引数を用いたプログラムを作成する 01 /* sample */ 02 /* main 関数の引数 */ 03 #include 04 05 main(int argc, char
C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ
C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 今回のプログラミングの課題 次のステップによって 徐々に難易度の高いプログラムを作成する ( 参照用の番号は よくわかる C 言語 のページ番号 ) 1. キーボード入力された整数 10 個の中から最大のものを答える 2. 整数を要素とする配列 (p.57-59) に初期値を与えておき
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 より小さいとき
PowerPoint Presentation
ファイルの入出力 芝浦工業大学情報工学科 青木義満 今回の講義内容 ファイル入出力 ファイルからのデータ読込み ファイルと配列 2 1 ファイルへのデータ書き込み ( 復習 ) ソースファイル名 :fileio1.c データをファイルに書き込み #include int main(void) { ファイルポインタ宣言 int student_id = 100; char name[
gengo1-11
関数の再帰定義 自然数 n の階乗 n! を計算する関数を定義してみる 引数は整数 返却値も整数 n! = 1*2*3*... * (n 1)*n である ただし 0! = 1 とする int factorial(int n) int i, tmp=1; if( n>0 ) for(i=1; i
PowerPoint プレゼンテーション
プログラミング応用演習 第 2 回文字列とポインタ 先週のパズルの解説 答え : 全部 p a 1 図の書き方 : p+1 は式であって その値を格納する記憶場所を考えないので 四角で囲まない 2 p+1 同じものを表すいろいろな書き方をしてみましたが パズル以上の意味はありません プログラム中に書くときは p+1 が短くていいんじゃないかな p+1 は 2 の記憶場所 p[1] は 2 に格納されている値
PowerPoint プレゼンテーション
プログラミング応用演習 第 2 回文字列とポインタ 先週のパズルの解説 答え : 全部 p a 1 図の書き方 : p+1 は式であって その値を格納する記憶場所を考えないので 四角で囲まない 2 p+1 同じものを表すいろいろな書き方をしてみましたが パズル以上の意味はありません プログラム中に書くときは p+1 が短くていいんじゃないかな p+1 は 2 の記憶場所 p[1] は 2 に格納されている値
Microsoft PowerPoint - CproNt02.ppt [互換モード]
第 2 章 C プログラムの書き方 CPro:02-01 概要 C プログラムの構成要素は関数 ( プログラム = 関数の集まり ) 関数は, ヘッダと本体からなる 使用する関数は, プログラムの先頭 ( 厳密には, 使用場所より前 ) で型宣言 ( プロトタイプ宣言 ) する 関数は仮引数を用いることができる ( なくてもよい ) 関数には戻り値がある ( なくてもよい void 型 ) コメント
: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
Microsoft Word - Cプログラミング演習(7)
第 7 回 (6/4) 2. 構造体 構造体とは, 同じ型に限定されない複数の関連するデータメンバの集合である 構造体の宣言構造体指定子 struct を用いて struct 構造体タグ名 { メンバ 1 の宣言 ; メンバ 2 の宣言 ; メンバ n の宣言 ; }; 注 ) 構造体タグ名は構造体の型名で, 内容を定義するものでオブジェクトではなく, 論理的なテンプレートである 構造体の変数の宣言実際の記憶領域を占める物理的実体を確保する
Taro-cshプログラミングの応用.jt
c s h プログラミングの応用 0. 目次 1. 課題 課題 1 : 与えられたパス名からディレクトリ名とファイル名を分離し出力せよ 課題 2 : オプション (-in) の後に続く文字列とオプション (-out) の後に続く文字列をそれぞれまとめる オプションの指定がなく文字列から始まるとき -in を仮定する 課題 3 : 複数のファイルから与えられたパターンとマッチする文字列を含む行を取り出せ
char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く
変数 入出力 演算子ここまでに C 言語プログラミングの様子を知ってもらうため printf 文 変数 scanf 文 if 文を使った簡単なプログラムを紹介した 今回は変数の詳細について習い それに併せて使い方が増える入出力処理の方法を習う また 演算子についての復習と供に新しい演算子を紹介する 変数の宣言プログラムでデータを取り扱う場合には対象となるデータを保存する必要がでてくる このデータを保存する場所のことを
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 - algo ppt [互換モード]
( 復習 ) アルゴリズムとは アルゴリズム概論 - 探索 () - アルゴリズム 問題を解くための曖昧さのない手順 与えられた問題を解くための機械的操作からなる有限の手続き 機械的操作 : 単純な演算, 代入, 比較など 安本慶一 yasumoto[at]is.naist.jp プログラムとの違い プログラムはアルゴリズムをプログラミング言語で表現したもの アルゴリズムは自然言語でも, プログラミング言語でも表現できる
第2回
明星大学情報学科 年後期 アルゴリズムとデータ構造 Ⅰ 第 回 Page 第 回基本データ構造 連結リストとその操作 -. リスト構造 データ部 と ポインタ部 で構成され ポインタをたどることによりデータを扱うことができる構造 -. 単方向リストとその操作 --. 単方向リスト 次のデータへのポインタを つだけ持っているデータ構造 ( データ部は 複数のデータを持っている場合もある ) データ部
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) +
人工知能入門
藤田悟 黄潤和 探索とは 探索問題 探索解の性質 探索空間の構造 探索木 探索グラフ 探索順序 深さ優先探索 幅優先探索 探索プログラムの作成 バックトラック 深さ優先探索 幅優先探索 n 個の ueen を n n のマスの中に 縦横斜めに重ならないように配置する 簡単化のために 4-ueen を考える 正解 全状態の探索プログラム 全ての最終状態を生成した後に 最終状態が解であるかどうかを判定する
