Int main()
{
card temp, chosen, prize; // определение карт
int position;
card card1 = { 7, clubs }; // инициализация card1
cout << "Карта 1: 7 треф\n";
card card2 = { jack, hearts }; // инициализация card2
cout << "Карта 2: валет червей\n";
card card3 = { ace, spades }; // инициализация card3
cout << "Карта 3: туз пик\n";
prize = card3; // запоминаем карту 3
cout << "Меняем местами карту 1 и карту 3\n";
temp = card3; card3 = card1; card1 = temp;
cout << "Меняем местами карту 2 и карту 3\n";
temp = card3; card3 = card2; card2 = temp;
cout << "Меняем местами карту 1 и карту 2\n";
temp = card2; card2 = card1; card1 = temp;
cout << "На какой позиции (1,2 или 3) теперь туз пик?";
cin >> position;
switch (position)
{
case 1: chosen = card1; break;
case 2: chosen = card2; break;
case 3: chosen = card3; break;
}
if( chosen.number == prize.number && // сравнение карт
chosen.suit == prize.suit)
cout << "Правильно! Вы выиграли!\n";
else
cout << "Неверно. Вы проиграли.\n ";
return 0;
}
Стандартные средства ввода/вывода C++ вместо значений перечисляемых типов данных выводят их внутреннее представление в виде целых чисел. Для того чтобы преодолеть это ограничение, вы можете использовать конструкцию switch, с помощью которой устанавливается соответствие между значением переменной перечисляемого типа и ее внутренним представлением.
Приклад.
Нехай визначено перераховуваний тип даних etype, що відображає посаду співробітника:
enum etype{laborer, secretary, manager, accountant,executive, researcher};
Напишіть npoipaммy, яка спочатку по першій букві посади, введеної користувачем, визначає відповідне значення змінної, поміщає це значення в змінну типу etype, а потім виводить повністю назву посади, першу букву якої ввів користувач.
Взаємодія програми з користувачем може виглядати таким чином:
Введіть першу букву посади (laborer, secretary, manager, accountant, executive, researcher): а
Повна назва посади: accountant
#include <iostream.h>
enum etype { laborer, secretary, manager, accountant, executive, researcher };
Int main()
{
etype e;
char ch;
cout << "Vvedite 1 bukvu:" ;
cin >> ch;
switch (ch)
{
case 'l': e=laborer; break;
case 's': e=secretary; break;
case 'm': e=manager; break;
case 'a': e=accountant; break;
case 'e': e=executive; break;
case 'r': e=researcher; break;
//default: cout << "Takoy bukvu net!"<< endl;
}
switch (e)
{
case laborer: cout << "laborer!"<< endl; break;
case secretary: cout << "secretary!"<< endl; break;
case manager: cout << "manager!"<< endl; break;
case accountant: cout << "accountant!"<< endl; break;
case executive: cout << "executive!"<< endl; break;
case researcher: cout << "researcher!"<< endl; break;
default: cout << "Takoy bukvu net!"<< endl;
}
return 0;
}
Бітові поля.
У структурі можна визначити розміри поля з точністю до біта. Традиційно структури використовуються в системному програмуванні для опису регістрів апаратури. У них кожен біт має своє значення. Не менш важливою є можливість економії пам'яті – адже мінімальний тип поля структури це байт (char), який займає 8 бітів. До цих пір, не дивлячись на мегабайти і навіть гігабайти оперативної пам'яті, використовувані в сучасних комп'ютерах, існує немало завдань, де кожен біт на рахунку.
Якщо після опису поля структури поставити двокрапку і потім ціле число, то це число задає кількість бітів, виділених під дане поле структури. Такі поля називають бітовими полями. Наступна структура зберігає в компактній формі дату і час дня з точністю до секунди.
struct TimeAndDate
{
unsigned hours :5; // години від 0 до 24
unsigned mins :6; // хвилини
unsigned secs :6; // секунди від 0 до 60
unsigned weekDay :3; // день тижня
unsigned monthDay :5; // день місяця від 1 до 31
unsigned month :4; // місяць від 1 до 12
unsigned year :7; // рік від 0 до 100
};
Одна структура TimeAndDate вимагає всього 36 бітів, тобто 5 байтів (один байт — 8 бітів). Якби ми використовували для кожного поля цієї структури тип char, нам би було потрібно 7 байтів.
