Sachool Engineering Blog

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

初めての課題

| Comments

東京オフィスのイッセイです!

未経験で入社してもう少しで1ヶ月が経ちますが、相変わらずアルゴリズムや基礎知識の無さとの闘いに奮闘しております。

サッカー馬鹿でも立派なエンジニアになれる!!

なんて事を言える日を目標に、またこれからエンジニアを目指す方の励みになれるよう頑張ります。
どうか温かい目でよろしくお願いします。

最初の課題

+、-、=のみを使用した電卓のフローチャート作成

初心者ならではの、躓いた所や考え方について書こうと思います。突っ込みどころは多々あるかと思いますが、ご容赦ください。

普段当たり前に使っていた電卓ですが、いざその仕組みを文字にするとなると中々手が動きませんでした。
その動かなさに自分でも驚きましたが、物事を論理的に考える力が本当に大切で、その力の無さが最初の壁でした。
でもこれは毎日の積み重ねでしか身につける事ができないと思いますし、
ひたすら考え抜く事が大切だと、日々頂く指摘を通じてからも実感しております。

そして前提として、

コンピューターにはこちらから処理を命令してあげなければ実行することが出来ない!!

その為に、計算するのに必要なあらゆる事を認識していなければなりません。
それをまず踏まえて私が書き出したものがこちら

  • 1数値を入力する
  • 2演算子を入力する
  • 3数値を入力する
  • 4「=」が入力されたら演算結果を表示する

なんとなく大丈夫そうな気がします。
というか実はこれで大丈夫だろうと思っていました。
でもこれではまだ考えることが足りないんですね。

  • 入力された数値は本当に数値ですか?
  • 入力された演算子は本当に演算子ですか?
  • もし違った時はどうしますか?

こんなことも考えなくてはならないんですね。
なるほどー!って感じでしたがこのご指摘を頂いてから少し考え方がわかったような気がしたのを覚えています。(実際の所は別として、、)

勿論ですが、入力される演算子には「+」の時、「-」の時、「=」の時3パターンあります。
コンピューターは勝手に演算子を判断をして計算してくれないので、それぞれの場合の処理を考え、処理を行う式にしなければいけないのです。

ここまで考える事が出来れば第一ステップクリアというところでしょうか。

複数の計算式はどうする?

5+4-3+2+1=

まずスタートはこっからです。

  • 変数aに5
  • 変数opに+
  • 変数bに4

難しいのは、この後です。

変数opに合わせて演算をするのは先程も記述したとおりですが、
演算結果はどこに。次に入力する「ー」は、4は、どこ代入しましょう?という所を考える必要があります。

また、フローチャートは処理の流れを図にして記述していくので、同じ処理は繰り返して使用します。
その為どの処理の前に流れを戻していくのかも効率的にする必要がありますし、戻す場所を間違えば正しい結果を得られなくなってしまいます。

最初に考えたのは、

演算結果を変数xに代入し演算子入力した後、演算子判定の処理に戻るようにし、「=」が入力されたら変数xを表示して終了。

今ではこれがおかしい事がすぐわかりますが、その時には間違いに気づけていませんでした。 まず、演算子入力も一回の処理を再利用可能ですし、二回目以降の演算でもaとbを使用する事になってしますので正しい結果を得る事ができません。

その為、

変数aと変数bの演算結果を変数xではなく変数aに代入し、演算子入力の前に処理を戻す。
その後入力されるbと、aを使用して演算を行い、演算結果を再び変数aに代入。
「=」が入力れた時に、変数aを表示して終了する。

この修正で一応電卓としての機能を果たす事ができました。 処理を戻す位置や、変数の使い方に頭が混乱しましたが、なんとか形にする事ができました。 この処理の流れを掴む事と、変数を上手く使う事はアルゴリズムを考える上で大切になる考え方だと感じました。

しかし考える事を目的としている為、後にもっと効率の良い方法に気づく事もあります。
それは今回の場合もそうですが、課題を通して、指摘を頂いて間違いに気づく事が多く、考える力が足らないと痛感しております。
今後も粘り強く頑張っていきたいです。

しかしこれはまだあくまでも「+」と「-」だけです。
ご想像の通り、数時間後には、「×」と「÷」の存在を恨むようになるのですが、それはまた次回という事で。

Comments