学校の課題なんですが・・・

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

学校の課題なんですが・・・

#1

投稿記事 by kokoro » 16年前

[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
  ★以下の仕様を満たすプログラムをC言語で作成しなさい。
  【仕様】座席予約簡易プログラム
  
  ▽通路を挟んだ5行×5列(1-1~5-5まで)の座席がある列車の座席を予約・キャンル
   するプログラムを作る。
  ▽メニューは、「予約」「キャンセル」「終了」の3種類とする。
  ▽空き状態を0、予約済み状態を1で表現する。初期の予約状態はランダムにしておく。
  ▽「予約」では、予約状況の一覧を表示し、予約する座席数を入力させる。入力数が空席の数以上であれ    ば、 「空席が足りません」として、再度入力させる。
  ▽次に希望する座席を入力させる(行‐列の順)。入力されたら確認メッセージ
   (「(座席番号)」を予約しますか?)を表示する。Yesならば予約処理をし、「予約しました」と表示してメニ   ューに戻る。 Noならばメニューに戻る。
  ▽すでに予約済みの座席を指定した時は、「(座席番号)は予約済みです」とエラーメッセージを表示し、再度   入力させる。
  ▽入力数が2以上のときは複数選択が可能になるようにする(全ての希望を入力した時点で確認メッセージ  を表示)
  ▽入力数が空席の数と同じときは、すぐに予約確認メッセージを表示する。
  ▽「キャンセル」では、「予約」メニューと同様の機能をもたせる(一覧表示・キャンセルする座席数の入力・
  座席番号の入力・確認メッセージ・エラー処理・複数選択機能)
  ▽「終了」では、プログラム終了する。

全体的に分からないのですが、とりあえず書いてあることをプログラムにしてみました(添付しました)
一覧をランダムにするのはどうしたら良いでしょうか?他のところも教えてほしいです。  

ここのところをどうすれば良いか分かりません→▽入力数が2以上のときは複数選択が可能になるようにする(全ての希望を入力した時点で確認メッセージを表示)
  ▽入力数が空席の数と同じときは、すぐに予約確認メッセージを表示する。

全体的に分からないので教えてください。

いけやん

Re:学校の課題なんですが・・・

#2

投稿記事 by いけやん » 16年前

素人の私ですが、部分的にですが(汗
>▽入力数が空席の数と同じときは、すぐに予約確認メッセージを表示する。

時間がないので、ソースは読んでないのですが
入力数をカウントする変数、空席をカウントする変数なんかを用意して

入力数:NCount
空席数:KCount

入力されるたびに++したりして
if(NCount==KCount){
  Printf(表示);
}
素人のソースなので参考にならないと思いますが・・・

kokoro

Re:学校の課題なんですが・・・

#3

投稿記事 by kokoro » 16年前

ありがとうございます。他にも教えてほしいのですが、誰か教えてください。

いけやん

Re:学校の課題なんですが・・・

#4

投稿記事 by いけやん » 16年前

>printf("空き:0 予約済み:1\n");

>	for(j=0; j<=5; j++){
		
>		printf(" %d\t",j);
		
>		for(i = 0; i < 5; i++){
>		printf(" %d\t",i+1);
>
>		}
>		printf("\n");
>	}
質問なんですが上記の処理は、25マスに乱数を入れて
0,1を代入する処理を書きたいと言う解釈で合っていますかね?

こんな感じかな?

#define MAX 5
srand(time(NULL));
for(i=0;i<MAX;++i){
   for(j=0;j<MAX;++j){
      zaseki[j]=rand()%1;//0~1を代入する
  }
}


もしかすると
randの使い方が間違っているかもしれません。
その時は、ごめんなさい。

やそ

Re:学校の課題なんですが・・・

#5

投稿記事 by やそ » 16年前

いけやんさん、惜しいです。
> zaseki[j]=rand()%1;//0~1を代入する



zaseki[j]=rand()%2;//0~1を代入する
です。

あまりを0か1にしたいのですから1で割ってはあまりは0しかありえません。
なぜなら0以外の整数は1で割り切れちゃいますから^^;

ほかにはビット演算を用いて乱数の演算を減らすやり方も出来ますね。
int k;
k=rand()%32;
for(i=0;i<5;i++){
  zaseki[0]=k&16;
  zaseki[1]=k&8;
  zaseki[2]=k&4;
  zaseki[3]=k&2;
  zaseki[4]=k&1;
}

※hint
32= 00100000
16= 00010000
8= 00001000
4= 00000100
2= 00000010
1= 00000001
です。
乱数で0から31(32で割ったあまり)を取り出し、
2進数に置き換えた各桁を座席に割り当てるやり方。

いけやん

Re:学校の課題なんですが・・・

#6

投稿記事 by いけやん » 16年前

>やそさん
訂正ありがとうございます。
乱数をあまり使った事がなかったので、助かります。

>ほかにはビット演算を用いて乱数の演算を減らすやり方も出来ますね。
そんなやり方もあるんですか~。
自分はビット演算なんかは、疎いので
少し難しいですね。

>kokoroさん。
間違ったものを書いて、すいませんでした。

Haru

Re:学校の課題なんですが・・・

#7

投稿記事 by Haru » 16年前

>ありがとうございます。他にも教えてほしいのですが、誰か教えてください。
全体的にといっても、何がわからないのかわからないと、他の皆さんも
教えずらいと思います。

>▽通路を挟んだ5行×5列(1-1~5-5まで)の座席がある列車の座席

私の理解不足かもしれませんがこの説明がよくわからないんですが・・・

  1 2 3 4 5
A o o o o o
B o o o o o
C o o o o o
D o o o o o
E o o o o o

こんな席だというイメージで良いんですかね?


私もまだまだ未熟者なので、大した力にはなれませんが、

if(????)
{
	printf("空席が足りません\n");
	printf("予約する座席数を入力してください。\n");
	scanf("%d",&yoyaku);
}
ここのif分は
全体の席数 < 現在の予約数+これからする予約の数
==error
になる訳ですよね?今のままだと、errorを出してもう一度scanfでまた、errorがでてしまったら、そのまま次に進んでしまいます。また、終了処理を選択しなくても、勝手に終了してしまうので、
while(1)   //無限ループ
{
   scanf(%d,&num);
   switch(num)
   {
     case1:  //予約処理
        while(1)
		{
			errorにならなかったら...
			break;    
		}
        break;        
     case2:    //キャンセル処理
        break;
     case3:    //終了
        return 0;
   }
}  
 少しごちゃごちゃしてしまいましたが、こんな感じで良いのではないでしょうか?

やそ

Re:学校の課題なんですが・・・

#8

投稿記事 by やそ » 16年前

をっと。
乱数はループの中で発生させないといけなかった(汗)
int k;
for(i=0;i<5;i++){
k=rand()%32;
zaseki[0]=k&16;
zaseki[1]=k&8;
zaseki[2]=k&4;
zaseki[3]=k&2;
zaseki[4]=k&1;
}

です。

やそ

Re:学校の課題なんですが・・・

#9

投稿記事 by やそ » 16年前

あ、またミスに気づいた。代入する値は0か1だっけ?
int k;
for(i=0;i<5;i++){
k=rand()%32;
zaseki[0]=((k&16)>>4);
zaseki[1]=((k&8)>>3);
zaseki[2]=((k&4)>>2);
zaseki[3]=((k&2)>>1);
zaseki[4]=k&1;
}

1の位までビットシフトっす。

kazuoni

Re:学校の課題なんですが・・・

#10

投稿記事 by kazuoni » 16年前

ビット演算・・・なんだかあまり慣れないです。。自分は^^;
これじゃだめなんですけど・・・。

kokoro

Re:学校の課題なんですが・・・

#11

投稿記事 by kokoro » 16年前

分からないところなんですが・・・

yes,noの判定。
予約済みの座席を指定した時のエラーメッセージ。
入力数が2以上の時は複数選択が可能になるようにする。
入力数が空席の数と同じの時は、すぐに確認メッセージを表示。

のところがうまくプログラムが作れません。教えていただきたいです。

Haru

Re:学校の課題なんですが・・・

#12

投稿記事 by Haru » 16年前

>>yes,noの判定。
1:yes 2:no
if(res == 1)
{
    //予約
}
else
{
    //キャンセル
}

>>予約済みの座席を指定した時のエラーメッセージ。 

if(zaseki[j] != 0)
{
    //予約済みです
}
#一番最初に配列は0で初期化しておく

>>入力数が2以上の時は複数選択が可能になるようにする。 

if(yoyaku > 1)
{
        for(roop = 0; roop <=yoyaku; roop++)
    {
             //予約処理
    }
} 
>>入力数が空席の数と同じの時は、すぐに確認メッセージを表示。
???何のメッセージかわからないですが…
if(yoyaku == aki)
{
        //確認メッセージ
}
多分こんな感じでよいのではないでしょうか?

non

Re:学校の課題なんですが・・・

#13

投稿記事 by non » 16年前

まず、Haruさんがされているように、全体をWhileかdo~whileで繰り返しましょう。

>yes,noの判定。
kokoroさんの方法でいいと思います。

>予約済みの座席を指定した時のエラーメッセージ。
if(zaseki[i-1][j-1]==1)
printf("エラーメッセージ\n");
のようになりますが、エラーの場合、再入力が必要なので
これもWhileかdo~whileで繰り返しましょう。

>入力数が2以上の時は複数選択が可能になるようにする。
予約座席数を入力した後、
while(yoyaku>0){
座席番号入力
yoyaku--;
aki--;
}
のようにこれも繰り返します。

>入力数が空席の数と同じの時は、すぐに確認メッセージを表示。
上の予約座席数を入力した後、
if(aki==yoyaku)
すべて予約にする
else if(aki>yoyaku)
上の座席番号入力のwhile文

まだわからないのであれば、わかるところまでプログラムを添付してください。

Haru

Re:学校の課題なんですが・・・

#14

投稿記事 by Haru » 16年前

>>予約済みの座席を指定した時のエラーメッセージ。
>if(zaseki[i-1][j-1]==1)
>printf("エラーメッセージ\n");
>のようになりますが、エラーの場合、再入力が必要なので
>これもWhileかdo~whileで繰り返しましょう

失礼しました。nonさんの言うとおりi,jは-1しなくてはいけませんでした。

kokoro

Re:学校の課題なんですが・・・

#15

投稿記事 by kokoro » 16年前

皆さんありがとうございます。

これで作ってみます。またわからないところがあったら、教えてください。

やそ

Re:学校の課題なんですが・・・

#16

投稿記事 by やそ » 16年前

まずは処理の流れを文章や図で書き出しましょう。


スタート

初期処理
 (使用する変数の宣言や初期値代入など)

メニュー表示

番号入力
 (入力した番号が1-3以外のときはメッセージを出してメニュー表示からやり直す?)

入力した番号によって各処理へ

☆予約

現在の予約状況の表示

予約する座席数を入力

現在予約されている座席数と比較
 (座席数が足りなければ座席数入力へ戻る)

座席番号の入力

予約状況と比較
 (既に予約されている座席の場合は座席番号の入力へ戻る)

予約確認

全ての予約が終わっていれば抜ける。
 (終わっていなければ予約数を1減じて、座席番号の入力へ戻る)

☆1☆まずは座席の初期設定(ランダムに0,1を設定する)
int reserved;/*予約済み席数を数える変数
reserved=0;
for(i=0;i<5;i++){
  for(j=0;j<5;j++){
    zaseki[j]=rand()%2;/* 2で割った余り(すなわち0か1)を設定
    reserved+=zaseki[j];
  }
}
aki=25-reserved;/* ついでに空席数も計算しておく。

☆2☆予約状況の表示
printf("\t1\t2\t3\t4\t5\n");/* 列の見出し
for(i=0;i<5;i++){
  printf("%d:\t",i+1);/* 行の見出し
  for(j=0;j<5;j++){
    printf("%d\t",zaseki[j]);/* 予約状況表示
  }
  printf("\n");
}

位置がずれているようなら調整してください。

☆3☆メニュー番号入力
while(1){
  scanf("%d",&num);
  if(num>0 || num<4){
    break;
  }
  printf("1から3を入力してチョーダイ!!\n");
}

☆4☆予約
while(1){
  scanf("%d",&yoyaku);
  if(yoyaku<=aki){
    break;
  }
  printf("そんなに予約できましぇーん!!\n");
  printf("空席数:%d 以下で入力してねえん\n",aki);
}


while(yoyaku>0){
  printf("希望する座席番号を入力してください(行-列)\n");
  scanf("%d-%d",&i,&j);
  if(zaseki[j]==1){
    printf("座席[%d-%d]は予約済みです。\n",i,j);
  else{
    printf("を、空席みたいっすよ旦那。%d-%d取っときやすか?\n",i,j);
    res=getchar();
    if(res=='y' || res='Y'){
      zaseki[j]=1;
      printf("押さえやしたぜ。へっへっへ。\n");
      yoyaku--;
    }
  }
}

こんな感じかなぁ・・・

いけやん

Re:学校の課題なんですが・・・

#17

投稿記事 by いけやん » 16年前

遅かった・・・
やそさんが組まれたみたいですね・・・
今自分も一部ですが、組んでいまた。
でも、やそさんの方が断然いいですね(汗

やそさん・・・・・
printfで表示させるところがおもしろすぎですよ!!
>printf("を、空席みたいっすよ旦那。%d-%d取っときやすか?\n",i,j);
>printf("押さえやしたぜ。へっへっへ。\n");
ツボでした。
昼ご飯が詰まりましたwww

脱線しました。すいません。

部分的にですが
Yesの所はそんな感じだと思います。

>Noならばメニューに戻る
これは、メニューの所をwhile等のループで回しておいて
省略
if(Yesならば){}

if(Noならば){
  printf("もう一度予約して下さい");
  continue;//ループに戻る
}
の様な感じでいけるのでは?と思います。

やそ

Re:学校の課題なんですが・・・

#18

投稿記事 by やそ » 16年前

あ、しまった。
コメントを投げっぱなしでくくってなかった「*/」が抜けてます(汗

kokoro

Re:学校の課題なんですが・・・

#19

投稿記事 by kokoro » 16年前

ここまで作ってみました。

あと、▽入力数(座席数)が2以上のときは複数選択が可能になるようにする
(全ての希望を入力した時点で確認メッセージ  を表示)
  ▽入力数(座席数)が空席の数と同じときは、すぐに予約確認メッセージを表示する。

のところがどうしてもできないのですが、どうしたら良いのでしょう????

box

Re:学校の課題なんですが・・・

#20

投稿記事 by box » 16年前

ソースは見ておりません。

> あと、▽入力数(座席数)が2以上のときは複数選択が可能になるようにする
> (全ての希望を入力した時点で確認メッセージ  を表示)

入力数(座席数)をどういう変数で管理しているか、
複数の座席を選択する、とは、どういう処理を意味するのか、
すべての希望を入力した時点、とは、どういうタイミングのことをいうのか、
確認メッセージの内容はどういったものか。

>   ▽入力数(座席数)が空席の数と同じときは、すぐに予約確認メッセージを表示する。

空席の数をどういう変数で管理しているか、
入力数(座席数)と空席数が同じ、ということを、C言語ではどう表現するか、
予約確認メッセージの内容はどういったものか。

考えることはいっぱいありますね。
さあ、頭をフル回転させましょう。

やそ

Re:学校の課題なんですが・・・

#21

投稿記事 by やそ » 16年前

ちょっと遊んでみました。
がんばって気になる(ツンデレ風味の)あの子のスケジュールを押さえるのだ!!(笑)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define GYOU 5
#define RETU 5

int main(void)
{
/* 変数の宣言 */
	int NUM[RET[/url][GYO[/url];
	int i,j,num,zasekisu,aki,res;
	aki = 0;
/* 初期処理 */

	/* 乱数 種 決定 */
         srand((unsigned)time(NULL)); 
	
	/* めにゅー */
	while(1){

		printf("メニュー 1:予約 2:キャンセル 3:終了\n");
		printf("早く番号を入れなさいよっ!もう、グズなんだから!!:");
		scanf("%d",&num);
		if(num>0 || num<4){
			break;
		}/* 1から3だけ~。どんだけ~ */
	}/* while文の終了

/* どれを選んでも一応現在の予約状況を表示 */
	printf("予約一覧\n");
	printf("空き:0 予約済み:1\n");
	for(i=0; i<RETU; i++){
		for(j = 0; j < GYOU; j++){
			NUM[j] = rand()%2;/* 0 or 1をセット */
			if(NUM[j] == 0){/* 空の数を数える */
				aki = aki+1;
			}
			printf("%d\t",NUM[j]);
		}
		printf("\n");/* 1行の表示後に改行する */
	}

/* 予約 */
	if(num == 1){
			
	/* 予約する日数を入力する */
		printf("予約する日数を入力するのよ!\n");
		while(1){
			scanf("%d",&zasekisu);
			if(zasekisu<=aki){
   				break;
  			}
			printf("私は忙しいのだぞ!おまえの為にそんなにスケジュール空けられるわけあるか馬鹿者が!\n");

			printf("予約する日数を空日数:%d 以下に抑えるのだ\n",aki);
		}

/*   ▽入力数が空席の数と同じときは、すぐに予約確認メッセージを表示する。 */

		if(aki == zasekisu){/* 空席数と予約数が同じ場合は全席予約ってこと? */
			printf("現在の空日数を全て予約するのか?(y/n)\n");
			res = getchar();
			if(res == 'Y' || res == 'y'){
				for(i=0; i<RETU; i++){
					for(j = 0; j < GYOU; j++){
						NUM[j]=1;/* 問答無用で全て1にセット */
					}
				}
				printf("全席予約しました。\n");
				printf("全くどれだけ私にloveloveなのだ。私も罪なオンナだな。ふふふっ。\n");
			}
		}

/* ▽入力数が2以上のときは複数選択が可能になるようにする(全ての希望を入力した時点で確認メッセージを表示)  */

		/* 座席数を数えながらループする */
		while(zasekisu>0){
			/* 座席番号妥当性チェック */
			printf("希望する日を入力してください。(行‐列)\n");
			scanf("%d-%d",&i,&j);
			while(1){
				if((i>0 && i<6)&&(j>0 && j<6)){/* 座席番号は1から5のみ許可 */
					break;
				}
				printf("もう一度、日付を良く確認するのだ。馬鹿者め。(行‐列)\n");
				scanf("%d-%d",&i,&j);
			}
			/* 予約済みかどうかの確認 */ 
			if(NUM[i-1][j-1] == 1){
				printf("その日[%d-%d]は忙しい。やめておけ。\n",i,j);
			}else{
				printf("その日「%d-%d」で良いのか?(y/n)\n",i,j);
				printf("Y または Nで簡潔に答えるがいい。\n");
				res = getchar();
				if(res == 'Y' || res == 'y'){/* nの判定をしていないのでy以外は全てnoとなる */
					NUM[j]=1;
					printf("スケジュール「%d-%d」を押さえました。\n",i,j);
					zasekisu--;/* 予約完了したので残り予約数(zasekisu)を1減らす */
				}/* if(res~)文の終了 */
			}/* if(NUM~)文の終了 */
			printf("残り予約数:%d\n",zasekisu);/* なんとなく親切設計に */
		}/* while(zasekisu~)文の終了 */
	
		/* 予約数全て入力終了 */
		printf("全ての予約が完了しました。\n");

	}/* if(num == 1)の終了

/* キャンセル */

	/*if(num == 2){
	
		/* キャンセルはがんばって考えよう! */

	}*/if(num == 2)文の終了

/* 終了 */

	if(num == 3){

	    printf("なに!止めるというのか?!\n");
	  scanf("%d",&i);
	    printf("ちょ、ちょっと本気か?!\n");
	  scanf("%d",&i);
	    printf("お前なんかもう知らん。勝手にすればよかろう。\n");

	}
	return 0;
}/* mainの終了


おふざけが過ぎるかな?
ロジック自体は一応まともに考えてはいるんでお許しを(笑)
目障りならば消してくだされ(削除pass:yaso)

ぽこぽこ修正^^;

kazuoni

Re:学校の課題なんですが・・・

#22

投稿記事 by kazuoni » 16年前

面白いもの見させていただきましたw

あ、time.hがインクルードされてないようです。
srand(time(NULL));
も警告避けるために
srand((unsigned)time(NULL));
のがいいかなと思います。

・・・ツンデレはいつ頃から流行ったのでしょうねw

kazuoni

Re:学校の課題なんですが・・・

#23

投稿記事 by kazuoni » 16年前

あ、あと
if((i>0 && i<6)&&((j>0 && j<6))
↓
if((i>0 && i<6)&&((j>0 && j<6)))
とint akiが二つあります^^;

やそ

Re:学校の課題なんですが・・・

#24

投稿記事 by やそ » 16年前

kazuoniさん、チェックあんがとさん^^
ツール使わず、脳内コンパイルのみなので、穴はやっぱりポコポコあったね^^;

srandはトピ主さんのソースをまんまコピペしただけで、何も考えてなかった(笑)

kokoro

Re:学校の課題なんですが・・・

#25

投稿記事 by kokoro » 16年前

皆さんありがとうごさいます^^

ほんっとうに助かります。

頑張って見ます。^^

kokoro

Re:学校の課題なんですが・・・限界です´`

#26

投稿記事 by kokoro » 16年前

実行結果
 
  予約する座席数を入力してください。
  2
  -希望する座席番号を入力してください。(行‐列)
  1-2
  座席番号「1-2」を予約しますか。
  Yes=1 または No=0を入力してください。
  1
  座席番号「1-2」を予約しました。
  メニュー 1:予約 2:キャンセル 3:終了
  番号を入力してください

と1つ目を予約した後、メニューに戻ってしまいます。
例えば、予約する座席数を「2」と入力した時、1つ目を予約した後2つ目の予約にいくように
繰り返したいのですが
どうしたら良いのか・・・教えてください。

kokoro

Re:学校の課題なんですが・・・限界です´`

#27

投稿記事 by kokoro » 16年前

↑のはできました。

もう一つ質問なんですが、
予約が完了した後メニューに戻り、その後また予約を選択した後
一覧表が表示された時、前に予約した番号が一覧表に表示されるようにしたい
(ランダムにならずに、予約したところに「1」が出るようにしたい。)
のですがどうしたらいいのでしょうか?

ソースは一緒です。教えてください。

いけやん

Re:学校の課題なんですが・・・限界です´`

#28

投稿記事 by いけやん » 16年前

if(aki == zasekisu){
		
		printf("予約しますか。\n",i,j);
			
		printf("Yes=1 または No=0を入力してください。\n");
		scanf("%d",&res);
				
				
		if(res == 1){
			NUM[j]=1;
			printf("予約しました。\n");
			break;
		}else{
			continue;
		}
}


>予約する座席数を入力してください。
>2
↑を入れているのが
>zasekisu
この変数なんですよね?

予約したい座席数をzasekisuが持っているから
zasekisuまで回れとして
for(~; < zasekisu;~){//予約する座席分るーぷ
   if(res == 1){
	NUM[j]=1;
	printf("予約しました。\n");
	break;
   }
}

こんな感じですかね?

後ここおかしくないですか?
if(aki == zasekisu){
空いてる座席数と予約したい座席数が同じならという事ですよね?
if(aki >= zasekisu){
空いてる数の方が多い場合でないといけないと思うのですが・・・

kokoro

Re:学校の課題なんですが・・・限界です´`

#29

投稿記事 by kokoro » 16年前

実行結果

メニュー 1:予約 2:キャンセル 3:終了
番号を入力してください1
一覧表示
空き:0 予約済み:1
1 1 1 1 1
1 1 1 1 0
1 1 1 1 1
1 1 0 0 0
1 1 1 0 1
予約する座席数を入力してください。
3
-希望する座席番号を入力してください。(行‐列)
4-3
座席番号「4-3」を予約しますか。
Yes=1 または No=0を入力してください。
1
座席番号「4-3」を予約しました。
-希望する座席番号を入力してください。(行‐列)
4-4
座席番号「4-4」を予約しますか。
Yes=1 または No=0を入力してください。
1
座席番号「4-4」を予約しました。
-希望する座席番号を入力してください。(行‐列)
4-5
座席番号「4-5」を予約しますか。
Yes=1 または No=0を入力してください。
1
座席番号「4-5」を予約しました。
メニュー 1:予約 2:キャンセル 3:終了
番号を入力してください 1
一覧表示
空き:0 予約済み:1
0 0 0 1 0
0 1 0 0 1    この一覧が
0 0 0 0 0   ←ランダムにならずに前に予約した
0 0 0 1 1    ところが予約されているようにしたい。
1 0 0 0 0




(ランダムにならずに、予約したところに「1」が出るようにしたい。)


このようにするにはどうしたら良いのでしょうか?

non

Re:学校の課題なんですが・・・限界です´`

#30

投稿記事 by non » 16年前

乱数を発生させて配列に入れている部分を、while(1)の前に、移動すればいいのでは?

kokoro

Re:学校の課題なんですが・・・限界です´`

#31

投稿記事 by kokoro » 16年前

srand(time(NULL)); の下に

NUM[j] = rand()%2;

ですか?

non

Re:学校の課題なんですが・・・限界です´`

#32

投稿記事 by non » 16年前

そうです。もちろん、forの2重ループ部分全部。
乱数をセットする部分と、配列を表示する部分に分けて考えましょう。

non

Re:学校の課題なんですが・・・限界です´`

#33

投稿記事 by non » 16年前

上の投稿ですが、名前を入れるのをわすれました。

non

Re:学校の課題なんですが・・・限界です´`

#34

投稿記事 by non » 16年前

ありゃありゃ、上はへんな投稿文書に・・・(失礼しました)
kokoroさんのプログラムもほぼ、完成したみたいなので、ちょっと作ってみました。
上の添付ファイルです。
参考にしてください。ただし、学校に提出するのは自分のにしてね。
なお、配列とakiは簡単にするためにグローバル変数にしました。

kokoro

Re:学校の課題なんですが・・・

#35

投稿記事 by kokoro » 16年前

ありがとうございました。

頑張ってやってみます(^-^)v

kokoro

Re:学校の課題なんですが・・・

#36

投稿記事 by kokoro » 16年前

質問なんですが、全部予約して、一覧表示させると全部予約(全部「1」)にならない
のはなぜでしょうか。
また、全てキャンセルして、一覧表示すると全部「0」になりません。

教えてください。

Mist

Re:学校の課題なんですが・・・

#37

投稿記事 by Mist » 16年前

for(i=1; i<5; i++){
    for(j=1; j<5; j++){
	NUM[i-1][j-1]=0;     // ここ間違い
    }
}
yoyakuzumi = 0;
aki = 25;
printf("キャンセルしました。\n");
なぜ-1していますか?

いけやん

Re:学校の課題なんですが・・・

#38

投稿記事 by いけやん » 16年前

if(res == 1){
	for(i=1; i<5; i++){
		for(j=1; j<5; j++){
			NUM[i-1][j-1]=1;
		}
	}
	yoyakuzumi = 25;
	aki = 0;
	printf("予約しました。\n");
													
}
試せる環境がないので、多分なんですが
ループを1から始めて5までとしているので
1,2,3,4までしか回っていないのではないのでしょうか?

もしあれでしたら
printf()なんかを挟んで
値を確かめては?
for(i=1; i<5; i++){
    printf(値確認)
	for(j=1; j<5; j++){
           printf("値確認")
		NUM[i-1][j-1]=1;

kokoro

Re:学校の課題なんですが・・・

#39

投稿記事 by kokoro » 16年前

ありがとうございます。

とっても助かりました。

これで、できるかもしれないです。

閉鎖

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