Эстетическая красота: switch vs if
Содержание:
Оператор выбора языка Си switch
Если в программе необходимо учесть больше трех возможных вариантов, конструкция может оказаться очень запутанной, даже если использовать вложенные операторы.
В таких случаях используется оператор выбора (или переключатель) языка Си switch. Переключатель switch работает по принципу меню и содержит все возможные варианты условий и инструкции, которые следует выполнить в каждом конкретном случае.
В круглых скобках после оператора выбора языка Си switch находится переменная типа int или char (не строковая), следом расположен блок, заключенный в фигурные скобки; в блоке содержатся ветви условий case. Каждая ветвь case выполняет конкретные инструкции, если значение переменной совпадает с указанным. Если это значение является символом, то символ заключается в одинарные кавычки.
Пример: Программа, спрашивающая у ученика его отметку по информатике и реагирующая на нее подходящим текстом
Показать решение:
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 |
#include<stdio.h>
main()
{
int otmetka;
puts("what otmetka?");
scanf("%d",&otmetka);
switch (otmetka)
{
case 1,2
puts("koshmar!");
break;
case 3
puts("ploho");
break;
case 4
puts("neploho");
break;
case 5
puts("otlichno!");
break;
default
puts("takih otmetok ne bivaet");
}
}
|
Показать аналог в Паскаль:
1 2 3 4 5 6 7 8 9 10 11 12 |
var otmetkainteger;
begin
writeln('otmetka?');
readln(otmetka);
case otmetka of
1,2 writeln ('koshmar!');
3 writeln('ploho');
4 writeln('neploho');
5 writeln('otlichno!');
else writeln('takih otmetok ne bivaet');
end
end.
|
Задача c 2_2. Ученик вводит с клавиатуры число, символ арифметического действия (+, -, *, /) и еще одно число. Компьютер должен напечатать результат. Указание: Для чисел и арифметического действия используйте оператор ввода Си
Вопросы для самоконтроля:
Какая разница существует между символами и ?
Как правильно выполнить несколько операторов при соблюдении одного определенного условия?
Каково назначение служебного слова в конструкции Си if?
Как правильно записать в условии , находится ли число в границах допустимых значений?
Чем отличается оператор выбора от оператора Си ?
Блок-схема
В следующей блок-схеме объясняется работа оператора .
Синтаксис
Задача оператора состоит в том, чтобы дать выражение для оценки и выполнить несколько разных операторов на основе значения выражения. Интерпретатор проверяет каждый случай на значение выражения до тех пор, пока не будет найдено совпадение. Если ничего не найдено, будет использоваться условие по умолчанию.
switch (expression)
{
case condition 1: statement(s)
break;
case condition 2: statement(s)
break;
...
case condition n: statement(s)
break;
default: statement(s)
}
Операторы указывают конец конкретного случая. Если они были опущены, интерпретатор будет продолжать выполнять каждое утверждение в каждом из следующих случаев.
пример
Попробуйте следующий пример, чтобы реализовать оператор switch-case.
<html>
<body>
<script type="text/javascript">
<!--
var grade='A';
document.write("Entering switch block
");
switch (grade)
{
case 'A': document.write("Good job
");
break;
case 'B': document.write("Pretty good
");
break;
case 'C': document.write("Passed
");
break;
case 'D': document.write("Not so good
");
break;
case 'F': document.write("Failed
");
break;
default: document.write("Unknown grade
")
}
document.write("Exiting switch block");
//-->
</script>
</body>
</html>
Результат
Операторы break играют важную роль в операторах . Попробуйте использовать следующий код, который использует оператор без инструкции break.
<html>
<body>
<script type="text/javascript">
<!--
var grade='A';
document.write("Entering switch block
");
switch (grade)
{
case 'A': document.write("Good job
");
case 'B': document.write("Pretty good
");
case 'C': document.write("Passed
");
case 'D': document.write("Not so good
");
case 'F': document.write("Failed
");
default: document.write("Unknown grade
")
}
document.write("Exiting switch block");
//-->
</script>
</body>
</html>
Результат
Новые статьи
- JavaScript — Объектная модель документа или DOM — 08/09/2018 15:49
- JavaScript — Регулярные выражения и объект RegExp — 08/09/2018 15:48
- JavaScript — объект Math — 08/09/2018 15:48
- JavaScript — объект Date — 08/09/2018 15:48
- JavaScript — объект Array — 08/09/2018 15:47
- JavaScript — объект Strings — 08/09/2018 15:47
- JavaScript — логические объекты — 08/09/2018 15:46
- JavaScript — Числовые объекты — 08/09/2018 15:46
- JavaScript — Обзор объектов — 08/09/2018 15:45
- JavaScript — Печать страницы — 08/09/2018 15:45
- JavaScript — Void — 08/09/2018 15:45
- JavaScript — диалоговые окна — 08/09/2018 15:44
- JavaScript — Redirect — 08/09/2018 15:44
- JavaScript и Cookies — 08/09/2018 15:43
- JavaScript — События — 08/09/2018 15:43
- JavaScript — функции — 08/09/2018 15:42
- JavaScript — управление циклом — 08/09/2018 15:41
- JavaScript — цикл for … in — 08/09/2018 15:41
- JavaScript — For цикл — 08/09/2018 15:40
- JavaScript — циклы — 08/09/2018 15:40
Предыдущие статьи
- JavaScript — if … else — 08/09/2018 15:39
- JavaScript — Операторы — 08/09/2018 15:38
- JavaScript — переменные — 08/09/2018 15:38
- JavaScript — размещение в файле HTML — 08/09/2018 15:37
- Включение JavaScript в браузерах — 08/09/2018 15:36
- JavaScript — Синтаксис — 08/09/2018 15:34
- JavaScript — Обзор — 08/09/2018 15:31
- Учебник Javascript — 08/09/2018 15:29
Элементы блок-схем алгоритмов
Блок-схема представляет собой совокупность символов, соответствующих этапам работы алгоритма и соединяющих их линий. Пунктирная линия используется для соединения символа с комментарием. Сплошная линия отражает зависимости по управлению между символами и может снабжаться стрелкой. Стрелку можно не указывать при направлении дуги слева направо и сверху вниз. Согласно п. 4.2.4, линии должны подходить к символу слева, либо сверху, а исходить снизу, либо справа.
Есть и другие типы линий, используемые, например, для изображения блок-схем параллельных алгоритмов, но в текущей статье они, как и ряд специфических символов, не рассматриваются. Рассмотрены лишь основные символы, которых всегда достаточно студентам.
|
Терминатор начала и конца работы функции |
Терминатором начинается и заканчивается любая функция. Тип возвращаемого значения и аргументов функции обычно указывается в комментариях к блоку терминатора. |
|
Операции ввода и вывода данных |
В ГОСТ определено множество символов ввода/вывода, например вывод на магнитные ленты, дисплеи и т.п. Если источник данных не принципиален, обычно используется символ параллелограмма. Подробности ввода/вывода могут быть указаны в комментариях. |
|
Выполнение операций над данными |
В блоке операций обычно размещают одно или несколько (ГОСТ не запрещает) операций присваивания, не требующих вызова внешних функций. |
|
Блок, иллюстрирующий ветвление алгоритма |
Блок в виде ромба имеет один вход и несколько подписанных выходов. В случае, если блок имеет 2 выхода (соответствует оператору ветвления), на них подписывается результат сравнения — «да/нет». Если из блока выходит большее число линий (оператор выбора), внутри него записывается имя переменной, а на выходящих дугах — значения этой переменной. |
|
Вызов внешней процедуры |
Вызов внешних процедур и функций помещается в прямоугольник с дополнительными вертикальными линиями. |
|
Начало и конец цикла |
Символы начала и конца цикла содержат имя и условие. Условие может отсутствовать в одном из символов пары. Расположение условия, определяет тип оператора, соответствующего символам на языке высокого уровня — оператор с предусловием (while) или постусловием (do … while). |
|
Подготовка данных |
Символ «подготовка данных» в произвольной форме (в ГОСТ нет ни пояснений, ни примеров), задает входные значения. Используется обычно для задания циклов со счетчиком. |
|
Соединитель |
В случае, если блок-схема не умещается на лист, используется символ соединителя, отражающий переход потока управления между листами. Символ может использоваться и на одном листе, если по каким-либо причинам тянуть линию не удобно. |
|
Комментарий |
Комментарий может быть соединен как с одним блоком, так и группой. Группа блоков выделяется на схеме пунктирной линией. |
Построение блок-схем по коду Паскаль
Теперь настало время вспомнить о том, что такое блок-схемы.Блок схема — ориентированный граф, указывающий на последовательность операций, приводящую к решению поставленной задачи.Существуют управляющие структуры трех типов:
| следование |
ветвление |
повторение или цикл |
Две из трех представленных структур блок-схемы мы уже можем перевести в код Pascal.
Пример: Составить блок-схему вычисления значения величины , определяемое по формулам: , если
Результат:
Задача 5. Составить блок-схему решения задачи 3
Пример: автобусный билет считают счастливым, если сумма трех первых цифр билета равна сумме трех последних цифр. Требуется составить блок-схему алгоритма определения билета, имеющего счастливый номер.
Открыть решение:
Задача 6. По составленной выше блок-схеме решить задачу на Pascal
Задача 7. Дано двузначное целое число. Вывести сумму и произведение его цифр. Проверьте правильность вашей программы. Для нахождения цифр числа использовать операцию взятия остатка и операцию целочисленного деления . Модуль числа — функция .
Пример результата:
Введите двузначное число: -12 Сумма цифр = 3 Произведение цифр = 2
Задача 8. Дано трёхзначное целое число. Вывести все его цифры (порядок не имеет значения). Проверьте правильность вашей программы. Для нахождения цифр числа использовать операцию взятия остатка и операцию целочисленного деления .
Пример результата:
Введите трёхзначное число: -123 Разряд сотен: 1 Разряд десяток: 2 Разряд единиц: 3
Описание оператора Select Case
Оператор Select Case используется в VBA Excel для управления отдельными блоками операторов в зависимости от значения управляющего выражения (переменной) и сравнительных условий, задаваемых ключевым словом Case.
Синтаксис оператора Select Case
|
1 |
SelectCase<strong>выражение<strong> Case<strong>условие1<strong> <strong>операторы1<strong> Case<strong>условие2<strong> <strong>операторы2<strong> —————— Case<strong>условиеn<strong> <strong>операторыn<strong> CaseElse <strong>операторы<strong> EndSelect |
Компоненты оператора Select Case
- выражение – любое числовое или строковое выражение, переменная;
- условие – диапазон значений или выражение с операторами сравнения и ключевым словом Is*;
- операторы – блок операторов VBA Excel, который выполняется при вхождении значения управляющего выражения в диапазон, заданный в условии, или при возврате выражением с операторами сравнения значения True;
- блок операторов после ключевой фразы Case Else** выполняется в том случае, если в предыдущих условиях Case не будет найдено совпадений со значением управляющего выражения (переменной).
* Редактор VBA Excel автоматически добавляет ключевое слово Is в условия с операторами сравнения.
** Компонент Case Else с соответствующим блоком операторов необязательны, но рекомендуется их использовать для обработки непредвиденных значений управляющего выражения (переменной).
Оператор выбора в Паскале
- Оператор в Паскале используется в тех случаях, когда в зависимости от значения какой-либо переменной нужно выполнить те или иные действия (простые или составные операторы).
- Если вариантов всего два, то можно обойтись и условным оператором , с которым мы уже знакомы. Но если их, к примеру, десять, то использовать конструкцию в pascal становится совсем нецелесообразно. В этом случае оптимален оператор варианта.
Рассмотрим использование оператора выбора в языке Паскаль на конкретном примере.
Пример: Программа, спрашивающая у ученика его отметку по информатике и реагирующая на нее подходящим текстом
Особенность: Выбор не из двух, а из нескольких вариантов в зависимости от отметки.
Результат выполнения с использованием условного оператора if:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
var otmetkainteger;
begin
writeln('Отметка?');
readln(otmetka);
if (otmetka=1) or (otmetka=2) then
writeln ('кошмар!')
else if otmetka=3 then
writeln('плохо')
else if otmetka=4 then
writeln('неплохо')
else if otmetka=5 then
writeln('отлично!')
else writeln('таких отметок не бывает');
end.
|
Данный пример демонстрирует нерациональную работу программиста и слишком запутанный код. Гораздо лаконичнее выглядит код при использовании оператора выбора.
Результат выполнения с использованием оператора выбора case:
1 2 3 4 5 6 7 8 9 10 11 12 |
var otmetkainteger;
begin
writeln('отметка?');
readln(otmetka);
case otmetka of
1,2 writeln ('кошмар!');
3 writeln('плохо');
4 writeln('неплохо');
5 writeln('отлично!');
else writeln('таких отметок не бывает');
end
end.
|
Блок-схема, соответствующая оператору выбора:
Задача 7. В программе необходимо запросить время дня в часах. В зависимости от введенного времени, выводить сообщение с указанием на то, к какому времени суток относится введенный час (полночь, ночь, утро, день, вечер)

Перечисление или диапазон
- После служебного слова может стоять имя переменной или арифметическое выражение целого типа:

или символьного типа (char):

Задача 8. Case7:
Единицы массы пронумерованы следующим образом: 1 — килограмм, 2 — миллиграмм, 3 — грамм, 4 — тонна, 5 — центнер. Дан номер единицы массы (целое число в диапазоне 1–5) и масса тела в этих единицах (вещественное число). Найти массу тела в килограммах.
* Из задачника М. Э. Абрамян
Детально разобраться в том, как работает оператор выбора Case в Паскале, можно просмотрев видеоурок:
Условные конструкции
Последнее обновление: 30.07.2016
Условные конструкции — один из базовых компонентов многих языков программирования, которые направляют работу программы по одному из путей
в зависимости от определенных условий.
В языке C# используются следующие условные конструкции: и
Конструкция if/else
Конструкция if/else проверяет истинность некоторого условия и в зависимости от результатов проверки выполняет определенный код:
int num1 = 8;
int num2 = 6;
if(num1 > num2)
{
Console.WriteLine($"Число {num1} больше числа {num2}");
}
После ключевого слова ставится условие. И если это условие выполняется, то срабатывает код, который помещен далее в
блоке if после фигурных скобок. В качестве условий выступают ранее рассмотренные операции сравнения.
В данном случае у нас первое число больше второго, поэтому выражение истинно и возвращает
, следовательно, управление переходит к строке
Но что, если мы захотим, чтобы при несоблюдении условия также выполнялись какие-либо действия? В этом случае мы можем добавить блок :
int num1 = 8;
int num2 = 6;
if(num1 > num2)
{
Console.WriteLine($"Число {num1} больше числа {num2}");
}
else
{
Console.WriteLine($"Число {num1} меньше числа {num2}");
}
Но при сравнении чисел мы можем насчитать три состояния: первое число больше второго, первое число меньше второго и числа равны.
Используя конструкцию , мы можем обрабатывать дополнительные условия:
int num1 = 8;
int num2 = 6;
if(num1 > num2)
{
Console.WriteLine($"Число {num1} больше числа {num2}");
}
else if (num1 < num2)
{
Console.WriteLine($"Число {num1} меньше числа {num2}");
}
else
{
Console.WriteLine("Число num1 равно числу num2");
}
Также мы можем соединить сразу несколько условий, используя логические операторы:
int num1 = 8;
int num2 = 6;
if(num1 > num2 && num1==8)
{
Console.WriteLine($"Число {num1} больше числа {num2}");
}
В данном случае блок if будет выполняться, если равно и равно .
Конструкция switch
Конструкция switch/case аналогична конструкции , так как позволяет обработать сразу несколько условий:
Console.WriteLine("Нажмите Y или N");
string selection = Console.ReadLine();
switch (selection)
{
case "Y":
Console.WriteLine("Вы нажали букву Y");
break;
case "N":
Console.WriteLine("Вы нажали букву N");
break;
default:
Console.WriteLine("Вы нажали неизвестную букву");
break;
}
После ключевого слова switch в скобках идет сравниваемое выражение. Значение этого выражения последовательно сравнивается со значениями, помещенными после оператора
сase. И если совпадение будет найдено, то будет выполняться определенный блок сase.
В конце каждого блока сase должен ставиться один из операторов перехода:
break, goto case, return или throw.
Как правило, используется оператор break. При его применении другие блоки выполняться не будут.
Однако если мы хотим, чтобы, наоборот, после выполнения текущего блока case выполнялся другой блок case, то мы можем использовать вместо break оператор
:
int number = 1;
switch (number)
{
case 1:
Console.WriteLine("case 1");
goto case 5; // переход к case 5
case 3:
Console.WriteLine("case 3");
break;
case 5:
Console.WriteLine("case 5");
break;
default:
Console.WriteLine("default");
break;
}
Если мы хотим также обработать ситуацию, когда совпадения не будет найдено, то можно добавить блок default,
как в примере выше.
Применение оператора позволит выйти не только из блока case, но и из вызывающего метода. То есть, если в методе Main после конструкции switch..case,
в которой используется оператор , идут какие-либо операторы и выражения, то они выполняться не будут, а метод Main завершит работу.
Оператор применяется для выброса ошибок и будет рассмотрен в одной из следующим тем.
Тернарная операция
Тернарную операция имеет следующий синтаксис: . Здесь сразу три операнда.
В зависимости от условия тернарная операция возвращает второй или третий операнд: если условие равно , то
возвращается второй операнд; если условие равно , то третий. Например:
int x=3;
int y=2;
Console.WriteLine("Нажмите + или -");
string selection = Console.ReadLine();
int z = selection=="+"? (x+y) : (x-y);
Console.WriteLine(z);
Здесь результатом тернарной операции является переменная z. Если мы выше вводим «+», то z будет равно второму операнду — (x+y). Иначе z
будет равно третьему операнду.
НазадВперед
ветвление
повторение или цикл