Понятие разветвляющихся алгоритмов. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Понятие разветвляющихся алгоритмов.



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

Пример 1: Вычислить значение функции, график которой имеет вид:

 

Условный оператор.

Форматы оператора.

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

Форматы оператора:

I f(выражение)

   оператор_1;

[ else оператор_2;]   

Пример 2. Оператор, вычисляющий у=|х|.

if (X>=0) y=x;

else  y=-x;

Сокращённый условный оператор.

Условный оператор может не иметь часть else, тогда он называется сокращённым условным оператором.

 

i f (выражение) оператор_1;

 

оператор_1

 

Вложенная конструкция if.

В качестве внутренних операторов оператор i f может использовать любой оператор, в том числе и условный. То есть оператор i f может иметь вложенную конструкцию, в этом случае часть else связывается с ближайшим предыдущим i f в том же блоке, не имеющим части else.

Примеры 3.

1)if(n>0)   // 1 оператор if

if(a>b) z=a; // 2 оператор if

else z=b; // часть else относится к 2-ому оператору if

2)if (n>0)  // 1 оператор if

  { if (a>b) z=a; // 2 оператор if

}

else z=b; // часть else относится к 1-ому оператору if

 

Если необходимо выполнить одновременно несколько операторов, то используется составной оператор или блок, представляющий собой группу операторов, заключённую в фигурные скобки { }.

Многоуровневые вложения.

Пример 4. Если х является символом a, то y=1. Если х является символом b, то y=2, z=3. Если х является символом с, то y=4, в остальных случаях вывести на печать error.

 

i f(выражение_1)                           if (x==’ a’)

   оператор_1;                                y=1;

else i f(выражение _2)                    else if (x==’b’)

   оператор _2;                                    { y=2; z=3;

                                                                   }

   else i f(выражение _3)                      else if (x==’c’)

           оператор _3;                                        y=4;

           else оператор _4;                                 else printf(“error”);

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

Условие Запись условия на языке С
Целое число а – чётное? a % 2==0
Целое число а – нечётное? a % 2==1
Целое число k кратно 7? k % 7=0
Каждое из чисел a, b положительно? (a>=0) &&(b>=0)
Только одно из чисел a, b является положительным? ((a>=0) && (b<0)) || ((a<0) && (b>=0))
Хотя бы одно из чисел a, b, c является отрицательным? (a<0) || (b<0) || (c<0)
Число х удовлетворяет условию a <x <b? (x>a) && (x<b)
Число х имеет значение в промежутке [1,3]? (x>=1) && (x<=3)
Целые числа a и b имеют одинаковую чётность? ((a % 2==0) && (b %2==0)) ||((a % 2==1) && (b % 2==1)) или (a % 2==b % 2)
Точка с координатами (x,y) лежит в круге радиуса r с центром в точке (a,b)? (x-a)*(x-a) +(y-b)*(y-b) < r*r
Уравнение ax2 + bx+c=0 не имеет действительных корней? b*b -4*a*c < 0
Точка (x,y) принадлежит первому или третьему квадранту? ((x >0) and (y > 0)) or ((x <0) and (y < 0))
Точка (x,y) принадлежит внешности единичного круга с центром в начале координат или его второй четверти? (x*x+y*y>1) || ((x*x+y*y<=1) && (x<0) && (y>0))
Целые числа a и b являются взаимопротивоположными? a == - b
Целые числа a и b являются взаимообратными? a * b = =1
Число a больше среднего арифметического чисел b, c, d? a > (b + c + d) / 3

Условия в графике

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

Попадает ли точка (x, y) в квадрат со стороной 10 и центром в начале координат? Квадрат – это пересечение двух множеств, заданных двойными неравенствами:

 

Операция & в математике называется конъюнкцией. Если мы запишем два условия, соединяя их операцией &, это означает, что полученное «большое» условие будет истинным только если оба «маленьких» условия будут истинны. Конъюнкция требует одновременного выполнения условий. В алгебре конъюнкции соответствует система утверждений (уравнений или неравенств).

С помощью операции & описываются пересечения множеств, поскольку точка входит в пересечение множеств, если она входит в оба множества ОДНОВРЕМЕННО.

 

Попадает ли точка (x, y) в множество с двойной штриховкой? Это множество является пересечением круга с центром в точке (5, 0) и радиусом 5*Sqrt(2) и квадрата с центром в начале координат и стороной 5.

Как проверить, попадает ли точка в круг? Круг задается неравенством (x – 5)2 + y2 <= 50

 

if ((x – 5)* (x – 5) + y*y) <= 50) printf (“Yes”)

else                                              printf (“No”);

 

Для описания пересечение двух этих множеств, используем конъюнкцию.

 

if ((-5 <= x) && (x <= 5) && (-5 <= y) && (y <= 5)) && ((x – 5)* (x – 5) + y*y) <= 50)) then

printf (“Yes”)

else printf (“No”);

 

Каждое условие заключается в скобки: (условие для квадрата) && (условие для круга).

Как записать условие для этой фигуры?

3.2.7 Использование операции | (ИЛИ).

 

Наравне с логическим «и» или конъюнкцией существует логическое «или», дизъюнкция, операция |. В отличие от операции &, эта операция обозначает выполнение хотя бы одного из условий. Выражение «(x < 3) || (y > 5)» читается как «x больше трех или y больше пяти» и является истинным в случае выполнения хотя бы одного из условий. В алгебре дизъюнкции соответствует совокупность утверждений (уравнений или неравенств).

Какой смысл имеет операция || применительно к множествам?

Если мы запишем условие для пересечения круга и квадрата, заменив & между ними на |, мы получим следующее условие: точка принадлежит квадрату или кругу.

 

if( ((-5 <= x) && (x <= 5) && (-5 <= y) && (y <= 5)) || (Sqr(x – 5) + Sqr(y) <= 50))

printf (“Yes”);

else printf (“No”);

 

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

 

Оператор-переключатель.

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

switch ( выражение )

{

case< константа_1 >:< операторы_1 >;

case< константа_2 >:< операторы_2 >;

...

case< константа_n >:< операторы_n >;

 [ default: < операторы >;]

}

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

Операторы, связанные с меткой default выполняются, если ни одна из констант в операторах case не равна значению выражения. Вариант default необязательно должен быть последним.

Если ни одна из констант не соответствует значению выражения и вариант default отсутствует, то не выполняется никаких действий.

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

break – оператор завершения, прекращает выполнение ближайшего внешнего оператора switch, while, do или for.  

Пример 5. Если х является символом a, тораспечатать case А. Если х является символом b или символом с, тораспечатать case B or C, в остальных распечатать Not case А, B or C.

switch (x)

{

case’A’:printf(“case A\n”);

case’B’:

case’C’:printf(“case B or C\n”);

default: printf(“Not case А, B or C \n”);

}

Пример 6. Составить программу, выполняющую функции простейшего арифмометра

#include <stdio.h>

#include <conio.h>

void main()

{ int a,b,y,s;

char Znak;

clrscr();

printf(“\nВведите а, знак операции, b \n”);

scanf (“%d %c %d”,&a,&Znak,&b);

s=1;

switch(Znak)

{

 case’+’: y=a+b; break;

case’-’: y=a-b; break;

case’*’: y=a*b; break;

case’/’: y=a/b; break;

default: printf(“ Недопустимый знак операции \n”);

      s=0;break;

}

if (s==1) printf(“\n%d %c %d \n”, a,Znak, b);

getch();

}



Поделиться:


Последнее изменение этой страницы: 2020-12-09; просмотров: 101; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.17.20 (0.023 с.)