第14回資料 - 湘南工科大学 情報工学科 ホームページ

Download Report

Transcript 第14回資料 - 湘南工科大学 情報工学科 ホームページ

2012年1月24日
湘南工科大学
情報理論2
第14回
小林 学
〒251-8511 神奈川県藤沢市辻堂西海岸1-1-25
Tel.
0466-30-0232(直通)
Fax.
0466-34-5932
[email protected]
[LZ77符号のプログラム]
#include<stdio.h>
#define SIZE 8
char Str[2*SIZE]="AAAAAAAAABABCAD";
int Icchi[SIZE],MaxPosition,MaxValue;
//グローバル変数
void Shift(int n){
int i;
for(i=0 ; i<2*SIZE-n ; i++) Str[i]=Str[i+n];
}
int Icchicho(int p){
int i, count=0;
for(i=0;i<SIZE;i++){
if(Str[i+p]!=Str[i+SIZE]) break;
count++;
}
return(count);
}
void Max(void){
int i;
MaxPosition = 0;
MaxValue = Icchi[0];
次ページへつづく
つづき
for(i=1;i<SIZE;i++){
if(Icchi[i]>MaxValue){
MaxValue = Icchi[i];
MaxPosition = i;
}
}
}
void main(void){
int p;
while(1){//無限ループ
//参照部と符号化部の全ての一致長の計算
for(p=0;p<SIZE;p++) Icchi[p] = Icchicho(p);
Max();
//一致長の最大の位置と最大値を計算
printf("%s\n", Str);
printf("(%d,%d,%c)\n" ,MaxPosition,MaxValue,Str[SIZE+MaxValue]);
Shift(MaxValue+1);
//シフト
if(Str[SIZE]==0) break;
}
printf("%s\n", Str);
}
[課題1] data.txtファイル(内容は「ABABCAD」)を配列Strの[SIZE]以降に読み
込んで,LZ77符号化するプログラムを完成させなさい.
#include<stdio.h>
#define SIZE 8
char Str[2*SIZE];
int Icchi[SIZE],MaxPosition,MaxValue;
//グローバル変数
void Shift(int n){省略}
int Icchicho(int p){省略}
void Max(void){省略}
void main(void){
int p, i;
for(i=0;i<SIZE;i++) Str[i]='A';
//ここにファイル内容をStr[SIZE]以降に読み込み
while(1){//無限ループ
for(p=0;p<SIZE;p++) Icchi[p] = Icchicho(p);
Max();
printf("%s\n", Str);
printf("(%d,%d,%c)\n" ,MaxPosition,MaxValue,Str[SIZE+MaxValue]);
Shift(MaxValue+1);
//シフト
if(Str[SIZE-1]==EOF) break;
}
printf("%s\n", Str);
[課題2] 課題1のプログラムを修正し,画面への出力をファイル「write.txt」に書
き込むプログラムにしなさい.
[課題3] 課題2のプログラムを修正し,ファイル内容がSIZEよりも大きい場合に対
応できるようにしなさい.(発展問題)
void main(void){
int p, i;
for(i=0;i<SIZE;i++) Str[i]='A';
//ここにファイル内容をStr[SIZE]以降に読み込み
while(1){//無限ループ
for(p=0;p<SIZE;p++) Icchi[p] = Icchicho(p);
Max();
printf("%s\n", Str);
//画面への出力をファイルへ書き込み
Shift(MaxValue+1);
//シフト
//シフトした文字分だけ配列Strにファイル読み込み
if(Str[SIZE-1]==EOF) break;
}
printf("%s\n", Str);
}