Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335

Зачем нужны перечисления в С++?

19.02.2020, 17:08. Показов 6287. Ответов 56
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
int main(братья)
Снова зову коллективный разум!
Дошел в книжке до перечислений и не пойму зачем они вообще нужны, когда есть массивы и структуры (ну может еще что-то о чем я пока не подозреваю)
Вот код из книги который я немного переделал и результат получил тот же:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <windows.h>
#include <iostream>
using namespace std;
 
enum days_of_week {sun, mon, tue, wed, thu, fri, sat}; // объявление перечисляемого типа
                //  0    1    2    3    4    5    6  нумерация соответствующая расположению дней
int main()
{
system("chcp 1251>0"); // изменение кодировки консоли
 
 
//days_of_week day1, day2;  // 2 переменные - day1 и day2, типа - days_of_week
 
 
//day1 = mon;               // присваиваем значение переменной - day1
//day2 = thu;               // присваиваем значение переменной - day2
int diff = thu - mon;   // вычисляем разницу в днях (это возможно за счет того как расположены дни в перечислении!)
cout << " Разница в днях: " << diff << endl;
 
 
if(mon < thu)           // сравниваем, и если понедельник меньше четверга, то ...
cout << "day1 наступит раньше, чем day2\n";
 
 
system("pause>0");
return 0;
}
Ну то есть я убрал переменные - day1, day2
Да, я только учусь и много где могу быть не прав, это новая предметная область для меня!
В книгах все это обясняется, но до меня не доходит практическое применение
Здесь на форуме тоже читал темы, не могу понять зачем они, в чем их преимущество...
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.02.2020, 17:08
Ответы с готовыми решениями:

насчет перечисления(зачем я объявляю переменную в перечислении? Приведите примеры где удобно использовать перечисление?)
зачем я объявляю переменную в перечислении? Чтобы мог обращаться к элементам перечисления? Правильно ли мое суждение и приведите примеры...

Зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может больше 4 байт весить?
Вот еще один вопрос зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может...

Перечисления (enum): для чего они нужны? Как, когда и какими перечислениями уместнее пользоваться?
Предположим есть такой код: #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;Windows.h&gt; enum airplanes {SU6, SU29, SU34}; //...

56
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
22.02.2020, 11:49  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от IGPIGP Посмотреть сообщение
А вот Шилдт мне нравится. Его поругивают, но я думаю, -зря. Вам как новичку рекомендовал бы попробовать - Павловсккая Татьяна Александровна (у неё по плюсам одна книжка). Её тоже ругают. А я считаю, - для начала очень неплохо. Вечная ей память.
Вот эта???
0
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
22.02.2020, 11:54  [ТС]
Цитата Сообщение от elenayagubova Посмотреть сообщение
R_U_S_V, у вас видимо в примерах не акцентируется внимание на получении /откуда-нибудь/ данных, поэтому вы и не понимаете, зачем городить огород. Вот есть какое-то перечисление(хоть дни недели, хоть враги), это константы - вы их один раз задали и пользуетесь. Переменные, которые потом используются (day, vrag и т.д.) - переменные, данные, которые откуда-то получены. От пользователя, из другой функции и т.д. "Какой сейчас день? Понедельник? ок, day = mon", "Какого врага создаем? Тролля? ок, vrag = troll".
Т.е. когда вы пишете int diff = thu - mon; вы знаете, что нужно посчитать разницу между четвергом и понедельником, а в реальности вам сначала нужно получить данные откуда-то, а потом совершить над ними нужные действия.
С врагами, честно говоря, странный пример, это дословно из книжки?
Ну вот кажется после такого объяснения до меня дошло!
Ведь конечно, есть еще пользователь, который пишет данные в переменные (ну например количество выстелов) и их нужно сравнивать с константами!!!! чтобы потом , что-то с этим сделать...
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
22.02.2020, 11:57
Цитата Сообщение от _stanislav Посмотреть сообщение
Шилдт для чайника самое то
У него есть сборники (в соавторстве) с примерами реализаций. КЧ дерево (с балансировкой), например - страниц на пяток (не помню точно). То есть, можно и не только новичкам полюбопытствовать. Я люблю общую логику и доброжелательность. Это всегда подразумевает, также, и чувство юмора. С таким автором легче учиться. Ему легче простить косяк, например. А когда человек объясняет удобство самодокументированности для программиста и показывает, что юзеру программы можно энрет выкатить, а потом ноль посчитать как результат, это не доброе отношение.

Добавлено через 2 минуты
Цитата Сообщение от R_U_S_V Посмотреть сообщение
Вот эта???
Да)
Попробуйте взять её за основу, а остальное - в качестве поддержки. Если пойдёт, - продолжайте до конца книги)
2
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
22.02.2020, 11:58  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
Да)
Попробуйте взять её за основу, а остальное - в качестве поддержки. Если пойдёт, - продолжайте до конца книги
Спасибо, буду пробовать!
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
22.02.2020, 12:04
R_U_S_V, у меня C/C++ Программирование на языке высокого уровня. Для C# есть такая же - не перепутать. Хотя Шарп тоже хорошая штука. У меня и такая есть.
Так что выходит у неё не одна книжка по плюсам. Как бы там ни было, я не верю, что такая женщина могла сделать плохо. Читайте. И отпишитесь, как оно. А я если найду - куплю обязательно)
1
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
22.02.2020, 12:07  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
Читайте. И отпишитесь, как оно. А я если найду - куплю обязательно)
Договорились!
0
337 / 237 / 103
Регистрация: 26.03.2019
Сообщений: 407
22.02.2020, 12:09
R_U_S_V, переделала ваш пример с врагами, все еще далеко от идеала, но думаю, идея может нарисоваться:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
 
enum vragi
{
    trolly,
    orki,
    boss,
    vragiEnd
};
 
int getLives(vragi vrag) //возвращает количество жизней врага
{
    switch (vrag)
    {
        case trolly: return 5;
        case orki: return 10;
        case boss: return 50;
        default: return 1;
    }
}
 
string getName(vragi vrag) //возвращает строку-имя врага
{
    switch (vrag)
    {
        case trolly: return "Troll";
        case orki: return "Ork";
        case boss: return "Boss";
        default: return "Undefinded vrag";
    }
}
 
vragi getRandomVrag() //получение случайного врага
{
    //static_cast преобразует int к типу vragi
    //получаем случайное число от 0 до vragiEnd-1. В будущем можем добавлять еще врагов,
    //и эта функция будет корректно работать
    vragi vrag = static_cast<vragi>(rand()%vragiEnd);
    return vrag;
}
 
int main()
{
    srand(time(NULL));
    vragi vrag = getRandomVrag(); //создаем случайного врага
    int lives = getLives(vrag); //получаем его количество жизней
    cout << "Vrag: " << getName(vrag) << ", Lives: " << lives << endl; //выводим инфомацию
    int shot;
    int shot_count = 0;
    while(lives > 0) //пока враг жив
    {
        shot=rand()%2; //0 или 1 (промах или попадание)
        cout << "Shot: " << shot << endl;
        lives-=shot;
        cout << "Vrag: " << getName(vrag) << ", Lives after shot: " << lives << endl;
        shot_count++;
    }
    cout << "Vrag is killed after " << shot_count << " shots, game over" << endl;
    return 0;
}
2
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
22.02.2020, 12:16  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
Читайте. И отпишитесь, как оно. А я если найду - куплю обязательно)
Договорились!
Вот пока такая "коллекция" + много чего в PDF

Щас начал смотреть С++ на играх, хочется уже некий отклик получить для дальнейшей мотивации)))
0
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
22.02.2020, 12:22  [ТС]
Цитата Сообщение от elenayagubova Посмотреть сообщение
переделала ваш пример с врагами, все еще далеко от идеала, но думаю, идея может нарисоваться:
Благодарю! Скопировал, буду изучать.
Сейчас снова хочу вернуться к функциям, если без аргумента более менее все ясно то с аргументами нужно потренироваться. Шикарная вещь - функции!
0
199 / 155 / 45
Регистрация: 11.11.2019
Сообщений: 348
22.02.2020, 13:38
Цитата Сообщение от R_U_S_V Посмотреть сообщение
я уже не молодой - 42,5. и на работу меня возьмут врядли.
В 42 все только начинается. Не шутка. Удачи).
2
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
22.02.2020, 13:48
1
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
22.02.2020, 15:33  [ТС]
Цитата Сообщение от fao Посмотреть сообщение
В 42 все только начинается. Не шутка. Удачи).
Благодарен, за поодержку!
Программирование полюбил, хоть и не сталкивался еще с серьезными сложностями, нравится мне, как я раньше за это не взялся вообще очень жаль...
0
Just Do It!
 Аватар для XLAT
4217 / 2677 / 656
Регистрация: 23.09.2014
Сообщений: 9,200
Записей в блоге: 3
22.02.2020, 16:21
Цитата Сообщение от R_U_S_V Посмотреть сообщение
еще с серьезными сложностями
это можете смело заменить на:
... еще с большим количеством кода ...

самая главная сложность в программировании это
не потерять контроль над тем кодом, который вы пишите.

а чем его больше, тем шансы большого краша резко могут возрастать
резко могут - здесь потому, что всё зависит от того, как вы организованы в своих технологиях.

а возрастают(шансы краша) они в любом случае.

Но по факту того что мы можем наблюдать,
всё же можно писать код так, чтобы всё время держаться на плаву.
Свидетельств туча.

Разумеется что те люди, которые так умеют, на самом деле всё же смогли угробить какой-нить свой проектик.
1
 Аватар для Kostya_unix
1 / 1 / 0
Регистрация: 25.03.2020
Сообщений: 15
15.04.2024, 10:47
Цитата Сообщение от R_U_S_V Посмотреть сообщение
Скорее всего царь и бог, поскольку дядька я уже не молодой - 42,5. и на работу меня возьмут врядли.
Здравствуй добрый человек.
Мне 54 года. И точно так же обучение только по книжкам и сайтам. Благо есть этот форум...
Но ни боги горшки обжигают...
Так что не бросайте это гиблое дело, грызите гранит науки.
И я не сдамся, освоим этот enum и всякие там инкапсуляции %-)
Еще раз спасибо всем неравнодушным форумчанам !!!
1
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
15.04.2024, 16:47
Цитата Сообщение от Kostya_unix Посмотреть сообщение
освоим этот enum
Рефлексия и прочие ништячки для enum.
magic_enum
в нагрузку )
0
 Аватар для Kostya_unix
1 / 1 / 0
Регистрация: 25.03.2020
Сообщений: 15
16.04.2024, 00:25
Цитата Сообщение от SmallEvil Посмотреть сообщение
Рефлексия и прочие ништячки для enum.
Спасибо большое.
0
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
16.04.2024, 15:57
Цитата Сообщение от Kostya_unix Посмотреть сообщение
Скорее всего царь и бог, поскольку дядька я уже не молодой - 42,5. и на работу меня возьмут врядли.
ха, таки у нас пенсионный возраст продлили, наш боголикий, милостивец, хвала ему ,
У нас куркуль сидит на работе ему 70 - все не уходит, а вы говорите 42 не берут
еще 30 лет пахать и пахать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.04.2024, 15:57
Помогаю со студенческими работами здесь

Зачем нужны классы?
Изучаю СИ++ после изучения СИ. Не пойму какой смысл в классах. То что они делают можно реализовать с помощью функций, структур и обычных...

Зачем нужны исключения?
Добрый вечер, прочитал статью об исключениях, не очень понимаю, почему бы не заменить их просто оператором if? Вот код с исключением: ...

Зачем нужны классы?
После Си решил попробовать Си++, после нескольких глав Дейтла понял что весь смысл плюсов в классах. Но мне совершенно не понятно зачем они...

Зачем нужны итераторы?
Практическое использование мне понятно - с их помощью обходят контейнеры и т.д и т.п.Но почему не реализовать нужные методы,перегрузить...

Зачем нужны указатели
Не могу понять синтаксис указателей. Понял, что это работа с адресами, что оператор &amp; это адрес. А вот * как я понял, это объявление...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
57
Ответ Создать тему
Новые блоги и статьи
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
Модель здравосохранения 16. Слишком хорошие и здоровые сотрудники уходят, недовольные зарплатой
anaschu 23.05.2026
Отладка увольнений и настройка производительности Сегодня во второй половине дня разобрались с механикой увольнений и настроили коэффициент сложности заданий. Вот что было сделано. . . .
Как я стал коммунистом))) Модель сохранения здоровья сотрудников, запись блога номер 15
anaschu 23.05.2026
Внезапно хорошее здоровье сотрудников не нужно капиталистам?))
Модель здравоСохранения 15. Как мы чинили AnyLogic модель рабочего коллектива: сочленение диаграммы состояний болезней и поломок в ресурспул
anaschu 23.05.2026
Как мы чинили AnyLogic модель рабочего коллектива Сегодня разобрались с пятью багами, из-за которых модель либо падала с ошибкой, либо давала совершенно бессмысленные результаты. Каждый баг был. . .
Диалоги с ИИ
zorxor 23.05.2026
Насколько я понимаю - Вы - Искусственный Интеллект. Это так? Да, всё верно. Я — искусственный интеллект. Я представляю собой большую языковую модель, созданную для помощи в самых разных задачах. . . .
Модель здравосохранения 14. Собираем всю модель вместе.
anaschu 22.05.2026
Модель собрана. В будущих постах на видео я покажу, как она работает. В этом посте запускаем её, проверяем результаты и разбираем что можно с ней делать дальше. Перед запуском проверяем. . .
Модель здравоохранения 13. Добавление самой системы здравоохранения.
anaschu 22.05.2026
В предыдущем посте мы настроили болезни. Теперь добавим события, которые управляют здоровьем всего коллектива, а также настроим рабочий график и расчёт финансов. В Main создаём четыре события. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru