\
2014年09月27日
Posted by 屋台ブルー at 2014年09月27日00:00 Comment(0)

Swiftで遊ぼう! - 78 プロおも本、クラスの問題3

swift_logo参考文献:プログラマの考え方がおもしろいほど身につく本 問題解決能力を鍛えよう!←勉強になるよ初めての人にいいかも。
この本のことをこのブログでは「プロおも本(ぷろおもぼん)」とします(^^)/

問題:学生名簿を管理するクラスを設計してみよう。学生レコードには、名前・番号・成績(0〜100)があり、このプログラムは、学生レコードの追加と削除・番号で指定した学生の成績(数値と文字)の表示と全体の平均点の表示を可能にする。成績の表す表は以下の通り。
93-100 :"A"
90-92 :"A-"
87-89 :"B+"
83-86 :"B"
80-82 :"B-"
77-79 :"C+"
73-76 :"C"
70-72 :"C-"
67-69 :"D+"
60-66 :"D"
0-59 :"F"

取りあえず、上記の問題をクラスを使って解いてみた。当然、私の解答は、「プロおも本」に書かれている答えじゃないよ。これから読み進めるのでどんな解答なのかちょっと楽しみである。

私の解答は、ツッコミどころ満載でしょう。というか本当は色々つっこんで欲しい。私のような50オヤジが真剣にプログラマーを目指して、この程度です。Swiftの構文も次から次へと忘れていきます。「あれ、なんとかすればできそうだけど、どうしたらいいんだろう?」ということばかりです。私の周りでプログラミングを教えてくれる人は誰もいません。問題にぶち当たれば自分で解決しないといけないので、理解するのにものすごく時間がかかります。周りにプロフェッショナルな人がいらっしゃる皆さん、幸せな環境ですよ。どんどん質問して勉強してください。

香川県高松市在住の奇特なプログラマーの皆さん、私にオブジェクト指向プログラミングを教えてもいいよっていう人、いらっしゃったら声かけてください。iPhoneアプリの作り方を御教授してください。まだまだアプリ制作に横たわるAPI、フレームワークの勉強に入る自信がありません(T_T)

まあ、次の私のコードをみてください(^^;)

class Student {
var name: String
var iD: Int
init(name: String, iD: Int) {
self.name = name
self.iD = iD
}
}

class StudentMark: Student {
var score: Int
var mark: String
init(name: String, iD: Int, score: Int) {
self.score = score
switch score {
case 93...100:
mark = "A"
case 90...92:
mark = "A-"
case 87...89:
mark = "B+"
case 83...86:
mark = "B"
case 80...82:
mark = "B-"
case 77...79:
mark = "C+"
case 73...76:
mark = "C"
case 70...72:
mark = "C-"
case 67...69:
mark = "D+"
case 60...66:
mark = "D"
default:
mark = "F"
}
super.init (name: name, iD: iD)
}
}

var student1 = StudentMark(name: "Yuji Tai", iD: 1, score: 87)
var student2 = StudentMark(name: "Miyuki Tai", iD: 2, score: 96)
var student3 = StudentMark(name: "Yuki Tai", iD: 3, score: 78)
var student4 = StudentMark(name: "Genki Tai", iD: 4, score: 67)

class SchoolClass {
var studentMember = [StudentMark]()

init(member: StudentMark){
studentMember.append(member)
}

func getMember( anotherMember: StudentMark) {
return studentMember.append(anotherMember)
}

func getMark(ID iD: Int) -> (score: Int, mark: String) {
var scoreSpecific = 0
var markSpecific = ""
for itme in studentMember {
if itme.iD == iD {
(scoreSpecific, markSpecific) = (itme.score, itme.mark)
} else {
println("no student is found")
}
}
return (scoreSpecific, markSpecific)
}

func getAverage() -> Double {
var average = 0.0
var totalScore = 0
for item in studentMember {
totalScore += item.score
}
average = Double(totalScore/studentMember.count)
return average
}
}

var classA = SchoolClass(member: student1)
classA.getMember(student2)
classA.getMember(student3)
classA.getMember(student4)

classA.getMark(ID: 4).score // 67
classA.getAverage() // 82.0

無理矢理クラスの継承を使ってSchoolClassで集計させてみたらこうなりました。ジャンジャン!ってな結果です(>_<)

クラスを使ったプログラミングをオブジェクト指向関係無しにした結果だと思います。やっぱりにオブジェクト指向的な考え方は無茶苦茶重要なんでしょう。デザインパターンの理解がやっぱり必要かなと思うしだいです。人のコーディンを見て勉強をする時期(まだSwiftを理解してないから早いかも)かもしれない。

プログラミング便虚運試行錯誤は続きます。

はっきり言い切るけど、50オヤジは1月や2月でiPhoneアプリを作れません。時間をかけてもコツコツと進めるしかないでしょう。Appleから提供された正本、THe Swift Programming Langege本を読めば、iPhoneアプリなんか簡単にできると思っていたけど、3ヶ月ほど勉強して理解できた事は、プログラミングの奥深さでした。生命科学の奥深さに匹敵することが分かりました。プログラミングで人の知能に近づけようとする行為は、生命科学では生命を作り出すそれと同じだと思えます。一度は生命科学に囚われた私がプログラミングの奥深さに囚われてしまうのも必然かもしれません。全く興味のなかったプログラミングが非常に面白く感じます。私は道を間違えていたのかもしれません。でも50オヤジの言う言葉じゃないですね(^_^;)


同じカテゴリー(Swiftで遊ぼう!)の記事画像
Swiftで遊ぼう! - プログラミングまとめ(ときどき更新)
Swiftで遊ぼう! - 番外編 - Xcode6:ショートカットと用語説明
Swiftで遊ぼう! - 209 - ルートビューのコードは続く:CGRect
Swiftで遊ぼう! - 208 - ルートビューのコード
Swiftで遊ぼう! - 207 - ツールバーボタンとビューコントローラーを繋ぐ
Swiftで遊ぼう! - 206 - ビューコントローラーにビューコントローラーを載せる
同じカテゴリー(Swiftで遊ぼう!)の記事
 Swiftで遊ぼう! - プログラミングまとめ(ときどき更新) (2021-01-31 00:00)
 Swiftで遊ぼう! - 番外編 - Xcode6:ショートカットと用語説明 (2015-04-05 00:00)
 Swiftで遊ぼう! - 209 - ルートビューのコードは続く:CGRect (2015-02-06 00:00)
 Swiftで遊ぼう! - 208 - ルートビューのコード (2015-02-05 00:00)
 Swiftで遊ぼう! - 207 - ツールバーボタンとビューコントローラーを繋ぐ (2015-02-04 00:00)
 Swiftで遊ぼう! - 206 - ビューコントローラーにビューコントローラーを載せる (2015-02-03 00:00)

上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

削除
Swiftで遊ぼう! - 78 プロおも本、クラスの問題3
    コメント(0)