開発環境
- OS X El Capitan - Apple (OS)
- Emacs (Text Editor)
- Go (version go1.5.3 darwin/amd64) (プログラミング言語)
Introducing Go (Caleb Doxsey (著)、O'Reilly Media)のChapter 6.(Functions)、Exercises 1-11.(No. 1096)を取り組んでみる。
Exercises 1-11.(No. 1096)
コード(Emacs)
package main
import "fmt"
func sum(numbers []float64) float64 {
total := 0.0
for _, value := range numbers {
total += value
}
return total
}
func halves(n int) (float64, bool) {
return float64(n) / 2.0, n % 2 == 0
}
func greatestNumber(numbers ...float64) float64{
result := numbers[0]
for _, value := range numbers {
if value > result {
result = value
}
}
return result
}
func makeOddGenerator() func() uint {
i := uint(1)
return func() (ret uint) {
ret = i
i += 2
return
}
}
func fib(n uint) uint {
if n <= 1 {
return n
}
return fib(n - 2) + fib(n - 1)
}
func deferPanicRecover() {
defer func () {
str := recover()
fmt.Println(str)
}()
panic("Panic!")
}
func square (x *float64) {
*x = *x * *x
}
func swap1(x *int, y *int) {
t := *x
*x = *y
*y = t
}
func swap2(x *int, y *int) {
*x += *y
*y = *x - *y
*x = *x - *y
}
func main() {
fmt.Println("1.")
numbers := []float64{1,2,3,4,5,6,7,8,9,10}
fmt.Println(sum(numbers))
fmt.Println("2.")
for i := 1; i <= 10; i++ {
a, b := halves(i)
fmt.Println(i, ":", a, b)
}
fmt.Println("3.")
fmt.Println(greatestNumber(5, 1, 4, 2, 3))
fmt.Println(greatestNumber(1, 2, 3, 4, 5))
fmt.Println(greatestNumber(1, 2, 5, 3, 4))
fmt.Println(greatestNumber(4, 3, 5, 2, 1))
fmt.Println(greatestNumber(5, 5, 5, 5, 5))
fmt.Println("4.")
nextOdd := makeOddGenerator()
fmt.Println(nextOdd())
fmt.Println(nextOdd())
fmt.Println(nextOdd())
fmt.Println("5.")
fmt.Println(fib(10))
fmt.Println(fib(20))
fmt.Println("6.")
deferPanicRecover()
fmt.Println("7.")
x := 10
fmt.Println(&x)
fmt.Println("8, 9.")
xPtr := new(int)
*xPtr = x
fmt.Println(xPtr, x)
fmt.Println("10.")
y := 1.5
square(&y)
fmt.Println(y == 2.25)
fmt.Println("11.")
a := 1
b := 2
swap1(&a, &b)
fmt.Println(a, b)
c := 3
d := 4
swap2(&c, &d)
fmt.Println(c, d)
}
入出力結果(Terminal)
$ go run main.go 1. 55 2. 1 : 0.5 false 2 : 1 true 3 : 1.5 false 4 : 2 true 5 : 2.5 false 6 : 3 true 7 : 3.5 false 8 : 4 true 9 : 4.5 false 10 : 5 true 3. 5 5 5 5 5 4. 1 3 5 5. 55 6765 6. Panic! 7. 0xc820062470 8, 9. 0xc820062490 10 10. true 11. 2 1 4 3 $
0 コメント:
コメントを投稿