У вас вопросы?
У нас ответы:) SamZan.net

Лабораторная работа 2 Разработка программ с ветвлениями 1

Работа добавлена на сайт samzan.net: 2015-07-05

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 6.3.2025

PAGE  39

Лабораторная работа № 2

Разработка программ  с ветвлениями

1. Введение

Ветвление (бинарный выбор, альтернатива) представляет собой структурную конструкцию, изображенную на рис. 2.1. При входе в нее вычисляется значение логического выражения ЛВ. Если оно имеет значение «истина», то выполняется действие A, а если «ложь» - то действие B. Конструкция заканчивается точкой  соединения C. Частным случаем этой конструкции является об-

 

Рис. 2.1. Структура ветвления   Рис. 2.2. Структура обхода

Рис. 2.3. Структура множественного выбора

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

Во всех языках программирования есть операторы, поддерживающие эти структурные конструкции. В языке C/C++ - это операторы if-else, if, switch. В лабораторной работе осваивается синтаксис их правильной записи и разрабатываются программы с их использованием.

2. Логические выражения

Решение о выборе той или иной ветви выполнения программы происходит по значению логического выражения, используемого в операторе if или if-else. Логическое выражение – это синтаксически правильная конструкция из логических величин (констант,  переменных, результатов операций отношений), логических операций и скобок. Логическая величина может принимать одно из двух значений: истина (логическая единица) или ложь (логический ноль), образующих полное множество. Математический аппарат работы с логическими величинами представляет собой алгебру логики или булеву алгебру. В языке С/С++ отсутствует логический тип данных, однако константа или переменная целого типа, равная нулю, в соответствующем контексте трактуется как логический ноль (ложь), а не равная нулю (при любом значении) – как логическая единица (истина). При выводе на дисплей логические величины представляются как 0 или 1.

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

(<Выражение 1> <Знак операции отношения> <Выражение 2>).

(Угловые скобки здесь и далее используются для ограничения элемента записи на псевдоязыке и при записи конструкции на языке С/С++ не ставятся! А вот круглые скобки, окаймляющие ВО, обязательны).

Знаки операции отношения могут быть следующие:

  •  > - больше;
  •  < - меньше;
  •  >= - больше или равно;
  •  <= - меньше или равно;
  •  == - равно;
  •  != - не равно.

Примеры выражений отношения:

(x>0) - используется числовая переменная и числовая константа;

(i==j) - используются две переменные числового или символьного типа;

(c>’s’) - используется переменная и константа символьного типа;

(b*b-4*a*c>=0) - используется выражение числового типа и числовая константа;

(sin(x+M_PI)<(a*x+t+1)/(cos(x)-0.5)) - используются два выражения числового типа;

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

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

Инверсия (отрицание, НЕ, NOT) – превращает логическую величину в противоположную. На языке С/С++ записывается знаком ! перед логической величиной. Результат описывается таблицей:

a

0

1

!a

1

0

Дизъюнкция (логическое сложение, ИЛИ, OR) выполнятся над любым количеством операндов, начиная с двух. Результат дизъюнкции есть 1, если хотя бы один из операндов  имеет значение 1, и равен 0, если все операнды равны нулю. Знак операции дизъюнкции на языке С/С++ записывается || - двумя вертикальными чертами (найдите символ вертикальной черты на клавиатуре!).  Для двух операндов a и b результат описывается таблицей:

a

0

0

1

1

b

0

1

0

1

a || b

0

1

1

1

Конъюнкция (логическое умножение, И, AND) выполнятся над любым количеством операндов, начиная с двух. Результат конъюнкции есть 1, если все операнды  имеет значение 1, и равен 0, если хотя бы один из операндов равен нулю. Знак операции конъюнкции на языке С/С++ записывается && - двумя амперсандами (найдите символ & на клавиатуре!).  Для двух операндов a и b результат описывается таблицей:

a

0

0

1

1

b

0

1

0

1

a && b

0

0

0

1

Логические операции выполняются в последовательности: ! && ||. Для изменения приоритета выполнения используются круглые скобки.

Логические операции позволяют строить сложные логические выражения, например,

!(((fabs(DX)>epsX)||(fabs(F)>epsF))&&(Nckl!=lim)

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

!(a||b)=(!a)&&(!b) - инверсия дизъюнкции равна конъюнкции инверсий и

!(a&&b)=(!a)||(!b) - инверсия конъюнкции равна дизъюнкции инверсий.

3. Операторы if и if-else

Оператор if реализует в языке алгоритмическую конструкцию обход. Его синтаксис имеет вид:

 if (<логическое выражение>) <оператор>;

Если логическое выражение имеет значение истина, то <оператор> языка С/С++ выполняется. Если же оно имеет значение ложь, то не выполняется.

По правилам синтаксиса <оператор> может быть либо простым, либо составным – блоком из нескольких операторов, объединенных фигурными скобками { … } .  Каждый из операторов блока должен заканчиваться ; - точкой с запятой. В конце всей конструкции точка с запятой не является необходимой, хотя и не будет ошибкой (пустой оператор).

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

...

if (k<n) k++;

...

Если же  входящий оператор длинный, то записывают его в следующей строке со сдвигом на две позиции:

...

if (x>0)

 s =(2*sin(x+M_PI)+a*(b-c))/(exp(-(x*x)/(a+b)-4*(a-b));

...

Также обычно поступают, если входящий оператор является составным:

...

if (x>0)

 {

 ...

 ...

 ...

 ...

 }

...

 В оператор if  может входить другой оператор if. Запись

...

 if (<лв1>)

   if (<лв2>)

  if (<лв3>) <оператор>;

...

эквивалентна

...

if ((<лв1>)&&(<лв2>)&&(<лв3>)) <оператор>;

...

 

Оператор if-else реализует бинарное ветвление и имеет следующий синтаксис:

if (<лог. выражение>) <оператор A>; else <оператор B>;

Если логическое выражение истинно, то выполняется оператор A, а если ложно – то оператор B. Каждый из операторов может быть простым или составным.  Форматирование при записи обычно осуществляют следующим образом. Служебное слово else записывают с новой строки под if. Если операторы A и B компактны, то их записывают в тех же соответствующих строках:

...

 if (<логическое выражение>)  <оператор A>;

 else       <оператор B>;

...

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

...

 if (<логическое выражение>)  

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

 else      

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

...

Также следует форматировать текст, если операторы являются составными:

...

 if (<логическое выражение>)  

 {

 ...

 ...

 ...

 }

 else      

 {

 ...

 ...

 ...

 }

...

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

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

...

 if (ЛВ);

else <оператор>

...

эквивалентно

...

if (!ЛВ) <оператор>

...

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

При комбинации операторов if и if-else может возникать сомнение, к какому из if относится else.

 ...

if (ЛВ1)

 if (ЛВ2)  <Оператор A>;

 else   <Оператор B>;

...

По правилам языка, else относится к ближайшему if, т.е. в этом примере реализована блок схема, показанная на рис. 2.4. Если же нужно else отнести к первому if (рис. 2.5), то необходимо выделить входящий в него оператор if (ЛВ2) <оператор B>; фигурными скобками, хотя он единственный.

...

 if (ЛВ1)

   {

   if (ЛВ2)  <Оператор A>;

   }

 else  <Оператор B>;

...

 

Рис. 2.4. Оператор if-else внутри  Рис. 2.5. Оператор if внутри

оператора if     оператора if-else

 

4. Оператор switch

Оператор switch реализует множественный выбор. Его синтаксис имеет вид:

switch (<селектор>)

 {

 case a: <операторы A> break;

 case b: <операторы B> break;

 case c: <операторы C> break;

 ...

 default: <операторы default>

 }

 

Селектором выбора может быть переменная целого или символьного типа. Возможные ее значения перечисляются в блоках case. Оператор switch выбирает то вход, который соответствует значению переменной-селектора. В каждый блок может входить любое число операторов; объединения фигурными скобками они не требуют. В конце каждого блока обычно располагается оператор break (но может и отсутствовать). Если break присутствует, то после выполнения операторов соответствующего блока происходит выход из оператора switch.  Если же break отсутствует, то произойдет выполнение операторов следующего блока  case  до тех пор, пока не встретится  break. Так, в следующем примере,

...

switch (<селектор>)

 {

 case a: <операторы A>

 case b: <операторы B>

 case c: <операторы C> break;

 ...

 default: <операторы default>

 }

...

при входе в case a: сначала будут выполнены <операторы A>, затем <операторы B>, а потом и <операторы C>. Такие возможности оператора switch позволяют реализовывать более сложные многовходовые структуры, чем множественный выбор (рис. 2.3), но в практике программирования их не рекомендуется использовать.

Блок default содержит операторы, выполняемые в том случае, если значение переменной-селектора не соответствует ни одному из перечисленных в case. Этот блок может отсутствовать в операторе switch, но если он имеется, то в последнем case оператор break обязателен.

Множественный выбор может быть реализован вложенными операторами if, но все языки программирования имеют соответствующий оператор (в Паскале – case-of) и следует их использовать. Обычно операторы множественного выбора используются для задания входным данным соответствующих вариантов значений.

5. Задание к работе

  1.  Проанализировать и исполнить программы подраздела Examples \ 02 Ветвления \ 2 if_else. На приведенных примерах освоить синтаксис операторов if и if-else и особенности их использования. Восстановить и зарисовать блок-схемы, реализованные в программах ex020220.cpp, ex020225.cpp, ex020230.cpp, ex020235.cpp, ex020240.cpp. Зафиксировать в рабочем журнале результаты их исполнения для четырех возможных комбинаций ключей, оформив их в виде следующей таблицы:

key1

0

0

1

1

key2

0

1

0

1

ex020220

...

ex020240

  1.  Проанализировать и исполнить программы Examples подраздела Логические операции (раздел Ветвления). Освоить правила записи сложных логических выражений, использующих несколько операций отношения и операции NOT, OR и AND.

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

  1.  
    1.  
    2.  
    3.  
    4.  
    5.  

  1.  
    1.  

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

 

             

    

      

    4.1

   

    4.2

    4.3

    4.4

    4.5

    4.6

    4.7

     4.8

При разработке необходимо записывать уравнение прямой, проходящей через две точки с координатами x1, y1 и x2, y2:

   .

  1.  Разработать программу для проверки, попадает ли точка с заданными на плоскости координатами x и y внутрь пересекающихся окружностей с центрами в точках , и , и радиусами  и . Программа должна выдавать в виде результата сообщение, в какую область попала точка:
    •  не принадлежащую ни одному из кругов;
    •  принадлежащую только первому кругу;
    •  принадлежащую только второму кругу;
    •  принадлежащую и первому, и второму кругу.

  1.  Проанализировать и исполнить программы подраздела Examples\02 Ветвления\3 switch. Освоить синтаксис оператора switch и особенности его использования.

  1.  Разработать программу, присваивающую трем переменным ,  и  значения параметров одного их трех полупроводниковых материалов: германия, кремния или арсенида галлия, в зависимости от введенного ключа выбора G, S или A.

Материал

, эВ

, см-3

германий

16.0

0.67

2.4.1013

кремний

11.9

1.12

1.45.1010

арсенид галлия

13.1

1.43

1.79.106

Затем должны выполняться вычисления величин

  ;

  ,

где  q = 1.60.10-19 Кл – заряд электрона;

 0 = 8.85.10-14 Ф/см – диэлектрическая постоянная;

 k = 8.62.10-5 эВ/К – постоянная Больцмана.

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

Расчет выполняется для значения температуры, заданного преподавателем.

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

  1.  Разработать программу для вычисления корней кубического уравнения. Формульное описание алгоритма приведено в Приложении 2.1 и файле Root3_alg_text.doc, а его блок-схема – в Приложении 2.2 и файле Root3_alg_block.doc. Отладить работу всех ветвей программы с помощью тестовых данных, приведенных в Приложении 2.3 и файле Root3data.doc. При отладке использовать пошаговое исполнение программы с помощью отладчика (клавиша <F8>).

Приложение 2.1

Алгоритм решения кубического уравнения

1). Вычислить

    

2). Если  p = 0, то вычислить  и перейти к п. 5.

3) Если , то нужно вычислить  (знак r совпадает со знаком q);

   

4). Если , то нужно вычислить D 

 

Дальнейшие действия зависят от знаков p и D:

Ветвь 2

Ветвь 3

Ветвь 4

Все корни

вещественные

Один корень вещественный,

а два - комплексные

p<0

;

5). Вычислить корни

- если все корни вещественные, то    i = 1, 2, 3.

- если корни комплексные, то

     

       где .

Примечание:

Обратные функции можно вычислить по формулам

   

Приложение 2.2

Приложение 2.3

Входные и выходные данные четырех тестовых примеров

для программы Root3

(решение кубического уравнения ax3 + bx2 + cx + d = 0)

Ветвь 1

Ветвь 2

Ветвь 3

Ветвь 4

a

2.0

1.5

1.0

2.0

b

3.0

-3.0

4.0

-10.0

c

1.5

-7.5

-10.75

18.0

d

-15.75

9.0

7.5

-10.0

k

0

0

1

1

x1

1.5

-2.0

-6.0

1.0

x2

1.5

3.0

1.0

2.0

x3

1.5

1.0

0.5

1.0

Значения промежуточных переменных для четырех тестовых примеров Root3

(решение кубического уравнения ax3 + bx2 + cx + d = 0)

Ветвь 1

Ветвь 2

Ветвь 3

Ветвь 4

p

0.00000

-2.11111

-5.36111

0.22222

q

-4.00000

1.03704

13.28704

0.37037

w

0.50000

-0.66667

1.33333

-1.66667

D

-

-8.33333

22.45891

0.14815

r

-

1.45297

2,31541

0.47140

z

-

0.33809

1.07040

3.53553

f ()

-

1.22591

0.37307

1.97544

y1

2.00000

-2.66667

-4.66667

-0.66667

u

-

-

2.33333

0.33333

v

-

-

0.50000

1.00000

y2

2.00000

2.33333

-

-

y3

2.00000

0.33334

-

-




1. На тему- ldquo;Финансирование проектов
2. Лучше синица в руке чем журавль в небе
3. Различия осознаваемых мотивов у подростков с разной степенью компьютерной ориентированности.html
4. Радиопередатчик телеметрической систем
5. ПОВРЕЖДЕНИЯ ЖИВОТА План лекции - 1 Определение понятия Повреждения живота причины.
6. Менеджеры по работе с клиентами Помощник руководителя Администратор Можно без опыта
7. реферату- Військові мости римлян на УкраїніРозділ- Архітектура Військові мости римлян на Україні На трьох
8. Уздзеянне звяроў на пладаноскасць і натуральнае ўзнаўленне лесу
9. варианта бесплатно 3
10. Лабораторная работа- Расчёт зоны плавления