
27.12.2009, 11:35
|
|
Участник форума
Регистрация: 27.11.2008
Сообщений: 161
Провел на форуме: 298300
Репутация:
128
|
|
Сообщение от elusive.light
PLS помогите решить задачу реально сам не могу справиться. Мне её в понедельник надо сдать(28.12.09). Заранее очень благодарен
В киоске продается растворимый кофе, предлагается ассортимент из трех известных кофейных торговых марок (названия на ваш выбор), а также варианты приготовления – полный стакан / половина стакана, от 0 до 2 ложек сахара. Сделайте объявление структуры данных, моделирующей заказ кофе. При этом для кода торговой марки обязательно применить конструкцию enum, а информацию о количестве воды и ложек сахара следует запаковать при помощи битовых полей в один байт. Нужно составить тестовую программу, использующую такую структуру.
Какой язык?
Вот тебе на Сях
Код:
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
typedef enum {JACOBS, NESCAFE, TCHIBO} trade_mark_t;
const char* sugar_msgs[] = {"без","с одной ложечкой","с двумя ложечками"};
const char* water_msgs[] = {"стаканчик","половина стаканчика"};
const char* trademark_msgs[] = {"JACOBS", "NESCAFE", "TCHIBO"};
/* Структура заказа стаканчика кофе */
typedef struct {
/* Торговая марка */
trade_mark_t tm;
/* битовое поле сахара и воды
* 0x00 - полный стакан без сахара
* 0x01 - полстакана без сахара
* 0x11 - полстакана с одной ложкой сахара
* 0x21 - полстакана с двумя ложками сахара*/
uint8_t sugar_water;
} request_for_coffee_t;
void check_correct(int have, int max);
int main(int argc, char** argv)
{
request_for_coffee_t request;
int sugar, water, tm;
(void) printf("Какой марки кофе вы жаждете?\n");
(void) printf("[0] JACOBS\n[1] NESCAFE\n[2] TCHIBO\n");
(void) scanf("%d",&tm);
check_correct(tm,2);
(void) printf("Сколько сахара?\n");
(void) printf("[0] без сахара\n[1] одна ложечка\n[2] две ложечки\n");
(void) scanf("%d",&sugar);
check_correct(sugar,2);
(void) printf("Дозировка\n");
(void) printf("[0] стаканчик\n[1] половина стаканчика\n");
(void) scanf("%d", &water);
check_correct(water,1);
request.tm = tm;
request.sugar_water = sugar;
request.sugar_water <<= 4;
request.sugar_water |= water;
(void) printf("Вы заказали:\n");
(void) printf("%s ",water_msgs[request.sugar_water & 0x0F]);
(void) printf("%s\n",trademark_msgs[request.tm]);
(void) printf("%s сахара\n",sugar_msgs[request.sugar_water>>4]);
(void) printf("Спасибо, до свиданья!\n");
return 0;
}
void check_correct(int have, int max) {
if(have >= 0 && have <=max)
return;
else {
fprintf(stderr, "Нет таких кнопок на кофейном автомате :)\n");
exit(1);
}
}
Последний раз редактировалось ss88; 27.12.2009 в 12:34..
|
|
|