ページ 1 / 1
客の部屋ふりわけプログラム
Posted: 2010年12月05日(日) 03:35
by デデ
2回目の投稿です。まだまだ初心者なので説明がわかりにくいかもしれないです。すみません。
今度は客を部屋にふりわけるプログラムを考えようと思います。
例として、部屋が5部屋のカラオケ店を考えます。
定員数はそれぞれ1人、2人、3人、4人、5人とします。部屋の名前をa、b、c、d、eとします。
客が来た時間、人数、利用時間を入力することで、どの部屋(a~e)に案内するべきかが出力されるようにしたいです。
条件は、
・使用中の部屋には案内しない
・客の人数が定員より多い部屋には案内しない
・人数が定員に近い部屋から案内する
・案内できない場合は入室を断る
例として、部屋がすべて空室で、3人の客がきた場合、出力は定員が3人のcとなります。
次に、その客が利用しているときに再び3人の客がきた場合、出力は定員が4人のdとなります。
その後、6人の客が来た場合、定員が6人以上の部屋がないため、入室を断ります。
このような判断をするプログラムをつくることは可能ですか?できれば教えて頂きたいです。
よろしくお願いします。
Re: 客の部屋ふりわけプログラム
Posted: 2010年12月05日(日) 04:44
by bitter_fox
夜中なので手短に穴埋めで(もう朝か)。。。
コード:
// _ には1字
// _*_には2字以上が入ります(何か×何かではありません。)
#include <stdio.h>
void main()
{
int room_state[5] = {_, _, _, _, _}; // 昇順
char room_name[_] = "_*_";
int number = 0; // 人数
int counter; // forに使うカウンタ
while (1)
{
printf("人数を入力してください >>");
scanf("%d", _*_);
while (getchar() != '\n');
if (number < 1) // 人数が1以下で飛び降りる
{
break;
}
for (counter = 0; counter < 5; counter++)
{
if (number _*_ room_state[counter])
{
printf("%_の部屋にお入りください。\n\n", room_name[_*_]);
room_state[counter] = _;
number = 0;
break;
}
}
if (number _*_ 0)
{
printf("定員を超えています\n\n");
}
}
}
にしても、振り分けの話が豊富ですね。。
>>客が来た時間、人数、利用時間を入力する
ここが良くわからない。来た時間とか利用時間とか入力してもらったとして、どうしたいんだろう?
Re: 客の部屋ふりわけプログラム
Posted: 2010年12月05日(日) 08:28
by デデ
このような時間にありがとうございます。
私は今C++を使っており、TextBoxを使い、時間と人数、利用時間を打ち込みます。
そして、Buttonを押すことでどの部屋に案内するかが、出力のTextBoxに表示されるというイメージです。
自分が店員になった感じで客を待ち、客がきたら、それらを聞いて入力します。
すると、案内する部屋が出力され、そこに案内します。
現在はこれを5部屋で考えていますが、実際は50以上の部屋がある店で使いたいと思っています。
ものすごく説明が下手ですみません。
よろしくお願いします。
Re: 客の部屋ふりわけプログラム
Posted: 2010年12月05日(日) 08:52
by 五反田
コード:
#include <cstdio>
#include <cstdlib>
using namespace std;
int room[]={1,2,3,4,5};
int useroom[]={0,0,0,0,0};
char roomname[]={'a','b','c','d','e'};
int main(){
int cometime,number,usetime;//来た時間,人数,利用時間
while(scanf("%d%d%d",&cometime,&number,&usetime)){
if(cometime==0 && number==0 && usetime==0)break;//全ての数値が0なら終了
if(number>=6){
puts("impossible");//人数が6人以上なら必然的に不可
continue;
}
int fullflag=1;
for(int i=number-1;i<5;i++){//人数が問題ない空室を探索
if(useroom[i]<=cometime){ //空室があれば終了時間を放りこんで、部屋名を表示
useroom[i]=cometime+usetime;
printf("%c\n",roomname[i]);
fullflag=0;
break;
}
}
if(fullflag)puts("Room is Full");
}
return 0;
}
こんな感じのコードはどうでしょうか?
Re: 客の部屋ふりわけプログラム
Posted: 2010年12月09日(木) 00:16
by デデ
すみません遅くなりました。細かい説明本当にありがとうございます。
参考にしたいと思います。
ここで質問なのですが、部屋の名前をa,b,c,d,e,ではなく、a1,a2,a3,a4,a5にしたいと
思うのですが、うまくできません。
charの使い方がいけないのでしょうか?
できれば教えていただきたいです。
よろしくお願いします。
Re: 客の部屋ふりわけプログラム
Posted: 2010年12月09日(木) 00:42
by bitter_fox
char *roomname[3]={"a1", "a2", "a3", "a4", "a5"};
このようにしてください。
char型は一文字のみなので、配列という形で拡張してあげる必要があります。
Re: 客の部屋ふりわけプログラム
Posted: 2010年12月09日(木) 04:26
by デデ
ありがとうございます。
変更してやってみましたが、「a1」のところが「、」、「a2」のところが「¥」、
「a3」のところが「X」、a4~a10が順に「X、T、R、L、H、D、D、@」となってしまいます。
何がいけないのか教えて頂きたいです。
よろしくお願いします。
Re: 客の部屋ふりわけプログラム
Posted: 2010年12月09日(木) 06:53
by 五反田
ソースコードを貼り付けることは出来ますか?
それだけだと、どこをどう変更したのかよく分からないので。
Re: 客の部屋ふりわけプログラム
Posted: 2010年12月09日(木) 09:52
by デデ
全部貼ります。よろしくお願いします。
#include <cstdio>
#include <cstdlib>
using namespace std;
int useroom[]={0,0,0,0,0,0,0,0,0,0,};
char*roomname[11]={"a1","a2","a3","a4","a5","a6","a7","a8","a9","a10"};
int main(){
int cometime,number,usetime;
while(scanf("%d%d%d",&cometime,&number,&usetime))
{
if(cometime==0 && number==0 && usetime==0)break;
if(cometime>=720){
puts("もう営業時間終わりなので");
continue;
}
if(number>=61){
puts("そんな入らん");
continue;
}
int fullflag=1;
for(int i=number-1;i<10;i++){
if(useroom<=cometime){
useroom=cometime+usetime;
printf("%c\n",roomname);
fullflag=0;
break;
}
}
if(fullflag)puts("満室です");
}
return 0;
}
Re: 客の部屋ふりわけプログラム
Posted: 2010年12月09日(木) 10:07
by non
printf("%c\n",roomname);
の%cは%sですね。
Re: 客の部屋ふりわけプログラム
Posted: 2010年12月09日(木) 18:59
by デデ
できました。ありがとうございます。
続いて質問なんですけど、今はa1,a2,a3,a4,a5,a6,a7,a8,a9,a10の定員数が
1,2,3,4,5,6,7,8,9,10なのですが,これを4,4,4,4,5,5,6,6,7,10などとすることはできますか。
教えて頂きたいです。よろしくお願いします。