Go言語で簡単な電卓を作ってみる

Go言語で簡単な電卓を作ってみる:


電卓作成

対話型のプログラムを作ってみたいなーと思いまして。

あと、型確認もできますし!

流れはこんな感じです。

1. 数字、および演算子の入力(逆ポーランド法で)

2. 数字および演算子を変数に格納

3. 演算子毎に違った計算を実施

4. 計算結果を出力

今回は、+, -, *, / 辺りを実装してみます。

フローチャートは割愛です!


標準入出力

とりあえずは、C言語でいうscanf的なものを調査しないと。

うーん……

結構いろんな種類があるみたい。

どれが適しているのだろう…分からぬ……

とりあえず、fmt.Scanf関数を使って…みますか……

…と思ってやってみたコードがこちら。

※ビルドできません!!!

Calculation.go(失敗例)
package main 
 
import "fmt" 
 
func main() { 
    var x int 
    fmt.Scanf("%d", &x) 
    fmt.Printf("%d\n", x) 
} 
おお!

いけました!

感覚でいけるもんですね。

というわけで、入力フォームおよび出力内容を作ってみます。

作ったコードはこちら!

Calculation.go
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言語のスキルを駆使して作ったプログラムがこちら!

Calculation.go
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つ!

1. 文字列の等式

2. else if文の場所

3. exitの方法

※編集中※

コメント

このブログの人気の投稿

投稿時間:2021-06-17 22:08:45 RSSフィード2021-06-17 22:00 分まとめ(2089件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)