プロが教えるわが家の防犯対策術!

以下のプログラムを実行したのですが、硬貨がそれぞれ何枚返ってくるのかの部分が正しく計算できていません。 改善方法を教えてください。

sample6-1.html
<html><body>

自動販売機で120円のジュースを買います。<br>
1000円までのお金を入れてください。<br><br>

<form action="sample6.php" method="POST">
お金を<input type="text" name="yen" size="5" value="">円入れます。<br>
<input type="submit" value="購入">

</form></body></html>


sample6-1.php
<html><body>
<?php
$a=$_REQUEST['yen'];

$b=($a-120);
$c=($b%500);
$d=($c%100);
$e=($d%50);
$f=($e%10);

if($a==0){
print "お金を入れてください<br>\n";
}else if($a>1000){
print "1000円以内のお金を入れてください。<br>\n";
}else{
print "ありがとうございました.おつりは".$b."円です.<br><br>\n";
print "硬貨の枚数は次の通りです。<br>\n";

print "500円玉".$c."枚<br>\n";
print "100円玉".$d."枚<br>\n";
print "50円玉".$e."枚<br>\n";
print "10円玉".$f."枚<br>\n";}
?>
</body></html>

↓上の質問がメインなので出来ればで大丈夫です。m(_ _)m
私はまだphpの参考書の半分くらいまでしか勉強できていないのですが
実際にphpを普段使っている方からすると 私のプログラムはどんな感じですか?
無駄が多くて かなり変なものかと思うのですが 実際phpを使う人がこのプログラムを作ったら
どんな感じになりますか?

A 回答 (1件)

% 演算子の意味を間違えています。

これは剰余演算子で、前の値を後ろの値で割った余りを返します。整数の範囲での割った値ではありません。
72 % 50
で出てくるのは 1 ではなく 22 です。

自分も PHP の専門家ではないのでもっといい手があるかもしれませんが、$c, $d, $e, $f の計算部分は
$remain = $b;
$c=(int)($remain/500);
$remain -= $c * 500;
$d=(int)($remain/100);
$remain -= $d * 100;
$e=(int)($remain/50);
$remain -= $d * 50;
$f=(int)($remain/10);
とすれば想定通り動くのではないかと思います。

> 私のプログラムはどんな感じですか?
上記以外にいろいろ改善すべき点があると思います。
・マイナスの値を入れられたらどうする?
・非整数(小数点付きの数)を入れられたらどうする?
・商品を購入できない額を入れられたらどうする?
・10 円未満の端数はどうする?
・そもそも数値じゃない文字を入れられたらどうする?

また、上記ではあなたが使った変数名を変更しませんでしたが、ループカウンターや何らかの座標にたいしての $x や $y などの 1 文字で表すのが普通な場合を除いて、変数名に 1 文字だけのものや連番を付加したものは使いません。そんなことをしたら後になって訳が分からなくなるからです。
自分だったら、うーん……
$a -> $income
$b -> $change
$c -> $coin500yen
$d -> $coin100yen
$e -> $coin50yen
$f -> $coin10yen
とするかなぁ。
    • good
    • 0
この回答へのお礼

プログラムは想定どおりになりました。ためしにプログラムについて聞いてみたのですが、まだまだ
勉強不足みたいですね(;´Д`) とりあえず変数名を1文字にするのは辞めます。
勉強になりました。回答ありがとうございます。

お礼日時:2015/02/21 08:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!