今回はC言語でプログラミングを行い、「電卓」の機能を持つプログラムを作成してみましょう。
目的としましては、プログラミングにあまり馴染みのない方に「こんなことをするんだ」という感覚を持っていただくことです。電卓と言いましても、四則演算しかしない電卓を今回は想定します。
基本環境
会社で支給された下記のPCで行います。以下がスペックです。
- 機種名:MacBook Pro
- 機種ID:MacBookPro16,2
- プロセッサ名:クアッドコアIntel Core i5
- プロセッサ速度:2 GHz
- プロセッサの個数:1
- コアの総数:4
- 二次キャッシュ(コア単位):512 KB
- 三次キャッシュ:6 MB
- ハイパー・スレッディング・テクノロジ: 有効
- メモリ:32 GB
テキストエディタをインストールする
プログラムはテキストエディタに書いていきます。どのエディタを使っても良いのですが、私が長年使ってきたemacs を使っていきたいと思います。プログラムを書いていると、色分けされたりして便利です。
ほとんどの方はemacs 入っていないと思うのでインストール方法から解説していきます。
まず、brewを入れます。HomeBrewはMacOSやLinux用のパッケージマネージャです。
/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”
上記を入れて、ターミナル上で
which brew
としてパスが出てきたら無事インストールされています。
では次にbrewを使ってemacs をインストールします。ターミナル上で
brew install emacs
とうってください。インストールされます。
/usr/local/Cellar/emacs/27.2/bin
にインストールされているので、/use/local/binにPath を通して完了です。使用しているシェルごとにパスの通し方がちょっと違ってきますのでご自分のシェルが何か確かめて、それに応じた通し方を行なってください。
コンパイラをインストールする
C言語というのは、コードを書いたら一旦コンピュータがわかるものにするために「コンパイル」という作業を行わないといけません。C言語のプログラムはヒトがわかるように書いてあるのですが、コンパイルすることでコンピュータがわかる命令になります。
今回はgcc(GNU Compiler Collection)を使います。MacOSでは通常clangという「なんちゃってgccコンパイラ」がpreinstall されています。
gcc –version と打った時、
「Apple clang version 13.0.0 (clang-1300.0.29.3)」
というメッセージが出てくると思います。そこでちゃんとしたgccを入れようと思います。
ここでもbrewを使います。
brew install gcc
と、ターミナルで打ってください。私が入れた時は、gcc-11が入りました。brewで入れたgccは「/usr/local/Cellar」に格納されます。
しかし、いちいちフルパスで打つのは面倒なので「/usr/local/bin/gcc-11」に入れることにより、gcc-11を打つだけで良いようにパスを通しておいたほうがよいでしょう。
「version gcc-11 」と打ったときにclangが出てこなくなり、ホッとします。
書く
では、実際にプログラムを書いていきましょう。
順番としては、数値入力→記号入力(演算子)→計算→数値入力→記号入力(演算子)→計算→ ……→”=”の入力をすると答えが出る、というふうに実装すれば良いというのはちょっと考えるとわかります。
では、まず、コードを書くdirectory を決めます。
mkdir CALCULATOR
としてみましょう。
cd CALCULATOR
でディレクトリに入ります。
ターミナル上で
emacs dentaku.c -nw
と打ちますと、以下のようなウィンドがターミナル上にでます。
この中でコードを書いていきます。順を追って説明しましょう。
最初の部分で変数を宣言します。色分けされているところの青い部分は関数の宣言です。緑は型を表しています。scanfのところで標準入力から読み込みます。まず数字を読み込み、次に演算子を読み込みます。
flag が 1 の時は入力を続けます。数字を読み込みます。前に読み込んだ演算子が’+’の時は足し算の関数、
「f_addition(&element0,&element1,&element2)」
という関数に入ります。
演算子が’-‘の時は引き算の関数、
「f_subtraction(&element0,&element1,&element2)」
という関数に入ります。
演算子が’*’の時は掛け算の関数、
「f_multiplication(&element0,&element1,&element2)」
という関数に入り、
演算子が’/’の時は割り算の関数、
「f_division(&element0,&element1,&element2)」
という関数に入ります。
‘=’という演算子が入力されたらflag は 0 となり、入力は終了します。
計算された数値が標準出力されます。では、以下にそれぞれの関数を表示します。
関数の中では、変数 a と変数 b が使用され、c という値が計算されます。
実行
では、このコードを実行してみましょう。ターミナルでファイルのあるディレクトリに移動し、まず、コンパイルをします。今、このコードはdentaku.c という名前なので
gcc dentaku.c -o dentaku.out -lm
と打ちます。この意味は「dentaku.cというファイルをコンパイルして dentaku.out という名前の実行ファイルを作ってください」というものです。
‘-lm’ はコード内でmath.hを呼んでいるのでつけないといけないものです。エラーなどが出ないで静かに次のコマンドが打てるようになったら、コンパイル成功です。
では、
./dentaku.out
と打ってみましょう。その後、’1’と打ってみましょう。そして、returnしてください。次に’+’と打ってみてreturnしてください。さらに’1’と打ってみて、return。最後に’=’を打ってreturnしてください。そうしますと、
1
+
1
=
2
と出るはずです。縦に進んでいくのが少し美しくないですが、我慢しましょう。
注意点
ここで注意しなくてはいけないことが一つあります。それは計算は上から順番に行われていく、ということです。掛け算は先に行われるべきだったり、割り算も足し算や引き算より先に行われるべきなのですが、その実装は行っていません。
普通の四則演算電卓のような振る舞いしかできません。それでも、こんなに簡単に世に出回っている電卓を再現することができました。
ちょっとだけでもプログラミングが面白いなって思ってくださると幸いです。Junでした。