• 締切済み

複合プログラム についてです。

複合プログラム 下図のような動作を行うLZ77符号の復号プログラムの???にどのようなプログラムを入力すれば完成しますか? #include<stdio.h> char Str[17]="AAAAAAAA"; ??? void main(void){ int p, max, position; char moji; while(1){ scanf("%d %d %c", &position, &max, &moji); ??? ?? 実行結果は以下のようになります。 キーボード入力→0 1 B 画面出力→AB キーボード入力→ 0 0 C 画面出力→C キーボード入力→5 3 B 画面出力→ABCB キーボード入力→3 2 C 画面出力→CAC キーボード入力→5 4 B 画面出力→CACCB キーボード入力→-1 0 A 続行するには何かキーを押して下さい・・・ となりますので、 上に書いてあるプログラムの足りない部分を教えて下さい。 よろしくお願いします。

みんなの回答

回答No.1

おそらく、図に示したような処理をプログラムにすればいいのだと思うのだけど、どうなのでしょう? ただ、これだと、多分 str[17] の定義からすると配列をはみ出すので、もっと大きな配列が必要だと思うけど。 処理を図示しました。まず、処理手順を確認してください。 (初めて解説を読んだので間違っているかも) これで、「配列 str[] の ~から、~個を、~からの要素にコピー」が本質的な処理だというのがわかります。 配列の i 番目は、単純には str[i] ですが、スライド窓の位置を決める必要があります。 これから書き込もうとする要素の先頭が、str[p] だとすると、スライド窓の インデックス position の位置は、str[p - 8 + position] になります。 str[p] = str[p - 8 + position]; str[p + 1] = str[p - 8 + position + 1]; str[p + 2] = str[p - 8 + position + 2]; …… と、max 回分繰り返せば基本的な処理はできるかなと。

nappyboy
質問者

お礼

ありがとうございます!!!

関連するQ&A