ページ 11

配列をどのように使えばいいかわかりません…

Posted: 2011年1月25日(火) 13:55
by ゆみ
大学の自由課題で、「関数」「繰り返し」「条件分岐」「配列」を使ってプログラムを作っています。
なにも思いつかず、とりあえず授業時に使ったようなプログラムを切り貼りする感じで「映画の券売機」を作ることにしたのですが、
どうしても配列を使えません!!
内容的に無理があるのかもしれないのですが、なんとかならないでしょうか(;ω;)
2/27が締め切りなので、なるべく早くアドバイスいただけると嬉しいです!!

一応、自分で作ったところまでのプログラムリストを貼り付けておきます。
プログラミング初心者でもできそうなアイデアお待ちしてます・・・


#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
int code,tanka,total,daikin,unitprice,change;
void decide_position();
int sum = 0;

srand(time(NULL));


printf("==========料金表=========\n");

printf("1.一般 \n");
printf("2.大学生 \n");
printf("3.小・中学生 \n");
printf("4.幼児 \n");
printf("5.シルバー(60才以上) \n");

printf("=========================\n");

printf("\n");

printf("料金表から、あなたがあてはまる番号を入力してください: ");
scanf("%d",&code);

while((code < 1) || (code > 5)){
printf("1~5の番号の中から選んで下さい: ");
scanf("%d", &code);
}
switch (code)
{ case 1:
unitprice = 1800;
break;
case 2:
unitprice = 1500;
break;
case 3:
unitprice = 1000;
break;
case 4:
unitprice = 800;
break;
case 5:
unitprice = 1000;
break;
}

sum = unitprice ;

decide_position();

printf("料金は%d円です\n", unitprice);

printf("お金を入れてください: ");
scanf("%d", &daikin);
sum = unitprice ;


while(daikin <= 0){
printf("正の金額を投入してください: ");
scanf("%d",&daikin);
}

while(sum > daikin){
printf("投入金額が%d円不足しています。追加の金額を投入してください: ", sum - daikin);
sum=sum - daikin;

scanf("%d",&daikin);
}
change=daikin-sum;

if(daikin > sum){
printf("おつりをどうぞ: ");

while(change >= 5000) {
printf("[5000]");
change = change - 5000;
}

while(change >= 1000) {
printf("[1000]");
change = change - 1000;
}

while(change >= 500) {
printf("(500)");
change = change - 500;
}

while(change >= 100){
printf("(100)");
change = change - 100;
}

while((change >= 50) && (change < 100)){
printf("(50)");
change = change - 50;
}

while((change >= 10) && (change < 50)) {
printf("(10)");
change = change - 10;
}

while((change >= 5) && (change < 10)) {
printf("(5)");
change = change - 5;
}

while((change >= 1) && (change < 5)) {
printf("(1)");
change = change - 1;
}
printf("\n");
}
printf("ありがとうございました!\n",daikin);

return 0;
}

void decide_position(){/*int seat_line*/
int i,j,seat_position,seat_line;
printf("============座席表============\n");

for (i = 9; i > 0; i--){
printf("%d|",i);

for (j = 1; j < 10; j++){
printf(" ○ ");
}
printf("\n");
}
printf("ーーーーーーーーーーーーーーー\n");

printf(" ",i);

printf("ス ク リ - ン 側 ");
printf("\n");
printf("==============================\n");
printf("\n");

printf("座席表から、好きな座席の列の番号を選んでください: ");
scanf("%d",&seat_line);

seat_position = rand() % 8+1;

printf("%d列目の右から%d番目の席を取りました\n",seat_line,seat_position);

return;
}

Re: 配列をどのように使えばいいかわかりません…

Posted: 2011年1月25日(火) 14:18
by bitter_fox
ゆみさん、コードを載せる際はcodeタグで囲っていただきますようにお願いします。
参考:
http://dixq.net/board/board.html
http://dixq.net/board/board.html#k10

また、仕様がよく解らないのでもっと詳しく仕様を教えていただきますでしょうか??

Re: 配列をどのように使えばいいかわかりません…

Posted: 2011年1月25日(火) 14:33
by toyo
配列の使いどころならunitpriceでしょうか

コード:

int unitprice[] = {1800,1500,1000,800,1000};
と定義しておけばswitch (code) の部分が省略できます

コード:

printf("料金は%d円です\n", unitprice[code-1]);

Re: 配列をどのように使えばいいかわかりません…

Posted: 2011年1月25日(火) 16:36
by ゆみ
仕様というのがあんまり良く分かってないので応える内容がこれで当たってるのか分からないのですが
Ubuntu10.04ja-custom です(;ω;)

Re: 配列をどのように使えばいいかわかりません…

Posted: 2011年1月25日(火) 17:47
by h2so5
仕様とはPCの環境のことではなく、
「映画の券売機」の設計のことです。

つまり、このプログラムは具体的にどのような動作を期待して組んでいるのでしょうか?

Re: 配列をどのように使えばいいかわかりません…

Posted: 2011年1月26日(水) 12:34
by ゆみ
1.料金表を表示
2.料金表の中から番号を選んでもらう
3.座席表を表示
4.座席表の中から列の番号を選んでもらう
5.座席と料金を表示
6.お金を入れてもらう
7.お釣りを出す

という感じです。
このなかに、なにか配列を使ったプログラムを入れたいのです><

Re: 配列をどのように使えばいいかわかりません…

Posted: 2011年1月26日(水) 16:14
by bitter_fox
ゆみ さんが書きました:1.料金表を表示
では、toyoさんが仰っていたところを実装してみてください。

あと、料金表を表示するところも配列を使ってみましょう。

コード:

char *str[3] = {"test1", "test2", "test3"}
int i;

for (i = 0; i < 3; i++)
{
	printf("%d %s", i+1, str[i]);
}

Re: 配列をどのように使えばいいかわかりません…

Posted: 2011年1月26日(水) 17:20
by ゆみ
まずはtoyoさんに教えていただいた部分を変えてみました。

コード:

 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
   int code,tanka,total,daikin,change;
   int unitprice[] = {1800,1500,1000,800,1000}; 
   void decide_position();
   int sum = 0;

 srand(time(NULL));


       printf("==========料金表=========\n");

        printf("1.一般 \n");
        printf("2.大学生 \n");
        printf("3.小・中学生 \n");
        printf("4.幼児 \n");
        printf("5.シルバー(60才以上) \n");
     
       printf("=========================\n");

printf("\n");

printf("料金表から、あなたがあてはまる番号を入力してください: ");            
        scanf("%d",&code);

 while((code < 1) || (code > 5)){
      printf("1~5の番号の中から選んで下さい: ");
      scanf("%d", &code);
}

decide_position();

printf("料金は%d円です\n", unitprice[code-1]);

printf("お金を入れてください: ");
         scanf("%d", &daikin);
         sum = unitprice ;

         
while(daikin <= 0){
    printf("正の金額を投入してください: ");
    scanf("%d",&daikin); 
}

while(sum > daikin){ 
printf("投入金額が%d円不足しています。追加の金額を投入してください: ", sum - daikin);
sum=sum - daikin;

scanf("%d",&daikin);
}
	change=daikin-sum;

     if(daikin > sum){
       printf("おつりをどうぞ: ");

       while(change >= 5000) {
	    printf("[5000]");
	    change = change - 5000;
	    }

       while(change >= 1000) {
	    printf("[1000]");
	    change = change - 1000;
	    }

       while(change >= 500) {
	    printf("(500)");
	    change = change - 500;
	    }

       while(change >= 100){
	    printf("(100)");
	    change = change - 100;
	  }

printf("\n");
}
    printf("ありがとうございました!\n",daikin);

return 0;
}

void decide_position(){/*int seat_line*/
int i,j,seat_position,seat_line;
printf("============座席表============\n");

for (i = 9; i > 0; i--){
printf("%d|",i);

   for (j = 1; j < 10; j++){
      printf(" ○ ");
   }
   printf("\n");
}
   printf("ーーーーーーーーーーーーーーー\n");
   
printf("   ",i);

      printf("ス  ク  リ  -  ン  側 ");
    printf("\n");
    printf("==============================\n");
  printf("\n");

  printf("座席表から、好きな座席の列の番号を選んでください: ");
   scanf("%d",&seat_line);

   seat_position = rand() % 8+1; 
 
  printf("%d列目の右から%d番目の席を取りました\n",seat_line,seat_position);

return;
}
 

コンパイルしてみたところ、エラーは出てこないのですが、
お金を入力すると、いくらいれたかにかかわらず5000円のおつりが無限ループのようなかんじで出てきてしまいます><

何がおかしいのでしょうか??

Re: 配列をどのように使えばいいかわかりません…

Posted: 2011年1月26日(水) 18:11
by h2so5
ヒント:43行目

Re: 配列をどのように使えばいいかわかりません…

Posted: 2011年1月26日(水) 18:12
by bitter_fox
ゆみ さんが書きました:

コード:

    printf("料金は%d円です\n", unitprice[code-1]);
    sum = unitprice ;
unitpriceだと配列の先頭のアドレスになってしまいます。
sumへの代入もunitprice[code-1]に変更しておきましょう。

Re: 配列をどのように使えばいいかわかりません…

Posted: 2011年1月26日(水) 23:34
by ゆみ
無事にプログラムリストを完成させることができました!!
みなさん、本当にありがとうございました(´;ω;`)!!