開発環境
- macOS Catalina - Apple (OS)
- Emacs (Text Editor)
- Windows 10 Pro (OS)
- Visual Studio Code (Text Editor)
- Go (プログラミング言語)
入門Goプログラミング (Nathan Youngman(著)、Roger Peppé(著)、吉川 邦夫(監修, 翻訳)、翔泳社)のUNIT 3(関数とメソッド)、LESSON 15(チャレンジ:温度テーブル)の解答を求めてみる。
コード
package main
import (
"fmt"
"strings"
)
type celsius float64
type fahrenheit float64
func (c celsius) fahrenheit() fahrenheit {
return fahrenheit(c*9/5 + 32)
}
func (f fahrenheit) celsius() celsius {
return celsius((f - 32) * 5 / 9)
}
type getRow func(row int) (string, string)
func drawTable(h1, h2 string, rows int, gr getRow) {
width := 17
fmt.Println(strings.Repeat("=", width))
fmt.Printf("| %v | %v |\n", h1, h2)
fmt.Println(strings.Repeat("=", width))
for row := 0; row < rows; row++ {
col1, col2 := gr(row)
fmt.Printf("|%7v|%7v|\n", col1, col2)
}
fmt.Println(strings.Repeat("=", width))
}
func main() {
drawTable("℃", "℉", (100+40)/5+1,
func(row int) (string, string) {
c := celsius(-40 + row*5)
col1 := fmt.Sprintf("%.2f", c)
col2 := fmt.Sprintf("%.2f", c.fahrenheit())
return col1, col2
})
drawTable("℉", "℃", (100+40)/5+1,
func(row int) (string, string) {
f := fahrenheit(-40 + row*5)
col1 := fmt.Sprintf("%.2f", f)
col2 := fmt.Sprintf("%.2f", f.celsius())
return col1, col2
})
}
入出力結果(Zsh、PowerShell、Terminal)
% go run ./temperature.go
=================
| ℃ | ℉ |
=================
| -40.00| -40.00|
| -35.00| -31.00|
| -30.00| -22.00|
| -25.00| -13.00|
| -20.00| -4.00|
| -15.00| 5.00|
| -10.00| 14.00|
| -5.00| 23.00|
| 0.00| 32.00|
| 5.00| 41.00|
| 10.00| 50.00|
| 15.00| 59.00|
| 20.00| 68.00|
| 25.00| 77.00|
| 30.00| 86.00|
| 35.00| 95.00|
| 40.00| 104.00|
| 45.00| 113.00|
| 50.00| 122.00|
| 55.00| 131.00|
| 60.00| 140.00|
| 65.00| 149.00|
| 70.00| 158.00|
| 75.00| 167.00|
| 80.00| 176.00|
| 85.00| 185.00|
| 90.00| 194.00|
| 95.00| 203.00|
| 100.00| 212.00|
=================
=================
| ℉ | ℃ |
=================
| -40.00| -40.00|
| -35.00| -37.22|
| -30.00| -34.44|
| -25.00| -31.67|
| -20.00| -28.89|
| -15.00| -26.11|
| -10.00| -23.33|
| -5.00| -20.56|
| 0.00| -17.78|
| 5.00| -15.00|
| 10.00| -12.22|
| 15.00| -9.44|
| 20.00| -6.67|
| 25.00| -3.89|
| 30.00| -1.11|
| 35.00| 1.67|
| 40.00| 4.44|
| 45.00| 7.22|
| 50.00| 10.00|
| 55.00| 12.78|
| 60.00| 15.56|
| 65.00| 18.33|
| 70.00| 21.11|
| 75.00| 23.89|
| 80.00| 26.67|
| 85.00| 29.44|
| 90.00| 32.22|
| 95.00| 35.00|
| 100.00| 37.78|
=================
%
0 コメント:
コメントを投稿