学校の課題で困っています

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

学校の課題で困っています

#1

投稿記事 by tubaki » 14年前

  下の仕様を満たすプログラムをC言語で作成。
  座席予約プログラム
  
  ▽5行×5列(1-1~5-5まで)の座席があるバスの座席を予約をするプログラムを作る。
  ▽空き状態を0、予約済み状態を1で表現する。
  ▽「予約」は、予約状況の一覧を表示し、予約する座席の第一希望と第二希望を入力させる。第二希望は入力しなくてもよい。
  ▽すでに予約済みの座席を指定した時は、「(座席番号)は予約済みです」とエラーメッセージを表示し、再度入力させる。しかし、先に座席予    約をした人が第二希望を入力していてその座席が開いていた場合座席を入れ替える。
  ▽入力数が2以上のときは複数選択が可能になるようにする。
  ▽入力数が空席の数と同じときは、すぐに予約確認メッセージを表示する。

  第二希望の入力の有無と座席の入れ替えが分りません。アドバイスお願いします。
  

コード:

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

#define GYOU 5
#define RETU 5

int main(void)
{
	
	int NUM[RETU][GYOU];
	int i,j,zasekisu,aki;
	aki = 0;
	
	srand((unsigned)time(NULL)); 
	
	
	printf("予約一覧\n");
	printf("空き:0 予約済み:1\n");
	for(i=0; i<RETU; i++){
		for(j = 0; j < GYOU; j++){
			NUM[i][j] = rand()%2;/* 0 or 1をセット */
			if(NUM[i][j] == 0)/* 空の数を数える */
			{
				aki = aki+1;
			}
			printf("%d\t",NUM[i][j]);
		}
		printf("\n");/* 1行の表示後に改行する */
	}

	

	printf("予約する座席数を入力してください\n");
	while(1){
		scanf("%d",&zasekisu);
		if(zasekisu<=aki){
			break;
		}
		
		printf("空席が足りません\n");
		printf("予約する座席数を空席数:%d 以下に抑えてください\n",aki);
	}
	if(aki == zasekisu){
		{
			for(i=0; i<RETU; i++){
				for(j = 0; j < GYOU; j++){
					NUM[i][j]=1;/* 全て1にセット */
				}
			}
			printf("全席予約しました。\n");
		}
	}
	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("座席番号は1から5で入力してください。(行‐列)\n");
				scanf("%d-%d",&i,&j);
			} 
			if(NUM[i-1][j-1] == 1){
				printf("その席[%d-%d]は空いていません。\n",i,j);
				printf("他の希望する座席を入力してください。(行‐列)\n");
				scanf("%d-%d",&i,&j);
			}
			
				
					printf("座席「%d-%d」を押さえました。\n",i,j);
					zasekisu--;
					printf("残り予約数:%d\n",zasekisu);
				
			
	}
	printf("全ての予約が完了しました。\n");
	
	return 0;
}

box
記事: 2002
登録日時: 14年前

Re: 学校の課題で困っています

#2

投稿記事 by box » 14年前

>先に座席予約をした人が第二希望を入力していてその座席が開いていた場合座席を入れ替える。

こういう仕様からすると、「誰が」どこの座席を取ったかも管理する必要がないですか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

tubaki

Re: 学校の課題で困っています

#3

投稿記事 by tubaki » 14年前

ファイルの入出を使って管理する方法があると聞いたんですけどよく分りませんでした。
管理しないとできませんかね?
質問を質問で返してすいません。

アバター
さかまき
記事: 92
登録日時: 14年前

Re: 学校の課題で困っています

#4

投稿記事 by さかまき » 14年前

>管理しないとできませんかね?
現在は座席が空きかどうかの情報しか管理されていないので
予約済みの席を押さえた人が第2希望をだしているかどうかの
情報がありません。仕様を満たす為には、そこらへんも必要でしょ
という事だと思います。

これだけの仕様だと、「誰が」どこの座席を取ったかの管理ではなく
予約された席には第2志望の指定があるかどうかの管理でもよいと思います。
ただ、現実問題として、最終的な座席表を作るには「誰が」の情報も必要です。
だから、「誰が」で管理したほうがよいと思います。
名前である必要はなく、予約番号みたいなもので十分だと思います。


予約する座席数が空席数と同じだった場合、if(aki == zasekisu)の処理で
全席予約してしまい、その後希望する座席をきいていますが、この時は
すでに全席予約済みになっており「希望する座席を入力」ループから
抜ける事ができません。この場合は座席の指定はスキップすべきです。

あまり面白くない仕様ですね。
空席状況を表示して予約させるのに、予約済みを選んでも場合によっては
横取りできる仕組み。だけど空席1席では横取りできない仕組み。
そもそも第2希望をわざわざ入力する人がいるんでしょうかね。

box
記事: 2002
登録日時: 14年前

Re: 学校の課題で困っています

#5

投稿記事 by box » 14年前

>先に座席予約をした人が第二希望を入力していて

そういう「人」が存在するわけですよね。
だったら、ある座席を予約しているのが「誰なのか」を管理するのは当たり前だと思いますが、違いますかね。

ある座席について、
 ・空き状況
 ・誰が予約しているか
あたりのデータ(他の情報も必要かも)を構造体で持てばいいんじゃないか、なんて思ったりしてます。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

閉鎖

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