17099

Обчислювальний процес, що розгалужується, з різними логічними умовами: оператор if... else, умовна операція (?:), оператор switch, оператор break, оператор goto

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

Информатика, кибернетика и программирование

Лабораторна робота № 11 Тема: Обчислювальний процес що розгалужується з різними логічними умовами: оператор if... else умовна операція : оператор switch оператор break оператор goto Ціль роботи: Вивчити реалізацію в мові ветвящихся обчислювальних процесів . Навчитися писат

Украинкский

2013-06-29

107 KB

2 чел.

Лабораторна робота № 11

Тема:  Обчислювальний процес, що розгалужується, з різними логічними умовами: оператор if... else, умовна операція (?:), оператор switch, оператор break, оператор goto

 Ціль роботи: Вивчити реалізацію в мові ветвящихся обчислювальних процесів . Навчитися писати програми, використовуючи оператори: розгалуження if...else, переключення switch у парі з оператором break, оператор переходу goto, тернарную умовну операцію (?:).

Обладнання:ПК

Теоретичні відомості

Обчислювальний процес, що розгалужується, застосовується в тих випадках, коли необхідно зробити вибір одного з варіантів подальших чи дій обчислень у залежності від поточних значень перемінних і логічних умов. Наприклад, зробити обчислення по однієї чи по іншій формулі.

Оператор if…else(якщо…інакше)

Формат оператора if…elseприведено нижче:

if(<вираження>) <оператор 1>

[else <оператор2>]

Дії оператора залежать від значення вираження. Реалізація різних можливостей виконується такими способами. Якщо <вираження> у дужках не дорівнює  (“Істинно”), то буде виконаються <оператор1>. У противному випадку, якщо зазначене <вираження> дорівнює (“Ложно”), те буде виконуватися <оператор2> у блоці else, якщо він присутній.

У тілі оператора if може знаходитися один чи більш операторів. Якщо повинні виконуватися два чи більш оператори, їх необхідно укласти в операторные дужки: "{" і "}". <Вираження> являє собою запис логічної чи умови умов. Наприклад: 1) if(i<=j)...;  2) if(size= =a)...;  3) if(t>10 && v<3) ..;  4) if(a){…}else{…};5)if(!a){…}else{…}...

У першому випадку <вираження> щире, якщо значення перемінної i буде чи менше дорівнює значенню перемінної j; у другому випадку умова буде істинно, якщо значення перемінних size і a будуть рівні; у третім вираженні істина буде дотримуватися, коли перемінна t буде більше десяти “И” (&&) перемінна v буде менше трьох. У четвертому випадку перший блок буде виконуватися при а не рівному  , у противному випадку виконується блок після else. У п'ятому виконуються дії, зворотні, зазначені в четвертому варіанті. Замість перемінних можна використовувати вираження, що будуть безпосередньо обчислюватися, наприклад: if ( (i+2)/3 < 4*j )...виділення. Основні операції, що ставляться між порівнюваними величинами, що випливають :

= =  -  знак "дорівнює" (Не плутати з присвоюванням "="(!));

!  =  -  знак "не дорівнює";

<  -  знак "менше";

<=  -  знак " чименше дорівнює";

>  -  знак "більше";

>  =  - знак " чибільше дорівнює".

Основні  логічні операції, що ставляться між порівнюваними вираженнями (якщо їхній два як у прикладі 3 чи більш), що випливають :

! - операція "НЕ". Приклад: if ( !(num % 2) )... // істина -якщо num нечетно.

&& - операція "И". Приклад 3 (див. вище).

|| - операція "ЧИ". Приклад: if ( i+n*2<l || i%2=0)...

Детально логічні операції будуть розглянуті в наступній самостійній роботі. Нижче приведений фрагмент програми, що виконує наступні дії: запитує на введення три числа і видає в результаті порівняння найменше з них. Оператор if…elseдопускає можливість вкладеності при розгалуженні, що забезпечує гнучкість реалізації логіки і компактність запису операторів.

Приклад

...

printf("Увести три числа через пробіл: ");

scanf(" %d%d%d ", &a, &b, &c);

if (a<=b && a<=c) printf("\ n Найменше: %d", a);

else

if (b<=a && b<=c) printf("\ n Найменше: %d", b);

else printf("\ n Найменше: %d", c);

...

Умовна тернарная операція (?:)

Синтаксис даної операції наступний:

<вираження1> ?<вираження2> : <вираження3>;

Результат операції буде дорівнює <вираженню2> у тому випадку, якщо <вираження1> щире, у противному випадку результат буде дорівнює <вираженню3>. Нижче показаний приклад реалізації даної конструкції.

int result = (i<j) ? i : j ; // Перемінної result привласнюється найменше значення // (i чи j), якщо i < j те i, інакше.

Оператор варіанта switch

Оператор вибору варіанта switch заміняє трохи операторів if…else...Звичайно оператор switch використовується тоді, коли потрібно вибір і виконання тільки однієї послідовності операторів з декількох можливих, хоча можливості оператора switch не обмежуються цим випадком.

Синтаксис оператора switch:

switch (<вираження>)

{

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

<оператор 1>

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

<оператор 2>]

...

[case <константне_вираження_n>

<оператор n>]

[default:

<оператор>]

}

Після обчислення вираження типу int у ( у заголовку оператора switch) результат порівнюється послідовно з константними_вираженнями, що коштують після зарезервованих слів case, що разом з константними_вираженнями є внутрішніми мітками оператора, Після константних_виражень обов'язково ставиться ознака мітки ":". Порівняння значення вираження починається із самого верхнього константного_вираження і далі, поки не буде встановлена їхній відповідність. Тоді виконуються оператори після відповідної мітки case, на яку передається керування. Для того щоб припинити послідовне виконання операторів і вийти з оператора switch, необхідно після групи операторів, що належать обраному case, поставити оператор break. Якщо break відсутній, то послідовно виконуються всі оператори, а мітки не враховуються.

Послідовність операторів, що коштують після слова default (умовчання), виконується тоді, коли значення вираження не збігається з жодним константним_вираженням. Приклад показує можливості оператора switch. Функція error_message виводить одне з трьох повідомлень у залежності від значення, коли помилки (параметр error_code).

Приклад

  void error_message(int error_code)

 { switch(error_code)

  { case 1: printf("\n повідомлення 1"); break;

  case 2: printf("\n повідомлення 2"); break;

  case 3: printf("\n повідомлення 3"); break;

  default : printf("\n невірний код помилки");

  }

 }

Приклад

/*    ЗАНЯТТЯ N 5

Виконав студент групи .........   Петров Ю.В.

Застосування операторів if, switch, тернарной операції (? :)

на прикладі простого калькулятора. Більш складні умови

для оператора switch приведені в тексті програми       */

#include <stdio.h>

#include <conio.h>

#include <math.h>

int main(void)

 {  float a,b,rez;

    int s,p,h;

    char oper, flag=' ';

    clrscr();

    printf("\n Уведіть через пробіл два числа:  ");

    scanf(" %f %f ", &a, &b);

    printf(" Уведіть знак операції (+ - * /): ");

oper1: oper=getche();

    switch(oper)

{ case '+': rez=a+b; break;

  case '-': rez=a-b; break;

  case '*': rez=a*b; break;

  case '/': rez=a/b; break;

  default : printf("\n Повторите введення знака: ");

     goto oper1;

 }

    printf("\n Результат операції: %5.2f\n",rez);

oper2: printf("\n Уведіть цифру в інтервалі (-9...+9) :  ");

    scanf("%d",&s);     //Умови для оператора switch:

    if(s<0)             //якщо    s=0, те - a++, p++, h++

     { s=abs(s);        //якщо    s=1, те -      p++, h++

      flag='-';         //якщо    s=2, те -           h++

     }                  //якщо    s=3, те - a--

    else flag=' ';      //якщо    s=4, те -      p--

    if(s<=9)            //якщо    s=5, те -           h--

   //якщо s=6..7, те - a=1, p=1, h=1

    switch(s)           //якщо    s=8, те - a=0, p=0, h=0

      {case 0:                                 a++;

case 1:                                 p++;

case 2: printf("\tВы ввели %c%d",flag,s); h++; break;

case 3: printf("\tВы ввели %c%d",flag,s); a--; break;

case 4: printf("\tВы ввели %c%d",flag,s); p--; break;

case 5: printf("\tВы ввели %c%d",flag,s); h--; break;

case 6: case 7: printf("\tВы ввели %c%d",flag,s);

    a=1; p=1; h=1; break;

case 8: printf("\tВы ввели %c%d",flag,s);

    a=0; p=0; h=0; break;

default: printf("\tВы ввели %c%d \n\

на границі інтервалу",flag,s);

  goto oper2;

  }

else { printf("\tВы ввели число поза інтервалом (-9...+9)\n");

       goto oper2;

     }

printf("\n Результат switch: a=%5.2f p=%2d h=%2d\n",a,p,h);

getch();

if (p==0) {b=10; a=10;}

else      {b+=b/p; a+=a/p;}

printf("\n Результати обчислень: a=%5.2f b=%5.2f",a,b);

rez=(b<a)?b:a;

printf("\n Результат тернарной операції: res=%5.2f",rez);

getch();

return 0;

}

/*Уведіть через пробіл два числа:  54 32

 Уведіть знак операції (+ - * /): /

 Результат операції:  1.69

 Уведіть цифру в інтервалі (-9...+9) :  -9

     Ви ввели -9  на границі інтервалу

 Уведіть цифру в інтервалі (-9...+9) :  -6

     Ви ввели -6

 Результат switch: a= 1.00 p= 1 h= 1

 Результати обчислень: a= 2.00 b=64.00

 Результат тернарной операції: res= 2.00    */

Приклад програми на С++

Знайти суму ряду

  y = , де    a  x  b,    x = c.

Варіанти завдань приведені в таблиці 4.1.

Вар.

f1

f2

A

b

c

6

X4-cosx

tgx+2x

1

5

0,5

#include<iostream.h>

#include<stdio.h>

#include<math.h>

void main()

{int a,b;

double x,y,c;

printf("Enter a,b,c\n");

scanf("%d%d%lf",&a,&b,&c);

printf("|  x  |     y     |\n");

printf("-------------------\n");

x=a;

l1:

y=(pow(x,4)-cos(x))/(tan(x)+2*x);

printf("|%5.2lf|%11.8lf|\n",x,y);

if(x<b) {x=x+c;

goto l1;

}

}

Хід роботи

  1.  Відповідно до індивідуального завдання розробити програму з застосуванням операторів розгалуження, вибору варіанта, розриву, переходу (при складанні програми використовувати оператори if…else,switch,break,goto,операцію (?:) у двох-трьох варіантах).
  2.  Набрати програму й усунути помилки.
  3.  Вивчити роботу операторів, різні можливості їхнього застосування.
  4.  Одержати результати.
  5.  Оформити звіт і зробити Захист роботи по роботі, вивчивши контрольні питання по темі.

Вимоги до змісту звіту приведені в лабораторній  роботі№1.

Індивідуальне завдання 

Обчислити значення функції

y = f(x), де

                f1(z), якщо z < 0;

        x =   f2(z), якщо 0 z 8;     

                f3(z), якщо z > 8;

                     z = cos(с).

Значення функцій приведені в таблиці 5.1.

Таблиця 5.1 - індивідуальне завдання

Вар.

f(x)

f1(z)

f2(z)

f3(z)

c

1

x2+8x-6

z3-3z2

zln(z)

Ez-e-z

5,1

2

X3lnx2

e-z+3z

ln|z|

Cosz+z2

5,4

3

X1/4+sinx

2z-ln|z|

tgz-2z

Sin3z

4,1

4

X4+2sinx2

sinz+tgz

cos3z+3/z

Z2+lnz2

3,2

5

Cosx3

z2+2sinz

lnz+2z

Ez+1/z

4,7

6

Sinx+2lnx

2z+tgz

lnz4+2z

Cosz+2z

1,3

7

Sin4x2

sinz2-z3

2sinz2

1,6

8

Tgx-4x3

1/cos2z

z-ln|z|

Z3+sinz

1,5

9

Lnx-e2x

z2+ez

cos4z/z3

Tg(z+1/z)

2,7

10

2x-lnx

2cosz+1/z

z3-2ln|z|

Tg2z+z3

3,8

11

3x-sinx

3tg3z

1/cos4z

E2z+sinz

1,6

12

4x2+cosx

3z/sinz

z2+2sinz

2z-ln|z|

2,4

13

+cosx

z2+lnz2

ez+1/z

Z4-sinz

4,1

14

x1/3+2x

ln|cosz|

2z+ez

Tg2z

2,5

15

Sin4x+2x

z5/sin2z

e-2z+tgz

Cos4z+z1/3

3,2

16

Tg4x+1/x

z/sinz1/5

2ztg3z

Z+8

1,4

17

Ln(1/x)

zsin2z-8

lnsinz0,8

-2,5

2,3

18

e2x+4x

cos( /4)-z

1/(ez+1)

arctg(z+3)

4,1

19

Cosx4+x/2

sin(z+30 )

lncos(z/6)

e-tg(z-2)

3,2

20

2tgx+ex

z+cos( +z)

z3+z1/3

Z4-lnz

2,8

21

2lnx2

arccosz2

sinz+lncosz

Z3-sin( x)

1,7

22

Cos2x/3

z2+ln(z+4)

e(z-5)+sinz

2,2

23

1/tgx4

e-4z+2+z2

cos(z1/3+2)

Sin( +4z2)

5,6

24

e2x-x3

tg(z2+)

ln(sinz+5)

Z4+z2-cosz

3,4

25

Tgx-2lnx

arcsin(z+3)

z3-z2+cosz

Ln(z3+4z)

2,5

26

Cosx4+x/2

lnsinz0,8

cos( /4)-z

Z/sinz1/5

3,7

27

Ln(x+x2)

2ztg3z

sin( +4z2)

Z3+z1/3

2,6

28

Cosx4+2x

tg(z+1/z)

e2z+sinz

Cosz1/5

3,8

29

Sin4x+2x

z2+lnz2

cos3z+3/z

Cos( /4)-z

5,8

30

3ln(x2+5)

z4-lnz

sinz+tgz

Sinz+lncosz

3,5

Контрольні запитання

  1.  Який тип повинний мати вираження в операторах if і switch?
  2.  Чи можна використовувати оператор goto для передачі керування на else, мітку case…;default:?
  3.  За допомогою яких операторів можна достроково завершити виконання операторів if…else,switch?
  4.  Чи можна використовувати в якості вираження в операторі switch покажчик?
  5.  Чи можна використовувати в якості константного вираження в операторі switch константу?
  6.  Чи обов'язково використовувати оператор break в операторі switch? Яке його дія? Що відбувається при відсутності break?
  7.  Якому з вкладених операторів if відноситься else при наявності і відсутності операторних дужок  і  .
  8.  Які типи операндів припустимі в умовній операції (? :)?
  9.  Поясните роботу операторів у приведених прикладах.
  10.  Як оголосити і використовувати мітки в програмі?


 

А также другие работы, которые могут Вас заинтересовать

85446. Разработка конструкции ПП. Предварительный расчет надежности 627.55 KB
  Печатная плата ПП - изделие состоящее из плоского изоляционного основания с отверстиями пазами вырезами и системой токопроводящих полосок металла проводников которые используют для установки и коммутации электрорадиоизделия ЭРИ и функциональных узлов в соответствии с электрической принципиальной схемой
85448. Расчет кинематических параметров манипулятора и моделирование в среде SimMechanics 383.02 KB
  Расчет кинематических параметров манипулятора и моделирование в среде SimMechanics. На Рис.1 показана схема четырехзвенного манипулятора. Необходимо: Определить параметры манипулятора по представлению Денавита - Хартенберга (системы координат и параметры звеньев).
85449. Изучение конструкции компрессорных установок, работы основных элементов аппаратуры, технических характеристик 1.35 MB
  Существующий унифицированный комплект аппаратуры автоматизации шахтных компрессорных станций типа УКАСМ предназначен для автоматического управления шахтными компрессорными станциями оборудованными поршневыми и центробежными компрессорами.
85450. Сети нового поколения. Концепция NGN 1.21 MB
  При этом ресурсы одной сети не могут использоваться другой сетью по ряду причин правовые конкурентные рыночные и др. В первой главе я попытаюсь дать описание сети нового поколения обозначить её преимущества и актуальность внедрения на российский рынок связи. В результате обеспечивается централизация при которой число иерархических уровней в телекоммуникационной сети начинает уменьшаться вследствие роста производительности процессоров. Наиболее простым вариантом реализации обмена данными между двумя точками является связь двух персональных...
85453. В.Нестайко «Космонавти з нашого будинку» 43 KB
  Мета: ознайомити учнів з особистістю В.Нестайка, викликати інтерес до його творчості; удосконалювати читацькі навички, уміння складати план і стисло переказувати прочитане. Збагачувати активний словниковий запас учнів; розвивати уміння характеризувати дійових осіб.