2011年12月20日 湘南工科大学 情報理論2 第11回 小林 学 〒251-8511 神奈川県藤沢市辻堂西海岸1-1-25 Tel. 0466-30-0232(直通) Fax. 0466-34-5932 [email protected] [前回の課題1解答] 系列「ABCABCBCACCACCB」をLZ77符号 で符号化しなさい. これから符号化する系列 0 1 2 3 4 5 6 7 出力 A A A A A A A A A B C A B C B C (0,1,B) A A A A A A A B C A B C B C A C (0,0,C) A A A A B A B C A B C B C A C C (5,3,B) B A B C A B C B C A C C A C C B (3,2,C) C A B C B C A C C A C C B C A C C A C C B 符号化する系列が空なので,終了 (5,4,B) [前回の課題2解答] 配列Strの中身を左へnずらす(シフトする)関数 Shiftを作成しなさい #include<stdio.h> char Str[10]="ababbaaba"; void Shift(int n){ int i; for(i=0 ; i<10-n ; i++) Str[i]=Str[i+n]; } void main(void){ int n=3; printf("ずらす前の文字列:%s\n", Str); Shift(n); printf("ずらした後の文字列:%s\n", Str); } 実行結果 [前回の課題3解答] 配列Str1のp番目からとStr2の先頭からの一致 文字数を計算する関数Icchichoのプログラムを作成しなさい #include<stdio.h> char Str1[10]="ababbaaba", Str2[10]="abbababba"; int Icchicho(int p){ int i, count=0; for(i=0;i<9;i++){ if(Str1[i+p]!=Str2[i]) break; count++; 実行結果 } return(count); } void main(void){ int ans, p=2; ans = Icchicho(p); printf("一致した文字の数:%d\n", ans); } [前回の課題4解答] 課題1の関数Icchichoを利用して,Str1の全て の位置とStr2の先頭からとの一致長を出力するプログラムを作成 しなさい #include<stdio.h> char Str1[10]="ababbaaba", Str2[10]="abbababba"; int Icchicho(int p){省略} void main(void){ int ans, p; for(p=0;p<9;p++){ ans = Icchicho(p); printf("%d番目から一致した文字の数:%d\n", p, ans); } } 実行結果 [課題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++) ??? = Icchicho(p); } [課題2]課題1のプログラムを改良して,配列Icchi[]の中の最大の 位置MaxPositionと最大値MaxValueを出力する関数Max() を作りなさい. #include<stdio.h> char Str1[10]="ababbaaba", Str2[10]="abbababba"; int Icchi[9],MaxPosition,MaxValue;//グローバル変数 int Icchicho(int p){省略} void Max(void){ ??? //ここを作成!! printf("最大の位置:%d,最大値:%d", MaxPosition, MaxValue) ; } void main(void){ int ans, p; for(p=0;p<9;p++) ??? = Icchicho(p); Max(); } [課題3]今までの課題を参考にして,LZ77符号の符号化 プログラムを作成しなさい. #include<stdio.h> char Str[17]="AAAAAAAAABABCAD"; int Icchi[8],MaxPosition,MaxValue; int Icchicho(???){省略} //ちょっと変える必要あり void Shift(???){省略} void Max(void){省略} void main(void){ int p; while(1){//無限ループ ??? //参照部と符号化部の全ての一致長の計算 ??? //一致長の最大の位置と最大値を計算 printf("%s\n", Str); printf("(%d,%d,%c)\n", ???); 実行結果 ??? //シフト if(Str[8]==0) break; } printf("%s\n", Str); }
© Copyright 2024 ExpyDoc