電卓にメモリ機能をつけるには?

解決


ちゃい  2012-11-06 06:36:39  No: 73550

超初心者です
今電卓をつくっていて数字のところはできたんですが
メモリ機能ができません
Windows フォームアプリケーションでつくっています
回答よろしくお願いいたします!


επιστημη  URL  2012-11-06 06:54:57  No: 73551

> 回答よろしくお願いいたします!

...って、質問がどこにも見当たらんのですが。


ちゃい  2012-11-06 08:20:47  No: 73552

メモリ機能のプログラムをどのようにすればいいでしょうか??


瀬戸っぷ  2012-11-06 10:07:11  No: 73553

http://oshiete.goo.ne.jp/qa/7781081.html
この関連でしょうかねぇ……。

CLRはよくわからないのでパスですが。


επιστημη  URL  2012-11-06 13:30:02  No: 73554

> メモリ機能のプログラムをどのようにすればいいでしょうか??

漠然としてて答えようがないっす。


ちゃい  2012-11-07 00:54:36  No: 73555

m\*メモリ用の変数*\=textBox1->Text;
M+はこんな感じのプログラムかな〜と思って動かしてみるとmが消えずにそのまま数字がでてきます
例えば130を入れてM+を押して5を押すと1305となるんです
どうすればなおるでしょうか?


瀬戸っぷ  2012-11-07 03:06:49  No: 73556

>例えば130を入れてM+を押して5を押すと1305となるんです

M+またはM-が押された後、数字ボタンが押されたら現在TextBoxに設定されている値は破棄する。
みたいな判定をするフラグを追加して処理すればよいのではないですか?
具体的なコードは…CLR触っていないので掲示出来ませんけど。

フローチャートとかで流れを考えるべきかと思いますが……。


ちゃい  2012-11-07 05:58:16  No: 73557

>瀬戸っぷさん
それは大体わかるんですよ・・・
でもそのプログラムがかけなくて・・・
なにしろ超!初心者ですから・・・


επιστημη  URL  2012-11-07 13:29:07  No: 73558

たとえば'='押して答が出た直後に数字入力するときと同じじゃね?


ちゃい  2012-11-08 03:05:21  No: 73559

はい
そうなんですけどεπιστημηさんがいってるような
仕様じゃないのでわからないんですよ・・・
できればプログラムを教えてください


επιστημη  URL  2012-11-08 07:02:00  No: 73560

あんたのおうちの間取りもわからんのに増改築できるわけねぇやん。


ちゃい  2012-11-08 07:51:47  No: 73561

int i;
         if(y2==1){
           cn=cn+1;
                     for(i=0;i<cn;i++){
                   z=10*z;
           }
         }
         if(y2==0)z=z*10;
         z=z+1;//いれたい数字
         if(y2==1){
           for(i=0;i<cn;i++){
             z=z/10;
           }
         }
         textBox1->Text=z.ToString();
数字のプログラムはこんな感じで最初に
int y1;
int y2=0;
int cn=0;
int m;
double z=0;
double w;
int yy;
をして変数宣言してます
0は
           int i;
         if(y2==1){
           cn=cn+1;
                     for(i=0;i<cn;i++){
                   z=10*z;
           }
         }
         if(y2==0)z=z*10;
         if(y2==1){
           for(i=0;i<cn;i++){
             z=z/10;
           }
         }
          if(y2==0)textBox1->Text=z.ToString();
          if(y2==1){
            if(cn==1)textBox1->Text=z.ToString()+L" .0";
            if(cn<1)textBox1->Text=z.ToString()+L"0";
          }

+−×÷は
       if(y1==3){
         z=w+z;
         textBox1->Text=z.ToString();
       }
       if(y1==1){
         z=w*z;
         textBox1->Text=z.ToString();
       }
       if(y1==4){
         z=w-z;
         textBox1->Text=z.ToString();
       }
       if(y1==2){
         z=w/z;
         textBox1->Text=z.ToString();
       }
       y1=1;
       w=z;
       z=0;
       y2=0;
       cn=0;
です
小数点は
                 y2=1;
です

長文失礼しました


επιστημη  2012-11-08 13:30:10  No: 73562

なにがなにやらさっぱりわからん。


瀬戸っぷ  2012-11-08 17:38:07  No: 73563

なんというか……さすが超初心者ですね。

コメントもなし、変数の役割も判らないコードでどうにかして下さいと言われても……。

y2ってなんです?
cnってなんですか?
zってどんなものなんですか?などなど…

>+−×÷は
> if(y1==3){
> z=w+z;
> textBox1->Text=z.ToString();
> }
> if(y1==1){
> z=w*z;
> textBox1->Text=z.ToString();
> }
> if(y1==4){
> z=w-z;
> textBox1->Text=z.ToString();
> }
> if(y1==2){
> z=w/z;
> textBox1->Text=z.ToString();
> }

y1に四則演算の種類が入っているんでしょうけど……
これならswitch文で処理するべきでしょうし、1とか謎数字で処理するべきできありません。
enumにするなりdefine定義するなりして可読性をあげるべきです。
# まぁ、このままのコードにしておいて、半年後の自分が読んでみて混乱しないのであればかまわないかもしれませんが。
# ただし、その場合はプログラミングを仕事にするべきではありません。

というワケで……せっかくコードを掲示されても
>あんたのおうちの間取りもわからんのに増改築できるわけねぇやん。
という状況からたいして変わっていないです。

電卓のプログラムなら…検索すると誰かが作った例とかあるんじゃないですかね?
# メモリ計算機能があるかどうかは別にしても。


ちゃい  2012-11-09 00:19:21  No: 73564

cnは小数点ボタンが押された後、何回数字ボタンが押されたかカウントしています。
y2は小数点ボタンが押されたか判定していて押されればy2は1になって押されてなければ0になります。
zはよくわからないので自分が参考にしているサイトを見てください
http://www.5b.biglobe.ne.jp/~suugaku/vc++kougi/index.html
この第6講にのっています。


ちゃい  2012-11-09 00:24:43  No: 73565

すいません
上のリンク間違っていました。
http://www5b.biglobe.ne.jp/~suugaku/vc++kougi/index.html


επιστημη  URL  2012-11-09 05:23:00  No: 73566

なんにせよこんなコード読む気にはならんなー
# ウチの若いモンがこんなもん持ってきたら窓から投げ捨てるレベル


επιστημη  URL  2012-11-09 05:26:47  No: 73567

で、コイツは  1 + 2 = 5 とボタン押したとき 5 ですか 35 ですか?


ちゃい  2012-11-09 06:20:13  No: 73568

35になります


επιστημη  URL  2012-11-09 13:27:47  No: 73569

じゃ、メモリの前にちゃんと5になるよう修正するのが先じゃないすか?


ちゃい  2012-11-10 01:54:51  No: 73570

はい
そうです


επιστημη  URL  2012-11-10 04:23:24  No: 73571

んじゃ、そーゆーことで。


ホウジョウウサギ  2012-11-10 05:02:40  No: 73572

とりあえず変数名等は役割がわかる名称にしたほうが良いのではないでしょうか
そのコードでは,何を書いていたのか次の日にはわからなくなりそうです.

…とか思った後で,張られているリンク先をちょっと覗いてみましたが,
変数名をわけわからん短い名前にするのは
どうやらそのサイトの方針(!)みたいですね.

フォームアプリケーションの習得がどれほど大変なのかわかりませんし
他に参考にできる場所があるのかどうかも存じませんけど,
とりあえず自分だったら絶対そのサイトだけは参考にしないだろうな,と思った.


ちゃい  2012-11-10 07:35:15  No: 73573

>で、コイツは  1 + 2 = 5 とボタン押したとき 5 ですか 35 ですか?
これはなおりました

>130を入れてM+を押して5を押すと1305となるんです
上はなおりましたが次は130をいれてM+を押して65をおして四則演算ボタンを
押すとわけのわからない数字になります
例えば65×2=M+した後95を押して四則演算ボタンを押すと6175という数字に
なってしまいます
どうすればなおるでしょうか?


επιστημη  URL  2012-11-11 08:07:01  No: 73574

直前の操作: 65 と × が残ったままになってるんでしょう。
そうだとすれば 65 × 95 で 6175 になりますな。


ちゃい  2012-11-11 19:50:51  No: 73575

できました!
何度も何度もありがとうございました!


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加