前回リニアサーチについて記事にしましたが、その後、リニアサーチについていろいろ考えていたところ、もっといいやり方があることに気付きました。そんなわけで続き記事として記載しています。
Scrachのリニアサーチ修正版プログラム
Scratchについては、breakに相当するものがないので、「メッセージを送る」と「スクリプトを止める」で実現しましたが、「もし~ならば、でなければ」のif/else構文に相当するものを組み合わせれば分離しなくて済むということに気付きました。そんなわけで修正版はこちら
共有はこちらです。
このプログラムではもし~ならばの部分で配列Aと探す数が一致するかの判定。一致したら、もう処理を続ける必要がないので、数字を見つけたという結果を表示してスクリプトを停止。
でなければの部分で、さらに「もし~ならば」を組み込んで、カウンタが配列の長さと等しくなったら、つまり最後のループにおいても見つかる数がなかったならば、探す数は見つからなかったよと表示してスクリプトを停止します。
いずれにも該当しない場合はループを回す必要があるので、「~でなければ」の部分でカウンタを+1しています。
resultを初期化していないですが、resultの初期値は結果として利用しないので、ちょっと乱暴かもしれないけどシンプルにするなら、これでありかなとも思います。
Pythonのリニアサーチ修正版プログラム
Pythonも同様に修正しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 | <spanstyle="font-size: 14px;"><spanstyle="font-size: 16px;">print("探す正の数は何?") s=int(input()) A=[5,9,7,4,2,1,6,8,3] i=0 foriinrange(len(A)): ifs==A[i]: result=A[i] print("探す数"+str(s)+"は配列Aの"+str(i+1)+"番目にあったよ") break elifi==len(A)-1: print("探す数"+str(s)+"はみつからなかったよ")</span> </span> |
前回のプログラムではresut=-1を判定条件に使いましたが、if/elifをつかってカウンタ i が配列の長さ-1 まできても、すなわち最後のループがまわっても結果が見つかってなかったら、見つからなかったよというところをelifの部分で表示させれば、よりシンプルにできることがわかりました。
プログラムって、頭のいいひとはシンプルなコード書きますね。僕なんかは思考錯誤しながら修正していきますが、天才肌なひとは一発で書けるんだろうな~。なんて感じでリニアサーチについての追加記事でした。
コメント