Sachool Engineering Blog

プログラミング学習の記録

電卓アルゴリズムの作成

| Comments

はじめましてk_yoshidaです。 電卓を作成する課題取り組みを行いました。

課題

四則演算を行えるアルゴリズムの作成

四則演算アルゴリズムつくる前に

四則演算を行うのにルールをまず整理しました。

– 掛け算・割り算が優先される

– 足し算・引き算が掛け算・引き算より優先度が低い

計算される優先度とまとめると

掛け算・引き算 >足し算・引き算

となります

ざっくり思いついたままチャートを作成しました。 掛け算と割り算は先に計算し,計算結果と演算子を含んだ配列を入れて,足し算引き算を後で計算するようにチャートを作りました。

チャート図

値取得関数
関数


計算式を入力されたとき,配列に入れてから読み込みを行うようにしました。 コードベースに落とて検証を行いました。読み込んだ文字列を一つづつ添字を動かして読みこむようにしていましたが,添字の指定がおかしくて思ったような動きではありませんでした。さらに読み込んだ配列の領域以外にアクセスしようとしてエラーが出てしまいました。 読み込む際に呼んでいる関数内の処理が正しくなかったので失敗しました。

値取得関数内にある添字を操作するチャートを修正して計算させようとしましたが,またしても配列をみるための添字の操作がおかしく計算が正常にできませんでした。 

添字の操作でミスが多かったので修正を加えて再度チャートを作成しました。

チャート図

値取得関数


値取得関数を修正,計算するときのおかしかった挙動を修正してコードベースで再度検証を行い無事動くところまでできました。

がしかし、アルゴリズムに無駄な処理がある事と()を含んだ式でも動くように と指摘と新たな課題がでました。

アルゴリズムに無駄な処理があるという事を指摘を受け,全体を見な押して見ることにしました。

掛け算割り算をしている時に足し算引き算を行っていれば,ループ処理が減る事に気が付きました。 そこで計算結果をいれる変数を作成して,無駄に使っていた配列を使わなくてよくなりました。
()があったときの処理にどのようにしたらよいかと壁にあたりました。

()の中を先に計算してしまってまた計算に戻るというフローにしたかったので関数を呼び出すようにしました。 最終的に以下のようなチャートになりました。

チャート図1

値取得関数

()があったときの関数

考察

数年ぶりにフローチャートを書くことになって忘れていることが多く,なかなかうまく書けなかったです。書き方アルゴリズムの考え方を思い出しつつ行っていました。はじめは思いついたままアルゴリズムを作っていて,動作できなかったり変な挙動をしていましたが,少しづつ良くなっていくのが見えてアルゴリズムを作っていくうえでこうなればよいと思えるようになりました。

Comments