Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

2.2. Условное выражение. 2.3. Оператор выбора switch(). Лекция 5. Программирование разветвляющихся вычислительных процессов




2. 2. Условное выражение

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

a=(< условие> )? < выражение1> : < выражение2>;

Правило работы условного выражения: если условие истинно, то переменной a присваивается значение < выражение1>; если условие ложно, то переменной a присваивается значение < выражение2>. Например,

x=(w> 5)? I*U: I/U;

Здесь, переменной x будет присвоено значение выражения I*U, если условие w> 5 истинно, и значение выражения I/U, если условие w> 5 ложно.

2. 3. Оператор выбора switch()

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

switch(< выражение–ключ> )

{

  case < константное_выражение1>:

         операторы1;

         break;

  case < константное_выражение2>:

         операторы2;

         break;

         …

  default:

         операторыV;

}

< выражение–ключ> – выражение любого типа; результатом вычисления этого выражения может быть значение целого или символьного типа.

Правила работы оператора switch():

1. Вычисляется значение < выражение–ключ>.

2. Это значение последовательно сравнивается со значением каждого из < константного_выражения>, следующих после каждого case.

3. Если значения ключа и какого-либо < константного_выражения> совпали, то выполняются все операторы, следующие за этим case.

4. Если в этом case встретился оператор break, то оператор switch() прекращает работу. Если в этом case нет оператора break, то будут выполняться все операторы, следующие либо после этого case, либо до ближайшего оператора break, либо до конца оператора switch() при отсутствии операторов break.

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

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

case < константное_выражение>:

В каждом переключателе должно быть не больше одной метки default, однако эта метка может и отсутствовать. В случае её отсутствия при несовпадении переключающего выражения ни с одним из константных выражений, помещаемых вслед за case, в переключателе не выполняется ни один из операторов. Сами по себе метки  case < константное_выражение>: и default не изменяют последовательности выполнения операторов. Если не предусмотрены переходы или выходы из переключателя, то в нём последовательно выполняются все операторы, начиная с той метки, на которую передано управление. С помощью оператора break выполняется выход из переключателя. Операторы break являются не обязательными в операторе switch(). Они используются для окончания работы последовательности операторов, предшествующих этому break. Если break отсутствует, продолжаются выполняться операторы следующего раздела, пока не будет достигнут оператор break или конец оператора switch().

Оператор switch() отличается от условного оператора if() тем, что он может выполнять только операции проверки строгого равенства, в то время как if() может проверять логические выражения.

Лекция 5

Программирование разветвляющихся вычислительных процессов

Цели:

ü освоить методику написания разветвляющихся вычислительных алгоритмов, перевода таких алгоритмов на язык программирования С++ и разработки соответствующего проекта в среде Visual C++ 6. 0.

Пример 1. Разработать алгоритм и составить по нему программу для вычисления значений функции y = f(x). Необходимо учитывать область определения функции:

 

Ход выполнения работы

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

 При разработке алгоритма будем рассматривать промежутки числовой оси слева направо. Обозначения в алгоритме: ФНЗ – функция не задана; ФНО – функция не определена.

Записывая основной алгоритм решения задачи, вместо вычислений каждой части функции для упрощения будем писать блок1, блок2 и блок3. Поставим в соответствие каждому блоку алгоритм вычисления конкретной функции с учетом её области определения. Последний этап разработки алгоритма решения исходной задачи – подстановка в основной алгоритм вместо блоков 1, 2, 3 соответствующих вычислительных алгоритмов.

Сделаем небольшое замечание относительно записи текста алгоритма. Рекомендуется записывать текст алгоритма «ступеньками», т. е. новый блок «если – иначе» нужно записывать с отступом относительно предыдущего блока «если – иначе» и т. д. Так же следует поступать и при записи текста программы, соответствующей алгоритму. Одной из причин этого является то, что структура алгоритма и программы хорошо просматривается, что может помочь при обнаружении синтаксических ошибок.

Основной алгоритм:

объявление переменных вещ: х, у

ввод х

если х< 5

  блок1

иначе

  если x< 7

      «ФНЗ»

  иначе

      если x< 12

            блок2

иначе

          если х< =15

                       «ФНЗ»

                 иначе

                       блок3  

             все_если

все_если

все_если

     все_если

 

Рассмотрим вычисления в каждом из блоков 1, 2 и 3 отдельно.

Блок1. Требуется вычислить функцию . При вычислении учитываем, что подкоренное выражение должно быть больше или равно нулю и при этом знаменатель не должен равняться нулю. Таким образом, получаем:

если cos(х)> 0

     

      печать у

иначе

  «ФНО»

все_если

 

Блок2. Требуется вычислить функцию . Здесь никаких ограничений на вычисления нет. Таким образом, получаем:

 

печать у

Блок3. Требуется вычислить функцию . При вычислении учитываем, что подкоренное выражение должно быть больше или равно. Таким образом, получаем:

если 25-х> =0

 

    печать у

иначе

«ФНО»

все_если

В основной алгоритм вместо блоков 1, 2, 3 подставим алгоритмы вычисления соответствующих частей функции. В итоге получаем алгоритм решения исходной задачи.

2. Написать программу, соответствующую алгоритму.

Алгоритм Программа
объявление переменных вещ: х, у ввод х если х< 5    если cos(х)> 0                 печать х, у   иначе «ФНО»    все_если иначе   если x< 7         «ФНЗ»   иначе         если x< 12                               печать х, у             иначе         если х< =15                      «ФНЗ»                иначе          если 25-х> =0                                                         печать х, у                      иначе                    «ФНО»             все_если         все_если              все_если     все_если все_если   # include " stdio. h" # include " math. h" int main ( ) {   float x, y;   printf (" x=" ); // ввод значения переменной x   scanf(" %f", & x); // проверка условий   if (x< 5)         if(cos(x)> 0)         {                y=1/sqrt(cos(x));                printf (" x=%f, y=%f\n", x, y);         }         else            printf(" FNO\n" );   else         if(x< 7)                printf(" FNZ\n" );         else                if (x< 12)                {                      y=pow(x, 2);                      printf (" x=%f, y=%f\n", x, y);                }                else                      if (x< =15)                             printf(" FNZ\n" );                      else                             if(25-x> =0)                             {                                   y=sqrt(25-x);                                   printf (" x=%f, y=%f\n", x, y);                             }                             else                                   printf(" FNO\n" );   return 1; }  

3. Создать проект и реализовать данную задачу в среде                Visual C++ 6. 0.

Примечание. В качестве тестового примера можно ввести следующие значения: х=16 и х=30.

 

Пример 2. Разработать алгоритм и составить по нему программу для вычисления значений функции z = f(x, y) в зависимости от попадания точки с координатами (х, у) в область D (область D выделена серым цветом):

 

 


 

Ход выполнения работы

1. В задаче требуется вычислить функцию, вид которой зависит от координат точки координатной плоскости. Если точка с координатами (х, у) попадает в область D, то вычисляется первая часть функции (в алгоритме –   блок 1), в противном случае – вторая часть (блок 2). Процесс написания алгоритма разобьем на четыре этапа:

написание основного алгоритма решения задачи;

определение условия принадлежности точки области D. Так как одна и та же точка не может принадлежать двум непересекающимся областям одновременно, разобьем область D на две области: D1 (треугольник) и D2 (кольцо);

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

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

Обозначения в алгоритме: ФНО – функция не определена.

Рассмотрим отдельно этапы алгоритма.

1. Запишем основной алгоритм решения задачи:

объявление вещ: x, y, z

ввод х, у

если ( ) или ( )

блок 1

иначе

блок 2

все_если

 

2. Математическое определение условий:

a) . Найдем уравнение прямой, проходящей через точки с координатами (-3; 0) и (0; 2). Запишем уравнение прямой в общем виде .

 

Таким образом, уравнение прямой .

.

b) . Определим уравнение окружности с центром в точке (2, 0) радиуса R=2:  (внешняя окружность). Определим уравнение окружности с центром в точке (2, 0) радиуса R=1:   (внутренняя окружность). Так как область D2 находится внутри кольца, включая его границы, то условием принадлежности точки (х, у) области D2 будут неравенства: , .

.

 

3. Вычислительные алгоритмы, соответствующие блокам 1, 2:

Блок 1 Блок 2
если х-у ≠ 0 z=1/(x-y) печать х, у, z иначе «ФНО» все_если если ху > 0 z=ln(xy) печать х, у, z иначе «ФНО» все_если

2. Написать программу, соответствующую алгоритму:

Алгоритм Программа
объявление переменных вещ: х, у, z ввод х, у если (((x> =-3 и x< =0) и (y> =0 и        y< =2*x/3+2)) или       ((x-2)*(x-2)+y*y< =4 и         (x-2)*(x-2)+y*y> =1))   если х-у ≠ 0         z=1/(x-y)         печать х, у, z   иначе        «ФНО»   все_если иначе   если ху > 0        z=ln(xy)        печать х, у, z   иначе        «ФНО»   все_если все_если   # include " stdio. h" # include " math. h" int main ( ) {   float x, y, z;   printf (" x=" ); // ввод значения переменной x   scanf(" %f", & x);   printf (" y=" ); // ввод значения переменной y   scanf(" %f", & y);   if((x> =-3& & x< =0& & y> =0& &        y< =2*x/3+2)||(pow(x-2, 2)+y*y< =4       & & pow(x-2, 2)+y*y> =1))         if(x-y! =0)         {         z=1/(x-y);         printf(" x=%f, y=%f, z=%f\n", x, y, z);         }          else            printf(" FNO\n" );   else         if(x*y> 0)         {         z=log(x*y);          printf(" x=%f, y=%f, z=%f \n", x, y, z);         }         else                printf(" FNO\n" );   return 1; }    

3. Создать проект и реализовать данную задачу в среде                Visual C++ 6. 0.

Примечание. В качестве тестового примера можно ввести значения х=1, у=1 и х=3, у=5.

 

Пример 3. С клавиатуры вводится целое число от 0 до 99, обозначающее количество копеек. Написать программу, которая должна вывести правильно напечатанное окончание слова «копейка».

 

Ход выполнения работы

1. Напишем алгоритм решения задачи. Окончания слов будут зависеть от последней цифры чисел из диапазона от 0 до 9 и от 14 до 99. Исключением будут четыре числа: 11, 12, 13 и 14. В алгоритме и программе используем оператор выбора. Ключом для него будет остаток от деления введенного целого числа на 10 (так можно определить последнюю цифру двузначного целого числа).

2. Написать программу, соответствующую алгоритму:

Алгоритм Программа
объявление переменных цел: х ввод х если x> =11 и x< =14   печать «х копеек» иначе   выбор х%10         случай 1:                «х копейка»            случай 2:                «х копейки»            случай 3:                «х копейки»            случай 4:                «х копейки»            случай 5:                «х копеек»            случай 6:                «х копеек»            случай 7:                «х копеек»            случай 8:                «х копеек»            случай 9:                «х копеек»   все_выбор все_если   # include " stdafx. h" # include " stdio. h" int main( ) { int x; printf (" x=" ); //ввод х scanf(" %i", & x); if(x> =11 & & x< =14)    printf (“%i копеек\n”, x); else {    switch (x%10)    {           case 1:                 printf (“%i копейка\n”, x);                 break;               case 2:                 printf (“%i копейки\n”, x);                 break;               case 3:                 printf (“%i копейки\n”, x);                 break;               case 4:                 printf (“%i копейки\n”, x);                 break;               case 5:                 printf (“%i копеек\n”, x);                 break;               case 6:                 printf (“%i копеек\n”, x);                 break;               case 7:                 printf (“%i копеек\n”, x);                        break;               case 8:                 printf (“%i копеек\n”, x);                 break;               case 9:                 printf (“%i копеек\n”, x);             break;      }   } return 1; }

3. Создать проект и реализовать данную задачу в среде                Visual C++ 6. 0.

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...