問題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)