Инструкция позволяющая реализовать множественный выбор

В предыдущем примере, в программе
контроля веса, множественный выбор был
реализован при помощи вложенных одна
в другую инструкций if.
Та­кой подход не всегда удобен,
особенно в том случае, если количество
вари­антов хода программы велико.

В языке Delphi
есть инструкция case,
которая позволяет эффективно реали­зовать
множественный выбор. В общем виде она
записывается следующим образом:

case
Селектор
of

список1:
begin

{
инструкции
1 }

end;

список2:
begin

{
инструкции
2
}

end;

списокN:
begin

{
инструкции
N
}

end;

else

begin

{
инструкции
}

end;

end;

где:

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

списокN
список констант.
Если константы представляют собой
диапа­зон чисел, то вместо списка
можно указать первую и последнюю
кон­станту диапазона, разделив их
двумя точками. Например, список 1, 2, 3,
4, 5, 6 может быть заменен диапазоном
1..6.

Выполняется инструкция
case
следующим образом:

1. Сначала вычисляется значение
выражения-селектора.

2. Значение выражения-селектора
последовательно сравнивается с
кон­стантами из списков констант.

3. Если значение выражения совпадает
с константой из списка, то выпол­няется
соответствующая этому списку группа
инструкций. На этом вы­полнение
инструкции case завершается.

4. Если значение выражения-селектора
не совпадает ни с одной констан­той
из всех списков, то выполняется
последовательность инструкций, следующая
за else.

Синтаксис инструкции case
позволяет не писать else
и соответствующую
последовательность инструкций. В этом
случае, если значение выражения не
совпадает ни с одной константой из всех
списков, то выполняется сле­дующая
за case
инструкция программы. На рис. 5.6 приведен
алгоритм, реализуемый инструкцией
case.

Рис. 5.6. Алгоритм, реализуемый инструкцией
Case

Ниже приведены примеры инструкции
case.

case
n_day of

1,2,3,4,5:
day:=’Рабочий день.’;

б:
day: =’Суббота!’;

7:
day:=’Воскресенье!’;

end;

case
n_day of

1..5:
day:=’Рабочий день.’;

6:
day:=’Суббота!’;

7:
day:=’Воскресенье!’;

end;

case
n_day of

6:
day:=’Суббота!’;

7:
day: = ‘Воскресенье!’;

else
day:=’Рабочий день.’;

end;

В качестве примера использования
инструкции case рассмотрим
програм­му, которая пересчитывает
вес из фунтов в килограммы. Программа
учиты­вает, что в разных странах
значение фунта разное. Например, в
России фунт равен 409,5 граммов, в Англии
– 453,592 грамма, а в Германии, Дании и
Исландии фунт весит 500 граммов.

В диалоговом окне программы, изображенном
на рис. 5.7, для выбора стра­ны используется
список Страна.

Рис. 5.7. Форма окна программы Пример
использования
case

Для выбора названия страны используется
список – компонент ListBox.
Значок компонента ListBox
находится на вкладке Standard.
До­бавляется список к форме приложения
точно так же, как и другие компо­ненты,
например, командная кнопка или поле
редактирования. В табл. 5.6 приведены
свойства компонента ListBox.

Таблица 5.6

Свойства компонента ListBox

Свойство

Определяет

Name

Имя компонента. В программе
используется для доступа к свойствам
компонента

Items

Элементы списка

ItemIndex

Номер выбранного элемента
списка. Номер первого элемента списка
равен нулю

Left

Расстояние от левой границы списка
до левой границы формы

Top

Расстояние от верхней
границы списка до верхней границы
формы

Height

Высоту поля списка

Width

Ширину поля списка

Font

Шрифт, используемый для
отображения элементов списка

ParentFont

Признак наследования свойств шрифта
родительской

формы

Наибольший интерес представляют
свойства items
и itemIndex.
Свойство items
содержит элементы списка. Свойство
itemIndex
задает номер выбранного элемента
списка. Если ни один из элементов не
выбран, то значение свойства равно
минус единице. Список может быть
сформирован во время создания формы
или во время работы программы.

Для формирования списка во время
создания формы надо в окне Object

Inspector
выбрать свойство items
и щелкнуть на кнопке запуска редактора
строк (рис. 5.8). В открывшемся диалоговом
окне String
List
Editor
(рис. 5.9) нужно вве­сти список, набирая
каждый элемент списка в отдельной
строке. После ввода очередного элемента
списка для перехода к новой строке
необходи­мо нажать клавишу <Enter>.
После ввода последнего элемента клавишу
<Enter>
нажимать не надо. Завершив ввод списка,
следует щелкнуть на кнопке ОК.

Рис.5.8. Кнопка запуска редактора строк

Рис.5.9. Окно редактора строк

В табл. 5.7 перечислены компоненты формы
приложения с указанием их назначения,
а в табл. 5.8 при­ведены значения
некоторых свойств этих компонентов,
используемых при работе приложения

Таблица 5.7

Компоненты формы

Компонент

Назначение

ListBox1

Для выбора страны, для которой надо
выполнить

пересчет

Edit1

Для ввода веса в фунтах

Label1,Label2,
Label3

Для вывода пояснительного текста о
назначении

полей
ввода

Label4

Для вывода результата пересчета

Button1

Для активизации процедуры пересчета
веса из

фунтов
в килограммы

Таблица
5.8

Значения свойств компонентов

Свойство

Значение

Form1.Caption

Пример использования
case

Edit1.Text

Label1.Caption

Выберите страну, введите
количество фунтов и щелкните на
кнопке Вычислить

Label2.Caption

Страна

Label3.Caption

Фунтов

Button1.Caption

Вычислить

Процедура пересчета, которая выполняется
в результате щелчка на команд­ной
кнопке Вычислить, умножает вес в
фунтах на коэффициент, равный количеству
килограммов в одном фунте. Значение
коэффициента определя­ется по номеру
выбранного из списка элемента [3].

В программе
используются две процедуры обработки
событий:

procedure
TForm1.FormCreate(Sender: TObject);

begin

{

ListBox1.items.add(‘Россия’);

ListBox1.items.add(‘Австрия’);

ListBox1.items.add(‘Англия’);

ListBox1.items.add(‘Германия’);

ListBox1.items.add(‘Дания’);

ListBox1.items.add(‘Исландия’);

ListBox1.items.add(‘Италия’);

ListBox1.items.add(‘Нидерланды’);

}

ListBox1.itemindex:=0;

end;

procedure
TForm1.Button1Click(Sender: TObject);

var

funt:real;
// вес в фунтах

kg:real;
// вес в килограммах

k:real;
// коэффициент пересчета

begin

k:=0;

case
ListBox1.ItemIndex of

0:
k:=0.4059; // Россия

1:
k:=0.453592;// Англия

2:
k:=0.56001; // Австрия

3..5,7:k:=0.5;
// Германия, Дания, Исландия, Нидерланды

6:
k:=0.31762; // Италия

end;

funt:=StrToFloat(Edit1.Text);

kg:=k*funt;

label4.caption:=Edit1.Text+
‘ фунт. — ‘

+
FloatToStrF(kg,ffFixed,6,3)+ ‘ кг.’;

end;

Следует обратить внимание на процедуру
обработки события FormCreate,
которое происходит в момент создания
формы (форма создается автомати­чески
при запуске программы). Эту процедуру
можно использовать для инициализации
переменных программы, в том числе и для
добавления эле­ментов в список. В
приведенном тексте программы инструкции
создания списка закомментированы, т.
к. список был создан при помощи редактора
строк во время создания формы.

Рассмотрим еще один пример использования
инструкции case.
При выводе числовой информации с
поясняющим текстом возникает проблема
согласо­вания выводимого значения
и окончания поясняющего текста.

Например, в зависимости от числового
значения поясняющий текст к де­нежной
величине может быть: «рубль», «рублей»
или «рубля» (123 рубля, 20 рублей, 121 рубль).
Очевидно, что окончание поясняющего
слова опре­деляется последней цифрой
числа, что отражено в табл. 5.9.

Таблица
5.9

Зависимость окончания текста от
последней цифры числа

Цифра

Поясняющий текст

0, 5, 6, 7, 8, 9

Рублей

1

Рубль

2,3,4

Рубля

Приведенное в таблице правило имеет
исключение для чисел, оканчивающихся
на 11, 12, 13, 14. Для них поясняющий текст
должен быть «рублей». Диалоговое окно
программы приведено на рис. 5.10.

Рис. 5.10. Диалоговое окно программы

Поясняющий
текст формирует процедура обработки
события OnKeyPress:

procedure
TForm1.Edit1KeyPress(Sender:TObject;var Key:Char);

var

n
: integer; // число

r
: integer; // остаток от
деления n на 10

text:
string[10]; // формируемый
поясняющий текст

begin

if
Key = chr(VK_RETURN) then

begin

n
:= StrToInt(Edit1.Text);

if
n > 100

then
r:=n mod 100;

if
( r >= 11) and ( r <= 14)

then

text:=’
рублей’

else

begin

r:=
n mod 10;

case
r of

1:
text:=’ рубль’;

2
.. 4: text:=’ рубля’;

else
text:=’ рублей’;

end;

end;

Label2.Caption
:= IntToStr(n)+ text;

end;

end;

Приведём пример полезных процедур, в
которых используется case.
Это процедуры обработки событий
KeyPress. Примеры
процедур запрета ввода недопустимых
символов для программы расчёта дохода
по вкладу. Первая процедура определяет
допустимость ввода символов, составляющих
целое число. Вторая – число вещественного
типа.

//
нажатие в поле срок

procedure
TForm1.Edit3KeyPress(Sender:TObject;var Key:Char);

begin

case
Key of

‘0’
.. ‘9’,#8:
; // цифры и <Backspace>

//перевод
фокуса управления на кнопку вычисления
стоимости

#13:
Button1.SetFocus { Summa(Edit3)} ;

else
Key := Chr(0); // символ
не
отображать

end;

end;

//
нажатие клавиши в поле Сумма

procedure
TForm1.Edit1KeyPress(Sender:TObject;var Key:Char);

begin

case
Key of

‘0’
.. ‘9’, #8 : ; //цифры и <Backspace>

#13:
Form1.Edit2.SetFocus; // <Enter>

‘.’,
‘,’:

begin

if
Key = ‘.’

then
Key:=’,’;

if
Pos(‘,’,Edit1.Text) <> 0

then
Key:=
Chr(0);

end;

else
// все остальные символы запрещены

Key
:= Chr(0);

end;

end;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

  В 3 уроке я рассказал об условном операторе IF. В этому уроке я расскажу о другом аналогичном по функционалу, но более эффективном и удобном для большого количества вложенных условий операторе CASE.

  Оператор CASE более изящен, более эффективен, и его проще обслуживать чем множество вложений IF.

  Сначала разберем, как выглядит конструкция CASE:

case a of
	1 : ShowMessage('a=1');
	2 : ShowMessage('a=2');
	3 : ShowMessage('a=3');
	4 : ShowMessage('a=4');
	else ShowMessage('no');
end;

  В данном случае, мы можем назначать каждому значению свой результат. Конструкция ELSE в данном случае опциональна, т.е. не обязательна.

  Оператор CASE позволяет удобно и эффективно работать с большим количеством условных вложений, в отличии от оператора IF. Чтобы понять преимущества новой конструкции, рассмотрим как будет выглядеть код, представленный выше, но теперь вместо CASE мы будем использовать оператор IF:

	If a=1 then ShowMessage('a=1') else
	If a=2 then ShowMessage('a=2') else
	If a=3 then ShowMessage('a=3') else
	If a=4 then ShowMessage('a=4') else
	ShowMessage('no');

  Согласитесь, такой код гораздо неудобнее, чем с использованием CASE.

  Стоит отметить, что IF и CASE хоть и являются условными операторами с одинаковыми возможностями, используются они для разных целей исключительно по удобству. В каких-то случаях гораздо удобнее использовать IF, например когда условия имеют сложную конструкцию, в других случаях удобно использовать CASE, например когда нам нужно создать условие, имеющее несколько одинаковых по структуре условных вложений.

Удачи!
Встретимся в следующем уроке!

Добавил(а): Wera00 Дата: 2016-04-21

Почему на 4 уроке не проходили case. До конца курса могли использовать это возможность

  • Условные операторы, циклы, генераторы списков
  • Условный оператор if. Конструкция if-else
  • Вложенные условия и множественный выбор. Конструкция if-elif-else
  • Тернарный условный оператор. Вложенное тернарное условие
  • Оператор цикла while
  • Операторы циклов break, continue и else
  • Оператор цикла for. Функция range()
  • Примеры работы оператора цикла for. Функция enumerate()
  • Итератор и итерируемые объекты. Функции iter() и next()
  • Вложенные циклы. Примеры задач с вложенными циклами
  • Треугольник Паскаля как пример работы вложенных циклов
  • Генераторы списков (List comprehensions)
  • Вложенные генераторы списков
  • Главная
  • Основы Python
  • Условные операторы, циклы, генераторы списков

Курс по Python: https://stepik.org/course/100707

Мы продолжаем изучение условных операторов
языка Python. На предыдущем
занятии мы познакомились с работой оператора if проверки
условий. И говорили, что внутри блока этого оператора могут быть любые
конструкции языка Python, в том числе и другие условия. Давайте
посмотрим на примерах, как это работает.

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

x = int(input())
if x % 2 == 0:
    if 0 <= x <= 9:
        print("x - четная цифра")
    else:
        print("x - четное число")

Как видите, это
удобно сделать с помощью вложенного условия. И, обратите внимание, оператор else здесь относится
именно ко второму условию, так как записан на одном уровне с ним. А вот, если
бы мы его прописали без отступов:

if x % 2 == 0:
    if 0 <= x <= 9:
        print("x - четная цифра")
else:
    print("x - четное число")

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

Я верну отступы
для блока else и добавлю еще
один такой блок для первого условия:

x = int(input())
if x % 2 == 0:
    if 0 <= x <= 9:
        print("x - четная цифра")
    else:
        print("x - четное число")
else:
    print("x - нечетное число")

В результате, у
нас обрабатываются все возможные исходы для числа x.

Другой пример –
поиск наибольшего среди трех чисел a, b и c:

a = int(input("a: "))
b = int(input("b: "))
c = int(input("c: "))
 
if a > b:
    if a > c:
        print("a -> max")
    else:
        print("c -> max")
else:
    if b > c:
        print("b -> max")
    else:
        print("c -> max")

Думаю, из этих
примеров вам стало понятно, как использовать вложенные условия. Конечно,
степень вложенности может быть любой, но все будет работать по аналогии. В
практике реального программирования лучше избегать больших вложенностей.
Нормальным считается до трех вложений. Если у вас выходит больше, то, скорее
всего, что-то делаете не так и структуру программы следует пересмотреть.

Оператор elif

Во второй части
этого занятия я хочу рассказать вам о способе реализации множественного выбора.
Что это такое? Представьте, что мы просим пользователя выбрать один из пунктов
меню:

1. Курс по Python

2. Курс по С++

3. Курс по Java

4. Курс по JavaScript

Используя
текущие знания, мы можем реализовать это так:

item = int(input())
 
if item == 1:
    print("Выбран курс по Python")
else:
    if item == 2:
        print("Выбран курс по C++")
    else:
        if item == 3:
            print("Выбран курс по Java")
        else:
            if item == 4:
                print("Выбран курс по JavaScript")
            else:
                print("Неверный пункт")

Но эту же логику
можно реализовать проще и нагляднее, используя еще один условный оператор

elif = else if

То есть, все
конструкции с else if мы можем просто
заменить на elif, получим:

if item == 1:
    print("Выбран курс по Python")
elif item == 2:
    print("Выбран курс по C++")
elif item == 3:
    print("Выбран курс по Java")
elif item == 4:
    print("Выбран курс по JavaScript")
else:
    print("Неверный пункт")

Видите, как это
удобнее, когда нам в программе нужно реализовать выбор какого-то одного
значения из множества доступных. Причем, последовательность операторов должна
быть именно такой:

if – elif – else

После if можно опускать
любой из них (или оба не прописывать), но порядок следования всегда нужно
соблюдать именно таким.

Конечно, помимо
проверок на равенство после elif можно
прописывать любые условия. Например, вводим с клавиатуры целое положительное x и для него
определяем число десятков:

x = int(input())
 
if x < 0:
    print("x должно быть положительным")
elif 0 <= x <= 9:
    print("x - цифра")
elif 10 <= x <= 99:
    print("x - двузначное число")
elif 100 <= x <= 999:
    print("x - трехзначное число")

В целом это все,
что я хотел вам рассказать про условный оператор if. На следующем
занятии мы еще затронем тему тернарных условий. А сейчас вас ждут практические
задания по этой теме, после чего переходите к следующему уроку.

Курс по Python: https://stepik.org/course/100707

Видео по теме

  • Предыдущая
  • Следующая

Урок является продолжением изучения темы множественного выбора на языке Pascal. Предназначен как для изучения на уроках, так и во время проведения элективных курсов.

Вид: урок-презентация с применением современных технологий.

Технология: информационная.

Время проведения: 40 минут.

Оборудование: компьютерный класс, мультимедийные устройства.

Цель урока:

Познакомить учащихся со способами организации в программах ветвления на три и более рукавов (ветвей).

Задачи:

  • Обучающие – познакомить учеников с использованием команды множественного выбора CASE; привести примеры.
  • Развивающие — развитие умения преодолевать трудности при выполнении заданий самостоятельной работы, развитие логического мышления, памяти, внимания, навыков коммуникативной работы в группах.
  • Воспитательные — воспитание аккуратности, ответственности за свою работу в коллективе, уважительного отношения к мнению одноклассников, уметь работать самостоятельно, выделять главное, сравнивать, делать выводы, развитие познавательного интереса, логического мышления.

Подготовка к уроку:

  1. Подбор изображений для слайдов.
  2. Подбор и набор текста и задач.
  3. Составление и оформление презентации.

План урока:

  1. Организационный момент.
  2. Мотивационное начало урока.
  3. Изложение нового материала. Составление учащимися краткого конспекта нового материала.
  4. Закрепление изученного материала.
  5. Домашнее задание.
  6. Итог урока.

Ход урока

Организационный момент. Психологический настрой класса. Приветствие, выявление отсутствующих, проверка готовности учащихся к уроку. Проверка домашнего задания осуществляется по следующим вопросам:

  1. Какое минимальное количество разделов может быть в программе в Turbo Pascal? Назовите их. (Один — раздел операторов).
  2. Назовите основные типы данных и соответствующие им стандартные имена, которые мы использовали на прошлом уроке. (Целочисленный тип — INTEGER, вещественный тип — REAL, логический — BOOLEAN.)
  3. Укажите, какие операции деления возможны над данными целочисленного типа. Поясните их результат и назовите соответствующее стандартное имя, используемое в программе. (а. MOD; б. DIV.)
  4. Укажите типы данных, в которых нет возможности ввода данных с помощью оператора READ. (Логический тип данных — BOOLEAN.)
  5. Перечислите операторы, которые могут использоваться для организации линейных алгоритмов. (BEGIN, END, READ).
  6. Назовите операторы для программ с разветвляющейся конструкцией. (IF … THEN … ELSE.)

Сообщение о том, чем будем заниматься на уроке. Сообщение учащимся плана занятия и его цель для учащихся

Мотивационное начало урока. Достаточно часто при составлении программ необходимо сделать выбор из достаточно большого количества вариантов. Команду IF в данном случае использовать не рационально. И тут на помощь к программистам приходит команда множественного выбора CASE.

Изложение нового материала. Составление учащимися краткого конспекта нового материала.

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

Один из способов реализации ветвления на несколько рукавов – проверка условий до тех пор, пока одно из них не окажется истинным, выполнение предусмотренных этим условием действий и выход из ветвления.

Структура оператора выбора такова:

case <переменная> of
     <значение1>:<действия1>;
     <значение2>:<действия2>;
     <значение3>:<действия3>;
     ……………………………………………………………………;
     else <действия 4>;
end;

Оператор выбора работает следующим образом. В зависимости от того, какое значение принимает переменная, выполняется тот или иной блок действий. В случае если переменная не принимает ни одно из перечисленных значений, “работает” ветвь “ELSE” Но эта ветвь может и отсутствовать, в этом случае просто ничего не выполняется.

У множественного ветвления есть ограничения; в роли переменной может выступать только переменная порядкового типа. Но есть и положительные стороны — в качестве значений можно указывать целый диапазон.

Давайте рассмотрим на примере преимущества оператора case на примере следующей программы.

Задача 1. Приведите введенное пользователем число от 0 до 9 к его словесному представлению.

Сначала рассмотрим данную задачу с использованием оператора if:

program chislo;
var n : shortint; {-128..127}
begin
     write(‘Введи число: ‘);
     readln(n);
     if n=0 then write(‘Нуль’)
       else if n=1 then write(‘Один’)
       else if n=2 then write(‘Два’)
         else if n=3 then write(‘Три’)
           else if n=4 then write(‘Четыре’)
             else if n=5 then write(‘Пять’)
               else if n=6 then write(‘Шесть’)
                 else if n=7 then write(‘Семь’)
                   else if n=8 then write(‘Восемь’)
                     else if n=9 then write(‘Девять’)
                       else write(‘Это не цифра’);
end;

Теперь с помощью оператора case:

program chislo;
var n : shortint;
begin
     write(‘Введи число: ‘);
     readln(n);
     case n of
       0: write(‘Нуль’);
       1: write(‘Один’);
       2: write(‘Два’);
       3: write(‘Три’);
       4: write(‘Четыре’);
       5: write(‘Пять’);
       6: write(‘Шесть’);
       7: write(‘Семь’);
       8: write(‘Восемь’);
       9: write(‘Девять’);
       else write(‘Это не цифра’);
     end;
end;

Сделаем выводы. (Как видно из приведённых примеров, использование оператора case очень эффективно. Он упрощает решение разветвляющихся задач, сокращает затраты на написание кода, и упрощает понимание его). Давайте разберем еще один пример.

Задача 2. Написать программу, которая запрашивает у пользователя номер месяца и выводит соответствующее название времени года. Предусмотреть ошибку ввода.

program nomermesaca;
var x:byte;
begin
       writeln(‘ введите номер месяца ‘); readln(x); Case x of
           1,2,12:writeln (‘зима’);
           3,4,5:writeln (‘весна’);
           6,7,8:writeln (‘лето’);
           9,10,11:writeln (‘осень’)
       else
             writeln (‘ошибка’);
       end;
end.

Я думаю до readln(x); всё понятно. Теперь разбираем непосредственно часть программы с оператором-”case”.

Допустим, мы ввели число 5. Так вот программа берет нашу переменную x, которая в нашем случае равняется пяти, и ищет нашу пятёрку среди тех данных, которые мы ввели между “Case x of… и … Else writeln (‘ошибка’);”.

Пройдя первую строку программа нужной пятёрки не нашла и, перейдя на вторую, нужная пятёрка была найдена и в соответствии с командой, которую мы задали в этом случае программа выводит на экран слово «Весна».

Если бы мы ввели число большее, чем 12,то программа бы выдала нам следующее: «Ошибка»

Закрепление изученного материала. Применение знаний на практике и формирование практических умений и навыков.

Учащимся предлагаются несколько задач, которые они должны составить на компьютере:

Задача 3. Составить программу, имитирующую работу своеобразного калькулятора.

program Calc;
var a, b, c: integer;
       begin
       writeln(‘Введите a’); Read(a);
       writeln(‘Введите b’); Read(b);
       writeln(‘Введите c‘); Read(c);
       case c of
           1: writeln(‘Сумма=‘, a+b);
           2: writeln(‘Разность=‘, a-b);
           3: writeln(‘Произведение=‘, a*b);
           4: writeln(‘Целая часть от деления=‘, a div b);
           5: writeln(‘Остаток от деления=‘, a mod b);
           else writeln(‘Введен неизвестный номер операции’);
       end;
end.

Задача 4. Написать программу, которая в зависимости от введённого числа выводила бы на экран: если 1, 2, 3, 4, 5 то ‘один’, если 6, 7, 10, 15 то ‘два’, если 8 то ‘три’, если 16, 17, 18, 19, 20, 22, 25 то ‘четыре’. Иначе вывести на экран ‘ошибка’.

program primer;
var n : integer;
begin
       write(‘Введите число: ‘);
       readln(n);
       case n of
           1..5: write(‘один’);
           6, 7, 10, 15: write(‘два’);
           8: write(‘три’);
           16..20, 22, 25: write(‘четыре’);
       else write(‘ошибка’);
       end;
end.

Выявление пробелов в знаниях учащихся и их ликвидация. Беседа.

  1. С помощью каких операторов можно организовать многовариантное ветвление? (IF…THEN…ELSE, CASE…OF). Ставится ли перед ELSE ;? (Нет)
  2. Какой тип может иметь переменная, выступающая в роли параметра в операторе выбора CASE (Перечисляемый).
  3. Может ли отсутствовать ELSE в операторе выбора? (Да)
  4. Как “работает” оператор выбора? (Оператор выбора работает следующим образом. В зависимости от того, какое значение принимает переменная выполняется тот или иной блок действий. В случае если переменная не принимает ни одно из перечисленных значений, “работает” ветвь “else” Но эта ветвь может и отсутствовать, в этом случае просто ничего не выполняется.)

Домашнее задание.

Составить программу по следующему условию.

В некотором учебном заведении действуют следующие правила приема. Абитуриенты сдают три экзамена. Если они набирают не менее 13 баллов, то это дает право поступить на дневное отделение, от 10 до 12 — вечернее, от 8 до 9 — заочное и ниже 8 баллов — отказ в приеме на учебу. Записать программу, которая в зависимости от суммы набранных баллов сообщает абитуриенту его права на поступление.

Итог урока.

Сегодня на уроке мы повторили структуру программы, типы данных, инструкции ввода и вывода, логические выражения, условный оператор, познакомились с организацией многовариантного ветвления.

предыдущие:

  • Операционная система Linux
  • Управление компьютером
  • Задания на компьютерный марафон по информатике в 8 классе
  • История развития вычислительной техники
  • Архитектура персонального компьютера

Итак мы рассмотрели оператор с одиночным выбором if и оператор с двойным выбором if else, но в С++ еще имеется оператор множественного выбора switch, который мы сейчас детально рассмотрим.

// форма записи оператора множественного выбора switch
switch (/*переменная или выражение*/)
 {
 case /*константное выражение1/*: 
 {
 /*группа операторов*/;
 break;
 }
 case /*константное выражение2*/: 
 {
 /*группа операторов*/;
 break;
 }
 //.    .    .
 default:
                {
                 /*группа операторов*/;
                }
 }

На начальном этапе анализируется выражение или переменная. После чего осуществляется переход к той ветви программы, для которой значение переменной или выражения совпадает с указанным константным выражением. Далее выполняется оператор или группа операторов пока не встретится зарезервированное слово break или закрывающая фигурная скобочка. Если значение переменной или выражения не совпадает ни с одним константным выражением, то передается управление ветви программы содержащей зарезервированное слово default. После чего выполняется оператор или группа операторов данной ветви. Сейчас рассмотрим задачу с использованием оператора выбора switch.

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

// switch.cpp: определяет точку входа для консольного приложения.

 #include "stdafx.h"
 #include <iostream>
 using namespace std;

 int main(int argc, char* argv[])
 {
  int count; // переменная для выбора в switch
  double a,b; // переменные для хранения операндов
  cout << "Vvedite pervoe chislo: ";
  cin >> a;
  cout << "Vvedite vtoroe chislo: ";
  cin >> b;
  cout << "Vibirite deistvie: 1-clojenie; 2-vichitanie; 3-ymnojenie; 4-delenie: ";
  cin >> count;
  switch (count) // начало оператора switch
  {
 	 case 1: // если count = 1
 	 {
  	 cout << a << " + " << b << " = " << a + b << endl; // выполнить сложение
  	 break;
  	 }
  	 case 2: // если count = 2
  	 {
  	 cout << a << " - " << b << " = " << a - b << endl; // выполнить вычитание
  	 break;
  	 }
  	 case 3: // если count = 3 
  	 {
  	 cout << a << " * " << b << " = " << a * b << endl; // выполнить умножение
  	 break;
  	 }
  	 case 4: // если count = 4
  	 {
  	 cout << a << " / " << b << " = " << a / b << endl; // выполнить деление
  	 break;
 	 }
 	 default: // если count равно любому другому значению
 	 cout << "Nepravilni vvod" << endl;
 	 }
 system("pause");
 return 0;
}

В 9-й строке мы объявили переменную count целочисленного типа. Именно значение данной переменной программа будет сравнивать со значением константного выражения. В строке 10 объявлены две переменные вещественного типа данных, для хранения введённых чисел. Почему вещественного, объясню позже. С 17 по 41 строки записан условный оператор множественного выбора switch. На начальном этапе анализируется переменная count. Анализируется таким образом:
если переменная count равна единице, значит, выполняется блок операторов с 20-й по 23-ю строки;
если переменная count равна двойке, значит, выполняется блок операторов  с  25-й по 28-ю строки;
если переменная count равна тройке, значит, выполняется блок операторов  с  30-й по 33-ю строки;
если переменная count равна четырем, значит, выполняется блок операторов с 35-й по 38-ю строки;

Если же значение переменной count не совпадает ни с одним константным выражением, то передается управление ветви программы содержащей зарезервированное слово default. То есть будет выполнена следующая строка

cout << "Nepravilni vvod" << endl;

Оператор switch может содержать, а может и не содержать зарезервированное слово default. Если значение переменной не совпадет ни с одним константным выражением и не будет default, то программное управление в этом случае просто перешло бы к первому оператору после switch. В строках 19, 24, 29, 34 записаны константные выражения, с которыми программа сравнивает значение переменной count.
В строках 22, 27, 32, 37, записан оператор break. Возникает вопрос: «Зачем он нужен?» Допустим, пользователь ввел 2, то есть переменная count инициализировалась двойкой. Начинает работать условный оператор множественного выбора switch. То есть выполняется поиск двойки в константных выражениях. Сначала проверяется строка 19, мы видим, что в строке 19 константное выражение равно единице, а нам нужна двойка. Проверяем дальше. А дальше по порядку строка 24. Мы видим, что в строке 24 константное выражение равно двойке, то, что нужно!!! Переменная count равна константному выражению, выполняется блок операторов с 25 по 28 строки. И вот в 27-й строке записан оператор break, который заставляет программу перейти к первому оператору после оператора switch. В данном случае управление передается строке 42. А нужен этот переход только для того, чтобы не выполнялись заведомо ненужные действия. Если убрать оператор break, то программа будет дальше сравнивать значение переменной с константными выражениями, пока они все не закончатся и потом все равно передаст управление строке 42. Результат работы программы показан ниже (см. Рисунок 1).

Оператор множественного выбора switch C++

Рисунок 1 — Оператор множественного выбора в С++

Вернемся к строке 10, там объявляются две переменные типа double. Наверное, возникает вопрос, «Почему вещественного типа, а не целочисленного?». Отвечаю: «Потому, что одно из действий, которые может выполнять программа является деление, а при делении результат имеет вещественный тип данных. Компилятор С++ при делении чисел обращает внимание на их типы данных. Если мы просто делим числа на калькуляторе, например 4/5=0.8 Компилятор С++ нам выдаст результат при таком делении 0. Так как оба числа являются целочисленными, значит, результат тоже будет целочисленный, то есть целая часть от обычного деления, а в нашем случае целая часть при таком делении – это 0, соответственно часть информации теряется, или как еще говорят, отсекается (восемь десятых, в нашем случае, отсекается). А если делимое и делитель поменять местами, на калькуляторе получим: 5/4=1.25; компилятор С++ покажет несколько иной результат, а именно 5/4=1 (0.25 отсекается). Такое явление в С++ называется неявным приведением типа.» Вещественный тип данных используется для более точного представления чисел, чем целочисленный (то есть отображает дробную часть).

В С++ существуют два вещественных типа данных:

1) double – вещественный тип данных двойной точности, а значит занимает вдвое больше памяти, чем тип float
2) float – вещественный тип данных одинарной точности

Понравилась статья? Поделить с друзьями:
  • Инструкция пожарной безопасности для детского лагеря
  • Инструкция поездного электромеханика пассажирского поезда ао фпк
  • Инструкция подогреватель для бутылочек miniland инструкция
  • Инструкция подключения цифровой приставки к старому телевизору
  • Инструкция подключения усилителя сотовой связи