演習課題2-1-1
課題
矩形転置暗号を用いて、平文を暗号文に変換するプログラムを作成せよ。矩形転置暗号は、図のように、矩形に入れる順と出す順を違えることで
文字列を暗号化する方法である。
仕様
- 入力ファイル、"plain.txt"から平文を読み、これを矩形転置で暗号化して暗号文ファイル、"crypt.txt"に出力す る。
- 暗号鍵(矩形の行数(4)と列数(8))は定数で与える。
- ファイル末尾に到達した場合は、矩形の残りの部分にスペース「' '」が入った状態にしてから暗号文を取り出して終了する。
- ファイルオープンのエラー処理は行わない。
考え方
- 文字型(char)の2次元配列を用いる。
- 1文字入力は「char ch; ch=inFile.get();」を用いる。 「inFile
>>ch;」では改行文字が無視されるためである。
- 1文字を先読みして保持すると、ファイル末端処理のアルゴリズムが作りやすい。
- アルゴリズムには2種類の考え方がある。
- 矩形を1文字ずつ埋めていくことをファイル末端まで繰り返す(while(!eof))。入力文字ごとに代入位置を横にずらし
(col++)、横が満杯になったら(if(col==N))次の行の最初に移る(col=0;row++)。矩形が満杯になったら
(if(row==M))、矩形全部を縦方向に(for col for
row)書き出して、矩形を空白で埋め、代入位置を原点に戻す(col=row=0)。繰り返しを抜けたら矩形中に残ったデータを書き出す
(for col for row)。
- ファイル末端まで以下を繰り返す(while(!eof)))。矩形を埋めるループ(横方向 for row for
col)と、矩形を書き出すループ(縦方向 for col for row)を交互に実行する。読み込みがファイル末端ならば(if(eof))、
入力文字の代わりに 空白を使う(ch=' ')。
- ファイル入出力のサンプルをここに示す。 このサンプルは入力した文字列を逆順に出力する。
プログラム
- Visual C++を使って、新しいプロジェクトenshu2_1_1を作れ。
- アルゴリズムを作成せよ。
- アルゴリズムをプログラム化せよ。
- 入力したプログラムをコンパイルして、誤りを修正せよ。
- 修正が完了したプログラムを実行せよ。
- テストのための"plain.txt"はここから取得して(IEではマウスを右ク
リックして「対象をファイルに保存」を選択する)、プロジェクトenshu2_1_1のフォルダに置く。