- ベストアンサー
5桁の数字…
初めての質問でここでいいのかわかりませんが、教えてください。 5桁の数字が2つあり、それぞれa[1]…a[5]、b[1]…b[5]に格納する。 対応する桁どうし(a[1]とb[1])を比較して一致する桁の個数を求めるプログラムを擬似コードで表したいのです。 { 2つの桁の数を配列a,bに読み込む; count=0; i=i+1; while(i<=5) { if(a[i]==b[i])(??); else 誤ったデータの処理; } countの値を出力する; } ??の部分には何をいれればよいでしょう? また他のところでも間違いがあればご指摘お願いいたします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
count++ または count=count+1 かと…。 現ロジックだとcountの値を出力したときに「0」。 countが加算されていないので。 それと i=i+1がwhileの外にあるのでiがカウントされないまま無限ループになるのでは?
その他の回答 (5)
- maile
- ベストアンサー率61% (19/31)
>無限ループにしないにはi=i+1はi=1に直すのでよいのでしょうか? 残念ながらちょっと違います。というか惜しい。 ってことで、ヒントを。(自力で導き出した方が記憶にも残るだろうから…) i=1 は「iに1を代入(セット)する」です。これはそれまでiに何の値が入っていようともiは1となります。 asantaさんのロジックで 2行目: i=i+1 「iに1加算する」です。現行のiが何であろうと1を加えることになります。 3行目: while(i<=5){...} 「iが5以下の間、{...}の処理を繰り返す」 それではasantaさんのロジックで、iはどのタイミングでwhile文の条件から外れる(ループを抜ける)のでしょうか。 {...}の中でiは変化していますか? 上記とNo.2で書いたこと(countの加算)を加えれば、asantaさんの望んだ結果が得られると思います。 それと余談ですが。 今回のプログラムロジック、「n回処理を繰り返す」場合はwhile文ではなくfor文を使用するのが慣例ではないかと。 for文は()内に変数(今の場合はi)の初期値、ループ条件、変数の増減を書きます。(No.1の方が書いてますよね) for文の中に増減まであるので繰り返す処理の中に変数の増減を書く必要はありません。(特殊な場合を除き) これに対し、while文は「()内の条件の間、処理を繰り返す」場合に使用します。 ()内は色んな条件が設定できます。今回のようにiのカウントアップのこともあれば、繰り返し処理の中である変数が変化したときなど。 ただfor文と違い、while文は{...}内で()の条件に使った変数が変化するロジックがないと無限にループしてしまいます。 仕様によりどちらを使うか…もありますし、これ以外も存在します。 for文とwhile文、どちらも意味的には同じなような気もしますが、for文なら{...}内で変数が変化しない限り、()内を見ればループ回数も判断できますよね。 もちろんwihle文を使うことが間違いってワケではないです。他にもいろんな方法もあるってことで。 プログラムロジックは正解は1つじゃないですから。 とんでもないことをしていない限り、結果オーライなところもあるし(笑)そういうルールも存在しているくらいで頭の片隅にでも。 ってことで参考まで。 このプログラムに少し手を加えると一致した位置やその文字も結果として表示することも可能ですよねー。(どうでもいいか^^;)
#4です。 ゴメンナサイ。iの初期化が抜けてましたね。 { count=0; i=1; while(i<=5) { count=count+(a[i]==b[i]); i=i+1; } countの値を出力する; }
文法的に許されるのであれば、 count=0; while(i<=5) { count=count+(a[i]==b[i]); i=i+1; } countの値を出力する; }
- condo
- ベストアンサー率37% (37/98)
以下の問題があると思います。 ・iの初期値が決定されていないこと ・iのインクリメント(+1)がwhileループの外にあるので、いつまでたってもループを抜け出す条件に到達しない(つまり無限ループになる)こと だから、i の初期値を設定し、i=i+1 を whileループの中に入れました。 { 2つの桁の数を配列a,bに読み込む; count=0; i=1; while(i<=5) { if(a[i]==b[i])(count=count+1); else 誤ったデータの処理; i=i+1; } countの値を出力する; } こんなんでいいのかなぁ・・・ なお、i=i+1 は、else (if ~ else)の処理には含めていないつもりです。
- Tasuke22
- ベストアンサー率33% (1799/5383)
{ 2つの桁の数を配列a,bに読み込む; count=0; for(i=0; i<5; i++){ if(a[i] == b[i])count++; } countの値を出力する; } 目的にあっているかな?
お礼
回答ありがとうございます。 こちらのやり方も参考にさせていただきます。
お礼
的確で早い回答をありがとうございます。 無限ループにしないにはi=i+1はi=1に直すのでよいのでしょうか?