Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика. Базовый курс. Ч.3. Основы алгоритмизации и про- граммирования в среде Visual C++ 2005.pdf
Скачиваний:
51
Добавлен:
05.02.2023
Размер:
3.81 Mб
Скачать

78

Рис. 8.25. Результат работы программы примера

11.ПЕРЕЧИСЛИМЫЙ ТИП

11.1.Понятие о перечислимом типе

ВС++ имеется перечислимый тип. Его называют enum. При описании такого типа задаются наборы констант(в фигурных скобках). При этом идентификаторам-константам присваиваются значения натурального ряда от нуля. Если значение одного из идентификаторов задается явно, то последующим присваиваются номера по возрастанию через 1. Рассмотрим на примере.

Пример 11.1. Подсчитать число часов рабочей недели, если известно, что суббота и воскресенье – выходные, а в пятницу рабочий день длится 8 часов (в остальные дни 8.25 часа).

#include <iostream> #include <windows.h> using namespace std; float t; enum dni

{Monday=1, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday} ;

int main()

{dni d; t=0; char str[256];

AnsiToOem(" сумма часов раб.недели=", str); for (d=Monday; d<=Friday; d=dni(d+1))

{ if (d == Friday) t=t+8; else t=t+8.25; } ; cout << str <<t<<"\n";

return(0); }

Обратите внимание на необычную форму записи приращения параметра цикла: d=dni(d+1). К сожалению, операция инкремента d++ для перечислимого типа не работает. Как обойти эту проблему, рассмотрим в следующем разделе («12. Указатели»).

79

11.2.Множественный выбор

ВС++ имеется структура множественного выбора switch (пе-

реключатель). Переключатель начинается с заголовка, определяющего имя метки. Тело переключателя заключено в фигурные скобки. Текст тела переключателя разделен меткамиcase. Двоеточие – признак метки. Рассмотрим использование структуры множественного выбора на следующем примере.

Пример 11.2. Дан перечислимый типmuns (названия месяцев года), описаны переменные int d1, d2; muns m1, m2. Извне вводится дата в виде двух чисел:номер дня и номер месяца. Проверить, предшествует ли (в рамках года) дате d2, m2 дата d1, m1. Вывести соответствующее сообщение.

#include <iostream> #include <windows.h> using namespace std;

int s; float t; int nm1,nm2; int main()

{ enum muns {jan=1,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec}; int d1,d2;

muns m1,m2;

char str[256], str1[256];

AnsiToOem("введи день и номер месяца первой даты ", str); cout<<str; cin>>d1>>nm1;

AnsiToOem(" введи день и номер месяца второй даты ", str); cout<<str; cin>>d2>>nm2;

switch (nm1)

{case 1 : m1=jan; break; case 2 : m1=feb; break; case 3 : m1=mar; break; case 4 : m1=apr; break; case 5 : m1=may; break; case 6 : m1=jun; break; case 7 : m1=jul; break; case 8 : m1=aug; break; case 9 : m1=sep; break; case 10 : m1=oct; break; case 11 : m1=nov; break;

case 12 : m1=dec; break; } switch (nm2)

{ case 1 : m2=jan; break;