# data[].attributes.attachment_link.title
Урок33-34_Условия_простые и составные

# data[].attributes.attachment_link.title
Урок 35-3_Вложенные условия

# data[].attributes.attachment_link.title
Программирование условий -3-4 урок

# data[].attributes.headline
Задачи на уроке

# data[].attributes.subject
Задачи на уроке

# data[].attributes.attachment_link.title
Матрица выбора_Сложные и простые условия

# data[].attributes.attachment_link.title
GoConqr - Формативный диктант Знакомство с С++

# data[].attributes.attachment_link.description
Take a look at our interactive learning Flashcards about Формативный диктант Знакомство с С++, or create your own Flashcards using our free cloud based Flashcard maker and mobile apps.

# data[].attributes.headline
Презентация к уроку

# data[].attributes.subject
Презентация к уроку

# data[].attributes.attachment_link.title
Оператор выбора_презентация

# data[].attributes.attachment_link.title
Конспект Оператор выбора

# data[].attributes.body
Изучите материал из этого сайта и решите сколько сможете задач

# data[].attributes.attachment_link.title
Условный оператор

# data[].attributes.attachment_link.description
Условный оператор

# data[].attributes.attachment_link.title
Первая часть_презентация

# data[].attributes.headline
ДОМАШНЯЯ РАБОТА * 

# data[].attributes.subject
ДОМАШНЯЯ РАБОТА * 

# data[].attributes.body
21-26.01.2019

# data[].attributes.attachment_link.title
Домашнее задание_матрица_задач_на 4-10 декабря

# data[].attributes.attachment_link.title
Презентация_8класс_Сложные условия

# data[].attributes.headline
Оператор выбора SWEATH 

# data[].attributes.subject
Оператор выбора SWEATH 

# data[].attributes.body
Найдите в чем отличие условного оператора и оператора выбора Sweath

# data[].attributes.attachment_link.readable_text
Сегодня мы научимся пользоваться этой полезной конструкцией языка c++.

Очень часто в процессе написания программы требуется писать длинные if-else конструкции, например, когда мы получаем какой-либо ключ от пользователя; если вы пишете игру, то придется проверять на какую кнопку нажал игрок (вправо, влево, пробел и т.д.).

В этой статье мы узнаем как удобно оформлять подобные конструкции с помощью switch case, а так же узнаем немного о enum типах, которые хорошо подходят для работы со switch case.

Конструкция switch-case - это удобная замена длинной if-else конструкции, которая сравнивает переменную с несколькими константными значениями, например int или char.

Синтаксис

switch ( <переменная> ) {
case значение1:
  Выполнить если <переменная> == значение1
  break;
case значение2:
  Выполнить если <переменная> == значение2
  break;
...
default:
  выполнить, если ни один вариант не подошел
  break;
}

Переменная в скобках сравнивается со значениями, описанными после ключевого слова case. После двоеточия находится код, который будет выполнен в случае если переменная оказалась равной текущему значению. break необходим для того, чтобы прервать выполнение switch. Рассмотрим пример, где нет break:

int a=1;
switch(a)
{
    case 1:
        a++;
    case 2:
        a++;
    case 3:
        a++;
}
cout<<"a= "<<a;

Данная программа выведет a = 4.

Значения для сравнения, описанные после case могут быть только константами, поэтому следующий вариант использования switch-case - неверен:

int a = 10;
int b = 10;
int c = 20;

switch ( a ) {
case b:
  // Code
  break;
case c:
  // Code
  break;
default:
  // Code
  break;
}

При попытке скомпилировать данную программу, вы получите подобное сообщение:

test.cpp:9: error: 'b' cannot appear in a constant-expression

Блок default - необязателен, но он полезен для обработки исключительных ситуации.

Следующая программа демонстрирует один из возможных вариантов использования switch-case:

#include <iostream>

using namespace std;

void playgame()
{
    cout << "Play game called";
}
void loadgame()
{
    cout << "Load game called";
}
void playmultiplayer()
{
    cout << "Play multiplayer game called";
}

int main()
{
  int input;

  cout<<"1. Play game\n";
  cout<<"2. Load game\n";
  cout<<"3. Play multiplayer\n";
  cout<<"4. Exit\n";
  cout<<"Selection: ";
  cin>> input;
  switch ( input ) {
  case 1:
    playgame();
    break;
  case 2:
    loadgame();
    break;
  case 3:
    playmultiplayer();
    break;
  case 4:
    cout<<"Thank you for playing!\n";
    break;
  default:
    cout<<"Error, bad input, quitting\n";
    break;
  }
  cin.get();
}

Эта программа показывает простой способ обработки вводимых пользователем данных.

Минус данной программы в том, что она дает только одну попытку, без права на ошибку 🙂 . Это легко исправить, заключив весь блок switch-case в цикл. Но может возникнуть вопрос: внутри switch-case есть break, не прервет ли он выполнение цикла? Нет, break прервет только выполнение блока switch.

Сравнение switch-case с if-else

Если у вас возникают проблемы с пониманием того, как работает switch-case, посмотрите на следующую if-else конструкцию, она работает точно так же, как и switch

if ( 1 == input )
{
    playgame();
}
else if ( 2 == input )
{
    loadgame();
}
else if ( 3 == input )
{
    playmultiplayer();
}
else if ( 4 == input )
{
    cout << "Thank you for playing!\n";
}
else
{
    cout << "Error, bad input, quitting\n";
}

Если мы можем сделать то же самое с помощью if-else, зачем вообще нужен switch? Главное преимущество этой конструкции в том, что нам понятно, как работает программа: единственная переменная контролирует поведение программы. В случае с if-else, придется внимательно читать каждое условие.

Создаем собственные типы с помощью enumeration

Иногда при написании программ могут понадобится переменные, которые могут принимать только строго определенные значения, которые известны вам заранее. Например, вы можете задать ограниченный набор цветов, которые пользователь может выбрать. Очень удобно иметь сразу и набор доступных констант и тип переменной, который связан с этим набором. Более того, подобные переменные хорошо подходят для использования в switch-case, так как вы знаете все возможные значения заранее.

Тип enum (сокращение от " enumerated type", перечисляемые типы) содержит перечисление различных значений, например цветов радуги:

enum RainbowColor {
    RC_RED, RC_ORANGE, RC_YELLOW, RC_GREEN, RC_BLUE, RC_INDIGO, RC_VIOLET
};

Несколько важных моментов:

Для объявление перечисляемого типа используйте ключевое слово enum.

Имя нового типа вы задаете сами, например RainbowColor.

Все возможные значения для данного типа перечислены в фигурных скобках.

После объявления перечисления необходима точка с запятой.

Теперь вы можете объявлять переменные с типом RainbowColor:

RainbowColor chosen_color = RC_RED;

И, как уже говорилось, эти переменные хорошо подходят для использования в switch:

switch (chosen_color)
{
    case RC_RED: /* paint screen red */
    case RC_ORANGE: /* paint screen orange */
    case RC_YELLOW: /* paint screen yellow */
    case RC_GREEN: /* paint screen green */
    case RC_BLUE: /* paint screen blue */
    case RC_INDIGO: /* paint screen indigo */
    case RC_VIOLET: /* paint screen violet */
    default: /* обработка исключений */
}

Так как мы используем перечисления, мы можем быть уверенными, что рассмотрели все возможные значения переменной. Значения констант в перечислении - это простой int, по умолчанию каждое следующее значение больше предыдущего на 1. Для первого - 0, для второго - 1 и т.д. В нашем случае: RC_RED = 0 и RC_ORANGE = 1.

Вы также можете задать собственные значения:

enum RainbowColor {
    RC_RED = 1, RC_ORANGE = 3, RC_YELLOW = 5, RC_GREEN = 7, RC_BLUE = 9,
    RC_INDIGO = 11, RC_VIOLET = 13
};

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

if ( board_position == 1 )
{
    /* do something */
}

Данный код очень сложен для понимания и обслуживания, потому что совсем не понятно, что означает цифра 1. Enum типы позволяют избегать таких ситуаций:

enum TicTacToeSquare { TTTS_BLANK, TTTS_O, TTTS_X };

if ( board_position == TTTS_O )
{
    /* some code */
}

Теперь все гораздо понятнее 🙂 .

На этом всё! Подписывайтесь и не пропустите новые уроки! 🙂

# data[].attributes.attachment_link.keywords[]
перечисление

# data[].attributes.attachment_link.keywords[]
перечисляемые

# data[].attributes.attachment_link.description
Сегодня мы научимся пользоваться этой полезной конструкцией языка c++. Очень часто в процессе написания программы требуется писать длинные if-else конструкции, например, когда мы получаем какой-либо ключ от пользователя; если вы пишете игру, то придется проверять на какую кнопку нажал игрок (вправо, влево, пробел и т.д.).

# data[].attributes.headline
Учебник по С++

# data[].attributes.subject
Учебник по С++

# data[].attributes.attachment_link.title
Сборник задач по программированию. 3-е издание

# data[].attributes.attachment_link.description
В пособии приведены более 1700 задач по программированию, которые могут использоваться при изучении курса информатики и информационно-коммуникационных технологий в школах, гимназиях и лицеях. Задачи имеют разный уровень сложности и охватывают все темы курса программирования. В начале каждого раздела приведены вопросы, ответы на которые необходимо знать для решения задач данного раздела.

# data[].attributes.attachment_link.title
Викторина_Условия

# data[].attributes.headline
Сборник задач

# data[].attributes.subject
Сборник задач

# data[].attributes.attachment_link.title
Сборник_задач_Условия