後期試験 ・ 2011 年 1 月 24 日 3 時限実施 ・ ページ
授業 科目 |
プログラミング基礎 II | 学生番号 | 学科 | 学年 | 組 | 番 | フリ ガナ |
評点 | ||||||||
氏名 | ||||||||||||||||
担当者 | DÜRST, Martin J. |
次の Ruby 関連の英語の用語に相当する日本語の用語を書いて、簡単に説明しなさい。
重量挙げ部から、Ruby でのデータ処理をたのまれた。必要なデータ
(部員ごとに指氏名、その読み、学部、学科、学年、住所、郵便番号、電話番号 (自宅・下宿と携帯)、自己ベスト)
は部のマネージャーが提供する。データを提供するファイル形式全体や各項目について、処理しやすくするための要点を五つ細かく書きなさい。
ファイルは部員一人に一行使うようにする。空行などは無し。
各行のデータ項目は順番通り、半角コンマで区切る。項目がない時は ,, にする。
データは前もって決めた文字コードにする (例: UTF-8 又は Shift_JIS・Windows-31J)
読みはひらがなで、姓と名の間に半角スペース一つ。
数字は全部半角で、自己ベストは kg で記述だが、単位を書かないようにする。
下記の表の正規表現がその同じ行の三つの文字列にマッチする場合は ○、マッチしない場合は × をその右の ○× 欄に記入しなさい。
番号 | 正規表現 | 文字列 1 | ○× 1 | 文字列 2 | ○× 2 | 文字列 3 | ○× 3 |
---|---|---|---|---|---|---|---|
/^abc/ |
"abc" |
○ | "abababc" |
× | "abcdefg" |
○ | |
/aaa?/ |
"cbabc" |
× | "aaaaaaaa" |
○ | "cbaacb" |
○ | |
/[abc][ABC]/ |
"aCdC" |
○ | "Ab Ab" |
× | "aaaDDD" |
× | |
/[0-9]+\.[0-9]+/ |
".253" |
× | "000.769" |
○ | "abc 3.2 def" |
○ | |
/ad|bc/ |
"bcde" |
○ | "badc" |
○ | "abdc" |
× |
後期試験 ・ 2011 年 1 月 24 日 3 時限実施 ・ ページ
次の Ruby の式の結果を IRB のように記述しなさい。次の変数が問題中に使われている:
s = "Hello" a = [7, 4, 1, 6, 2, 3, 5]
3 + 5
8
5 * 3+2 * 2
"あおやま".length
2 ** 5
a.sort
s + "Ruby!"
"Ruby" * 3
27 / 4
a[3]
2 ** 2 ** 2
"Hello Ruby World!".split(" ")
a.join
(s+" Students").reverse
s.center(15, "12345")
s.squeeze("lxo")
"abc def ghi".split(" ").join(".").reverse
"abc def ghi".split(" ").reverse.join(".")
"abc def ghi".split(" ").collect do |s| s.reverse end.join(".")
a.length
nil.Class
(3..5).map do |n| n.to_s * (n-2) end.join("X")
a.collect do |n| if n>3; 5 else 0 end end # ; は改行の代わり
"ababcdabcde".gsub(/abc/, "zyz")
a.sort_by do |n| -n end
a.group_by do |n| n%3 end
後期試験 ・ 2011 年 1 月 24 日 3 時限実施 ・ ページ
授業 科目 |
プログラミング基礎 II | 学生番号 | 学科 | 学年 | 組 | 番 | フリ ガナ |
評点 | ||||||||
氏名 | ||||||||||||||||
担当者 | DÜRST, Martin J. |
list = [1, 3, 4, 7, 9, 15] here = 0 while here < list.length puts list[here] ** 2 here = here + 1 end
次のプログラムで while
を Ruby の特長のイテレータに書き換えなさい。(8 点)
list = [1, 3, 4, 7, 9, 15] list.each do |this| puts this ** 2 end
両方の書き方を比較し、自分の好みとその理由を書きなさい。(8 点)
後方のイテレータが好き。なぜかというと、まずは while
を使ったものより短い。これは書きやすいだけではなく、読みやすいこともある。
リストの長さとか、現在何番なのか、番号を毎回ひとつ増やす、
など手間が少ない。do ブロックの外と中は完全に分かれている。
授業で説明したプログラム開発方針の一つを選んで、明記し、Ruby で使える機能を含め細かく説明しなさい。
トップダウン開発を選びました。トップダウン開発はプログラム全体をまず考え、
大まかな構造から少しずつ詳細に進む開発方針です。例えばまずプログラム全体を
入力、計算、出力に分け、そこから入力の詳細、... と進む。Ruby で特に使える機能:
コメントでまだわからない部分を表す; 関数やメソッドに詳細を任せる;
関数を擬似的に実装する (例えば BMI は常に 21 とか) がある。
次のプログラムはそれぞれエラーとなる。その原因と対処法を説明しなさい。
"abc" + 5
文字列と数は足し算できない。5.to_s
で数を文字列に変換しないといけない。
class person; end # ; は改行の代わり
クラス名は大文字でないといけない。person
を Person
にしたら大丈夫。
授業についての意見を書来なさい (内容にかかわらず何か書いたら 5 点)。