• 締切済み

プログラムの修正お願いします。

レンタルビデオを借りる。 1本150円。 5本借りると100円引き。 5本を越えると5本目以降は1本100円。 どこが間違ってるでしょうか?? 教えてください。 #include<stdio.h> void main(void) { int i,money; printf("借りる本数を入力 ---> "); scanf("%d",&i); if(i < 5){ money = i * 150; } else if(i == 5){ money = money - 100; } else{ money = money + (i-5)*100; } printf("合計金額は%d円です。\n",money); }

みんなの回答

回答No.25

盛り上がってるなぁ笑 頑張って補足を読み解いてみましたが、欲しいのはこの回答では? money = i * 150; if( i == 5 ) {   money = money - 100; } if( i >= 5 ) {   money = money - (i - 4) * 50; }

tv_mania
質問者

お礼

みなさんどうもありがとうございました。

回答No.24

こんなのはどうでしょう。 左部が0~5本の場合、真中が5本以上の場合の値引き 右部が6本以上の場合を別々に求めて加算します。 #define MAX(a,b) ((a>b)? a:b) #define MIN(a,b) ((a<b)? a:b) money=(150*MIN(i,5)) + ((5<=i)? -100:0) + (100*MAX(0,i-5));

回答No.23

moneyの計算式を一行にしてみました。 プログラムのお勉強には向きません。(^^; money=((i<=4)? 150*i: 650) + ((5<i)? 100*(i-5): 0); もしくは money=((i<=5)? 150*i: 150*5) + ((5<=i)? -100:0) + ((5<i)? 100*(i-5): 0);

  • Mizyu
  • ベストアンサー率41% (245/593)
回答No.22

5度目の投稿になります。 > if(i < 5){ > money = i * 150; > } > else if(i == 5){ > money = 5*150 - 100; > } > 5*150のところを上で使ったmoney(=i*150)に置き換えて考えたいんです。 #2で答えてますが、「上で使ったmoney」とありますが、elseに入る時には使ってないです。 なので置き換えてもmoneyは初期値、もしくはそれ以前に初期化した値しか入ってません。 もしかしたら貴方の悩んでいる個所は「if文の考え方」以前のプログラムの考え方が間違っているかもしれません。 ここで答えている人たちは私も含めてプログラムを書ける人たちで、プログラムを理解した上での回答しかできないので あなたの理解度が分からない以上、これ以上よい回答は得られないと思います。 「まず、プログラムというのは~」・・・とまで親切に教えてくれる人なんていません。 この質問の趣旨がプログラムを覚えたいというところにあれば、自分で勉強してください。 仕様さえわかれば算数レベルです。コンパイラと根気さえあれば、一日で十分解決するでしょう。 プログラムに興味が無く、課題として出されて仕方なくこなすための質問であるなら せめて、不明確な仕様の部分のフォローをしてください。 ・「5本で100円引き」は5本のときだけか、5本以上のときも含むか、それか5本毎で100円ずつ引くのか? ・「5本を超えると」の表現は5本の時点で適応か、6本以上で適応か? このあたりの情報さえあれば、ここで回答している方ならみんな、5分もあれば組めるレベルです。 (私みたいに凡ミスはあるでしょうけど)

  • Largo_sp
  • ベストアンサー率19% (105/538)
回答No.21

らあごです。連続投稿で申し訳ありませんが、 #17の補足の意図を汲んでも…… money = i * 150; if ( i > 4 ) { money = money - 100;    // \100引き money = money - (i-5)*(150-100)  //1本当たり\50引き } としかできないんですが……

  • Largo_sp
  • ベストアンサー率19% (105/538)
回答No.20

らあごです。間違いがあったので訂正と… ふと……過去の質問をみていたら…… 2、レンタルビデオの本数を入力して、金額を出力する。 1本¥150。 5本で合計金額の¥100引き。 5本を超えると超えた分は1本¥100。 となっていましたが。。。。この問題でしょうか…… ○○以降というと、○○がはいってしまいますので 問題が変わってしまいますが…… この問題をみると、6本以上のとき\100引きはあるのかな? ちなみに、 #18の   money = i*5; // 5本分の料金をいれておく は   money = i*150; // 5本分の料金をいれておく の間違いです。 6本目以降100円引きがあるなら、    money = money + (i-5)*100; に-100を入れてください。

  • yotta
  • ベストアンサー率32% (26/79)
回答No.19

#6,#10 です.まだ締め切られてないので 1本では150円 (1x150) 2本では300円 (2x150) 3本では450円 (3x150) 4本では600円 (4x150) 5本では600円 (4x150)-100+(1x100) 4本と同じ 6本では700円 (4x150)-100+(2x100) 7本では800円 (4x150)-100+(3x100) 8本では900円 (4x150)-100+(4x100) となりますので else 以降 money = 4 * 150 - 100 + ( i - 4 ) * 100; 簡単にすると money = i * 100 + 100; です

  • Largo_sp
  • ベストアンサー率19% (105/538)
回答No.18

もし、元のプログラムの式をかえずにプログラムを正しくするなら #include<stdio.h> void main(void) { int i,money; printf("借りる本数を入力 ---> "); scanf("%d",&i); if(i < 5)   {   money = i * 150;   } else{   money = i*5; // 5本分の料金をいれておく   if(i == 5)    {    money = money - 100; //5本だったら\100引き    }   else    {    money = money + (i-5)*100;    }   } printf("合計金額は%d円です。\n",money); } でしょうか。。。インデントが… 6本の時100円割引はなくなるけど…いいのかな?

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.17

No.4のarukamunです。 No.4の回答はできるだけプログラムをいじらずに間違っているところを訂正する形でアドバイスしました。 もし、自分が最初からコーディングしたとしたら、 #include<stdio.h> void main(void) {   int i,money ; /* エラーになるような範囲のiは入力されたくないので、仕様にはありませんが、101本以上借りないとしましたが、仕様がはっきりしていれば、この辺はもう少し考慮が必要です */   do {     printf("借りる本数を入力 ---> ");     scanf("%d",&i);   } while ( i < 1 || i > 100 ); /* とりあえず、単価150円で計算する */   money = i*150 ; /* 割引として計算する */   if ( i > 4 ){     money -= i*50 - 150 ;   }   printf("合計金額は%d円です。\n",money); } ちょっと、money -= i*50 - 150 ;の部分はトリッキーかも知れませんが、いかがでしょうか?

tv_mania
質問者

補足

if(i < 5){ money = i * 150; } else if(i == 5){ money = 5*150 - 100; } 5*150のところを上で使ったmoney(=i*150)に置き換えて考えたいんです。 else{ money = 5*150 - 100 + (i-5)*100; } の5*150-100の部分もmoney(=5*150-100)に置き換えて考えたいんです。 よろしくお願いします。

  • hitomit
  • ベストアンサー率16% (3/18)
回答No.16

仕様が明確でない部分があるので自信はありません。 こんなのではどうでしょうか? 1~4本:本数*150円 5本:5*150円 - 100円 6本以上:5本分の値段 + (本数-5)*100円 と解釈しました。 実行結果は4本のとき 600円         5本    650円         6本    750円        20本   2150円  とでます #include<stdio.h> void main(void) {   int i, money, j, waribiki ;   printf("借りる本数を入力 ---> ");   scanf("%d",&i);   if (i < 5) {     j = i ;     i = 0 ;     waribiki = 0 ;   }   else {     j = 5 ;     i = i - 5 ;     waribiki = 100 ;   }   money = (j * 150 - waribiki) + (i * 100) ;   printf("合計金額は%d円です。\n",money); }

関連するQ&A