問題2 #!/usr/koeki/bin/ruby # -*- coding: utf-8 -*- def bubblesort(data) if data.length <= 1 data else up = [] y = data.shift for x in data if x < y up << x #upの配列にxをいれる else y < x && x == y up << y #upの配列にyをいれる y = x end end bubblesort(up) + [y] end end def hyoji(a) printf("[%s]\n", a.join(", ")) end array = [] while true print"好きな数字を入力して下さい。(終了はq)\n" number = gets.chomp! if number == "q" then break end array.push(number.to_i) end print"もとの順番\n" hyoji(array) print"並べ替え後\n" hyoji(bubblesort(array)) 2、プログラムの実行結果 sime{c118xxx}% ./bubblesort.rb 好きな数字を入力して下さい。(終了はq) 343 好きな数字を入力して下さい。(終了はq) 67 好きな数字を入力して下さい。(終了はq) 35 好きな数字を入力して下さい。(終了はq) 97 好きな数字を入力して下さい。(終了はq) 14 好きな数字を入力して下さい。(終了はq) 78 好きな数字を入力して下さい。(終了はq) q もとの順番 [343, 67, 35, 97, 14, 78] 並べ替え後 [14, 35, 67, 78, 97, 343] 3、プログラムの説明 まず、このプログラムは後半のほうに書かれているwhile trueが働きます。 そして、number = gets.chomp!で数字を入力してもらう。そうすると、 array.push(number.to_i)でnumberで入力された数字を配列arrayのなかに追加し ていきます。「q」が入力されるまで繰り返されます。 qを入力した後は、hyoji(array)で元の順番にする操作が、 hyoji(bubblesort(array))で並び替えた順にする操作を行っていきます。 もとの順番の方は array.push(number.to_i) で配列に入った数字を def hyoji(a) printf("[%s]\n", a.join(", ")) end を使い表示していきます。「[]」の中に「,」を追加して表示されるようにして います。join を使ったのは表示された最後に「,」が表示されないようにするた めです。 並べ替えた順には、 4行目から20行目の def bubblesort(data) 〜 endで処理を行った上で def hyoji(a) printf("[%s]\n", a.join(", ")) end を使って表示します。 4〜20行目について説明します。 元の順番同様、 while ture 〜 end のなかでarrayに入った数字を4〜20行目の def bubblesort(data) 〜 end を呼び出します。data.length <= 1であるならば dataメソッドを展開します。 それ以外なら、配列upと y = data.shift を定めます。y = data.shift の 「shift」は配列upの最初の要素を削除し、その要素を返しています。 for x in data〜endではdataの数字をxに代入しています。 もし、x < yであれば upの配列にxの値ををいれ、 y < x && x == yであるならば upの配列にyをいれ、 y = x とします。 if data.length <= 1 か elseの処理が終わると、 bubblesort(up) + [y] の操作が行われます。 最終的にhyoji(bubblesort(array))から、 def hyoji(a) printf("[%s]\n", a.join(", ")) end が呼び出され並び替えが完了します。 問題3 1、説明と頑張った点 ロゴを作りました。このロゴの文字はそれぞれ一筆書きで書かれています。 頑張った点は、できるだけ文字が読めるようにしました。 「基礎プロ」と「かんだ」の文字がかかれています。 2、感想 難しくはありませんでしたが、色彩感覚が自分はあまり良くないなと感じました。 時間をもっとかけてより良い作品にしたかったな?と思いました。 添付(問題2と問題3)