PowerPoint プレゼンテーション

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);