暗号について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
junjun

暗号について

#1

投稿記事 by junjun » 15年前

今回は学校の宿題で、以下の通りのものです。
考えてみて、どうすればいいのかはわかるのですが、どう書いたらいいのかイマイチわからなかったのでどなたかよろしくお願いします。

暗号を用いて、平文を暗号文に変換するプログラムを作成せよ。

* 入力ファイル、"plain.txt"から平文を読み、これを矩形転置で暗号化して暗号文ファイル、"crypt.txt"に出力する。
* 暗号鍵(矩形の行数(4)と列数(8))は定数で与える。
* ファイル末尾に到達した場合は、矩形の残りの部分にスペース「' '」が入った状態にしてから暗号文を取り出して終了する。
まだまだ初心者です。
OS:vista
VS 2008

画像

たいちう

Re:矩形転置暗号について

#2

投稿記事 by たいちう » 15年前

> 考えてみて、どうすればいいのかはわかるのですが、
> どう書いたらいいのかイマイチわからなかったので
> どなたかよろしくお願いします。

このような状況は「どうすればいいのかわからない」と言います。
現状を認識しましょう。


> * 矩形転置暗号は、プログラミング概論II第1回の講義資料で説明する。

とあります。「矩形転置暗号」でググると255件しかヒットせず、
一般的な用語というにはマイナーすぎます。説明してください。


具体的な暗号の種類と関係なく言えることですが、
次のプログラムは作れますか?

入力ファイル"plain.txt"から平文を読み、【そのまま】"crypt.txt"に出力する。

junjun

Re:矩形転置暗号について

#3

投稿記事 by junjun » 15年前

説明不足で申し訳ありませんでした。

改めて、今回の場合についてですが、矩形転置暗号とは、
指定した行列のマスの中に左上から右へと入力ファイルから読み込んだ文字を格納していき、その行が一杯になったら次の行に移り、マスがすべて埋まったら左上から文字を出力しながら下へといき、一杯になったら次の列に移るという作業を入力ファイルの末尾まで繰り返すものです。

という感じなのですが、こんな説明しかできずに申し訳ありません。

よくわかりません。
教えていただけたら有り難いです。 画像

たいちう

Re:矩形転置暗号について

#4

投稿記事 by たいちう » 15年前

指定した行列のマスの中に左上から右へと入力ファイルから読み込んだ文字を格納していき、その行が一杯になったら次の行に移り、マスがすべて埋まったら左上から文字を出力しながら下へといき、一杯になったら次の列に移るという作業を入力ファイルの末尾まで繰り返すものです。


↓こういうことですか?


指左ル納にマ上下らを繰
定上かしなスかへ次入り
しからてっがらとの力返
たら読いたす文い列フす
行右みきらべ字きにァも
列へ込、次てを、移イの
のとんその埋出一るルで
マ入だの行ま力杯とのす
ス力文行にっしにい末。
のフ字が移たななう尾
中ァを一りらがっ作ま
にイ格杯、左らた業で

違うならば説明をお願いします。

いずれにしても、↓にも回答をお願いします。

> 次のプログラムは作れますか?
> 入力ファイル"plain.txt"から平文を読み、【そのまま】"crypt.txt"に出力する。

junjun

Re:矩形転置暗号について

#5

投稿記事 by junjun » 15年前

指定した行列のマスの中に左上から右へと入力ファイルから読み込んだ文字を格納していき、その行が一杯になったら次の行に移り、マスがすべて埋まったら左上から文字を出力しながら下へといき、一杯になったら次の列に移るという作業を入力ファイルの末尾まで繰り返すものです。


↓こういうことです(行数と列数は適当です)

指定した行列のマ       指ス右ル文きににべ上しきらいァ繰
スの中に左上から       定の・・・・
右へと入力ファイ       ・・・
ルから読み込んだ       ・・・
文字を格納してい       ・・・
き、その行が一杯       ・・・
になったら次の行       ・・・
に移り、マスがす →→→→ ・・・・・・・・・・いたとフです。
べて埋まったら左    暗
上から文字を出力    号
しながら下へとい    化
き、一杯になった
ら次の列に移ると
いう作業を入力フ
ァイルの末尾まで
繰り返すものです。

> 次のプログラムは作れますか?
> 入力ファイル"plain.txt"から平文を読み、【そのまま】"crypt.txt"に出力する。
よくわかりません。
教えていただけたら有り難いです。
画像

Poco

Re:矩形転置暗号について

#6

投稿記事 by Poco » 15年前

どの程度分からないかではなく、何が分からないか
頭の整理しましょう。

> 入力ファイル"plain.txt"から平文を読み、【そのまま】"crypt.txt"に出力する。

これのどの部分が実現できて、どの部分が実現出来ないのでしょうか?

junjun

Re:矩形転置暗号について

#7

投稿記事 by junjun » 15年前

以下のように作ってみたのですが、コンパイルエラーはない代わりに何も出力されませんでした。
どう修正するべきかご指導よろしくお願いします。
画像

Poco

Re:矩形転置暗号について

#8

投稿記事 by Poco » 15年前

> // ファイルの終わりまで以下の処理を繰り返す。
> while(inFile.eof()){
> (略)
> }
>

ファイルの終わりの時だけwhile文の中が実行されます。
あと、while文の中のif文の条件がおかしいです。

その辺を直してみては?

junjun

Re:矩形転置暗号について

#9

投稿記事 by junjun » 15年前

これでどうでしょうか?

画像

Poco

Re:矩形転置暗号について

#10

投稿記事 by Poco » 15年前

多分、論理積の演算子を間違えています。

> if(xpos != M-1, ypos <= N-1){
> (略)
> }

この条件式はypos<=N-1のみで判定されます。
意図通りですか?


>
> // もし、矩形が満杯になったら以下の処理を行う。
> if(xpos = M-1, ypos = N-1){
> (略)
>

この条件式はypos = N-1のみで判定される上、
Nが8だから必ず成立します。
意図通りですか?

junjun

Re:矩形転置暗号について

#11

投稿記事 by junjun » 15年前

確かに論理演算子がちがいました。
これでどうでしょうか?
画像

Poco

Re:矩形転置暗号について

#12

投稿記事 by Poco » 15年前

比較演算子も間違えていませんか?
=は代入演算子です。

> // もし、矩形が満杯になったら以下の処理を行う。
> if(xpos = M-1 && ypos = N-1){
>

あと、変更したら必ず自分で動作確認してください。
kos-mosさんの望んだ結果が出たなら問題ないと思います。

junjun

Re:矩形転置暗号について

#13

投稿記事 by junjun » 15年前

エラーがでなかったので、実行したところ動作を停止しましたと表示されました。

どうしたらいいでしょうか? 画像

Poco

Re:矩形転置暗号について

#14

投稿記事 by Poco » 15年前

ブレイクポイントを何箇所か入れて、
その時の各変数が(xpos、ypos、rectangleなど)が
予想通りの結果になっているか確認してください。

変更後のソースがどうなっているか知りませんが、
xposかyposのリセットを忘れている場所がありませんか?

junjun

Re:矩形転置暗号について

#15

投稿記事 by junjun » 15年前

変更後のソースはこんな感じです。
画像

junjun

Re:矩形転置暗号について

#16

投稿記事 by junjun » 15年前

確認の仕方としては、ステップオーバーで値を見ていくってことでいいんでしょうか?
画像

junjun

Re:矩形転置暗号について

#17

投稿記事 by junjun » 15年前

どなたかご指導願えないでしょうか? 画像

たいちう

Re:矩形転置暗号について

#18

投稿記事 by たいちう » 15年前

> 確認の仕方としては、ステップオーバーで値を見ていくってことでいいんでしょうか?

それも1つの確認の仕方ですが、この質問は本当に必要でしたか?
いいか悪いか誰かに聞かなければ変数を確認できませんか?

「ステップオーバーで値を見ていく」という事を思いついたのなら、
誰かに聞く前に、自分で試せばいいのです。
試した後なら別の聞き方になるはずです。

ookami

Re:矩形転置暗号について

#19

投稿記事 by ookami » 15年前

質問ばっかしですいませんが...

(1) inFile.get() から予想通りの値が得られているかどうか確認しましたか?
(2) 全角文字は考慮しなくてよいですか?
(3) plain.txtもアップしてもらえますか?
(4) それから...老婆心ながら...宿題の締め切りはいつですか?

junjun

Re:矩形転置暗号について

#20

投稿記事 by junjun » 15年前

(1)それはできているようです

(2)書体は plain.txt のままにしたいのですが、全角と半角で命令が異なるのでしょうか?
画像

ookami

Re:矩形転置暗号について

#21

投稿記事 by ookami » 15年前

なるほどですね。引き続き質問ばかりですが...

> (1)それはできているようです
どのように確認しましたか?printfで1文字ずつ出力してみた感じでしょうか。

> (2)書体は plain.txt のままにしたいのですが、全角と半角で命令が異なるのでしょうか?
命令ではなくロジックが変わりますね。2byte 文字を考慮せず作ると出力結果が文字化けするので確認が難しくなるだろうなということなんですが、とりあえず例に使われている plain.txt が半角だけなので保留にしときますね。

> (3)↓これです。
> NASA...
この時、期待する出力結果はどのようになりますか?改行はどうしますか?50717の例では改行がなかったので。8×4に収まりきらない分はどうするのでしょうか?50804を見ると、何度も同じファイルに書き出す、ということでいいのでしょうか。

asd

Re:矩形転置暗号について

#22

投稿記事 by asd » 15年前

えぇと、横槍を入れるようで申し訳ないのですが、
新しいプログラムを投稿するたびに過去の投稿からプログラムを削除するのは避けたほうがよいかと。

私のように後から見た人が流れを追えなくなりますので。

一番最初の質問文も編集されているようですが、質問文を大きく変えられてしまうと
流れを追うのが困難になってしまいます。
たいちうさんの返信から推察すると以下の1文は削除されてますよね。

> * 矩形転置暗号は、プログラミング概論II第1回の講義資料で説明する。

横槍失礼しました。
本題についても助言したかったのですが、質問者さんのプログラムがことごとく編集によって
消えているので^^;

閉鎖

“C言語何でも質問掲示板” へ戻る