- 締切済み
関数と配列に関して
初心者ですが関数と配列について勉強しています 全然分からず、教えてほしいと思います。 10個の座席を持つ飛行機の座席予約プログラムを作成せよ。 このプログラムの以下の通り。 ・メニューを表示する。選択肢は 喫煙席(Smoking Seat)と禁煙席(non-Smoking Seat)、プログラム終了 の3つ ・禁煙席は座席番号1~5、喫煙席は6~10とする ・選択した座席種に応じて、空いている席を検索し、座席種と座席番号 を表示して予約する ・座席に空きがない場合には別の座席種でもよいかをたずねる ・別の座席種がNGの場合には、次のフライトが3時間後である旨 を表示する ・予約に関する一連の処理が終わったらメニュー表示に戻る ・メニューで不正な数値が入力されたらエラーメッセージを表示する ・関数に分けて記述すること 《実行例》 ****** Menu ****** ------------------ 1.Non Smoking Seat 2.Smoking Seat ------------------ 0.End ------------------ Select : 1 Your Seat : Non Smoking Seat(5) ****** Menu ****** ------------------ 1.Non Smoking Seat 2.Smoking Seat ------------------ 0.End ------------------ Select : 1 No Vacancy in non-smoking section. -> Smoking seat : 1.OK 2.NG Select : 2 Next Flight : 3 hours later. ****** Menu ****** ------------------ 1.Non Smoking Seat 2.Smoking Seat ------------------ 0.End ------------------ Select : 1 No Vacancy in non-smoking section. -> Smoking seat : 1.OK 2.NG Select : 1 Your Seat : Smoking Seat(6) ****** Menu ****** ------------------ 1.Non Smoking Seat 2.Smoking Seat ------------------ 0.End ------------------ Select : 0 Program terminated.
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> ただ、問題で演習していたときに「配列」のところで問題につまづいたので なにに/どこにつまづいたのかわからないので答えようがありません。 「なにもかもわからない」とすると、掲示板で答えられるような分量ではありません。
サンプルです。 #include <stdio.h> #define VACANT (0) #define RESERVED (1) #define NON_SMOKING (1) #define SMOKING (2) #define SEATS (10+1) /* +1:for dummy */ typedef struct { int status; /* 0:vacant, 1:reserved */ int type; /* 1:non-smoking seat, 2:smoking seat */ } SEAT; void initialize(SEAT *seat); void reserve(SEAT *seat); void reserve_non_smoking_seat(SEAT *seat); void reserve_smoking_seat(SEAT *seat); void reserve_other_type(SEAT *seat, int type); int display_menu(void); int main(void) { SEAT seat[SEATS]; initialize(seat); reserve(seat); return 0; } void initialize(SEAT *seat) { int i; for (i = 1; i < SEATS; i++) { seat[i].status = VACANT; seat[i].type = (i <= 5) ? NON_SMOKING : SMOKING; } } void reserve(SEAT *seat) { int sel; while (1) { sel = display_menu(); switch (sel) { case 0: printf("\nProgram terminated.\n"); return; case 1: reserve_non_smoking_seat(seat); break; case 2: reserve_smoking_seat(seat); break; default: printf("\nInput correct number.\n\n"); break; } } } void reserve_non_smoking_seat(SEAT *seat) { int i; for (i = 1; i <= 5; i++) if (seat[i].status == VACANT) break; if (i <= 5) { seat[i].status = RESERVED; printf("\nYour Seat:non-smoking seat(%d)\n\n", i); } else reserve_other_type(seat, NON_SMOKING); } void reserve_smoking_seat(SEAT *seat) { int i; for (i = 6; i <= 10; i++) if (seat[i].status == VACANT) break; if (i <= 10) { seat[i].status = RESERVED; printf("\nYour Seat:smoking seat(%d)\n\n", i); } else reserve_other_type(seat, SMOKING); } void reserve_other_type(SEAT *seat, int type) { int sel, n; char s[2]; printf("\nNo vacancy in %ssmoking section.\n\n", (type == NON_SMOKING) ? "non-" : ""); while (1) { printf("%sSmoking seat OK ?\n", (type == SMOKING) ? "Non-" : ""); printf("1.OK\n"); printf("2.NG\n"); printf("Select : "); fgets(s, sizeof(s), stdin), rewind(stdin); n = sscanf(s, "%d", &sel); if (n != 1 || (sel != 1 && sel != 2)) printf("\nInput correct number.\n\n"); else break; } if (sel == 1) (type == 1)?reserve_smoking_seat(seat):reserve_non_smoking_seat(seat); else printf("\nNext Flight : 3 hours later.\n\n"); } int display_menu(void) { int sel, n; char s[2]; printf("****** Menu ******\n"); printf("------------------\n"); printf("1.Non Smoking Seat\n"); printf("2.Smoking Seat \n"); printf("------------------\n"); printf("0.End \n"); printf("------------------\n"); printf("Select : "); fgets(s, sizeof(s), stdin), rewind(stdin); n = sscanf(s, "%d", &sel); return (n == 1) ? sel : 999; }
- tenkuuryuu
- ベストアンサー率30% (26/86)
初心者なんでしょうか?生徒なんでしょうか? 問題(?)は書いてありますが何を質問されたいのかわかりません。 もし回答を書いてほしいということであったとするならばですが、回答を書いても貴方の目的は達成されないと思います。 それはこの問題を理解することが目的だと思われるからです。 もしCのプログラミングを勉強しているのであれば、 どういうアプローチをしていけばいいかの道しるべは書けるかもしれません。 もし生徒であるならば貴方がいままで受けてきた授業内容がわからなければ回答を書くことが出来ません。 このカテゴリーはC/C++です。 これが業務アプリケーションであるならば「飛行機の座席予約」を行うためにはそのDB等を使う必要がります、配列はあるいみ不要です。 窓口は当然複数あるのでしょうから1台のパソコンで行うはずはないでしょうし。
お礼
書き方が不足していて申し訳ありませんでした。 わたしはプログラミングを独学している者です。 ただ、問題で演習していたときに「配列」のところで問題につまづいたのでお聞きしたかったと思っていました。 投稿には今後気をつけます。
お礼
ありがとうございます。 もう一度文法を見て勉強したいと思います☆