課題
このような課題が出されました。
課題を丸投ではありませんが、どこをどう手をつけ始めればよいかわかりません。
お手数ですがよろしくお願いします。
次のような動作をするプログラムを作成する。
ファイルを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など)を用いずにプログラムすることを推奨.(分数や対数を正確に表せないため,僅かな誤差が切り上げの有無等に影響するため)
補足
すみません、説明不足でした^^; うまく説明できませんが…ファイルを圧縮してデスクトップにアイコンで出てきました。 それで大学のサイトに課題提出用のレポートアップロードという送信フォーム?みたいなのから圧縮したファイルを参照し、送信しました。それでサイトにログインし自分のページに送信した課題が更新されていたので開いてみたら、userフォルダが出てきてそこに自分の圧縮フォルダがある状態でした。なので横に出ているピクチャやミュージックのファイルフォルダをクリックすると中が見れる状態です すみません、説明が分かりにくいですね^^;