Показать сообщение отдельно

  #2113  
Старый 27.12.2009, 11:35
ss88
Участник форума
Регистрация: 27.11.2008
Сообщений: 161
Провел на форуме:
298300

Репутация: 128
Отправить сообщение для ss88 с помощью ICQ
По умолчанию

Цитата:
Сообщение от 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..
 
Ответить с цитированием