program.dvi

Similar documents
Original : Hello World! (0x0xbfab85e0) Copy : Hello World! (0x0x804a050) fgets mstrcpy malloc mstrcpy (main ) mstrcpy malloc free fgets stream 1 ( \n

r07.dvi

ohp07.dvi

: CR (0x0d) LF (0x0a) line separator CR Mac LF UNIX CR+LF MS-DOS WINDOWS Japan Advanced Institute of Science and Technology

O(N) ( ) log 2 N

untitled

ohp08.dvi

r08.dvi

mstrcpy char *mstrcpy(const char *src); mstrcpy malloc (main free ) stdio.h fgets char *fgets(char *s, int size, FILE *stream); s size ( )

超初心者用

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

1 C STL(1) C C C libc C C C++ STL(Standard Template Library ) libc libc C++ C STL libc STL iostream Algorithm libc STL string vector l

A/B (2018/10/19) Ver kurino/2018/soft/soft.html A/B

新版明解C言語 実践編

ohp03.dvi

double float

新・明解C言語 ポインタ完全攻略

II 3 yacc (2) 2005 : Yacc 0 ~nakai/ipp2 1 C main main 1 NULL NULL for 2 (a) Yacc 2 (b) 2 3 y

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

void hash1_init(int *array) int i; for (i = 0; i < HASHSIZE; i++) array[i] = EMPTY; /* i EMPTY */ void hash1_insert(int *array, int n) if (n < 0 n >=

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

r03.dvi

橡Pro PDF

卒 業 研 究 報 告.PDF


lexex.dvi

I. Backus-Naur BNF : N N 0 N N N N N N 0, 1 BNF N N 0 11 (parse tree) 11 (1) (2) (3) (4) II. 0(0 101)* (

untitled

/ SCHEDULE /06/07(Tue) / Basic of Programming /06/09(Thu) / Fundamental structures /06/14(Tue) / Memory Management /06/1

ex14.dvi

:30 12:00 I. I VI II. III. IV. a d V. VI

:30 12:00 I. I VI II. III. IV. a d V. VI

1.ppt

( ) ( ) 30 ( ) 27 [1] p LIFO(last in first out, ) (push) (pup) 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) + x * x + x x (4) * *

DA100データアクイジションユニット通信インタフェースユーザーズマニュアル

joho07-1.ppt

A/B (2010/10/08) Ver kurino/2010/soft/soft.html A/B

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

C言語によるアルゴリズムとデータ構造

練習&演習問題

新・明解C言語 実践編

Condition DAQ condition condition 2 3 XML key value

[ 1] 1 Hello World!! 1 #include <s t d i o. h> 2 3 int main ( ) { 4 5 p r i n t f ( H e l l o World!! \ n ) ; 6 7 return 0 ; 8 } 1:

file"a" file"b" fp = fopen("a", "r"); while(fgets(line, BUFSIZ, fp)) {... fclose(fp); fp = fopen("b", "r"); while(fgets(line, BUFSIZ, fp)) {... fclose

9 8 7 (x-1.0)*(x-1.0) *(x-1.0) (a) f(a) (b) f(a) Figure 1: f(a) a =1.0 (1) a 1.0 f(1.0)

Microsoft Word - no15.docx

PowerPoint Presentation

untitled

‚æ4›ñ

演算増幅器

C

第3回 配列とリスト

II ( ) prog8-1.c s1542h017%./prog8-1 1 => 35 Hiroshi 2 => 23 Koji 3 => 67 Satoshi 4 => 87 Junko 5 => 64 Ichiro 6 => 89 Mari 7 => 73 D

para02-2.dvi

02: 変数と標準入出力

comment.dvi

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

memo

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

Prog1_15th

main main Makefile Makefile C.5 Makefile Makefile Makefile A Mech (TA ) 1. Web ( iku

PowerPoint プレゼンテーション

BW BW

I httpd School of Information Science, Japan Advanced Institute of Science and Technology

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

3.1 stdio.h iostream List.2 using namespace std C printf ( ) %d %f %s %d C++ cout cout List.2 Hello World! cout << float a = 1.2f; int b = 3; cout <<

2017 p vs. TDGL 4 Metropolis Monte Carlo equation of continuity s( r, t) t + J( r, t) = 0 (79) J s flux (67) J (79) J( r, t) = k δf δs s( r,

memo

PC Windows 95, Windows 98, Windows NT, Windows 2000, MS-DOS, UNIX CPU

compiler-text.dvi

untitled

untitled

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

新コンフィギュレータのフレームワークについて

Cプログラミング - 第8回 構造体と再帰

C ( ) C ( ) C C C C C 1 Fortran Character*72 name Integer age Real income 3 1 C mandata mandata ( ) name age income mandata ( ) mandat

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

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

02: 変数と標準入出力

Microsoft Word - no206.docx

ファイル入出力

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

計算機プログラミング

1

プログラミングI第10回

ex12.dvi

FreeBSD 1

C B

6 6.1 sound_wav_files flu00.wav.wav 44.1 khz 1/44100 spwave Text with Time spwave t T = N t N 44.1 khz t = 1 sec j t f j {f 0, f 1, f 2,, f N 1

Microsoft PowerPoint pptx

PowerPoint Presentation

スライド タイトルなし

RHEA key

p = 1, 2, cos 2n + p)πj = cos 2nπj 2n + p)πj, sin = sin 2nπj 7.1) f j = a ) 0 + a p + a n+p cos 2nπj p=1 p=0 1 + ) b n+p p=0 sin 2nπj 1 2 a 0 +

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

1 4 2 EP) (EP) (EP)

1 return main() { main main C 1 戻り値の型 関数名 引数 関数ブロックをあらわす中括弧 main() 関数の定義 int main(void){ printf("hello World!!\n"); return 0; 戻り値 1: main() 2.2 C main

ファイル入出力

LIFO(last in first out, ) 1 FIFO(first in first out, ) 2 2 PUSH POP : 1

Transcription:

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 = 1000 ;end Fig. 1 sample.txt 2.2 1

1 ver.1.0 n n n n int double 3 Fig. 1 Fig. 2 Fig. 3 // sample program #include <stdio.h> #include <stdlib.h> #include "loadconf.h" main() int popsize = 0; double mutation_rate = 0.0; CONFFILE_T cf = conf_open("sample.txt"); // if(cf) popsize = atoi(conf_read(cf, "popsize")); mutation_rate = atof(conf_read(cf, "mutation rate")); printf("population size = %d\n", popsize); printf("mutation rate = %.2f\n", mutation_rate); conf_close(cf); // return 0; Fig. 2 2

2001.06.19 population size = 200 mutation rate = 0.01 Fig. 3 4 4.1 Fig. 4 nvar Fig. 5 0 1 name name value value nvar-1 name value Fig. 4 struct CONFFILE_CTX int nvars; // number of variables struct VARINFO char *name; // variable name char *value; // variable value *list; ; Fig. 5 CONFFILE CTX 4.2 3 4.2.1 const char *conf read(const CONFFILE T conf, const char *varname) n n Fig. 6 3

1 ver.1.0 const char *conf_read(const CONFFILE_T conf, const char *varname) int i; for(i = 0; i < conf->nvars; i++) if(strcmp(conf->list[i].name, varname) == 0) return conf->list[i].value; return ""; Fig. 6 conf read const char *conf_name(const CONFFILE_T conf, int n) return conf->list[n].name; Fig. 7 conf name const char *conf name(const CONFFILE T conf, int n) n O(1) Fig. 7 const char *conf value(const CONFFILE T conf, int n) n O(1) Fig. 8 4.2.2 Fig. 9 conf open 1. 1 freadline() Fig. 10 11 const char *conf_value(const CONFFILE_T conf, int n) return conf->list[n].value; Fig. 8 conf value 4

2001.06.19 freadline() var name = value # comment... var name = value # comment... var name = value var name = value var name value var name value conf_write() var name 0 value 0 var name 1 value 1 var name 2 value 2 Fig. 9 EOF 2. 1 # ; 3. seek word() Fig. 12 4. = = syntax error 5

1 ver.1.0 5. 6. conf write() conf open Fig. 13 Fig. 14 4.2.3 Fig. 15 5 5.1 static loadconf.h Fig. 10-12 freadline() seek word() static static static static static 6

2001.06.19 static char *freadline(file *fp) const size_t ADDITION = 2000; char *buf = NULL; size_t size = 0; size_t cur = 0; int c; for(;;) if(size <= cur) char *temp = (char *)realloc(buf, sizeof(char) * (ADDITION + size)); if(temp == NULL) if(buf) free(buf); buf = temp; size += ADDITION; c = fgetc(fp); if(c == EOF) if(cur == 0) free(buf); buf[cur] = 0; return buf; Fig. 10 freadline (1) 7

1 ver.1.0 else if(c == \r ) c = fgetc(fp); if(c!= \n ) // for Macintosh format text ungetc(c, fp); buf[cur] = 0; return buf; else if(c == \n ) buf[cur] = 0; return buf; else buf[cur++] = c; Fig. 11 freadline (2) static char *seek_word(char *p) p += strspn(p, SPACE_CHARS); if(*p == 0) return p; Fig. 12 seek word 8

2001.06.19 CONFFILE_T conf_open(const char *fn) FILE *fp; char *str; int line; CONFFILE_T conf; // allocate instance conf = (CONFFILE_T)malloc(sizeof(struct CONFFILE_CTX)); if(conf == NULL) memset(conf, 0, sizeof(struct CONFFILE_CTX)); // open file fp = fopen(fn, "rb"); // binary-mode if(fp == NULL) free(conf); for(line = 1; str = freadline(fp); line++) char *p, *q; char *varname; char *content; // remove trailing comments(#) p = strpbrk(str, "#;"); if(p) *p = 0; // seek variable name varname = seek_word(str); if(varname) Fig. 13 conf open (1) 9

1 ver.1.0 // seek equal(=) p = strchr(str, = ); if(p) // split into varname-part and content-part *p = 0; content = p + 1; // find the end of varname for(p = varname; q = next_word(p); p = q); p = strpbrk(p, SPACE_CHARS); if(p) *p = 0; // seek content content = seek_word(content); if(content) // seek the last word for(p = content; q = next_word(p); p = q); p = strpbrk(p, SPACE_CHARS); if(p) *p = 0; else content = ""; // empty conf_write(conf, varname, content); else fprintf(stderr, "LINE %d, no equal(=) found.\n", line); conf_close(conf); free(str); fclose(fp); free(str); fclose(fp); return conf; Fig. 14 conf open (2) 10

2001.06.19 void conf_close(conffile_t conf) if(conf) int i; for(i = 0; i < conf->nvars; i++) if(conf->list[i].name) free(conf->list[i].name); if(conf->list[i].value) free(conf->list[i].value); if(conf->list) free(conf->list); free(conf); Fig. 15 conf value 11

1 ver.1.0 A A.1 loadconf.h //-------------------------------------------------------------------------- // FILENAME : loadconf.h // DESCRIPTION : Loading Configuration Data //-------------------------------------------------------------------------- #if!defined(_loadconf_h_) #define _LOADCONF_H_ struct CONFFILE_CTX; typedef struct CONFFILE_CTX * CONFFILE_T; CONFFILE_T conf_open(const char *fn); void conf_close(conffile_t conf); int conf_write(const CONFFILE_T conf, const char *varname, const char *value); const char *conf_read(const CONFFILE_T conf, const char *varname); const char *conf_name(const CONFFILE_T conf, int n); const char *conf_value(const CONFFILE_T conf, int n); int conf_nvars(const CONFFILE_T conf); #endif /* _LOADCONF_H_ */ A.2 loadconf.h //-------------------------------------------------------------------------- // FILENAME : loadconf.c // DESCRIPTION : Loading Configuration Data //-------------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <string.h> #include "loadconf.h" struct CONFFILE_CTX int nvars; // number of variables struct VARINFO char *name; // variable name char *value; // variable value *list; ; const char *SPACE_CHARS = " \t"; const char *SPACE_AND_EQUAL_CHARS = " \t="; 12

2001.06.19 /* seek the head of the first word */ static char *seek_word(char *p) p += strspn(p, SPACE_CHARS); if(*p == 0) return p; /* the next word if available, NULL for nothing to be found */ static char *next_word(char *p) p = strpbrk(p, SPACE_CHARS); if(p == NULL) p = p + strspn(p, SPACE_CHARS); if(*p == 0) return p; /* read a line from file */ static char *freadline(file *fp) const size_t ADDITION = 2000; char *buf = NULL; size_t size = 0; size_t cur = 0; int c; for(;;) if(size <= cur) char *temp = (char *)realloc(buf, sizeof(char) * (ADDITION + size)); if(temp == NULL) if(buf) free(buf); buf = temp; size += ADDITION; c = fgetc(fp); if(c == EOF) 13

1 ver.1.0 if(cur == 0) free(buf); buf[cur] = 0; return buf; else if(c == \r ) c = fgetc(fp); if(c!= \n ) // for Macintosh format text ungetc(c, fp); buf[cur] = 0; return buf; else if(c == \n ) buf[cur] = 0; return buf; else buf[cur++] = c; void conf_close(conffile_t conf) if(conf) int i; for(i = 0; i < conf->nvars; i++) if(conf->list[i].name) free(conf->list[i].name); if(conf->list[i].value) free(conf->list[i].value); if(conf->list) free(conf->list); free(conf); CONFFILE_T conf_open(const char *fn) FILE *fp; char *str; 14

2001.06.19 int line; CONFFILE_T conf; // allocate instance conf = (CONFFILE_T)malloc(sizeof(struct CONFFILE_CTX)); if(conf == NULL) memset(conf, 0, sizeof(struct CONFFILE_CTX)); // open file fp = fopen(fn, "rb"); // binary-mode if(fp == NULL) free(conf); for(line = 1; str = freadline(fp); line++) char *p, *q; char *varname; char *content; // remove trailing comments(#) p = strpbrk(str, "#;"); if(p) *p = 0; // seek variable name varname = seek_word(str); if(varname) // seek equal(=) p = strchr(str, = ); if(p) // split into varname-part and content-part *p = 0; content = p + 1; // find the end of varname for(p = varname; q = next_word(p); p = q); p = strpbrk(p, SPACE_CHARS); if(p) *p = 0; // seek content content = seek_word(content); 15

1 ver.1.0 if(content) // seek the last word for(p = content; q = next_word(p); p = q); p = strpbrk(p, SPACE_CHARS); if(p) *p = 0; else content = ""; // empty conf_write(conf, varname, content); else fprintf(stderr, "LINE %d, no equal(=) found.\n", line); conf_close(conf); free(str); fclose(fp); free(str); fclose(fp); return conf; int conf_write(const CONFFILE_T conf, const char *varname, const char *value) struct VARINFO *temp; int i; for(i = 0; i < conf->nvars; i++) if(strcmp(conf->list[i].name, varname) == 0) free(conf->list[i].value); conf->list[i].value = strdup(value); return 0; // memory reallocation temp = (struct VARINFO *)realloc( conf->list, sizeof(struct VARINFO) * (conf->nvars + 1)); if(temp == NULL) return -1; 16

2001.06.19 conf->list = temp; // copy strings conf->list[conf->nvars].name = strdup(varname); conf->list[conf->nvars].value = strdup(value); conf->nvars++; return 0; const char *conf_read(const CONFFILE_T conf, const char *varname) int i; for(i = 0; i < conf->nvars; i++) if(strcmp(conf->list[i].name, varname) == 0) return conf->list[i].value; return ""; int conf_nvars(const CONFFILE_T conf) return conf->nvars; const char *conf_name(const CONFFILE_T conf, int n) return conf->list[n].name; const char *conf_value(const CONFFILE_T conf, int n) return conf->list[n].value; B 2 (loadconf.h) #if!defined(_loadconf_h_) /* (1) */ #define _LOADCONF_H_ /* (2) */ #endif /* _LOADCONF_H_ */ /* (3) */ 1. LOADCONF H define (1) if 17

1 ver.1.0 2. (2) LOADCONF H define 3. 2 LOADCONF H define (1) if (3) (2) (3) (loadconf.h LOADCONF H ) Fig. 16 Fig. 17 Fig. 16 (header.h) 2 Fig. 18 2 STRUCT 2 2 Fig. 19 #include "header.h" #include "header.h" /* 2 */ int main() return 0; Fig. 16 header.h 2 (main.c) struct STRUCT int a, b; ; Fig. 17 2 (header.h) In file included from main.cpp:2: header.h:2: redefinition of struct STRUCT header.h:4: previous definition here Fig. 18 2 C Windows Macintosh UNIX (Table 1) 18

2001.06.19 #if!defined(_header_h_) #define _HEADER_H_ struct STRUCT int a, b; ; #endif Fig. 19 2 (header.h) Windows UNIX Macintosh [CR][LF] [LF] [CR] Table 1 freadline Fig. 20 C (CR) \r (LF) \n 1. \r \n Macintosh 1 \n Windows ( \0 ) 2. \n (UNIX ) D typedef ( loadconf.h ) CONFFILE T CONFFILE T typedef CONFFILE CTX CONFFILE T CONFFILE T ID CONFFILE CTX CONFFILE T ( free ) CONFFILE T ( ) 19

1 ver.1.0 else if(c == \r ) c = fgetc(fp); if(c!= \n ) // for Macintosh format text ungetc(c, fp); buf[cur] = 0; return buf; else if(c == \n ) buf[cur] = 0; return buf; Fig. 20 freadline E freadline Fig. 21 1 if(size <= cur) char *temp = (char *)realloc(buf, sizeof(char) * (ADDITION + size)); if(temp == NULL) if(buf) free(buf); buf = temp; size += ADDITION; Fig. 21 freadline ( ) Segmentation fault Fig. 21 20