昨年度までの研究紹介 および 研究計画

Size: px
Start display at page:

Download "昨年度までの研究紹介 および 研究計画"

Transcription

1 第 12 回 ICN 研究会ワークショップ Cefore で キャッシュプラグイン開発 2018 年 8 月 30 日 ( 木 )

2 キャッシュプラグイン csmgrd は起動時に使用するキャッシュプラグインを指定 Cache plugin: キャッシュデータ保存方式 Cache algorithm: キャッシュ選択 / 置換アルゴリズム Cache Plugin Cache algorithm csmgrd csmgrd.conf CACHE_TYPE=memory CACHE_ALGORITHM= libcsmgrd_fifo File System Cache Memory Cache Cache Plugin X Cache Plugin Y LRU LFU FIFO Cache algorithm X 設定ファイルから利用するプラグイン ライブラリを指定 開発者は独自の Cache Plugin/Algorithm を実装可能 2018/8/30 ( 木 )

3 ハンズオンの目標 キャッシュアルゴリズム FIFO を自作してみよう! Cache Plugin Cache algorithm csmgrd csmgrd.conf CACHE_TYPE=memory CACHE_ALGORITHM= libcsmgrd_fifo File System Cache Memory Cache Cache Plugin X Cache Plugin Y LRU LFU FIFO Cache algorithm X 設定ファイルから利用するプラグイン ライブラリを指定 開発者は独自の Cache Plugin/Algorithm を実装可能 2018/8/30 ( 木 )

4 FIFO (first-in, first-out) の概要 最初に入ったエントリーが最初に削除される方式 ccn:/f.txt FIFO (capacity: 5) tail head cache ccn:/f.txt ccn:/e.txt ccn:/d.txt ccn:/c.txt ccn:/b.txt ccn:/a.txt remove キャッシュがいっぱいになると head からエントリーが削除されて tail に新しいエントリーが追加される

5 今回実装する FIFO のデータ構造 配列にデータを保存 置換の度にエントリ用のメモリを確保 解放しなくていい head=0 FIFO (capacity: 5) ccn:/a.txt ccn:/b.txt ccn:/c.txt ccn:/d.txt ccn:/e.txt 置換時は head が示すエントリを削除 置換後は head を 1 だけ進める ccn:/f.txt cache 新しくエントリをキャッシュ head=1 0 1 ccn:/f.txt ccn:/b.txt remove

6 cefore のファイル構造 cefore-0.7.2a/: 親ディレクトリ configure.ac: ライブラリを make するときに編集が必要 src/ csmgrd/ plugin/ filesystem_cache/, mem_cache/ : csmgrd プラグインのディレクトリ lib/ Makefile.am: ライブラリを make するときに編集が必要 lru/: LRU のライブラリ lru.c, lru.h, Makefile.am: LRU のソースコード /src/csmrd/plugin/lib 下にキャッシュ置換ライブラリを作成

7 cefore のファイル構造 cefore-0.7.2a/: 親ディレクトリ configure.ac: ライブラリを make するときに編集が必要 src/ csmgrd/ plugin/ filesystem_cache/, mem_cache/ : csmgrd プラグインのディレクトリ lib/ Makefile.am: ライブラリを make するときに編集が必要 lru/: LRU のライブラリ lru.c, lru.h, Makefile.am: LRU のソースコード wsfifo/ wsfifo.c 今回作成するファイル wsfifo.h Makefile.am

8 実装手順 ソースコード ヘッダーファイルの作成 src/csmgrd/plugin/lib/wsfifo/wsfifo.c, wsfifo.h 必要な API の実装 init(), destroy(), insert(), erase(), hit(), miss(), status() おまじない src/csmgrd/plugin/lib/wsfifo/makefile.am src/csmgrd/plugin/lib/makefile.am configure.ac ビルド autoconf automake make sudo make install

9 ソースコード ヘッダーファイルの作成 cefore:~/cefore-0.7.2a$ ls LICENSE Makefile.in aclocal.m4 autotools config.h.in configure.ac src utils Makefile.am README.md apps config configure m4 tools cefore:~/cefore-0.7.2a$ cd src/csmgrd/plugin/lib cefore:~/cefore-0.7.2a/src/csmgrd/plugin/lib$ ls fifo lfu lru Makefile.in Makefile.am cefore:~/cefore-0.7.2a/src/csmgrd/plugin/lib$ mkdir wsfifo cefore:~/cefore-0.7.2a/src/csmgrd/plugin/lib$ cp lru/makefile.am wsfifo cefore:~/cefore-0.7.2a/src/csmgrd/plugin/lib$ cd wsfifo cefore:~/cefore-0.7.2a/src/csmgrd/plugin/lib/wsfifo$ touch wsfifo.c wsfifo.h cefore:~/cefore-0.7.2a/src/csmgrd/plugin/lib/wsfifo$ ls Makefile.am wsfifo.c wsfifo.h ビルド時に編集 ビルド時に編集 今回作成 編集するファイル

10 ヘッダーファイル wsfifo.h #include <stdio.h> #include <stdlib.h> #include <csmgrd/csmgrd_plugin.h> Init API int /* If the error occurs, this value is a negative value */ init ( int capacity, /* Maximum number of entries that can be */ /* listed (it is the same value as the */ /* maximum value of the cache table) */ int (*store)(csmgrdt_content_entry*), /* store a content entry API */ void (*remove)(unsigned char*, int) /* remove a content entry API */ ); Destroy API void destroy ( void ); Insert API void insert ( CsmgrdT_Content_Entry* entry /* content entry */ ); Erase API void erase ( unsigned char* key, /* key of content entry removed from cache */ /* table */ int key_len /* length of the key */ ); Hit API void hit ( unsigned char* key, /* key of the content entry hits in the */ /* cache table */ int key_len /* length of the key */ ); Miss API void miss ( unsigned char* key, /* key of the content entry fails to hit */ /* in the cache table */ int key_len /* length of the key */ ); Status API void status ( void* arg /* state information */ ); init() 関数 destroy() 関数 insert() 関数 erase() 関数 hit() 関数 miss() 関数 status() 関数

11 ソースコード wsfifo.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <csmgrd/csmgrd_plugin.h> #include <cefore/cef_hash.h> /***** structure for listing content entries *****/ typedef struct _FifoT_Entry { unsigned char key[csmgrdc_key_max]; /* key of content entry */ int key_len; /* length of key */ int valid; FifoT_Entry; /***** State Variables *****/ static int cache_cap = 0; static int (*store_api)(csmgrdt_content_entry*); static void (*remove_api)(unsigned char*, int); static int fifo_head; static int cache_count; static FifoT_Entry* cache_entry_list; static CefT_Hash_Handle lookup_table; Init API int init ( int capacity, init() 関数 int (*store)(csmgrdt_content_entry*), void (*remove)(unsigned char*, int) ) { /* Check arguments */ if ((capacity < 1) (store == NULL) (remove == NULL)) { fprintf (stderr, "Invalid Arguments. n"); return (-1); /* Initialize variables */ cache_cap = capacity; store_api = store; remove_api = remove; fifo_head = 0; cache_count = 0; cache_entry_list = (FifoT_Entry*) calloc(cache_cap, sizeof(fifot_entry)); memset(cache_entry_list, 0, sizeof(fifot_entry) * cache_cap); lookup_table = cef_lhash_tbl_create(cache_cap); return (0); Destroy API void destroy() { destroy() 関数 fifo_head = 0; cache_count = 0; cache_cap = 0; store_api = NULL; remove_api = NULL; free(cache_entry_list); cef_lhash_tbl_destroy(lookup_table); Insert API void insert(csmgrdt_content_entry* entry) { insert() 関数 unsigned char key[csmgrdc_key_max]; int key_len; FifoT_Entry* tmp_entry; tmp_entry = &cache_entry_list[fifo_head]; /* When cache is full, remove an entry */ if (tmp_entry->valid) { cef_lhash_tbl_item_remove(lookup_table, tmp_entry->key, tmp_entry->key_len); (*remove_api)(tmp_entry->key, tmp_entry->key_len); memset(tmp_entry, 0, sizeof(fifot_entry)); cache_count--; /* Cache an entry */ key_len = csmgrd_name_chunknum_concatenate( entry->name, entry->name_len, entry->chnk_num, key); tmp_entry->key_len = key_len; memcpy(tmp_entry->key, key, key_len); tmp_entry->valid = 1; cef_lhash_tbl_item_set(lookup_table, tmp_entry->key, tmp_entry->key_len, tmp_entry); (*store_api)(entry); cache_count++; /* Proceed a hand */ fifo_head++; if (fifo_head >= cache_cap) fifo_head = 0; Erase API void erase(unsigned char* key, int key_len) { erase() 関数 /* Remove an entry */ FifoT_Entry* entry = (FifoT_Entry*)cef_lhash_tbl_item_get(lookup_table, key, key_len); cef_lhash_tbl_item_remove(lookup_table, entry->key, entry->key_len); memset(entry, 0, sizeof(fifot_entry)); cache_count--; /***** Don't call remove_api because the entry is already removed *****/ // (*remove_api)(entry->key, entry->key_len); Hit API void hit(unsigned char* key, int key_len) { fprintf(stderr, "hit n"); return; hit() 関数 miss() 関数 Miss API void miss(unsigned char* key, int key_len) { fprintf(stderr, "miss n"); return; Status API void status(void* arg) { status() 関数 return;

12 各関数の概要 関数名引数概要 init capacity: キャッシュ容量 store: プラグインにキャッシュ追加をさせるための関数ポインタ remove: プラグインにキャッシュ削除をさせるための関数ポインタ キャッシュアルゴリズムライブラリ初期化用の関数 プラグインの初期化時 (csmgrd の起動時 ) に呼び出される destroy insert erase entry: キャッシュ対象のコンテンツ情報 (CsmgrdT_Content_Entry 構造体 ) key: 削除されたコンテンツの name key_len: name 長 ライブラリ終了時の処理用の関数 プラグインの終了時に呼び出される プラグインがコンテンツをキャッシュしようとするときに呼び出される関数 ライブラリは自身のデータ構造にコンテンツの情報を登録し store 関数を呼び出してキャッシュする キャッシュがいっぱいのときは削除するコンテンツを決定し remove 関数を呼び出してキャッシュから削除する プラグインが期限切れなどの理由でキャッシュからコンテンツを削除したときに 削除したコンテンツを通知する関数 ライブラリは自身のデータ構造からコンテンツの情報を削除する (remove 関数を呼び出す必要はない ) hit miss key: ヒットしたコンテンツの name key_len: name 長 key: ミスしたコンテンツの name key_len: name 長 キャッシュヒット時に呼び出される関数 キャッシュミス時に呼び出される関数

13 データ構造 CsmgrdT_Content_Entry 構造体 /src/csmgrd/include/csmgrd/csmgrd_plugin.h で定義 メンバー変数型概要 name unsigned char[] 受信したコンテンツの名前 name_len uint16_t コンテンツの名前長 chnk_num uint32_t チャンク番号 msg unsigned char[] msg_len uint16_t メッセージ長 cefnetd から受信したメッセージ pay_len uint16_t ペイロード長 cache_time uint64_t キャッシュ時間 expiry uint64_t キャッシュ期限 node struct in_addr IP アドレス

14 有用な関数 関数名引数概要 cef_lhash_tbl_create cef_lhash_tbl_destroy cef_lhash_tbl_item_get cef_lhash_tbl_item_set cef_lhash_tbl_item_remove csmgrd_name_chunknum_ concatenate capacity: 容量 CefT_Hash_Handle ht: ハッシュテーブル CefT_Hash_Handle ht key: キー key_len: キー長 CefT_Hash_Handle ht key: キー key_len: キー長 void* value: 登録する値 CefT_Hash_Handle ht key: キー key_len: キー長 name: 名前 name_len: 名前長 chunk_num: チャンク番号 dst: 書込先 文字列をキーとして void のポインタを返すハッシュテーブルを作成する ハッシュテーブルを表す構造体 CefT_Hash_Handle を返す ハッシュテーブルの後処理を行う ハッシュテーブル ht から key をキーとしてデータを検索し void のポインタを返す ハッシュテーブル ht に key をキーとするデータ value を登録する ハッシュテーブル ht から key をキーとするデータを削除する 名前と URL を接続したバイト列を作成し dst に書き込む dst に書き込んだ新たなバイト列の長さを int で返す エントリー CsmgrdT_Content_Entry の name と chnk_num からハッシュテーブル用のキーを作るのに有用

15 変数定義 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <csmgrd/csmgrd_plugin.h> #include <cefore/cef_hash.h> /***** structure for listing content entries *****/ typedef struct _FifoT_Entry { unsigned char key[csmgrdc_key_max]; /* key of content entry */ int key_len; /* length of key */ int valid; FifoT_Entry; /***** State Variables *****/ static int cache_cap = 0; static int (*store_api)(csmgrdt_content_entry*); static void (*remove_api)(unsigned char*, int); static int fifo_head; static int cache_count; static FifoT_Entry* cache_entry_list; static CefT_Hash_Handle lookup_table;

16 init() 関数 : 穴埋め問題 int init ( int capacity, int (*store)(csmgrdt_content_entry*), void (*remove)(unsigned char*, int) ) { /* Check arguments */ if ((capacity < 1) (store == NULL) (remove == NULL)) { fprintf (stderr, "Invalid Arguments. n"); return (-1); /* Initialize variables */ cache_cap = capacity; store_api = store; remove_api = remove; fifo_head = 0; cache_count = 0; cache_entry_list = (FifoT_Entry*) calloc(cache_cap, sizeof(fifot_entry)); memset(cache_entry_list, 0, sizeof(fifot_entry) * cache_cap); lookup_table = cef_lhash_tbl_create(cache_cap); return (0);

17 init() 関数 : 答え int init ( int capacity, int (*store)(csmgrdt_content_entry*), void (*remove)(unsigned char*, int) ) { /* Check arguments */ if ((capacity < 1) (store == NULL) (remove == NULL)) { fprintf (stderr, "Invalid Arguments. n"); return (-1); /* Initialize variables */ cache_cap = capacity; store_api = store; remove_api = remove; fifo_head = 0; cache_count = 0; cache_entry_list = (FifoT_Entry*) calloc(cache_cap, sizeof(fifot_entry)); memset(cache_entry_list, 0, sizeof(fifot_entry) * cache_cap); lookup_table = cef_lhash_tbl_create(cache_cap); return (0);

18 destroy() 関数 void destroy() { fifo_head = 0; cache_count = 0; cache_cap = 0; store_api = NULL; remove_api = NULL; free(cache_entry_list); cef_lhash_tbl_destroy(lookup_table);

19 insert() 関数 : 穴埋め問題 void insert(csmgrdt_content_entry* entry) { unsigned char key[csmgrdc_key_max]; int key_len; FifoT_Entry* tmp_entry; tmp_entry = &cache_entry_list[fifo_head]; /* When cache is full, remove an entry */ if (tmp_entry->valid) { cef_lhash_tbl_item_remove(lookup_table, tmp_entry->key, tmp_entry->key_len); (*remove_api)(tmp_entry->key, tmp_entry->key_len); memset(tmp_entry, 0, sizeof(fifot_entry)); cache_count--; /* Cache an entry */ key_len = csmgrd_name_chunknum_concatenate( entry->name, entry->name_len, entry->chnk_num, key); tmp_entry->key_len = key_len; memcpy(tmp_entry->key, key, key_len); tmp_entry->valid = 1; cef_lhash_tbl_item_set(lookup_table, tmp_entry->key, tmp_entry->key_len, tmp_entry); (*store_api)(entry); cache_count++; /* Proceed a hand */ fifo_head++; if (fifo_head >= cache_cap) fifo_head = 0;

20 insert() 関数 : 答え void insert(csmgrdt_content_entry* entry) { unsigned char key[csmgrdc_key_max]; int key_len; FifoT_Entry* tmp_entry; tmp_entry = &cache_entry_list[fifo_head]; /* When cache is full, remove an entry */ if (tmp_entry->valid) { cef_lhash_tbl_item_remove(lookup_table, tmp_entry->key, tmp_entry->key_len); (*remove_api)(tmp_entry->key, tmp_entry->key_len); memset(tmp_entry, 0, sizeof(fifot_entry)); cache_count--; /* Cache an entry */ key_len = csmgrd_name_chunknum_concatenate( entry->name, entry->name_len, entry->chnk_num, key); tmp_entry->key_len = key_len; memcpy(tmp_entry->key, key, key_len); tmp_entry->valid = 1; cef_lhash_tbl_item_set(lookup_table, tmp_entry->key, tmp_entry->key_len, tmp_entry); (*store_api)(entry); cache_count++; /* Proceed a hand */ fifo_head++; if (fifo_head >= cache_cap) fifo_head = 0;

21 erase() 関数 : 穴埋め問題 void erase(unsigned char* key, int key_len) { /* Remove an entry */ FifoT_Entry* entry = (FifoT_Entry*)cef_lhash_tbl_item_get( lookup_table, key, key_len); cef_lhash_tbl_item_remove(lookup_table, entry->key, entry->key_len); memset(entry, 0, sizeof(fifot_entry)); cache_count--; /***** Don't call remove_api because the entry is already removed *****/ // (*remove_api)(entry->key, entry->key_len);

22 erase() 関数 : 答え void erase(unsigned char* key, int key_len) { /* Remove an entry */ FifoT_Entry* entry = (FifoT_Entry*)cef_lhash_tbl_item_get( lookup_table, key, key_len); cef_lhash_tbl_item_remove(lookup_table, entry->key, entry->key_len); memset(entry, 0, sizeof(fifot_entry)); cache_count--; /***** Don't call remove_api because the entry is already removed *****/ // (*remove_api)(entry->key, entry->key_len);

23 hit(), miss(), status() 関数 void hit(unsigned char* key, int key_len) { fprintf(stderr, "hit n"); return; void miss(unsigned char* key, int key_len) { fprintf(stderr, "miss n"); return; void status(void* arg) { return;

24 ソースコード fifo.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <csmgrd/csmgrd_plugin.h> #include <cefore/cef_hash.h> /***** structure for listing content entries *****/ typedef struct _FifoT_Entry { unsigned char key[csmgrdc_key_max]; /* key of content entry */ int key_len; /* length of key */ int valid; FifoT_Entry; /***** State Variables *****/ static int cache_cap = 0; static int (*store_api)(csmgrdt_content_entry*); static void (*remove_api)(unsigned char*, int); static int fifo_head; static int cache_count; static FifoT_Entry* cache_entry_list; static CefT_Hash_Handle lookup_table; Init API int init ( int capacity, init() 関数 int (*store)(csmgrdt_content_entry*), void (*remove)(unsigned char*, int) ) { /* Check arguments */ if ((capacity < 1) (store == NULL) (remove == NULL)) { fprintf (stderr, "Invalid Arguments. n"); return (-1); /* Initialize variables */ cache_cap = capacity; store_api = store; remove_api = remove; fifo_head = 0; cache_count = 0; cache_entry_list = (FifoT_Entry*) calloc(cache_cap, sizeof(fifot_entry)); memset(cache_entry_list, 0, sizeof(fifot_entry) * cache_cap); lookup_table = cef_lhash_tbl_create(cache_cap); return (0); Destroy API void destroy() { destroy() 関数 fifo_head = 0; cache_count = 0; cache_cap = 0; store_api = NULL; remove_api = NULL; free(cache_entry_list); cef_lhash_tbl_destroy(lookup_table); Insert API void insert(csmgrdt_content_entry* entry) { insert() 関数 unsigned char key[csmgrdc_key_max]; int key_len; FifoT_Entry* tmp_entry; tmp_entry = &cache_entry_list[fifo_head]; /* When cache is full, remove an entry */ if (tmp_entry->valid) { cef_lhash_tbl_item_remove(lookup_table, tmp_entry->key, tmp_entry->key_len); (*remove_api)(tmp_entry->key, tmp_entry->key_len); memset(tmp_entry, 0, sizeof(fifot_entry)); cache_count--; /* Cache an entry */ key_len = csmgrd_name_chunknum_concatenate( entry->name, entry->name_len, entry->chnk_num, key); tmp_entry->key_len = key_len; memcpy(tmp_entry->key, key, key_len); tmp_entry->valid = 1; cef_lhash_tbl_item_set(lookup_table, tmp_entry->key, tmp_entry->key_len, tmp_entry); (*store_api)(entry); cache_count++; /* Proceed a hand */ fifo_head++; if (fifo_head >= cache_cap) fifo_head = 0; Erase API void erase(unsigned char* key, int key_len) { erase() 関数 /* Remove an entry */ FifoT_Entry* entry = (FifoT_Entry*)cef_lhash_tbl_item_get(lookup_table, key, key_len); cef_lhash_tbl_item_remove(lookup_table, entry->key, entry->key_len); memset(entry, 0, sizeof(fifot_entry)); cache_count--; /***** Don't call remove_api because the entry is already removed *****/ // (*remove_api)(entry->key, entry->key_len); Hit API void hit(unsigned char* key, int key_len) { fprintf(stderr, "hit n"); return; hit() 関数 miss() 関数 Miss API void miss(unsigned char* key, int key_len) { fprintf(stderr, "miss n"); return; Status API void status(void* arg) { status() 関数 return;

25 おまじない (1) 1. src/csmgrd/plugin/lib/lru の Makefile.am を wsfifo にコピー 2. コピーした Makefile.am の lru をすべて wsfifo に置換 3. libcef_wsfifo_la_sources で wsfifo.c wsfifo.h のみ指定 ( それ以外は削除 )

26 おまじない (2) wsfifo wsfifo wsfifo/makefile 3. src/csmgrd/plugin/lib の Makefile.am の SUBDIRS に wsfifo を追加 4. configure.ac の check csmgr というコメントがある箇所の下のリストに src/csmgrd/plugin/lib/wsfifo/makefile という一行を追加

27 リビルド 以下のコマンドを実行 1. autoconf 2. automake 3. make 4. sudo make install 5. sudo ldconfig 必要なら最初に make clean を実行 csmgrd.conf に自作アルゴリズムを指定 CACHE_ALGORITHM=libcsmgrd_wsfifo /usr/local/lib 中のファイル名と合わせる

28

Ceforeチュートリアル資料_070823

Ceforeチュートリアル資料_070823 第 9 回 ICN 研究会ワークショップ Cefore チュートリアル 2017 年 8 25 ( ) Cefore l 軽量かつ汎用的な CCN ベースソフトウェアプラットフォーム u 言語 :C OS:Linux(ubuntu 14.04 or 16.04) MacOS Raspbian Android u 最小機能構成 (( 後述 )) Ø フォワーディング機能と基本オペレーションツールのみを具備

More information

memo

memo 数理情報工学演習第一 C プログラミング演習 ( 第 5 回 ) 2015/05/11 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 今日の内容 : プロトタイプ宣言 ヘッダーファイル, プログラムの分割 課題 : 疎行列 2 プロトタイプ宣言 3 C 言語では, 関数や変数は使用する前 ( ソースの上のほう ) に定義されている必要がある. double sub(int

More information

プログラミングI第10回

プログラミングI第10回 プログラミング 1 第 10 回 構造体 (3) 応用 リスト操作 この資料にあるサンプルプログラムは /home/course/prog1/public_html/2007/hw/lec/sources/ 下に置いてありますから 各自自分のディレクトリにコピーして コンパイル 実行してみてください Prog1 2007 Lec 101 Programming1 Group 19992007 データ構造

More information

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

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科 バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科 ポインタ変数の扱い方 1 ポインタ変数の宣言 int *p; double *q; 2 ポインタ変数へのアドレスの代入 int *p; と宣言した時,p がポインタ変数 int x; と普通に宣言した変数に対して, p = &x; は x のアドレスのポインタ変数 p への代入 ポインタ変数の扱い方 3 間接参照 (

More information

Microsoft PowerPoint - kougi9.ppt

Microsoft PowerPoint - kougi9.ppt C プログラミング演習 第 9 回ポインタとリンクドリストデータ構造 1 今まで説明してきた変数 #include "stdafx.h" #include int _tmain(int argc, _TCHAR* argv[]) { double x; double y; char buf[256]; int i; double start_x; double step_x; FILE*

More information

memo

memo 計数工学プログラミング演習 ( 第 3 回 ) 2017/04/25 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 内容 ポインタの続き 引数の値渡しと参照渡し 構造体 2 ポインタで指されるメモリへのアクセス double **R; 型 R[i] と *(R+i) は同じ意味 意味 R double ** ポインタの配列 ( の先頭 ) へのポインタ R[i]

More information

memo

memo 計数工学プログラミング演習 ( 第 5 回 ) 2017/05/09 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 内容 文字列 双方向リスト ハッシュ 2 文字列 文字列は char の配列 char name[] = ABC ; name は ABC を格納するのに十分な長さの配列 長さは, 文字列の長さ + 1 ( 終端記号用 ) char name[4]

More information

Taro-リストⅢ(公開版).jtd

Taro-リストⅢ(公開版).jtd リスト Ⅲ 0. 目次 2. 基本的な操作 2. 1 リストから要素の削除 2. 2 リストの複写 2. 3 リストの連結 2. 4 問題 問題 1 問題 2-1 - 2. 基本的な操作 2. 1 リストから要素の削除 まず 一般的な処理を書き つぎに 特別な処理を書く 一般的な処理は 処理 1 : リスト中に 削除するデータを見つけ 削除する場合への対応 特別な処理は 処理 2 : 先頭のデータを削除する場合への対応

More information

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

Microsoft Word - Cプログラミング演習(12) 第 12 回 (7/9) 4. いくつかのトピック (5)main 関数の引数を利用したファイル処理 main 関数は, 起動する環境から引数を受け取ることができる 例えば 次に示すように,main 関数に引数を用いたプログラムを作成する 01 /* sample */ 02 /* main 関数の引数 */ 03 #include 04 05 main(int argc, char

More information

memo

memo 計数工学プログラミング演習 ( 第 3 回 ) 2016/04/26 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 内容 ポインタ malloc 構造体 2 ポインタ あるメモリ領域 ( アドレス ) を代入できる変数 型は一致している必要がある 定義時には値は不定 ( 何も指していない ) 実際にはどこかのメモリを指しているので, #include

More information

Prog1_10th

Prog1_10th 2012 年 6 月 20 日 ( 木 ) 実施ポインタ変数と文字列前回は, ポインタ演算が用いられる典型的な例として, ポインタ変数が 1 次元配列を指す場合を挙げたが, 特に,char 型の配列に格納された文字列に対し, ポインタ変数に配列の 0 番の要素の先頭アドレスを代入して文字列を指すことで, 配列そのものを操作するよりも便利な利用法が存在する なお, 文字列リテラルは, その文字列が格納されている領域の先頭アドレスを表すので,

More information

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

Microsoft Word - Cプログラミング演習(10) 第 10 回 (6/25) 3. ファイルとその応用 (3) ファイルの更新 シーケンシャルファイルの更新 シーケンシャルファイルでは, 各レコードが可変長で連続して格納されており, その中の特定のレコードを変更することができない そこで一般的には, マスタファイルからデータを取り出し, 更新処理を行ったあとに新マスタファイルに書き込む 注 ) マスタファイル : 主ファイル, 基本ファイルと呼ばれるファイルで内容は比較的固定的であり,

More information

AquesTalk プログラミングガイド

AquesTalk プログラミングガイド AquesTalk プログラミングガイド ( 株 ) アクエスト 1. 概要 本文書は 規則音声合成ライブラリ AquesTalk をアプリケーションに組み込んで使用するためのプログラミングに関して 方法および注意点を示したものです AquesTalk には 2 種類のライブラリがあります 音声データをメモリ上に生成するものと サウンドデバイスに出力する 2 種類があります 使用するアプリケーションに応じて選択してください

More information

AquesTalk Win Manual

AquesTalk Win Manual AquesTalk Win マニュアル 株式会社アクエスト http://www.a-quest.com/ 1. 概要 本文書は 規則音声合成ライブラリ AquesTalk をアプリケーションに組み込んで使用するためのプログラミングに関して 方法および注意点を示したものです AquesTalk には 2 種類のライブラリがあります 音声データをメモリ上に生成するものと サウンドデバイスに出力する 2

More information

memo

memo 数理情報工学演習第一 C ( 第 8 回 ) 206/06/3 DEPARTMENT OF MATHEMATICAL INFORMATICS 今日の内容 : プロトタイプ宣言 ヘッダーファイル, プログラムの分割 プライオリティキュー ヒープ 課題 : ヒープソート 2 プロトタイプ宣言 C 言語では, 関数や変数は使用する前 ( ソースの上のほう ) に定義されている必要がある. double sub(int

More information

Microsoft Word - 第5回 基本データ構造2(連結リスト).doc

Microsoft Word - 第5回 基本データ構造2(連結リスト).doc 第 5 回基本データ構造 2 連結リストとその操作 第 5 回 Page 1 5-1. リスト構造 データ部 と ポインタ部 で構成され ポインタをたどることによりデータを扱うことができる構造 5-2. 単方向リストとその操作 5-2-1. 単方向リスト 次のデータへのポインタを 1 つだけ持っているデータ構造 ( データ部は 複数のデータを持っている場合もある ) データ部 ポインタ部 ノード リストを構成する要素のことを

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 第 12 回 ICN 研究会ワークショップ Cefore アプリ開発ツール cefpyco 2018 年 8 月 30 日 ( 木 ) 目次 2 cefpycoの概要 cefpycoのインストール cefpycoを用いた通信 cefnetdへの接続 Dataパケットの送信 *1 Interestパケットの送信 パケットの受信 簡易 Consumerアプリの作成 簡易 Producerアプリの作成 サンプルアプリ

More information

AquesTalk2 Win マニュアル

AquesTalk2 Win マニュアル 株式会社 AQUEST http://www.a-quest.com/ AquesTalk2 Win Manual 1. 概要 本文書は 規則音声合成ライブラリ AquesTalk2 Win をアプリケーションに組み込んで使用するためのプログラミングに関しての方法および注意点を示したものです AquesTalk2 は 簡単に小型機器への組み込みが出来る音声合成ミドルウェアです このライブラリを用いることで

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション プログラミング応用演習 第 4 回再帰的構造体 前回の出席確認演習 #include int main() { FILE *fp; int c, linecount, length, maxlength; fp=fopen("/usr/share/dict/words","r"); if (fp == NULL) return 1; linecount=0; length=0;

More information

Prog1_15th

Prog1_15th 2012 年 7 月 26 日 ( 木 ) 実施構造体と typedef typedef 宣言によって,struct 構造体タグ名という表記を再定義し, データ型名のように扱うことができる 構文は typedef struct 構造体タグ名 再定義名 ; となり, この場合の構造体変数の宣言は, 再定義名を用いて行うことができる なお, ここでは 構造体タグ名は省略可能である 構造体を指すポインタ

More information

PowerPoint Template

PowerPoint Template プログラミング演習 Ⅲ Linked List P. Ravindra S. De Silva e-mail: ravi@cs.tut.ac.jp, Room F-413 URL: www.icd.cs.tut.ac.jp/~ravi/prog3/index_j.html 連結リストとは? 一つひとつの要素がその前後の要素との参照関係をもつデータ構造 A B C D 連結リストを使用する利点 - 通常の配列はサイズが固定されている

More information

program.dvi

program.dvi 2001.06.19 1 programming semi ver.1.0 2001.06.19 1 GA SA 2 A 2.1 valuename = value value name = valuename # ; Fig. 1 #-----GA parameter popsize = 200 mutation rate = 0.01 crossover rate = 1.0 generation

More information

情報処理演習 B8クラス

情報処理演習 B8クラス 予定スケジュール ( 全 15 回 ) 1 1. 終了 プログラミング言語の基礎 2. 終了 演算と型 3. 終了 プログラムの流れの分岐 (if 文,switch 文など ) 4. 終了 プログラムの流れの繰返し (do, while, for 文など ) 5. 終了 中間レポート1 6. 終了 配列 7. 終了 関数 8. 終了 文字列 ( 文字列の配列, 文字列の操作 ) 9. 終了 ポインタ

More information

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

プログラミング演習3 - Cプログラミング - プログラミング演習 3 - C プログラミング - 第 1 回資料 & 課題花泉弘 この回の目標 1. テキストファイルからのデータの読み出し ファイルの open と close 1 文字ずつの入力 1 行ずつの入力 C 言語に限らず ファイルからデータを読み込む場合 必要になるのは ファイル名と場所 ( どのディレクトリにあるか ) プログラム上でデータを受け取るバッファ ( 変数の型に注意 )

More information

Microsoft PowerPoint - kougi8.ppt

Microsoft PowerPoint - kougi8.ppt C プログラミング演習 第 8 回構造体とレコードデータファイル 1 例題 1. バイナリファイル形式のファイル からのデータ読み込み 次のような名簿ファイル ( バイナリファイル形式 ) を読み込んで, 画面に表示するプログラムを作る name Ken Bill Mike age 20 32 35 address NewYork HongKong Paris 名簿ファイル 2 #include "stdafx.h"

More information

1.... 1 2.... 1 2.1. RATS... 1 2.1.1. expat... 1 2.1.2. expat... 1 2.1.3. expat... 2 2.2. RATS... 2 2.2.1. RATS... 2 2.2.2.... 3 3. RATS... 4 3.1.... 4 3.2.... 4 3.3.... 6 3.3.1.... 6 3.3.2.... 6 3.3.3....

More information

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

Microsoft PowerPoint - CproNt02.ppt [互換モード] 第 2 章 C プログラムの書き方 CPro:02-01 概要 C プログラムの構成要素は関数 ( プログラム = 関数の集まり ) 関数は, ヘッダと本体からなる 使用する関数は, プログラムの先頭 ( 厳密には, 使用場所より前 ) で型宣言 ( プロトタイプ宣言 ) する 関数は仮引数を用いることができる ( なくてもよい ) 関数には戻り値がある ( なくてもよい void 型 ) コメント

More information

memo

memo 計数工学プログラミング演習 ( 第 4 回 ) 2016/05/10 DEPARTMENT OF MATHEMATICA INFORMATICS 1 内容 リスト 疎行列 2 連結リスト (inked ists) オブジェクトをある線形順序に並べて格納するデータ構造 単方向連結リスト (signly linked list) の要素 x キーフィールド key ポインタフィールド next x->next:

More information

Microsoft Word - no206.docx

Microsoft Word - no206.docx 3.2 双方向リスト 今までのリストは 前から順にたどることしかできませんでした 今度は逆にもたどることができる 双方向リストを扱います この場合は 構造体には次を表すポインタの他に前を表すポインタを持つ ことになります 今回は最初と最後をポインタを使うと取り扱いが面倒になるので 最初 (start) と最後 (end) を どちらとも構造体 ( 値は意味を持たない ) を使うことにします こうすることによって

More information

slide5.pptx

slide5.pptx ソフトウェア工学入門 第 5 回コマンド作成 1 head コマンド作成 1 早速ですが 次のプログラムを head.c という名前で作成してください #include #include static void do_head(file *f, long nlines); int main(int argc, char *argv[]) { if (argc!=

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション プログラミング応用演習 第 4 回再帰的構造体 プログラミングを 余談 : 教えることの難しさ 丁寧に説明しないと分かってもらえない 説明すると 小難しくなる学生が目指すべきところプログラム例を説明されて理解できる違うやり方でも良いので自力で解決できる おっけー 動けば良い という意識でプログラミング 正しく動くことのチェックは必要 解答例と自分のやり方との比較が勉強になる 今日のお題 再帰的構造体

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション プログラミング応用演習 第 5 回演習 前回までのお話 ポインタ ポインタを用いた文字列処理 構造体 ファイル 再帰的構造体 リスト構造 動的メモリ管理 今日のお題 ポインタやファイルなど これまでの内容の練習 教材 以前 以下に単語を収録したファイルがあることを紹介した : /usr/share/dict/words この中からランダムに単語を取り出したファイルを用意した http://sun.ac.jp/prof/yamagu/2019app/

More information

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

問 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

More information

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

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード] 情報工学実験 II 実験 2 アルゴリズム ( リスト構造とハッシュ ) 実験を始める前に... C 言語を復習しよう 0. プログラム書ける? 1. アドレスとポインタ 2. 構造体 3. 構造体とポインタ 0. プログラム書ける? 講義を聴いているだけで OK? 言語の要素技術を覚えれば OK? 目的のプログラム? 要素技術 データ型 配列 文字列 関数 オブジェクト クラス ポインタ 2 0.

More information

AquesTalk10 Linux マニュアル

AquesTalk10 Linux マニュアル AquesTalk10 Linux マニュアル 株式会社アクエスト www.a-quest.com 概要 本文書は 音声合成ライブラリ AquesTalk10 Linux をアプリケーションに組み込んで使用するためのプログラミングの方法 注意点を示したものです AquesTalk10 は かな表記の音声記号列から WAV 音声データを生成するライブラリです AquesTalk10 は 声質パラメータを指定することで様々な声質の音声を生成できる特徴があります

More information

Taro-リストⅠ(公開版).jtd

Taro-リストⅠ(公開版).jtd 0. 目次 1. 再帰的なデータ構造によるリストの表現 1. 1 リストの作成と表示 1. 1. 1 リストの先頭に追加する方法 1. 1. 2 リストの末尾に追加する方法 1. 1. 3 昇順を保存してリストに追加する方法 1. 2 問題 問題 1 問題 2-1 - 1. 再帰的なデータ構造によるリストの表現 リストは データの一部に次のデータの記憶場所を示す情報 ( ポインタという ) を持つ構造をいう

More information

1 1.1 C 2 1 double a[ ][ ]; 1 3x x3 ( ) malloc() malloc 2 #include <stdio.h> #include

1 1.1 C 2 1 double a[ ][ ]; 1 3x x3 ( ) malloc() malloc 2 #include <stdio.h> #include 1 1.1 C 2 1 double a[ ][ ]; 1 3x3 0 1 3x3 ( ) 0.240 0.143 0.339 0.191 0.341 0.477 0.412 0.003 0.921 1.2 malloc() malloc 2 #include #include #include enum LENGTH = 10 ; int

More information

AquesTalk10 Win マニュアル

AquesTalk10 Win マニュアル AquesTalk10 Win マニュアル 株式会社アクエスト www.a-quest.com 概要 本文書は 音声合成ライブラリ AquesTalk10 Win をアプリケーションに組み込んで使用するためのプログラミングの方法 注意点を示したものです AquesTalk10 は かな表記の音声記号列から WAV 音声データを生成するライブラリです AquesTalk10 は 声質パラメータを指定することで様々な声質の音声を生成できる特徴があります

More information

プログラミング基礎

プログラミング基礎 C プログラミング 演習 アルゴリズム基礎論 演習 第 10 回 今後の予定 12/22( 月 ) 期末試験 (60 分間 ) 場所 :A1611 時間 :16:20~17:20 課題の最終提出締切 :12/19( 金 ) これ以降の新規提出は評価されない 12/22までに最終状況を提示するので, 提出したのに や になってる人は自分の提出内容や提出先を再確認した上で12/26までに問い合わせること

More information

情報ネットワーク演習 2006年10月5日

情報ネットワーク演習 2006年10月5日 情報ネットワーク演習 村川猛彦 2006 年 10 月 12 日 ( 木 ) 1 本日の内容 課題 5 HTTP クライアントハイパーテキストへのアクセス 課題 4 HTTP サーバのビルド 課題 3 ソケットを用いたプロセス間通信 課題 1 低水準入出力 課題 2 名前解決 ( ホスト名 IP アドレス ) 2 第 2 回課題 実施内容と意図 IP アドレスとホスト名の相互変換をするプログラムを拡張する.

More information

memo

memo 計数工学プログラミング演習 ( 第 6 回 ) 2016/05/24 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 今日の内容 : 再帰呼び出し 2 分探索木 深さ優先探索 課題 : 2 分探索木を用いたソート 2 再帰呼び出し 関数が, 自分自身を呼び出すこと (recursive call, recursion) 再帰を使ってアルゴリズムを設計すると, 簡単になることが多い

More information

第2回

第2回 第 4 回基本データ構造 1 明星大学情報学科 2 3 年前期 アルゴリズムとデータ構造 Ⅰ 第 4 回 Page 1 配列 スタック キューとその操作 4-1. 配列とその操作 配列型 同じ型の変数を並べたもの 配列にする型は 基本型 配列型 構造体 ポインタいずれでもよい 要素の並べ方を 次元 という 1 次元配列 ( 直線状 ) 2 次元配列 ( 平面状 ) 3 次元配列 ( 立体状 ) a[5]

More information

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

Microsoft Word - Training10_プリプロセッサ.docx Training 10 プリプロセッサ 株式会社イーシーエス出版事業推進委員会 1 Lesson1 マクロ置換 Point マクロ置換を理解しよう!! マクロ置換の機能により 文字列の置き換えをすることが出来ます プログラムの可読性と保守性 ( メンテナンス性 ) を高めることができるため よく用いられます マクロ置換で値を定義しておけば マクロの値を変更するだけで 同じマクロを使用したすべての箇所が変更ができるので便利です

More information

Taro-ポインタ変数Ⅰ(公開版).j

Taro-ポインタ変数Ⅰ(公開版).j 0. 目次 1. ポインタ変数と変数 2. ポインタ変数と配列 3. ポインタ変数と構造体 4. ポインタ変数と線形リスト 5. 問題 問題 1 問題 2-1 - 1. ポインタ変数と変数 ポインタ変数には 記憶領域の番地が格納されている 通常の変数にはデータが格納されている 宣言 int *a; float *b; char *c; 意味ポインタ変数 aは 整数型データが保存されている番地を格納している

More information

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

プログラミング演習3 - Cプログラミング - プログラミング演習 3 - 集中講義版 - 1 日目資料 & 課題花泉弘 この回の目標 1. テキストファイルからのデータの読み出し ファイルの open と close 1 文字ずつの入力と 1 行ずつの入力とを行う readnext( ) を作成する C 言語に限らず ファイルからデータを読み込む場合 必要になるのは ファイル名と場所 ( どのディレクトリにあるか ) プログラム上でデータを受け取るバッファ

More information

1 1.1 C 2 1 double a[ ][ ]; 1 3x x3 ( ) malloc() 2 double *a[ ]; double 1 malloc() dou

1 1.1 C 2 1 double a[ ][ ]; 1 3x x3 ( ) malloc() 2 double *a[ ]; double 1 malloc() dou 1 1.1 C 2 1 double a[ ][ ]; 1 3x3 0 1 3x3 ( ) 0.240 0.143 0.339 0.191 0.341 0.477 0.412 0.003 0.921 1.2 malloc() 2 double *a[ ]; double 1 malloc() double 1 malloc() free() 3 #include #include

More information

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

プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; } Point; 問題 18. 問題 17 の プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; Point; 問題 18. 問題 17 の Point を用いて 2 点の座標を入力するとその 2 点間の距 離を表示するプログラムを作成せよ 平方根は

More information

02: 変数と標準入出力

02: 変数と標準入出力 C プログラミング入門 総機 1 ( 月 1) 11: 動的メモリ確保 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/ teachers/w483692/cpr1/ 2015-06-22 1 まとめ : ポインタを使った処理 内容 説明 呼び出し元の変数を書き換える第 9 回 文字列を渡す 配列を渡す 第 10 回 ファイルポインタ

More information

Prog1_12th

Prog1_12th 2013 年 7 月 4 日 ( 木 ) 実施 ファイル処理ファイルとはファイル (file) は日常用語では紙などを綴じたものを表すが, コンピュータ用語ではデータの集合体を指す言葉である ファイルは例えば, 文書ファイルやプログラムファイルのように, 用途によって分類されることもあれば, また, テキストファイルやバイナリファイルのように, ファイルの作り方によって分類されることもある なお,

More information

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

Microsoft Word - Cプログラミング演習(11) 第 11 回 (7/2) 4. いくつかのトピック (1) ビットごとの演算子 C 言語には, 次のようなビット単位で演算を行う特別な演算子が用意されている & ビットごとの AND ビットごとの OR ^ ビットごとの XOR( 排他的論理和 ) ~ 1 の補数これらの演算子は文字型と整数型で機能し, 浮動小数点数型では使用できない AND, OR, XOR は, それぞれのオペランドの対応するビットを比較して結果を返す

More information

AquesTalk2 Linux マニュアル

AquesTalk2 Linux マニュアル AQUEST Corp. http://www.a-quest.com/ 1. 概要 AquesTalk2 Linux Manual 本文書は 規則音声合成ライブラリ AquesTalk2 Linux をアプリケーションに組み込んで使用するためのプログラミングに関しての方法および注意点を示したものです AquesTalk2 は AquesTalk の後継として開発されました 合成音声の声質を規定するデータとして

More information

AquesTalk2 Win マニュアル&ライセンス規定

AquesTalk2 Win マニュアル&ライセンス規定 AQUEST Corp. http://www.a-quest.com/ AquesTalk2 Win 版 Manual & Licence 規定 1. 概要 本文書は 規則音声合成ライブラリ AquesTalk2 Win 版をアプリケーションに組み込んで使用するためのプログラミングに関しての方法および注意点および ライセンスに関して示したものです AquesTalk2 は AquesTalk の後継として開発されました

More information

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

Microsoft PowerPoint - 計算機言語 第7回.ppt 計算機言語第 7 回 長宗高樹 目的 関数について理解する. 入力 X 関数 f 出力 Y Y=f(X) 関数の例 関数の型 #include int tasu(int a, int b); main(void) int x1, x2, y; x1 = 2; x2 = 3; y = tasu(x1,x2); 実引数 printf( %d + %d = %d, x1, x2, y);

More information

slide6.pptx

slide6.pptx ソフトウェア工学入門 第 6 回コマンド作成 2 ファイルシステム 今後のスケジュール 5/28. コマンド作成 2 ( 本日 ) 6/4. ファイルシステム プロセス ハードウェア 6/11. 第 2 回個別試験 grep プログラム 1 次のプログラムを作成し grep.c という名前で保存しなさい #include #include #include

More information

memo

memo 計数工学プログラミング演習 ( 第 6 回 ) 2017/05/16 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 今日の内容 : 再帰呼び出し 2 分探索木 深さ優先探索 課題 : 2 分探索木を用いたソート 2 再帰呼び出し 関数が, 自分自身を呼び出すこと (recursive call, recursion) 再帰を使ってアルゴリズムを設計すると, 簡単になることが多い

More information

Minimum C Minimum C Minimum C BNF T okenseq W hite Any D

Minimum C Minimum C Minimum C BNF T okenseq W hite Any D 6 2019 5 14 6.1 Minimum C....................... 6 1 6.2....................................... 6 7 6.1 Minimum C Minimum C BNF T okenseq W hite Any Digit ::= 0 1 2... 9. Number ::= Digit Digit. Alphabet

More information

02: 変数と標準入出力

02: 変数と標準入出力 C プログラミング入門 基幹 2 ( 月 4) 11: 動的メモリ確保 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/ teachers/w483692/cpr1/ 2014-06-22 1 まとめ : ポインタを使った処理 内容 説明 呼び出し元の変数を書き換える第 9 回 文字列を渡す 配列を渡す 第 10 回 ファイルポインタ

More information

第2回

第2回 明星大学情報学科 年後期 アルゴリズムとデータ構造 Ⅰ 第 回 Page 第 回基本データ構造 連結リストとその操作 -. リスト構造 データ部 と ポインタ部 で構成され ポインタをたどることによりデータを扱うことができる構造 -. 単方向リストとその操作 --. 単方向リスト 次のデータへのポインタを つだけ持っているデータ構造 ( データ部は 複数のデータを持っている場合もある ) データ部

More information

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

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 今回のプログラミングの課題 次のステップによって 徐々に難易度の高いプログラムを作成する ( 参照用の番号は よくわかる C 言語 のページ番号 ) 1. キーボード入力された整数 10 個の中から最大のものを答える 2. 整数を要素とする配列 (p.57-59) に初期値を与えておき

More information

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

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 2018/10/05 竹島研究室創成課題 第 2 回 C 言語演習 変数と演算 東京工科大学 加納徹 前回の復習 Hello, world! と表示するプログラム 1 #include 2 3 int main(void) { 4 printf("hello, world! n"); 5 return 0; 6 } 2 プログラム実行の流れ 1. 作業ディレクトリへの移動 $ cd

More information

Microsoft Word - no205.docx

Microsoft Word - no205.docx 3 応用 3.1 連結リスト 前回 先頭に追加する例を扱いました しかし start が指す node を変更することから 関数 の戻り値として作成しました 今回は ポインタ変数 start の値を関数で変更できるように ポイ ンタ変数へのポインタを利用します 先頭を削除するものと 最後を削除する関数を追加します ex25.c /* リストの追加と削除 */ typedef struct node

More information

Microsoft Word - no15.docx

Microsoft Word - no15.docx 7. ファイルいままでは プログラムを実行したとき その結果を画面で確認していました 簡単なものならそれでもいいのですか 複雑な結果は画面で見るだけでなく ファイルに保存できればよいでしょう ここでは このファイルについて説明します 使う関数のプロトタイプは次のとおりです FILE *fopen(const char *filename, const char *mode); ファイルを読み書きできるようにする

More information

Microsoft PowerPoint - lec10.ppt

Microsoft PowerPoint - lec10.ppt 今日の内容, とポインタの組み合わせ, 例題 1. 住所録例題 2. と関数とは. を扱う関数. 例題 3. のリスト とポインタの組み合わせ 今日の到達目標 自分で を定義する 自分で定義したについて, 配列やポインタを作成する データ型 基本データ型 char 文字 (1 文字 ) int 整数 double 浮動小数など その他のデータ型配列 データの並び ( 文字列も, 文字の並び ) ポインタ

More information

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

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用 RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用体型のローカル変数を文字列操作関数で操作する場合の注意事項 (RXC#013) 配列型構造体または共用体の配列型メンバから読み出した値を動的初期化に用いる場合の注意事項

More information

プログラミング実習I

プログラミング実習I プログラミング実習 I 05 関数 (1) 人間システム工学科井村誠孝 m.imura@kwansei.ac.jp 関数とは p.162 数学的には入力に対して出力が決まるもの C 言語では入出力が定まったひとまとまりの処理 入力や出力はあるときもないときもある main() も関数の一種 何かの仕事をこなしてくれる魔法のブラックボックス 例 : printf() 関数中で行われている処理の詳細を使う側は知らないが,

More information

Microsoft PowerPoint pptx

Microsoft PowerPoint pptx 情報処理 Ⅱ 2012 年 1 月 1~2 月のスケジュール 1 月 16 日 ( 月 ): 第 12 回授業 1 月 19 日 ( 木 ): レポート課題提出期限 17:00 までに, 学科事務室前に提出 1 月 23 日 ( 月 ): 第 13 回授業 1 月 30 日 ( 月 ): 第 14 回授業,A601で実施 1 月 31 日 ( 火 ): 第 15 回授業, おさらい問題 (2 月 6

More information

第3回 配列とリスト

第3回 配列とリスト 連結リスト Algorithms and Data Structures on C この回の要点 連結リストによるリスト 連結リストの構造 連結リストの利点と欠点 C 言語による連結リストの実現 ヘッダファイルによるソースファイルの分割 連結リスト (linked list) リストの実現の一種 リストに含まれる各要素をリンクによって連結した構造 リンクとは 他のデータへの参照のこと 各要素は 自分から次のデータへのリンクを持つ

More information

DVIOUT

DVIOUT 2009 年度情報科学 & 情報科学演習レポート 7 学生用 学籍番号 : 氏名 : 下記の注意事項を守り 次ページ以降の問いに答え レポートを完成させなさい 提出期限 : 2009 年 6 月 16 日 ( 火 ) 13:00 まで提出場所 : 理学部棟正面玄関内に設置のレポートボックス 注意事項 : (1) このページを印刷し 必要事項を記入の上 ( 学籍番号欄と氏名欄は 2 箇所あるので忘れずに記入すること

More information

プログラミング基礎

プログラミング基礎 C プログラミング Ⅱ 演習 2-1(a) BMI による判定 文字列, 身長 height(double 型 ), 体重 weight (double 型 ) をメンバとする構造体 Data を定義し, それぞれのメンバの値をキーボードから入力した後, BMI を計算するプログラムを作成しなさい BMI の計算は関数化すること ( ) [ ] [ ] [ ] BMI = 体重 kg 身長 m 身長

More information

ohp03.dvi

ohp03.dvi 19 3 ( ) 2019.4.20 CS 1 (comand line arguments) Unix./a.out aa bbb ccc ( ) C main void int main(int argc, char *argv[]) {... 2 (2) argc argv argc ( ) argv (C char ) ( 1) argc 4 argv NULL. / a. o u t \0

More information

講習No.12

講習No.12 前回までの関数のまとめ 関数は main() 関数または他の関数から呼び出されて実行される. 関数を呼び出す側の実引数の値が関数内の仮引数 ( 変数 ) にコピーされる. 関数内で定義した変数は, 関数の外からは用いることができない ( ローカル変数 ). 一般に関数内で仮引数を変化しても, 呼び出し側の変数は変化しない ( 値渡し ). 関数内で求めた値は return 文によって関数値として呼び出し側に戻される.

More information

AquesTalk for WinCE プログラミングガイド

AquesTalk for WinCE プログラミングガイド AquesTalk for WinCE プログラミングガイド ( 株 ) アクエスト 1. 概要 本文書は 規則音声合成ライブラリ AquesTalk for WinCE ( 以下 AquesTalk) をアプリケーションに組み込んで使用するためのプログラミングに関して 方法および注意点を示したものです AquesTalk には 2 種類のライブラリがあります 音声データをメモリ上に生成するものと

More information

Microsoft PowerPoint - H22プログラミング第一(E)#12

Microsoft PowerPoint - H22プログラミング第一(E)#12 平成 22 年 7 月 20 日 ( 火 ) 担当 : 秋山 泰 7 月 20 日 修正 プログラミング第一 (E) 第 12 回 メモリの動的割り当て - malloc( ), calloc( ), realloc( ) - free ( ), メモリリーク データ構造の動的割当て - 要素 1 つごとの動的割当て - 大きな単位でまとめた動的割当て 補足補足 main( ) の引数 : argc,

More information

2006年10月5日(木)実施

2006年10月5日(木)実施 2010 年 7 月 2 日 ( 金 ) 実施 ファイル処理ファイルとはファイル (file) は日常用語では紙などを綴じたものを表すが, コンピュータ用語ではデータの集合体を指す言葉である ファイルは例えば, 文書ファイルやプログラムファイルのように, 用途によって分類されることもあれば, また, テキストファイルやバイナリファイルのように, ファイルの作り方によって分類されることもある なお,

More information

Microsoft PowerPoint - 6.pptx

Microsoft PowerPoint - 6.pptx 6. データ構造入門 6-1. 連結リスト (Linked List) 6-2. スタック (Stack) 6-. キュー (Queue) 6-4. デク (Double-Ended-Queue) 6-. 抽象データ型 (Abstract Data Type) データ構造とは データの保存を効率的に行うもの 1 ito 2.712.14 suzuki データ構造 1 2 6-1. 連結リスト (Linked

More information

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

PowerPoint プレゼンテーション  -  物理学情報処理演習 物理学情報処理演習 9. C 言語 5 2015 年 6 月 19 日 本日の推奨作業 directory lesson09 9.1 乱数 9.2 ポインタ 参考文献 やさしい C++ 第 4 版高橋麻奈 ( 著 ) ソフトバンククリエイティブ プログラミング言語 C++ 第 4 版ビャーネ ストラウストラップ, Bjarne Stroustrup, 柴田望洋 Numerical Recipes:

More information

untitled

untitled C -1 - -2 - concept lecture keywords FILE, fopen, fclose, fscanf, fprintf, EOF, r w a, typedef gifts.dat Yt JZK-3 Jizake tsumeawase 45 BSP-15 Body soap set 3 BT-2 Bath towel set 25 TEA-2 Koutya

More information

Microsoft Word - Win-Outlook.docx

Microsoft Word - Win-Outlook.docx Microsoft Office Outlook での設定方法 (IMAP および POP 編 ) How to set up with Microsoft Office Outlook (IMAP and POP) 0. 事前に https://office365.iii.kyushu-u.ac.jp/login からサインインし 以下の手順で自分の基本アドレスをメモしておいてください Sign

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション プログラミング応用演習 第 3 回構造体, ファイル入出力 先週の出席確認へのコメント 暗号を破りたいが 平文の候補が多すぎる 人間の目で確認する代わりに どんなプログラムがあればよいか? 辞書を挙げた人が多かった 正しい着眼です 何億個もの平文候補が想定されるので 形態素解析や品詞判別を挙げた人もいます 辞書に近い回答で悪くはないのですが 平文候補ごとにあまり高機能なものを呼び出すと時間がかかる

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション プログラミング応用演習 第 2 回文字列とポインタ 先週のパズルの解説 答え : 全部 p a 1 図の書き方 : p+1 は式であって その値を格納する記憶場所を考えないので 四角で囲まない 2 p+1 同じものを表すいろいろな書き方をしてみましたが パズル以上の意味はありません プログラム中に書くときは p+1 が短くていいんじゃないかな p+1 は 2 の記憶場所 p[1] は 2 に格納されている値

More information

Microsoft PowerPoint - kougi11.ppt

Microsoft PowerPoint - kougi11.ppt C プログラミング演習 中間まとめ 2 1 ソフトウエア開発の流れ 機能設計 外部仕様 ( プログラムの入力と出力の取り決め ) 構成設計 詳細設計 論理試験 内部データ構造や関数呼び出し方法などに関する取り決めソースプログラムの記述正しい入力データから正しい結果が得られるかテスト関数単位からテストをおこなう 耐性試験 異常な入力データに対して, 異常を検出できるかテスト異常終了することはないかテスト

More information

第3回 配列とリスト

第3回 配列とリスト リストと配列 Algorithms and Data Structures on C この回の要点 C 言語における変数 プリミティブ型とポインタの違い 参照型における実体オブジェクトへの参照 リストとは? 配列によるリスト 配列の利点と欠点 C 言語による配列の実現 配列の代入と複製の違い データ構造 アルゴリズム + データ構造 = プログラム アルゴリズム データをどのように加工するか データ構造

More information

SuperH RISC engineファミリ用 C/C++コンパイラパッケージ V.7~V.9 ご使用上のお願い

SuperH RISC engineファミリ用 C/C++コンパイラパッケージ V.7~V.9 ご使用上のお願い ツールニュース RENESAS TOOL NEWS 2014 年 02 月 01 日 : 140201/tn1 SuperH RISC engine ファミリ用 C/C++ コンパイラパッケージ V.7~V.9 ご使用上のお願い SuperH RISC engine ファミリ用 C/C++ コンパイラパッケージ V.7~V.9の使用上の注意事項 4 件を連絡します 同一ループ内の異なる配列要素に 同一の添え字を使用した場合の注意事項

More information

untitled

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] { /*

More information

r08.dvi

r08.dvi 19 8 ( ) 019.4.0 1 1.1 (linked list) ( ) next ( 1) (head) (tail) ( ) top head tail head data next 1: NULL nil ( ) NULL ( NULL ) ( 1 ) (double linked list ) ( ) 1 next 1 prev 1 head cur tail head cur prev

More information

r07.dvi

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

More information

Microsoft PowerPoint pptx

Microsoft PowerPoint pptx 情報処理 Ⅱ 第 12 13回 2011 年 1 月 31 17 日 ( 月 ) 本日学ぶこと ファイル入出力, 標準入力 標準出力 記憶域管理関数 (malloc など ) 問題 ファイルを入力にとり, 先頭に行番号をつけて出力できる? 行列の積を, ファイルを介して読み書き 計算できる? Wakayama University./line 1:Wakayama 2:University 3 2

More information

CM-3G 周辺モジュール拡張技術文書 MS5607センサ(温度、気圧)

CM-3G 周辺モジュール拡張技術文書 MS5607センサ(温度、気圧) CM-3G 周辺モジュール拡張技術文書 MS5607 センサ ( 温度 気圧 ) ( 第 1 版 ) Copyright (C)2016 株式会社コンピューテックス 目次 1. はじめに... 1 2. MS5607 について... 1 3. 接続図... 1 4. アプリケーション ソース... 2 5. アプリケーションのコンパイル方法... 7 6. アプリケーションの実行... 8 1. はじめに

More information

ohp07.dvi

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

More information

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

Microsoft Word - Cプログラミング演習(9) 第 9 回 (6/18) 3. ファイルとその応用 外部記憶装置に記録されたプログラムやデータを, ファイルと呼ぶ シーケンシャルファイルやランダムファイルへのデータの記録や読み出し, 更新の手順について学習する (1) ファイルとレコードファイル複数の関連したデータを一つに集めたり プログラムを外部記憶装置に保存したものレコードファイルを構成する一塊のデータ ex. 個人カードフィールドレコードを構成する個別の要素

More information

Microsoft PowerPoint - kougi6.ppt

Microsoft PowerPoint - kougi6.ppt C プログラミング演習 第 6 回ファイル処理と配列 1 ファイル処理 2 ファイル読み込み ファイル プログラム ファイルの中身は変わらない 3 ファイル書き出し ファイル プログラム ファイルの中身が変わる ファイルは伸び縮みすることがある 4 例題 1. テキストファイル形式の ファイルからのデータ読み込み 次のような名簿ファイル ( テキストファイル形式 ) を読み込んで,1 列目の氏名と,3

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 構造体 (struct) 構造体の宣言 typedef 宣言 配列では 複数のデータをひとまとまりにして操作することが出来る しかし それぞれのデータは同じ型 ( 例えば整数 あるいは浮動小数点数 ) 出なければならない 型の違うデータをひとまとまりにして扱う方法に 構造体がある 構造体 文文文文名前字 ( 文字列字字 ) 字 整数学籍番号 ( 整数 ) 身長 ( 浮動小数点数 ) 文字 配列 3

More information

演習課題No12

演習課題No12 演習課題 No.12 ( 課題は 3 題ある ) 課題 12-1 時間内提出 従来の C 言語には複素数を直接扱うデータ型はないので (*), 構造体で複素数 ( 英語で complex) を表すことにする. 複素数を表す構造体を以下のように定義する. struct complex float r; // 実部 ( 英語で real) float i; // 虚部 ( 英語で imaginary)

More information

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

PowerPoint プレゼンテーション  -  物理学情報処理演習 物理学情報処理演習 8. C 言語 5 文字列 ポインタ 2016 年 6 月 7 日 ver20160607_2 本日の推奨作業 directory lesson08 8.1 文字列 8.2 ポインタ 参考文献 やさしい C++ 第 4 版高橋麻奈 ( 著 ) ソフトバンククリエイティブ プログラミング言語 C++ 第 4 版ビャーネ ストラウストラップ, Bjarne Stroustrup, 柴田望洋

More information

情報ネットワーク演習 2007 年 10 月 11 日 ( 木 )

情報ネットワーク演習 2007 年 10 月 11 日 ( 木 ) 情報ネットワーク演習 2007 年 10 月 11 日 ( 木 ) 本日の内容 課題 5 HTTP クライアントハイパーテキストへのアクセス 課題 4 HTTP サーバのビルド 課題 3 ソケットを用いたプロセス間通信 課題 1 低水準入出力 課題 2 名前解決 ( ホスト名 IP アドレス ) 2 第 2 回課題 実施内容と意図 IP アドレスとホスト名の相互変換をするプログラムを拡張する. この課題を通じて,IPv4

More information

Microsoft PowerPoint - kougi4.ppt

Microsoft PowerPoint - kougi4.ppt C の実行モデル 自由落下距離 前回の授業の 例題 1 の復習と重要事項 の確認 地上で物を落とし始めた後の自由落下距離を 求める 重力加速度 g は 9.8 とする 自由落下距離を求めるために, プログラム中に, 計算式 y = ( 9.8 / 2.0 ) * x * x を書く C++ ソースファイルの編集 編集画面 編集中のファイル名 関係するファイルなどが表示される ビルド結果などが表示される画面

More information

ohp08.dvi

ohp08.dvi 19 8 ( ) 2019.4.20 1 (linked list) ( ) next ( 1) (head) (tail) ( ) top head tail head data next 1: 2 (2) NULL nil ( ) NULL ( NULL ) ( 1 ) (double linked list ) ( 2) 3 (3) head cur tail head cur prev data

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 第 12 回 ICN 研究会ワークショップ Cefore の基本機能と導入手順 2018 年 8 月 29 日 ( 水 ) 目次 2 Ceforeの基本機能 Ceforeの導入手順 1. Ceforeのインストール 2. cefnetdとcsmgrdの起動 3. Ceforeのツールを用いた通信 3 Cefore の基本機能 4 Ceforeの概要 軽量かつ汎用的な CCN ソフトウェア実装 リソースの乏しいセンサーノードでは軽量構成

More information