13
森田専門ゼミナール プログラミング・トレーニング第2段階-Ⅲ 20 00 課題3-1 簡易電卓1 数字の入力・クリアー 課題3-1 簡易電卓1 数字の入力・クリアー これから続く6つの課題で、下のような簡易電卓を完成させましょう。 これから続く6つの課題で、下のような簡易電卓を完成させましょう。 これから順次プログラムを作成して行きますが、プログラムの制作過程がよく分かるよ うに、以下の【課題 3-1】~【課題 3-4】では(通常は省略される)一つ一つの考察過程を 記述しています。それは、試行錯誤を踏みながら1ステップずつプログラムを仕上げて行 く過程を(皆で一緒に)追体験してもらいたいからです。ですから、じっくりと読みなが ら実際にプログラミングして行くと、ひとまとまりのプログラムを制作する際の”コツ” がつかめるはずです。そのつもりで以下の一連の課題に臨んで下さい。 まず、本課題では、ボタンから任意の数字を入力・表示する部分を作成して下さい。動 作内容は、例えば、「123」を入力する場合は、次の様になります。 ボタン[1]をクリックすると、1が表 示される。 29

課題3-1 簡易電卓1 数字の入力・クリアーext-web.edu.sgu.ac.jp/HIKO/Seminar/14thStudent/Print2_3.pdf · 課題3-1 簡易電卓1 数字の入力・クリアー これから続く6つの課題で、下のような簡易電卓を完成させましょう。

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 課題3-1 簡易電卓1 数字の入力・クリアーext-web.edu.sgu.ac.jp/HIKO/Seminar/14thStudent/Print2_3.pdf · 課題3-1 簡易電卓1 数字の入力・クリアー これから続く6つの課題で、下のような簡易電卓を完成させましょう。

森田専門ゼミナール プログラミング・トレーニング第2段階-Ⅲ

22000099年年度度森森田田ゼゼミミ・・ププロロググララミミンンググトトレレーーニニンンググ第第22段段階階ⅢⅢ 2

課題3-1 簡易電卓1 数字の入力・クリアー 課題3-1 簡易電卓1 数字の入力・クリアー これから続く6つの課題で、下のような簡易電卓を完成させましょう。 これから続く6つの課題で、下のような簡易電卓を完成させましょう。

2000099年年度度森森田田ゼゼミミ・・ププロロググララミミンンググトトレレーーニニンンググ第第22段段階階ⅢⅢ

これから順次プログラムを作成して行きますが、プログラムの制作過程がよく分かるよ

うに、以下の【課題 3-1】~【課題 3-4】では(通常は省略される)一つ一つの考察過程を

記述しています。それは、試行錯誤を踏みながら1ステップずつプログラムを仕上げて行

く過程を(皆で一緒に)追体験してもらいたいからです。ですから、じっくりと読みなが

ら実際にプログラミングして行くと、ひとまとまりのプログラムを制作する際の”コツ”

がつかめるはずです。そのつもりで以下の一連の課題に臨んで下さい。 まず、本課題では、ボタンから任意の数字を入力・表示する部分を作成して下さい。動

作内容は、例えば、「123」を入力する場合は、次の様になります。

ボタン[1]をクリックすると、1が表

示される。

29

Page 2: 課題3-1 簡易電卓1 数字の入力・クリアーext-web.edu.sgu.ac.jp/HIKO/Seminar/14thStudent/Print2_3.pdf · 課題3-1 簡易電卓1 数字の入力・クリアー これから続く6つの課題で、下のような簡易電卓を完成させましょう。

森田専門ゼミナール プログラミング・トレーニング第2段階-Ⅲ

続いて、ボタン[2]、[3]を続けて入力

すると、最終的に 123 が表示される。 入力した数字をクリアーするためには、

クリアーボタン[C]をクリックする。

なお、このままでは、次のように何も表

示されていない状態で[0]ボタンを(続

けて)クリックすると、左のように 0 が

表示されます。 通常の電卓では、最初の 0 は表示され

ないようになっています。そこで、ここ

でも、先頭桁の0は表示されない、つま

り他の数字の後でなければ[0]の入力

を受け付けないようにして下さい。

以下の1~7の手順に従って、このプログラムを作成して行き、途中に示した各設問に

答えて下さい。

30

Page 3: 課題3-1 簡易電卓1 数字の入力・クリアーext-web.edu.sgu.ac.jp/HIKO/Seminar/14thStudent/Print2_3.pdf · 課題3-1 簡易電卓1 数字の入力・クリアー これから続く6つの課題で、下のような簡易電卓を完成させましょう。

森田専門ゼミナール プログラミング・トレーニング第2段階-Ⅲ

まず、各ボタンの name プロパティを次の通りにして下さい。 数字「0」~「9」→ jButton0~jButton9、 C ボタン→ jButtonC

+ボタン -ボタン ×ボタン ÷ボタン =ボタン jButtonPlus jButtonMinus jButtonMulti jButtonDevide jButtonEqual 1.数字ボタン[1]~[9]のイベントハンドラの定義 数字ボタンをクリックしたときの処理は、「今表示されている数字に押したボタンの数字

を連結して表示する」というものです。これは、問題なくできるでしょう。ただ、各数字

ボタンのイベントハンドラは、連結する数字が違うだけで後は同じ処理なので、「数字を連

結して表示する」メソッドを定義してそれを共有する方が効率的です。そこで、数字ボタ

ン[1]をクリックしたときの処理を次のように記述しましょう。 < 数字ボタン「1」の場合 > void jButton1ActionPerformed(ActionEvent evt) { ProcNum("1"); //数字を表示させるメソッドを呼び出す。 }

※ ここで、括弧内の数字を表示させるメソッド ProcNum を用いている。→2で定義。 ※ 数字ボタン「2」~「9」についても同様。

2.メソッド ProcNum の定義 メソッド ProcNum は次のように記述できます。空欄を埋めてプログラムを完成させて下

さい。 void ProcNum(String Num) { String Disp=jTextField1.getText();//表示数字の取得 Disp= Disp+Num ; //表示数字に新たに数字 Numを連結する jTextField1.setText(Disp); //連結後の文字列を表示する }

3.[C]ボタンのイベントハンドラの定義 画面を消去すればよいのですから、次のようになります。空欄を埋めて下さい。 void jButtonC_actionPerformed(ActionEvent e) { jTextField1.setText( ); }

ひとまずここで、動作を確認して下さい。まだ、[0]ボタンのイベントハンドラを定義

していませんが、それ以外はうまく行くはずです。[0]ボタンを後回しにしたのは、他の

数字ボタンに比べて特別な処理が必要だからです。とにかく簡単に記述できる部分を先に

済ませ、その後で手がかかる部分を考えるのが、プログラミングのコツです。

31

Page 4: 課題3-1 簡易電卓1 数字の入力・クリアーext-web.edu.sgu.ac.jp/HIKO/Seminar/14thStudent/Print2_3.pdf · 課題3-1 簡易電卓1 数字の入力・クリアー これから続く6つの課題で、下のような簡易電卓を完成させましょう。

森田専門ゼミナール プログラミング・トレーニング第2段階-Ⅲ

さて、[0]ボタンについても基本的には他の数字ボタンと同様です。厳密に言えば、「他

の数字が入力された後なら処理内容は他の数字ボタンと全く同じ」です。ただ、「最初に[0]

ボタンをクリックしたときにそれが表示されないようにする」という点だけが異なるので

す。この場合分けを行うためには、一つ前の処理の情報(1~9までの数字を入力したか、

それとも最初の数字入力なのか)が必要になります。もう少し整理して言うと、1~9の

数字が入力されたか否かが分かれば良いことになります。 そこで、その情報を記憶する変数を用意する事にしましょう。どのような変数でも良い

のですが、「入力されたか否か」という二者択一を表現するのに向いている論理型変数を用

意することにします。それをNumInputとしましょう。これを用いて、 1~9が入力された場合 :NumInput → true

〃 が入力されていない場合:NumInput → false と設定するようにすれば、[0]ボタンの処理を記述する事ができます。ここで注意しなけ

ればならないのは、NumInput の値は、[1]~[9]ボタンのイベントハンドラで設定さ

れ、[0]ボタンのイベントハンドラで参照(利用)される、ということです。つまり、複

数のメソッドでその値を共有する訳ですから、ローカル変数ではなくインスタンス変数とし

て宣言しなければなりません。この点にすぐに気づくかどうかが、ポイントです。 4.インスタンス変数 NumInput の宣言(と初期化)

NumInput をインスタンス変数として、次のように宣言して下さい。場所は、NewJFrameクラスの定義の先頭部分にしましょう。下線部が追加部分です。ところでインスタンス変

数はクラスのフィールドに他なりません。そして今は、他のクラスから参照する必要がな

いので private 修飾子をつけました。 public class NewJFrame extends javax.swing.JFrame {

private boolean NumInput=false; //最初はNumInputをfalseに初期化 ・・・

5.数字ボタン[0]のイベントハンドラの定義 上で説明した通り、処理の流れは以下のようになります。 すでに1~9のいずれかが入力

されている場合。 Yes

NumInput が true No ProcNum("0");

終わり

32

Page 5: 課題3-1 簡易電卓1 数字の入力・クリアーext-web.edu.sgu.ac.jp/HIKO/Seminar/14thStudent/Print2_3.pdf · 課題3-1 簡易電卓1 数字の入力・クリアー これから続く6つの課題で、下のような簡易電卓を完成させましょう。

森田専門ゼミナール プログラミング・トレーニング第2段階-Ⅲ

上の流れ図を参考にして、下の空欄に適当な処理を記述して下さい。 v oid jButton0ActionPerformed(ActionEvent evt) {

if(NumInput) { ProcNum("0"); }

}

6.数字ボタン[1]~[9]のイベントハンドラの定義の更新 同時に、各数字ボタンのイベントハンドラにも、NumInput の定義部分を付け加えなけ

ればなりません。 <数字ボタン[1]の場合>

下線部を追加します。 void jButton1ActionPerformed(ActionEvent e) { ProcNum("1"); NumInput=true; }

※ [2]~[9]の数字ボタンも同様。 7.[C]ボタンのイベントハンドラの定義 [C]ボタンを押すと、全て消去し最初の状態に戻りますから、やはり NumInput の初

期化部分を追加する必要があります。枠線部を追加して空欄を埋めて下さい。 void jButtonC_actionPerformed(ActionEvent e) { jTextField1.setText( ); NumInput= false ; }

これで、数字入力部分は完了しました。作成したら動作を確認して下さい。

33

Page 6: 課題3-1 簡易電卓1 数字の入力・クリアーext-web.edu.sgu.ac.jp/HIKO/Seminar/14thStudent/Print2_3.pdf · 課題3-1 簡易電卓1 数字の入力・クリアー これから続く6つの課題で、下のような簡易電卓を完成させましょう。

森田専門ゼミナール プログラミング・トレーニング第2段階-Ⅲ

課題3-2 簡易電卓2 単一の加算の実現 次に、加算機能を加えましょう。本課題では、まず「A+B=」の形の(単一の加算)計算

のみを考えます。動作形態は、例えば「123+10=」を求める場合は、次の通りです。

前課題と同様、ボタンから「123」を入

力し、その後、[+]ボタンを押します。

次に数字ボタンから「10」を入力し、・・・

[=]ボタンをクリックすると、演算結

果(123+10)が表示される。

34

Page 7: 課題3-1 簡易電卓1 数字の入力・クリアーext-web.edu.sgu.ac.jp/HIKO/Seminar/14thStudent/Print2_3.pdf · 課題3-1 簡易電卓1 数字の入力・クリアー これから続く6つの課題で、下のような簡易電卓を完成させましょう。

森田専門ゼミナール プログラミング・トレーニング第2段階-Ⅲ

なお、クリアーボタン[C]をクリックすると、数字の表示は消え、また新たに加算を行

うことができるようにして下さい。 これらの処理を実現するためには、数字ボタン([0]~[9])を押す場合と、演算ボ

タン([+]、[=])を押す場合とで処理内容を分ける必要があります。具体的に、「A+B=」の結果を求める場合を例に採り上げて考えると、以下の点がポイントになります。 ① 数字ボタンについては、最初の数字 A を入力・表示する部分は前課題と同様です。 ② しかし(2番目の)数字 B の場合、つまり演算ボタン[+]を押した後には、現

在表示されている数字を消去し、入力した数字が新たに表示されるようにする必

要があります。 ③ 「A+B=」の場合、「=」ボタンを押した時点で、A と B の値が必要になります。

この内、B の値はその時点([=]ボタンを押した時点)でテキストフィールドに

表示されている数字ですが、A の値は消えています。そこで、[+]ボタンを押し

たときに、A の数値を適当な変数に保管しておく必要がある事が分かります。 ④ クリアーボタン[C]を押したときには、その変数の値もクリアーする(0にする)

必要があります。 以上で概観を把握できたので、各ボタンの(イベントハンドラの)処理内容を記述して

行きましょう。

Ⅰ.数字ボタンを押したときの処理 次の2通りに分かれます。

一つ前に[+]を押した場合 → 表示している数字を消す。そして新たに数字を表

示する。 一つ前に「数字」ボタンを押した場合 → 【課題 3-1】と同様。

ここで、一つ前に[+]を押したのか、数字を押したのか、つまり、[+]キーを押した

のか否か見分けるための情報が必要になります。そこで、演算子[+]を入力したときにtrue、そして数字を入力したときにfalseとなる論理型のインスタンス変数OpInputを用意するこ

とにしましょう。次の下線部を追加して下さい。 public class NewJFrame extends javax.swing.JFrame { private boolean NumInput=false; //最初は NumInputを falseに初期化 private boolean OpInput=false;

この OnInput を用いれば、例えば数字ボタン[1]の処理は次のように記述できます。

上で考察した処理を実現するためには、要するに枠線部内を挿入するだけで良いことが分

かります。

35

Page 8: 課題3-1 簡易電卓1 数字の入力・クリアーext-web.edu.sgu.ac.jp/HIKO/Seminar/14thStudent/Print2_3.pdf · 課題3-1 簡易電卓1 数字の入力・クリアー これから続く6つの課題で、下のような簡易電卓を完成させましょう。

森田専門ゼミナール プログラミング・トレーニング第2段階-Ⅲ

<[1]ボタンのイベントハンドラ> void jButton1ActionPerformed(ActionEvent evt) { if(OpInput) { //直前に演算子(+)を入力した場合 jTextField1.setText(""); //テキストフィールド内の数字を消す OpInput=false; //数字を入力したので falseにする } ProcNum("1"); NumInput=true; }

他の数字ボタンについても、全く同様です。つまり枠線部を挿入するだけでよいのです。

しかし、同じ処理を幾つも記述するのは無駄な気がしますね。そのようなときには、当該

処理を行うメソッドを定義してそれを共有するのが鉄則です。そこで、上の枠線内の処理

を行うメソッド OpCheck()を定義し、ボタン[1]の処理を次のように記述できるように

しましょう。 void jButton1ActionPerformed(ActionEvent e) { OpCheck(); ProcNum("1"); NumInput=true; }

このメソッド OpCheck()を定義して下さい。 言うまでもなく、他の全ての数字ボタンもこのメソッドを使って全く同様に記述できま

す。これで数字入力の処理は完成しました。

Ⅱ.[+]ボタンを押したときの処理 上で説明した通り、「A+B=」計算における数字Aを保管しておく変数を用意する必要があ

ります。これも、[+]ボタンと[=]ボタン双方のメソッド(イベントハンドラ)で共有

する必要がありますから、インスタンス変数としなければなりません。この変数をPrevNumとしましょう。これはPrevious Number(一つ前の数)という意味から命名しました。次

の下線部を加えましょう。 public class NewJFrame extends javax.swing.JFrame { private boolean NumInput=false; private boolean OpInput=false; private int PrevNum=0;

・・・ さて、上で説明した通り[+]ボタンを押したときには、変数PrevNumに今表示されて

いる数字を格納する、という処理を行います。次のように記述して下さい。

36

Page 9: 課題3-1 簡易電卓1 数字の入力・クリアーext-web.edu.sgu.ac.jp/HIKO/Seminar/14thStudent/Print2_3.pdf · 課題3-1 簡易電卓1 数字の入力・クリアー これから続く6つの課題で、下のような簡易電卓を完成させましょう。

森田専門ゼミナール プログラミング・トレーニング第2段階-Ⅲ

void jButtonPlusActionPerformed(ActionEvent evt) { int PresNum=Integer.parseInt(jTextField1.getText()); PrevNum=PresNum; //今表示されている数字を PrevNumに代入 OpInput=true; //[+]ボタンを押したので trueにする。 NumInput=false; //[1]~[9]を押していないので falseにする }

ここに、今表示されている数字を格納する変数を Present Number(現在の数字)という

意味で PresNum と命名しました。①については、下の問で考察します。 Ⅲ.[=]ボタンを押したときの処理 この処理は、次のようになります。 void jButtonEqualActionPerformed(ActionEvent e) { int PresNum=Integer.parseInt(jTextField1.getText()); int Ans=PresNum+PrevNum; //変数 Ansに加算結果を代入する jTextField1.setText(String.valueOf(Ans)); //加算結果の表示 OpInput=true; //[=]を押した場合も trueにしておく PrevNum=0; //PrevNumの値も初期化しておく }

②、③については、下の問で考察します。

Ⅳ.[C]ボタンを押したときの処理 このイベントハンドラは次のようになります。つまり、全てクリアーして初期化するの

で、下線部を加えればよいのです。 void jButtonCActionPerformed(ActionEvent e) { jTextField1.setText(""); NumInput=false; OpInput=false; PrevNum=0; }

これで動作確認を行って下さい。一つの加算は実行できるはずです。その上で下の問に

答えて下さい。

② ③

問1 ①の部分がなければ、どのような(動作上の)不具合が起きますか? ヒント:NumInput を導入した元々の意味を思い起こして下さい。 問2 ②および③の部分がなければ、どのような(動作上の)不具合が起きますか? ヒント:②を削除し、「1+2=」などのように一度計算を行った後に([C]を押さ

ずに)続けて次の加算を行ってみると、分かるはずです。③については、「=」を続

けて押した場合どうなるか、確かめてみて下さい。

37

Page 10: 課題3-1 簡易電卓1 数字の入力・クリアーext-web.edu.sgu.ac.jp/HIKO/Seminar/14thStudent/Print2_3.pdf · 課題3-1 簡易電卓1 数字の入力・クリアー これから続く6つの課題で、下のような簡易電卓を完成させましょう。

森田専門ゼミナール プログラミング・トレーニング第2段階-Ⅲ

課題3-3 簡易電卓3 任意の加算の実現 今度は、加算を幾つでも続けて行えるように拡張します。つまり、例えば「123+1

0+5=」等を計算できるように拡張して下さい。 実は、このためには、[+]ボタンの処理を変更するだけで良いのです。空欄を埋めてプロ

グラムを完成させて下さい。 void jButtonPlusActionPerformed(ActionEvent e) { int PresNum=Integer.parseInt(jTextField1.getText());

PrevNum= PrevNum+PresNum ; OpInput=true; NumInput=false; }

課題3-4 簡易電卓4 任意の加減算の実現 今度は、「123+40-32-1=」の様に、任意の加減算が計算できるように拡張し

て下さい。 前までは加算処理と決まっていたのですが、今度は、加減算の2種類になりました。ど

ういう処理を行えばよいかは、(いきなり一般的に考えずに)具体的な例を採り上げて調べ

るのが得策です。そこで、例えば「1+2-4+5=」を計算する場合を考えましょう。 最初の「1+2」の部分の処理は前課題までと全く同じ。 [-]ボタンを押したときの処理は、一つ前の演算が+なので(前課題と同じく)そ

の時点での加算「1+2」を計算してそれを変数 PrevNum に格納する、ということ。 2番目の[+]ボタンを押したときには、一つ前の演算が-なので、その時点での減

算の結果「PrevNum(=3)-4 」を求めてそれを PrevNum に格納する(値は-1)。 [=]ボタンを押したときには、一つ前の演算が+なのでその時点での加算

「PrevNum(=-1)+5」を計算してそれを変数 PrevNum に格納する。そしてそれを画面

に表示する。 以上の考察より、次のことが分かります。

① [+]、[-]そして[=]いずれの演算ボタンの処理も、「それが押された時点での

演算結果を求め、その値を PrevNum に格納する。」ということです。つまり、これ

らは共通の処理で記述できるのです。 ② その際、一つ前の演算が[+]だったか、あるいは[-]だったかの情報が必要に

なります。 これで、必要な情報が揃ったのでプログラムの作成に取りかかりましょう。

38

Page 11: 課題3-1 簡易電卓1 数字の入力・クリアーext-web.edu.sgu.ac.jp/HIKO/Seminar/14thStudent/Print2_3.pdf · 課題3-1 簡易電卓1 数字の入力・クリアー これから続く6つの課題で、下のような簡易電卓を完成させましょう。

森田専門ゼミナール プログラミング・トレーニング第2段階-Ⅲ

Ⅰ.インスタンス変数 OpNo の宣言 今、一つ前の演算が何あったかを記憶するための変数を OpNo として用意しましょう。

これを整数型の変数として宣言し、その値によって、次のように一つ前の演算の状態を設

定するものとします。 OpNo の値 1:+ 2:- 0:演算はまだ選択されていない さて、言うまでもなくこの変数はインスタンス変数でなければなりません。そこで、下

のように下線部を追加して下さい。

public class NewJFrame extends javax.swing.JFrame { private boolean NumInput=false; private boolean OpInput=false; private int PrevNum=0; private int OpNo=0; //1:+ 2:- 0:演算未選択

Ⅱ.[+]および[-]ボタンを押したときの処理 これらのイベントハンドラは、上の考察から、次の様に書けるはずです。

<[+]ボタンのイベントハンドラ> void jButtonPlusActionPerformed(ActionEvent evt) { このボタンが押された時点での(自分より左側の)演算結果を求

め、その値を PrevNum に格納する、という処理 OpInput=true; NumInput=false; OpNo=1; //[+]を選んだのでOpNoを1に設定する。 }

<[-]ボタンのイベントハンドラ>

void jButtonPlusActionPerformed(ActionEvent evt) { このボタンが押された時点での(自分より左側の)演算結果を求

め、その値を PrevNum に格納する、という処理 OpInput=true; NumInput=false; OpNo=2; //[-]を選んだのでOpNoを2に設定する。 }

これより、下線部以外は共通であることが分かります。従って枠線部を例えば、ProcOp()

というメソッドとして定義すれば、両者はそれぞれ次のように書けます。

39

Page 12: 課題3-1 簡易電卓1 数字の入力・クリアーext-web.edu.sgu.ac.jp/HIKO/Seminar/14thStudent/Print2_3.pdf · 課題3-1 簡易電卓1 数字の入力・クリアー これから続く6つの課題で、下のような簡易電卓を完成させましょう。

森田専門ゼミナール プログラミング・トレーニング第2段階-Ⅲ

<[+]ボタンのイベントハンドラ> void jButtonPlusActionPerformed(ActionEvent evt) { ProcOp(); OpNo=1; //[+]を選んだので OpNoを1に設定する。 }

<[-]ボタンのイベントハンドラ> void jButtonMinusActionPerformed(ActionEvent evt) { ProcOp(); OpNo=2; [-]を選んだので OpNoを2に設定する。 }

これで極めて見通しが良くなりました。以下の空欄を埋めてこのようなメソッド

ProcOp()を定義して下さい。 void ProcOp() { int PresNum=Integer.parseInt(jTextField1.getText()); switch (OpNo) { case 0: //これが最初の演算の場合 PrevNum=PresNum; break; case 1: //一つ前の演算が+の場合 PrevNum=PrevNum+PresNum; break; case 2: //一つ前の演算が-の場合 PrevNum=PrevNum-PresNum; break; } OpInput=true; NumInput=false; }

Ⅲ.[=]を押したときの処理 これも、ProcOp()を用いて次のように書けます。空欄を埋めてプログラムを完成させて

下さい。 void jButtonEqualActionPerformed(ActionEvent evt) { Procop(); jTextField1.setText( String.valueOf(PrevNum) ); //計算結果の表示 PrevNum=0; OpNo=0; }

40

Page 13: 課題3-1 簡易電卓1 数字の入力・クリアーext-web.edu.sgu.ac.jp/HIKO/Seminar/14thStudent/Print2_3.pdf · 課題3-1 簡易電卓1 数字の入力・クリアー これから続く6つの課題で、下のような簡易電卓を完成させましょう。

森田専門ゼミナール プログラミング・トレーニング第2段階-Ⅲ

41

Ⅳ.[C]ボタンを押したときの処理 これは、以下の下線部を加えるだけです。 void jButtonCActionPerformed(ActionEvent evt) { jTextField1.setText(""); NumInput=false; OpInput=false; PrevNum=0; OpNo=0; }

完成したら動作を確認して下さい。

課題3-5 簡易電卓5 乗算の追加 乗算(かけ算)ができるように拡張しましょう。例として「12+10×2×3-1=」、「10×2-5」

を計算してみて下さい。乗算は加減算よりも演算の優先順位が高いことに注意して下さい。

この課題ができれば、これまでの内容を理解したことになります。その意味で腕試しの課

題と言えます。 <ヒント>

① 乗算は、加減算より優先順位が高いので、乗算が終わるまで、つまり次に加減算が現

れるまで乗算を継続して行う必要があります。 ② 例えば、「1+2×3×4+5=」などの場合、2番目の+を押したときには、「2×

3×4」の部分を計算してからその前の1に加えなければなりません。言うまでもな

く、最後に画面に表示されている4を PrevNum に入っている1に加えてはなりません。 ③ そのため、乗算部分の計算結果を記憶しておくための変数が新たに必要になります。

これを WorkNum とでも命名しましょう。 ④ そうすると、加減算の場合は、PrevNum に PresNum(今表示されている数)を加減

すれば良かったのですが、乗算が加わるとそれが PresNum ではなく WorkNum に置

き換わるということが分かるでしょう。ここが理解できるかどうかが、ポイントです。 課題3-6 簡易電卓6 除算の追加 最後に除算(割り算)ができるようにして下さい。例として「3×12÷4×2=」を計算し

てみましょう。ただし、除算を含めた場合、用いる変数を実数型にする必要があります。

それ以外は、上の【課題 3-5】の自然な拡張として作成できます。