- 締切済み
つり銭のプログラムについて
今、ファイル処理などを使わずに、つり銭があるかどうかを判断するプログラムの勉強をしています。 table[].maisuは、ちゃんと構造体を使っています。 おかしなところがあったら、どんなことでも よいので教えてください!! turi = 500 - 150; do{ if(turi >= 500 && table[0].maisu > 0 ){ s = turi - 500; } else if(turi >= 100 && table[1].maisu >0 ){ s = turi - 100; } else if(turi >= 50 && table[2].maisu >0 ){ s = turi - 50; } else if(turi >= 10 && table[3].maisu >0 ){ s = turi - 10; } else { printf("つり銭がない\n"); break; } }while(s != 0);
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
全体の構成があまりよくありません。 do { if(500円で支払い可能) 500円(1枚で)支払 else if (100円で支払い可能) 100円(1枚で)支払 else if ( 50円で支払い可能) 50円(1枚で)支払 else if ( 10円で支払い可能) 10円(1枚で)支払 else 釣り銭がない } while(釣り銭を払いきるまで) という流れですね。 まず、 if(turi >= 500 && table[0].maisu > 0 ){ という比較は、「構造体がわかりません」と表明しているようなものです。 これは、 if (turi => table[0].kingaku && table[0].maisu > 0) が正解。 もちろん、 turi - 500; も、 turi - table[0].kingaku; です。 こうすると、全体がループになるのが見えてくると思います。 ループにしない場合、おそらく、「カットアンドペースト」でソフトを書くことになると思いますが、直すべきところが直してなかったりということが多発します。 事実、質問のところのソースと、No.1 の方への補足の内容とは、矛盾していますね。 また、処理は、もっと自然に while(500円で支払い可能){ 500円で支払い; } while(100円で支払い可能){ 100円で支払い; } while( 50円で支払い可能){ 50円で支払い; } while( 10円で支払い可能){ 10円で支払い; } if(残り != 0) 釣り銭が足りない とした方がよいでしょう。 実際には、これをループにして、 for(i = 0; i < tableの数; i++) while(table[i] の内容で支払い可能) { table[i] の内容で支払い処理; } if (残り != 0) 釣り銭が足りない としたほうがわかりやすいでしょう。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> struct MONEY{ > int kingaku; > int maisu; > }table[6]; とすると、つり銭の勘定のたびに残数を減らして"いない"んじゃない?
お礼
ごもっともです。ただ、それをやらずともお釣りはでるはず(100枚以上とか)なので、試しているところです お忙しい中、ありがとうございました!!
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
table[].maisuの意味がわからんのでコメントできません。
補足
すみません。 #include <stdio.h> struct GOODS{ char syouhin[20]; int nedan; int zaiko; }data[3]; struct MONEY{ int kingaku; int maisu; }table[6]; main(){ int menu; int botan; int charge_kin = 0; int kaimono,t; int turi=0; int i = 0; int w = 0; int a[6]; /*商品名 金額 在庫*/ struct GOODS data[3]= { {"1.コーラ" ,120, 0}, {"2.ファンタ" ,120, 5}, {"3.オレンジ" ,150,10}, }; /*硬貨の金額 残数 */ struct MONEY table[6]={ {5000, 10}, {1000, 10}, {500, 50}, {100, 50}, {50, 50}, {10, 0}, };
お礼
何かいい感じな気がします。ちょっと、やってみます。 どうも、ありがとうございます。 ちなみに、中間あたりで書かれていたことは、わかっております。500と数字を入れたほうがわかりやすいと思ったのですが、違いますよね。今度から、ちゃんと書きます!