Лекция по теме "Оператор условного перехода if. Оператор варианта switch."
Оценка 5

Лекция по теме "Оператор условного перехода if. Оператор варианта switch."

Оценка 5
Лекции
doc
информатика
15.08.2022
Лекция по теме "Оператор условного перехода if. Оператор варианта switch."
Лекция 6.doc

Лекция 6: Оператор условного перехода if. Оператор варианта switch.

Цель: Изучить базовую структуру ветвления и ее реализацию в языке программирования C++ Builder. Рассмотреть структуру оператора выбора.

 

План.

 

1.     Понятие условного оператора.

2.     Сокращенная форма условного оператора.

3.     Оператор if... else...

4.     Вывод сообщений.

5.     Вложенные условия.

6.     Оператор варианта switch.

7.     Оператор перехода.

 

Ход лекции.

 

1. Понятие условного оператора.

Один из важнейших операторов C++ Builder — условный оператор. Он позволяет изме­нить порядок выполнения операторов в зависимости от некоторого условия (=, <>, >, <, ,>= ,<=), представляющего собой логическое выражение типа Bool. Если это значение равно True, то выполняется одна группа операторов, если оно равно False, то выполняется другая группа операторов или не выполняется ничего.

 

2. Сокращенная форма условного оператора.

Условный оператор записывается в такой форме:

if   (условие)   {  [операторы; ]  };


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

Слово if (если) зарезервированное.

Действие выполняется только в том случае, если значение условия равно True. В про­тивном случае ничего не происходит. Действие — это любой оператор C++, или группа операторов, взятых в логические скобки { }.

Например:

if (X > 0) X = 0;

 

3. Оператор if... else...

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

if  (условное выражение)

                                    {

                                                 <оператор 1.1>;

                                                 <оператор 1.2>;

                                                  . . . . .    

                                      }

                                    else {

                                                 <оператор 2.1>;

                                                 <оператор 2.2>;

                                                  . . . . .

                                           }

Работает этот алгоритм так: если указанное условие истинно, то выполняется левый блок операторов, в противном случае – правый блок операторов. В любом из блоков операторы могут отсутствовать.

if (X  >  0)  X  =   -1;  else X   =  +1;

1) Перед ключевым словом else (иначе) точка с запятой ставится.

2) Если какой-либо из блоков имеет один оператор, то в этом блоке операторные скобки {  } можно опустить.

 

 

                                           да                                              нет

 

 

 

 

 

 

                                     .                                                                    .                                                                          

                                     .                                                                    .

 

 

 

 

В любом операторе if-else выполняется не более одного блока операторов. Выполняется блок первого встретившегося оператора if, условие которого истин­но. Поэтому последовательность расположения операторов if весьма существен­на и должна соответствовать логике алгоритма.

Пример: Необходимо ввести число с клавиатуры и сообщить, четное оно или нет. Проверку на четность можно выполнить проверив, равен ли нулю остаток от деления числа на 2 (операция %).

int X=StrToInt(Edit1->Text);

if (X%2==0) Label1->Caption = “Число четное”;

else Label1->Caption = “Число нечетное”;

Ниже приведены определения функций  y, z, v, и фрагменты программ для их вычисления:

             lnxx>0,                          

 y =                                           

             ex,   x<=0                                                                 

if (x>0) y=log(x);

else y=exp(x);

 

            sin z,  -1<x<=0.5,   

 z=cos2x,  v=                                   

             1, в других случаях

if ((x>-1)&&(x<=0.5) )

{

     z=cos(2*x);

     v=sin(z);

}

else v=1;

 

4.  Вывод сообщений.

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

Сообщения могут быть двух видов:

-   Информационные сообщения, которые пользователем должны быть  приняты к сведению и не требуют от него каких-то указаний выполняющейся программе;

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

Информационное соoбщение выводится с помощью процедуры

ShowMessage(сообщение);

Сообщение с подтверждением выполняется с помощью функции:

MessageDlg(“сообщение”, mtConfirmation, mbYesNoCancel,0);

Здесь mbYes, mbNo, mbCancel – целые константы, равные соответственно 6,7,2.

Следующий фрагмент программы выводит информационное сообщение и сообщение с подтверждением. Форматы этих сообщений показаны на  рисунке.

ShowMessage(“Вы видите сообщение от ShowMessage”);

int mes=MessageDlg("Присвоить переменной x значение 19?", mtConfirmation, mbYesNoCancel, 0);

if (mes==6) int x=19; // Можно и так:  if (mes=6) x=19;

if (mes==2) return 0;

 

 

 

 

 

 

5. Вложенные условия.

Условные операторы могут быть неограниченно вложены друг в друга.

 


Рассмот­рим следующий пример. Надо ввести с клавиатуры два числа, и если их сумма меньше чем 100, то напечатать большее число, а в противном случае — напечатать меньшее число.

double X=StrToFloat(Edit1->Text);

double Y=StrToFloat(Edit2->Text);

// если сумма меньше ста, то

if (X+Y<100)

         // определить большее число

         if (X>Y) ShowMessage(FloatToStr(X));

         else ShowMessage(FloatToStr(Y));

// иначе определить меньшее число

else  if (X<Y) ShowMessage(FloatToStr(X));

         else ShowMessage(FloatToStr(Y));

При решении данной задачи использованы вложенные условные операторы.

В некоторых случаях бывает сложно разобраться, в каком порядке такие вложен­ные операторы будут выполняться. Например:

if (a  > b)

if (a > е) с =  1;

else с =  2;

Здесь непонятно, в каком случае выполняется оператор с=2: когда ложно условие а > b или когда оно истинно, но ложно условие а > е.

В C++ действует простой принцип: часть условного оператора else относится к ближайшему if. В данном случае, часть else с = 2 относится к ближайшему оператору if (а > е), а не к оператору if (а > b), тем самым правильно второе толкование.

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

Если в приведенном примере требуется, чтобы оператор с=2 выполнялся, когда ложно условие а > b, то промежуточный условный оператор надо вынести в логиче­ский блок, чтобы он не влиял на порядок выполнения условных частей else:

if (a > b)

             {

                if (a > e) с = 1;

             }

             else с = 2;

 

 sin(x-9,6),           x≤-2

y =     1+cos(2*x+4),   -2<x≤1,5

,                     x>1,5

if (x<=-2) y=sin(x-9.6)

else if (x>1.5) y=1/(x*x)

        else y=1+cos(2*x+4)

 

Решение квадратного уравнения

Разработать программу решения квадратного уравнения

a2 x+bx+c=0.

Предусмотреть ввод коэффициентов уравнения с клавиатуры,  вывод действительных корней. В случае отсутствия действительных корней вывести об этом соответствующее сообщение.

Пусть D=b2-4ac – дискриминант квадратного уравнения. Тогда, если D>=0, то вещественные корни есть, то  они вычисляются по формулам:

                       -b+Ö  D                     -b -Ö D

              x1 =                       ,   x2 =                            

                          2a                              2a

Если же D<0, то вещественных корней нет.

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

void __fastcall TForm1::Button1Click(TObject *Sender);

{

float a,b,c,x1,x2,D;

a = StrToFloat(Edit1->Text);

Да

 
b = StrToFloat(Edit2->Text);

c = StrToFloat(Edit3->Text);

D = pow(b,2)-4*a*c;

Нет

 
if  (D<0)

      ShowMessage(“Вещ. корней нет”)

else {

          x1=(-b+sqrt(D))/(2*a);

          x2=(-b-sqrt(D))/(2*a);

                      Edit4->Text= FormatFloat("00.00",x1);

         Edit5->Text= FormatFloat("00.00",x2);

                        }

}

6. Оператор варианта switch.

Другая структура принятия решений в С++ — оператор switch. Каждый оператор switch можно заменить эквивалентным ему оператором if, однако обратное неверно — не всякий оператор if можно заменить эквивалентным switch.

С помощью оператора switch можно задать не два (как в операторе if), а несколько возможных направлений вычислительного процесса. Конкретное направление выбирается в зависимости от значения некоторого параметра, называемого селектором.

Общий синтаксис оператора switch имеет вид:

switch (условное_выражение)

{

 case  значение_1{операторы 1; break;}

 case  значение_2{операторы 2; break;}

                …

 case  значение_N{операторы N; break;}

 default: {операторы Х;}

}

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

В этой структуре условное_выражение может быть только целого типа.

Оператор break приводит к выходу из switch и переходу к следующему оператору программы. Если оператор break отсутствует, то выполняется проверка следующего списка_ значений независимо  от предыдущих совпадений.

Оператор switch может содержать любое количество списков выражений и только один default. Операторы switch можно вкладывать друг в друга аналогично if.

Допустимо задавать не одно Значение, а их перечень: каждое значение со своим словом case, например:

case 1:

case 5:

case 7 : {   <Блок операторов>  }

Пример: Составить процедуру вычисления функции:

                       cos(x+n),                          n=1

                       sin(x/n),                            n=3,

             z=      (x+2n)/(x+n),                    n=4,

                       ln(x+y),          y=ex+1,        n=11,

                       2/n,                                    при других n

 

{

    double x,z;

    int n;

    switch (n)

      {

          case 1:       { z=cos(x+n); break;}

          case 3:       { z=sin(x/n); break;}

          case 4:       { z=(x+2*n)/(x+n); break;}

          case 11:     { y=exp(x+1); z=log(x+y); break;}

          default:      z=2/n;

      }

}

 

7. Оператор перехода.

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

goto метка;

В качестве метки может выступать любой допустимый идентификатор. Когда выполняется оператор перехода, то управление передается на оператор, сле­дующий за именем метки и отделенный от нее двоеточием. Метка может располагаться как до оператора goto так и после него.

       goto  L;

       Y   =  X;

L:    X  =   5;

При выполнении этой последовательности оператор присваивания Y = X пропускается.

        int X   =   0;

Ml: X++;

       if (X  <  10)  goto Ml;

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

 

Контрольные вопросы:

1.     Приведите синтаксис и опишите действия, выполняемые оператором if в самом общем виде?

2.     Что такое вложенная структура принятия решений?

3.     Как можно определить к какому if относится else во вложенных условных операторах?

4.     Какого типа могут быть сообщения? В чем между ними разница?

5.     Приведите синтаксис и опишите действия, выполняемые оператором switch в самом общем виде?

6.     Можно ли заменить любой оператор if эквивалентным оператором switch и наоборот?

7.     Какой оператор называется оператором безусловного перехода?

 

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

Задание. Даны действительные числа а, b, c. Исследовать уравнение ах2+ bx+c=0. Ответом должно служить сообщение о характере уравнения и значениях действительных корней или, что действительных корней нет.

Решение. При  имеем квадратное уравнение. Если a = 0, но – уравнение линейное. Если же a = 0 и b = 0, то при с = 0  решением является любое значение (уравнение обращается в тождество), а при  – уравнение не имеет смысла.

void __fastcall TForm1::Button1Click(TObject *Sender);

{

float a,b,c,D,x1,x2,x;

   a = StrToFloat(Edit1->Text);

   b = StrToFloat(Edit2->Text);

c = StrToFloat(Edit3->Text);

if  (a!=0)

{

         ShowMessage (“квадратное уравнение”);

         D=b*b-4*a*c;

         if  (D>=0)

         {

             x1=(-b-sqrt(D))/(2*a);

             x2=(-b+sqrt(D))/(2*a);

                                       Edit4->Text= FormatFloat("00.00",x1);

            Edit5->Text= FormatFloat("00.00",x2);

         }

         else  ShowMessage (“корней нет”)

}

     else if  (b!=0)

         {

                  x=-c/b;

                  ShowMessage (“линейное уравнение”);

Edit4->Text= FormatFloat("00.00",x);       

          }

             else if  (c!=0)  ShowMessage (“выражение не имеет смысла”)

                     else ShowMessage (“тождество: х – любое”)

}

 

 

 


 

 


 

 

 

 

5   D:=

 

x1:=(-b-)/(2*a)

    x2:=(-b+)/(2*a)

 

8        x1, x2

 

10

 
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Список используемой литературы:

 

1.     Архангельский А.Я. C++ Builder. Справочное пособие. Книга 1. Язык С++. –М.: Бином, 2002. Стр. 85-88.

2.     Бобровский С.И. Технологии C++ Builder. Разработка приложений для бизнеса. Учебный курс. –СПб.: Питер, 2010. Стр. 110-116.

 


Скачано с www.znanio.ru

Лекция 6: Оператор условного перехода if

Лекция 6: Оператор условного перехода if

Оператор if... else... Нередко требуется выполнить определенные действия и в том случае, когда про­веряемое условие ложно

Оператор if... else... Нередко требуется выполнить определенные действия и в том случае, когда про­веряемое условие ложно

X%2==0) Label1->Caption = “ Число четное ”; else

X%2==0) Label1->Caption = “ Число четное ”; else

Вложенные условия. Условные операторы могут быть неограниченно вложены друг в друга

Вложенные условия. Условные операторы могут быть неограниченно вложены друг в друга

ShowMessage(FloatToStr(Y)); При решении данной задачи использованы вложенные условные операторы

ShowMessage(FloatToStr(Y)); При решении данной задачи использованы вложенные условные операторы

Блок-схема решения этой задачи показана на рисунке, а рядом приведен текст процедуры, реализующей этот алгоритм

Блок-схема решения этой задачи показана на рисунке, а рядом приведен текст процедуры, реализующей этот алгоритм

В этой структуре условное_выражение может быть только целого типа

В этой структуре условное_выражение может быть только целого типа

Y = X ; L : X = 5;

Y = X ; L : X = 5;

D = b * b -4* a * c ; if (D>=0) { x1=(-b-sqrt(D))/(2*a); x2=(-b+sqrt(D))/ ( 2 * a ) ;

D = b * b -4* a * c ; if (D>=0) { x1=(-b-sqrt(D))/(2*a); x2=(-b+sqrt(D))/ ( 2 * a ) ;

Список используемой литературы: 1

Список используемой литературы: 1
Материалы на данной страницы взяты из открытых истончиков либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.
15.08.2022