ページ 1 / 1
暗号について
Posted: 2010年4月14日(水) 23:10
by junjun
今回は学校の宿題で、以下の通りのものです。
考えてみて、どうすればいいのかはわかるのですが、どう書いたらいいのかイマイチわからなかったのでどなたかよろしくお願いします。
暗号を用いて、平文を暗号文に変換するプログラムを作成せよ。
* 入力ファイル、"plain.txt"から平文を読み、これを矩形転置で暗号化して暗号文ファイル、"crypt.txt"に出力する。
* 暗号鍵(矩形の行数(4)と列数(8))は定数で与える。
* ファイル末尾に到達した場合は、矩形の残りの部分にスペース「' '」が入った状態にしてから暗号文を取り出して終了する。
まだまだ初心者です。
OS:vista
VS 2008

Re:矩形転置暗号について
Posted: 2010年4月15日(木) 15:23
by たいちう
> 考えてみて、どうすればいいのかはわかるのですが、
> どう書いたらいいのかイマイチわからなかったので
> どなたかよろしくお願いします。
このような状況は「どうすればいいのかわからない」と言います。
現状を認識しましょう。
> * 矩形転置暗号は、プログラミング概論II第1回の講義資料で説明する。
とあります。「矩形転置暗号」でググると255件しかヒットせず、
一般的な用語というにはマイナーすぎます。説明してください。
具体的な暗号の種類と関係なく言えることですが、
次のプログラムは作れますか?
入力ファイル"plain.txt"から平文を読み、【そのまま】"crypt.txt"に出力する。
Re:矩形転置暗号について
Posted: 2010年4月15日(木) 16:50
by junjun
説明不足で申し訳ありませんでした。
改めて、今回の場合についてですが、矩形転置暗号とは、
指定した行列のマスの中に左上から右へと入力ファイルから読み込んだ文字を格納していき、その行が一杯になったら次の行に移り、マスがすべて埋まったら左上から文字を出力しながら下へといき、一杯になったら次の列に移るという作業を入力ファイルの末尾まで繰り返すものです。
という感じなのですが、こんな説明しかできずに申し訳ありません。
よくわかりません。
教えていただけたら有り難いです。

Re:矩形転置暗号について
Posted: 2010年4月15日(木) 17:02
by たいちう
指定した行列のマスの中に左上から右へと入力ファイルから読み込んだ文字を格納していき、その行が一杯になったら次の行に移り、マスがすべて埋まったら左上から文字を出力しながら下へといき、一杯になったら次の列に移るという作業を入力ファイルの末尾まで繰り返すものです。
↓
↓こういうことですか?
↓
指左ル納にマ上下らを繰
定上かしなスかへ次入り
しからてっがらとの力返
たら読いたす文い列フす
行右みきらべ字きにァも
列へ込、次てを、移イの
のとんその埋出一るルで
マ入だの行ま力杯とのす
ス力文行にっしにい末。
のフ字が移たななう尾
中ァを一りらがっ作ま
にイ格杯、左らた業で
違うならば説明をお願いします。
いずれにしても、↓にも回答をお願いします。
> 次のプログラムは作れますか?
> 入力ファイル"plain.txt"から平文を読み、【そのまま】"crypt.txt"に出力する。
Re:矩形転置暗号について
Posted: 2010年4月15日(木) 23:45
by junjun
指定した行列のマスの中に左上から右へと入力ファイルから読み込んだ文字を格納していき、その行が一杯になったら次の行に移り、マスがすべて埋まったら左上から文字を出力しながら下へといき、一杯になったら次の列に移るという作業を入力ファイルの末尾まで繰り返すものです。
↓
↓こういうことです(行数と列数は適当です)
↓
指定した行列のマ 指ス右ル文きににべ上しきらいァ繰
スの中に左上から 定の・・・・
右へと入力ファイ ・・・
ルから読み込んだ ・・・
文字を格納してい ・・・
き、その行が一杯 ・・・
になったら次の行 ・・・
に移り、マスがす →→→→ ・・・・・・・・・・いたとフです。
べて埋まったら左 暗
上から文字を出力 号
しながら下へとい 化
き、一杯になった
ら次の列に移ると
いう作業を入力フ
ァイルの末尾まで
繰り返すものです。
> 次のプログラムは作れますか?
> 入力ファイル"plain.txt"から平文を読み、【そのまま】"crypt.txt"に出力する。
よくわかりません。
教えていただけたら有り難いです。

Re:矩形転置暗号について
Posted: 2010年4月16日(金) 00:46
by Poco
どの程度分からないかではなく、何が分からないか
頭の整理しましょう。
> 入力ファイル"plain.txt"から平文を読み、【そのまま】"crypt.txt"に出力する。
これのどの部分が実現できて、どの部分が実現出来ないのでしょうか?
Re:矩形転置暗号について
Posted: 2010年4月16日(金) 23:22
by junjun
以下のように作ってみたのですが、コンパイルエラーはない代わりに何も出力されませんでした。
どう修正するべきかご指導よろしくお願いします。

Re:矩形転置暗号について
Posted: 2010年4月16日(金) 23:53
by Poco
> // ファイルの終わりまで以下の処理を繰り返す。
> while(inFile.eof()){
> (略)
> }
>
ファイルの終わりの時だけwhile文の中が実行されます。
あと、while文の中のif文の条件がおかしいです。
その辺を直してみては?
Re:矩形転置暗号について
Posted: 2010年4月17日(土) 00:17
by junjun
これでどうでしょうか?

Re:矩形転置暗号について
Posted: 2010年4月17日(土) 00:36
by Poco
多分、論理積の演算子を間違えています。
> if(xpos != M-1, ypos <= N-1){
> (略)
> }
この条件式はypos<=N-1のみで判定されます。
意図通りですか?
>
> // もし、矩形が満杯になったら以下の処理を行う。
> if(xpos = M-1, ypos = N-1){
> (略)
>
この条件式はypos = N-1のみで判定される上、
Nが8だから必ず成立します。
意図通りですか?
Re:矩形転置暗号について
Posted: 2010年4月17日(土) 00:48
by junjun
確かに論理演算子がちがいました。
これでどうでしょうか?

Re:矩形転置暗号について
Posted: 2010年4月17日(土) 00:56
by Poco
比較演算子も間違えていませんか?
=は代入演算子です。
> // もし、矩形が満杯になったら以下の処理を行う。
> if(xpos = M-1 && ypos = N-1){
>
あと、変更したら必ず自分で動作確認してください。
kos-mosさんの望んだ結果が出たなら問題ないと思います。
Re:矩形転置暗号について
Posted: 2010年4月17日(土) 01:06
by junjun
エラーがでなかったので、実行したところ動作を停止しましたと表示されました。
どうしたらいいでしょうか?

Re:矩形転置暗号について
Posted: 2010年4月17日(土) 15:13
by Poco
ブレイクポイントを何箇所か入れて、
その時の各変数が(xpos、ypos、rectangleなど)が
予想通りの結果になっているか確認してください。
変更後のソースがどうなっているか知りませんが、
xposかyposのリセットを忘れている場所がありませんか?
Re:矩形転置暗号について
Posted: 2010年4月17日(土) 15:59
by junjun
変更後のソースはこんな感じです。

Re:矩形転置暗号について
Posted: 2010年4月18日(日) 01:34
by junjun
確認の仕方としては、ステップオーバーで値を見ていくってことでいいんでしょうか?

Re:矩形転置暗号について
Posted: 2010年4月19日(月) 01:46
by junjun
どなたかご指導願えないでしょうか?

Re:矩形転置暗号について
Posted: 2010年4月19日(月) 04:41
by たいちう
> 確認の仕方としては、ステップオーバーで値を見ていくってことでいいんでしょうか?
それも1つの確認の仕方ですが、この質問は本当に必要でしたか?
いいか悪いか誰かに聞かなければ変数を確認できませんか?
「ステップオーバーで値を見ていく」という事を思いついたのなら、
誰かに聞く前に、自分で試せばいいのです。
試した後なら別の聞き方になるはずです。
Re:矩形転置暗号について
Posted: 2010年4月19日(月) 14:07
by ookami
質問ばっかしですいませんが...
(1) inFile.get() から予想通りの値が得られているかどうか確認しましたか?
(2) 全角文字は考慮しなくてよいですか?
(3) plain.txtもアップしてもらえますか?
(4) それから...老婆心ながら...宿題の締め切りはいつですか?
Re:矩形転置暗号について
Posted: 2010年4月19日(月) 16:07
by junjun
(1)それはできているようです
(2)書体は plain.txt のままにしたいのですが、全角と半角で命令が異なるのでしょうか?

Re:矩形転置暗号について
Posted: 2010年4月20日(火) 08:47
by ookami
なるほどですね。引き続き質問ばかりですが...
> (1)それはできているようです
どのように確認しましたか?printfで1文字ずつ出力してみた感じでしょうか。
> (2)書体は plain.txt のままにしたいのですが、全角と半角で命令が異なるのでしょうか?
命令ではなくロジックが変わりますね。2byte 文字を考慮せず作ると出力結果が文字化けするので確認が難しくなるだろうなということなんですが、とりあえず例に使われている plain.txt が半角だけなので保留にしときますね。
> (3)↓これです。
> NASA...
この時、期待する出力結果はどのようになりますか?改行はどうしますか?50717の例では改行がなかったので。8×4に収まりきらない分はどうするのでしょうか?50804を見ると、何度も同じファイルに書き出す、ということでいいのでしょうか。
Re:矩形転置暗号について
Posted: 2010年4月20日(火) 20:03
by asd
えぇと、横槍を入れるようで申し訳ないのですが、
新しいプログラムを投稿するたびに過去の投稿からプログラムを削除するのは避けたほうがよいかと。
私のように後から見た人が流れを追えなくなりますので。
一番最初の質問文も編集されているようですが、質問文を大きく変えられてしまうと
流れを追うのが困難になってしまいます。
たいちうさんの返信から推察すると以下の1文は削除されてますよね。
> * 矩形転置暗号は、プログラミング概論II第1回の講義資料で説明する。
横槍失礼しました。
本題についても助言したかったのですが、質問者さんのプログラムがことごとく編集によって
消えているので^^;