マドノマグラの初心者自作ゲーム制作日誌 迷走モード
プログラミング初心者が自作ゲームを作成してみようとする動きを記す。現在迷走中。
ブログ履歴
2009/11/09: Rubyで適当版自分用関連記事リンク作成プログラムを作る
2009/06/04: Visual C++(DXライブラリ使用)の環境を整えてみるも休止状態に
2009/03/17: ActionScript勉強の環境を整えるも結局休止状態に
2006/07/15: とりあえず分岐型ゲームを作る グリーンタワーVer1.2 ダウンロード(zip)
2006/07/02: ブログスタート。NScripterで何かを作ろうとする
[PR]
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
「初めてのプログラミング」10.2のソートに関して再帰を使わない場合を考える
初めてのプログラミングの10.2のソートに関して再帰を使わない場合を考えてみた。
考え方は以下のようにした。
元データを入力
ex)元データ 「c,b,e,a,d」
未ソート配列1に元データをコピー
ex)未ソート配列1「c,b,e,a,d」
未ソート配列1で文字を1個ずつ比較:小さいのは保存文字行き、大きいのは文字置き場配列2に入れ込み
ex) 未ソート配列1「c,b,e,a,d」、保存文字 b、文字置き場配列2「c」
↓
中略:未ソート配列1「c,b,e,a,d」、保存文字 a、文字置き場配列2「c,e,b,d」
↓
保存文字をソート済み配列へ入れ込み、文字置き場配列2を未ソート配列1に移しかえる。移しかえた後、文字置き場配列2を一旦破棄する
ex)ソート済み配列「a」、未ソート配列1 「c,e,b,d」、文字置き場配列2「 」
この比較入れ込み作業を繰り返し、未ソート配列1がからになるまで行う。
ex)ソート済み配列「a,b,c,d,e」、未ソート配列1 「 」
そしてソート済み配列を、元データの.sortメソッドとを比較。
最初に作った sortofsword0.rb を実行。
"jiji","baka","aho"を順に入力してのテストを行ってみたものの、while ループの2週目で動かなくなる。Ctrl+Cで止めてみると each 部分でストップしてしまっていたことがわかった。
次に、文字置き場配列2であるところの、unsorted2 = [] を置く部分を while 内部にした sortofsword1.rb を実行してみると最後までいった。
とりあえず、空行入力、"aho"のみ、("baka","aho")、("jiji","baka","aho")、("jiji","aho","baka","aho")のパターンでテストしてみたけれど、どれもうまくソートできていた。
最初に想定した考え方からすると、unsorted2 = [] の置き位置が間違っていたというのはわかるけれど、何故、sortofsword0.rb において、each 部分でストップしたのかがイマイチわからない。
unsorted2 の配列のデータが増えていって、結果、未ソート配列もでかくなって、暴走するというのならまだわかるんだけど。なんで、2周目eachでストップなんだろうか。そこがわからん。今後の課題だろう。
オライリー・ジャパン
売り上げランキング: 161616
丁寧な解説
Ruby
sortofsword0.rb while ループの2週目で動かなくなる。each 部分でストップ
origindata = []
puts "半角英数で単語を打ってね、空行でおわり"
word = gets.chomp
while word != ""
origindata.push word
word = gets.chomp
end
puts "入れ込んだデータはこちら"
puts origindata
puts "プログラムによる sort を開始します"
unsorted = origindata
sorted = []
unsorted2 = []
while unsorted != []
left = ""
unsorted.each do |list|
if left == ""
left = list
elsif left <= list
unsorted2.push list
else
unsorted2.push left
left = list
end
end
sorted.push left
unsorted = unsorted2
# 内部データをしらべるため・
puts "sorted="
puts sorted
puts "unsorted="
puts unsorted
puts "unsorted2="
puts unsorted2
puts "origindata="
puts origindata
end
puts "最初に入れ込んだデータはこちら"
puts origindata
puts "sort したものはこちら"
puts sorted
puts "sort 結果が一緒かどうか判定してみます"
originsorted = origindata.sort
puts "最初に入れ込んだデータを、.sortでいじった結果はこちら"
puts originsorted
if originsorted == sorted
puts "一緒です"
else
puts "あれれ?どこかでミスったかな?"
end
sortofsword1.rbunsorted2 = [] を置く部分を while 内部にすると解決
origindata = []
puts "半角英数で単語を打ってね、空行でおわり"
word = gets.chomp
while word != ""
origindata.push word
word = gets.chomp
end
puts "入れ込んだデータはこちら"
puts origindata
puts "プログラムによる sort を開始します"
unsorted = origindata
sorted = []
while unsorted != []
left = ""
unsorted2 = []
unsorted.each do |list|
if left == ""
left = list
elsif left <= list
unsorted2.push list
else
unsorted2.push left
left = list
end
end
sorted.push left
unsorted = unsorted2
# 内部データをしらべるため・
puts "sorted="
puts sorted
puts "unsorted="
puts unsorted
puts "unsorted2="
puts unsorted2
puts "origindata="
puts origindata
end
puts "最初に入れ込んだデータはこちら"
puts origindata
puts "sort したものはこちら"
puts sorted
puts "sort 結果が一緒かどうか判定してみます"
originsorted = origindata.sort
puts "最初に入れ込んだデータを、.sortでいじった結果はこちら"
puts originsorted
if originsorted == sorted
puts "一緒です"
else
puts "あれれ?どこかでミスったかな?"
end