2012年1月10日 湘南工科大学 情報理論2 第12回 小林 学 〒251-8511 神奈川県藤沢市辻堂西海岸1-1-25 Tel. 0466-30-0232(直通) Fax. 0466-34-5932 [email protected] [前回の課題1]前回の課題4のプログラムを改良して,全ての一致 長を配列Icchi[]に入れなさい. #include<stdio.h> char Str1[10]="ababbaaba", Str2[10]="abbababba"; int Icchi[9]; int Icchicho(int p){省略} void main(void){ int ans, p; for(p=0;p<9;p++) Icchi[p] = Icchicho(p); } [前回の課題2]課題1のプログラムを改良して,配列Icchi[]の中の 最大の位置MaxPositionと最大値MaxValueを出力する関数 Max()を作りなさい.(Main関数は課題と同じなので省略) #include<stdio.h> char Str1[10]="ababbaaba", Str2[10]="abbababba"; int Icchi[9],MaxPosition,MaxValue;//グローバル変数 int Icchicho(int p){省略} void Max(void){ int i; MaxPosition = 0; MaxValue = Icchi[0]; for(i=1;i<9;i++){ if(Icchi[i]>MaxValue){ MaxValue = Icchi[i]; MaxPosition = i; } } printf("最大の位置:%d,最大値:%d", MaxPosition, MaxValue) ; } [前回の課題3]今までの課題を参考にして,LZ77符号の 符号化プログラムを作成しなさい. #include<stdio.h> char Str[17]="AAAAAAAAABABCAD"; int Icchi[8],MaxPosition,MaxValue; //グローバル変数 void Shift(int n){ int i; for(i=0 ; i<17-n ; i++) Str[i]=Str[i+n]; } int Icchicho(int p){ int i, count=0; for(i=0;i<8;i++){ if(Str[i+p]!=Str[i+8]) break; count++; } return(count); } void Max(void){省略} つづく つづき void main(void){ int p; while(1){//無限ループ //参照部と符号化部の全ての一致長の計算 for(p=0;p<9;p++) Icchi[p] = Icchicho(p); Max(); //一致長の最大の位置と最大値を計算 printf("%s\n", Str); printf("(%d,%d,%c)\n",MaxPosition,MaxValue,Str[8+MaxValue]); Shift(MaxValue+1); //シフト if(Str[8]==0) break; } printf("%s\n", Str); } [ファイル入力1] #include<stdio.h> int main(void){ FILE *fp; char moji; 開いたファイルを意味する変数 読み込むファイル名 fp = fopen("demo.txt","r"); while(1){ moji = fgetc(fp); if(moji == EOF) break; printf("%c",moji); } fclose(fp); } return(0); r:読込モード ファイルから半角1文字が 読込まれ、moji に入る ha fp = fopen("ファイル名", "モード"); 指定されたファイルを開く.fpは開いたファイ ルを意味する. “モード”には r:読込モード(読込専用) w:書込モード(書込専用、上書き) a:追記モード(書込だが、追記) fclose(fp); ファイルを閉じる.必ず必要. [課題1]ファイルdemo.txtから4文字読み込み,char型の配列str に入れなさい.(文字列の最後は0を入れる点に注意) #include<stdio.h> void main(void){ FILE *fp; char str[8]; int i; fp = fopen("demo.txt","r"); ??? } //ここにプログラムを書く fclose(fp); printf("str=%s", str); [ファイル出力] #include<stdio.h> 書込むファイル名 int main(void){ FILE *fp; 書込みモード fp=fopen("write.txt","w"); printfと同様に書くと,ファ イルに書き込まれる //printfのようにファイルに書込む命令 fprintf(fp,"今日の日付は%d月%d日です", 12, 2); fclose(fp); } return(0); 書込むファ イルを指定 例題(foutput.c) #include<stdio.h> #include<math.h> void main(void){ FILE *fp; double x, y, z; 書込むファイル名 書込みモード fp = fopen("write.csv","w"); } for(x=0; x < 2*3.14159; x = x + 0.01){ y = sin(x); z = cos(x); fprintf(fp,"%lf,%lf,%lf\n", x, y, z); } fclose(fp); 書込むファ イルを指定 printfと同様に書くと,ファ イルに書き込まれる [課題2]架空の3人の氏名,住所,メールアドレスをwrite.csvファイ ルに書き出すプログラムを完成させなさい. #include<stdio.h> void main(void){ FILE *fp; fp = fopen("write.csv", "w"); ??? } //ここにプログラムを書く fclose(fp); [課題3] 関数 y = x3-2x2+1 とする.x=-2,-1.9,...,1.9,2 それぞ れに対し,x,y の値をそれぞれ write.csvファイルに書き込むプ ログラムを作成しなさい.またExcelで図を表示しなさい. #include<stdio.h> void main(void){ FILE *fp; double x, y; fp = fopen("write.csv", "w"); for(x=-2; x<2.1; x=x+0.1){ ??? //ここにプログラムを書く } } fclose(fp); [スペースで区切られたテキストファイルの読み込み方法] data.txtの中身 小林学 神奈川県藤沢市辻堂 [email protected] 二宮洋 神奈川県藤沢市鵠沼 [email protected] data.txtを読み込むプログラム #include<stdio.h> void main(void){ char name[20], address[100], email[100]; FILE *fp; int i; } fp=fopen("data.txt","r"); for(i=0;i<2;i++){ fscanf(fp, "%s %s %s",name, address, email); printf("%s %s %s\n",name,address,email); } fclose(fp); [課題4] 次のdata.txtファイルを読み込んで画面に表示するプログラムを完成さ せなさい.ただし読み込むデータの変数は左から char name[20], int nenrei, double taijuとしなさい. data.txtの中身 小林学 40 71.5 二宮洋 42 68.5 鈴木誠 44 65.3 #include<stdio.h> void main(void){ FILE *fp; char name[20]; int nenrei, i; double taiju; } fp = fopen("data.txt", "r"); for(i=0;i<3;i++){ ??? //ここにプログラムを書く } fclose(fp); [課題5] 課題3のx,yをスペース区切りでdata.txtにファイル出力し, さらにdata.txtの内容を読み込んで画面に表示するプログラム を作成しなさい. #include<stdio.h> void main(void){ FILE *fp; double x, y; int i; } fp = fopen("data.txt", "w"); for(x=-2; x<2.1; x=x+0.1){ ??? //ここにプログラムを書く } fclose(fp); fp = fopen("data.txt", "r"); for(i=0;i<???;i++){ ??? //ここにプログラムを書く } fclose(fp);
© Copyright 2024 ExpyDoc