電卓作成
対話型のプログラムを作ってみたいなーと思いまして。
あと、型確認もできますし!
流れはこんな感じです。
- 数字、および演算子の入力(逆ポーランド法で)
- 数字および演算子を変数に格納
- 演算子毎に違った計算を実施
- 計算結果を出力
今回は、+, -, *, / 辺りを実装してみます。
フローチャートは割愛です!
標準入出力
とりあえずは、C言語でいうscanf的なものを調査しないと。
うーん……
結構いろんな種類があるみたい。
どれが適しているのだろう…分からぬ……
とりあえず、fmt.Scanf関数を使って…みますか……
…と思ってやってみたコードがこちら。
※ビルドできません!!!
package main
import "fmt"
func main() {
var x int
fmt.Scanf("%d", &x)
fmt.Printf("%d\n", x)
}
おお!
いけました!
感覚でいけるもんですね。
というわけで、入力フォームおよび出力内容を作ってみます。
作ったコードはこちら!
package main
import "fmt"
func main() {
var a, b int
var calc string
fmt.Printf("Please enter the calculation formula.\n");
fmt.Printf("ex) 1 + 1 = ? -> 1 1 +\n");
fmt.Scanf("%d %d %s", &a, &b, &calc);
fmt.Printf("%d %s %d = ", a, calc, b);
}
コーディングしていて驚いたのは、Go言語にはchar型は無いんですね!
文字を扱えるのは、おそらくstring型のみ。
統一されていて、逆に使いやすいかもしれませんね!
ちなみに、上記のコード実行時の出力結果はこちらです。
$ go run Calculation.go
Please enter the calculation formula.
ex) 1 + 1 = ? -> 1 1 +
2 3 +
2 + 3 =
出力結果、ちょっと見にくいですね。
以降で変更することにします。
条件分岐
では、if文を使った条件分岐をやっていこうと思います。
方針としては、+, -, *, / の4つを実装できれば良いかと。
というわけで、C言語のスキルを駆使して作ったプログラムがこちら!
package main
import "fmt"
import "os"
func main() {
var a, b, c int
var calc string
fmt.Printf("<Formula>\n");
fmt.Printf("ex) 1 + 1 = ? -> 1 1 +\n");
fmt.Scanf("%d %d %s", &a, &b, &calc);
if(calc == "+") {
c = a + b;
} else if(calc == "-") {
c = a - b;
} else if(calc == "*") {
c = a * b;
} else if(calc == "/") {
if(b == 0) {
fmt.Printf("I cannot calculate this formula.\n");
os.Exit(1);
} else {
c = a / b;
}
}
fmt.Printf("<Answer>\n");
fmt.Printf("%d %s %d = %d", a, calc, b, c);
}
このプログラムを作成する上で困った点は3つ!
- 文字列の等式
- else if文の場所
- exitの方法
※編集中※