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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ゆみ

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

#1

投稿記事 by ゆみ » 14年前

大学の自由課題で、「関数」「繰り返し」「条件分岐」「配列」を使ってプログラムを作っています。
なにも思いつかず、とりあえず授業時に使ったようなプログラムを切り貼りする感じで「映画の券売機」を作ることにしたのですが、
どうしても配列を使えません!!
内容的に無理があるのかもしれないのですが、なんとかならないでしょうか(;ω;)
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;
}

アバター
bitter_fox
記事: 607
登録日時: 14年前
住所: 大阪府

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

#2

投稿記事 by bitter_fox » 14年前

ゆみさん、コードを載せる際はcodeタグで囲っていただきますようにお願いします。
参考:
http://dixq.net/board/board.html
http://dixq.net/board/board.html#k10

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

アバター
toyo
記事: 35
登録日時: 14年前
住所: 宮崎県

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

#3

投稿記事 by toyo » 14年前

配列の使いどころならunitpriceでしょうか

コード:

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

コード:

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

ゆみ

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

#4

投稿記事 by ゆみ » 14年前

仕様というのがあんまり良く分かってないので応える内容がこれで当たってるのか分からないのですが
Ubuntu10.04ja-custom です(;ω;)

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

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

#5

投稿記事 by h2so5 » 14年前

仕様とはPCの環境のことではなく、
「映画の券売機」の設計のことです。

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

ゆみ

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

#6

投稿記事 by ゆみ » 14年前

1.料金表を表示
2.料金表の中から番号を選んでもらう
3.座席表を表示
4.座席表の中から列の番号を選んでもらう
5.座席と料金を表示
6.お金を入れてもらう
7.お釣りを出す

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

アバター
bitter_fox
記事: 607
登録日時: 14年前
住所: 大阪府

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

#7

投稿記事 by bitter_fox » 14年前

ゆみ さんが書きました:1.料金表を表示
では、toyoさんが仰っていたところを実装してみてください。

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

コード:

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

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

ゆみ

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

#8

投稿記事 by ゆみ » 14年前

まずは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円のおつりが無限ループのようなかんじで出てきてしまいます><

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

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

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

#9

投稿記事 by h2so5 » 14年前

ヒント:43行目

アバター
bitter_fox
記事: 607
登録日時: 14年前
住所: 大阪府

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

#10

投稿記事 by bitter_fox » 14年前

ゆみ さんが書きました:

コード:

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

ゆみ

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

#11

投稿記事 by ゆみ » 14年前

無事にプログラムリストを完成させることができました!!
みなさん、本当にありがとうございました(´;ω;`)!!

閉鎖

“C言語何でも質問掲示板” へ戻る