• 締切済み

課題

このような課題が出されました。 課題を丸投ではありませんが、どこをどう手をつけ始めればよいかわかりません。 お手数ですがよろしくお願いします。 次のような動作をするプログラムを作成する。 ファイルをShannon符号を用いて圧縮し,圧縮ファイルを作成する.また,Shannon符号で圧縮されたファイルを読み込み,解凍されたファイルを作成する. 圧縮対象のファイルはテキストファイルとし,出現する可能性のある文字は,a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p の16文字の内の何れかとする.ファイルの長さは4096文字以内で,一行に書かれている. 圧縮ファイルもテキストファイルとし,先頭の16行は,各文字に対する符号を文字の「0」,「1」を使って一行に一つずつ書く(符号を割り当てない場合は何も書かない). 17行目に符号化されたbit系列を文字の「0」,「1」を使って一行で書く. (本来バイナリで書けば1/8のサイズになるが,簡単のため文字にする) 解凍されたファイルは,圧縮前の元のファイルと同じになるように作る. 「srcdata0~2.txt」及び「encoded0~2answer.txt」は,作成したプログラムが正しく動作するかどうかをチェックするためのサンプルファイルである. 「srcdata3.txt」を圧縮したファイルを「encoded3.txt」として,提出すること. 「encoded4.txt」を解凍したファイルを「decoded4.txt」として,提出すること. ソースプログラムも提出すること. プログラム言語はC言語,C++,java,C#の何れかで作成のこと.特にC,C++は標準ライブラリのみを用い,gcc,g++,又はVisual C++でコンパイル可能なこと. C言語はファイル入出力関係が煩雑なので,サンプルプログラム「shannon.c」をベースに作成すること. C言語では,文字列関数(#include <string.h>)を使わないこと. 改行コードはOS依存だが,特に気にする必要はない.必要があれば変換して良い.EOFコードは不要. 上級者は,浮動小数点型(double, floatなど)を用いずにプログラムすることを推奨.(分数や対数を正確に表せないため,僅かな誤差が切り上げの有無等に影響するため)

みんなの回答

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

どこから手をつけていいかわからないとのことですが、 肝心要のシャノン符号の作り方はわかってますか? 何もわからないところにいきなりこんな問題が出されるとは思えないので、 ファイルの入出力や、簡単なプログラムは組めると考えていいのですよね?

すると、全ての回答が全文表示されます。
  • kusa_mochi
  • ベストアンサー率76% (1597/2087)
回答No.1

まず質問主殿は、指定されている4つのプログラム言語の内、使いこなせるものがありますか? 使いこなせるものがあるなら、バブルソートで良いのでプログラムを書いてみてください。 それすら出来ないのなら、問題外ですのでサンプルプログラムをネットで探してお勉強しましょう。 自分でバブルソートぐらいのプログラムが書けるようになったら、次はフローチャートで処理の流れを記述します。 最初は、セネラルフローと呼ばれる大まかな処理の流れを記述するフローチャートを書き(ゼネラルフローは言語を意識せずアルゴリズムの記述を主に考慮して記述する)、それが書けたら次に言語レベルの処理単位に噛み砕いたディテールフローを記述します。 (完全に言語レベルに1:1で対応する必要はありません。言語レベルの処理単位に近い所にまで落とし込めば良い) ディテールフローが書けたら、それをコーディングします。 コーディングが終わったら、次はデバックを行います。 大まかな流れはこんなもんでしょう。 質問の丸投げでないなら、後はご自身で頑張って下さい。

すると、全ての回答が全文表示されます。

関連するQ&A