04 Operators

27
Бублик Володимир Васильович Програмування - 2 Лекція 4. Базові поняття програмування. Оператори Лекції для студентів 2 курсу

Transcript of 04 Operators

Page 1: 04 Operators

Бублик Володимир Васильович

Програмування - 2

Лекція 4. Базові поняття програмування.Оператори

Лекції для студентів 2 курсу

Page 2: 04 Operators

© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори

2

Прості оператори

• Тотожній• Операторний вираз• Блок• Оператори керування

Page 3: 04 Operators

© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори

3

Тотожній (null statement)

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

Приклади • 1. int k=0;• while (++k>0) • /* тотожній оператор */;• cout<<k<<endl; // -2 147 483 648• 2. while (*t++ = *s++)• /* тотожній оператор */ ;

Page 4: 04 Operators

© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори

4

Операторний вираз (expression statement)

Вираз обчислюється, а результат ігнорується, якщо тільки він не запам’ятовується внаслідок стороннього ефекту, наприклад, завдяки lvalue.

Приклади• double x = 0;• double a = 1.0;• x = x+a;• x += a;• x++;• x;• cout<<”Hallo, world!”<<endl;

Page 5: 04 Operators

© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори

5

Оператори керування

• Оператор виходу з блоку break служить для виходу з блоку (припинення циклу)

• Оператор продовження (циклу) continue забезпечує перехід на наступну ітерацію циклу;поза циклом не вживається

• Оператор виклику функції f(e1, e2, …, en);• Оператор виходу з функції return expression;

Page 6: 04 Operators

© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори

6

Складені оператори

• Розгалуження• Перемикач• Цикл

Page 7: 04 Operators

© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори

7

Розгалуження може бути скороченим і повним.Скорочене розгалуження:

if (x>y){ z = y; y = x; x = z;}

Розгалуження

Page 8: 04 Operators

© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори

8

Повне розгалуження:

• if (n % 2 == 0) // (!n%2)• {• n /= 2; x *= x; //n = n/2; x = x*x;• }• else• {• n--; y *= x; //n = n-1; y = y*x;• }

Розгалуження

Page 9: 04 Operators

© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори

9

Перемикач (switch) дає компактний спосіб запису вкладених розгалужень

switch(selector){ case integral-value1 : statement; break; case integral-value2 : statement; break; case integral-value3 : statement; break; case integral-value4 : statement; break; (...) default: statement; }

Перемикач

Page 10: 04 Operators

© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори

10

Перемикач

• week day;• int d;

• cout<<"Give your day: ";• cin>>d;• day = (week)d;•• switch (day)• {• case monday:• cout<<”Monday”<<endl;• break;• case tuesday:• cout<<”Tuesday”<<endl;• break;

• case wednesday:• cout<<”Wednesday”<<endl;• break;• case friday:• cout<<”Friday”<<endl;• break;• case saturday:• cout<<”Saturday”<<endl;• break;• case sunday:• cout<<”Sunday”<<endl;• break;• default :• cout<<”Mistaken day:”

<<day<<endl;• }

Page 11: 04 Operators

© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори

11

Альтернатива за замовчуванням default найчастіше служить для виявлення помилкових значень у даних

У попередньому прикладі це значення, відмінні від номерів дня тижня

Якщо default не було, програма не помітила б некоректного значення

Перемикач

Page 12: 04 Operators

© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори

12

• int aCounter=0, bCounter=0;• char c;• for (int i=1; i<5; ++i)• { //Для чого потрібен break ?• cin>>c;• switch(c)• {• case 'a':• ++aCounter;• case 'b': // bCounter is in fact a+b Counter • ++bCounter;• }• } // Скільки літер a і b?• cout<<aCounter<<' '<<bCounter<<endl;

Приклад. Перемикач без break

Page 13: 04 Operators

© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори

13

• int aCounter=0, bCounter=0;• char c;• for (int i=1; i<5; ++i)• { //Відсутність груба break помилка• cin>>c;• switch(c)• {• case 'a':• ++aCounter; break;• case 'b':• ++bCounter; break;• }• } // Скільки літер a і b?• cout<<aCounter<<' '<<bCounter<<endl;

Виправлений приклад перемикача

Page 14: 04 Operators

© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори

14

Цикл з лічильником (for statement)

for (ініціалізація параметру циклу;умова продовження циклу;вираз для обчислення нового значення параметру)

• оператор;• int n;• double x, y =1;• … // взяти значення x, n• //Визначення лічильника прямо в циклі• for (int i=0; i<n; i++) //можна i +=1;• y*=x;• … // віддати значення y• Зауваження• for ( ; ; ) ?

Page 15: 04 Operators

© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори

15

Цикл з передумовою (while statement)

while (умова продовження циклу)оператор;

• int n;• double x, y =1;• … // взяти значення x, n• int i=0; //ініціалізація параметру циклу;

• while (i<n)• {• y*=x;

i +=1; // обчислення нового значення параметру• }• … // віддати значення y

Page 16: 04 Operators

© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори

16

Цикл з передумовою. Швидка степінь

• int n;• double x, y =1;• … // взяти значення x, n• int k = n; • while (k>0)• if (k % 2)• {k--; y *= x;}• else• {k/=2; x*=x;}• … // віддати значення y

Page 17: 04 Operators

© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори

17

Цикл з передумовою. Приклад з інваріантами

• int n;• double x, y =1;• … // взяти значення x, n• int i=0;

// y == 1 && i =0 => y == x**i • while (i<n)• {• y*=x; i +=1; // y == x**i• } • // y == x**i && i == n => y == x**n• … // віддати значення y

Page 18: 04 Operators

© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори

18

Цикл з передумовою. Швидка степінь

• int n;• double x, y =1;• … // взяти значення x, n• int k = n; • while (k>0)• if (k % 2)• {k--; y *= x;}• else• {k/=2; x*=x;}• … // віддати значення y

Page 19: 04 Operators

© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори

19

Цикл з передумовою. Ще один приклад інваріантів

• int n;• double x, y =1;• … // взяти значення x, n• int k = n; // z == y*x**k => z == x**n• while (k>0)• if (k % 2)• {k--; y *= x;} // y*x**k == (y*x)*x**(k-1) ==x**n• else• {k/=2; x*=x;} // y*x**k == y*x**(k/2)**2 ==x**n• … // віддати значення y• // k == 0 => x**n == y*x**k == y

Page 20: 04 Operators

© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори

20

Цикл з постумовою (do-while loop)

do операторwhile (умова продовження циклу);

• do• {• t=s;• s=(s+x/s)*0.5;• }• while ((fabs(s-t)/s)>eps);

Page 21: 04 Operators

© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори

21

Нескінчений цикл

• int n; char ch;

• while (true)• {• cout<<"Give your n:";• cin>>n;• cout<<"Fibonacci "<<‘(‘<<n<<“)=“

<<Fibonacci(n)<<"\n";• cout<<"Repeat (y/n)?";• cin>>ch;• if (ch=='n') break;• }

Page 22: 04 Operators

© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори

22

Вправи

1. Виразити цикл з лічильником через цикл з передумовою2. Виразити цикл з передумовою через цикл з постумовою3. Виразити цикл з постумовою через цикл з передумовою4. Усунути break з нескінченого циклу

Page 23: 04 Operators

© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори

23

Налагодження програм

• Макрос суджень assert

• Блок випробувань try

Page 24: 04 Operators

© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори

24

Макрос суджень assert

Використовується для виявлення помилок програмування

Необхідно включити <cassert>#include <cassert>

В робочій версії програми відмикається командою#define NDEBUG

• #ifdef NDEBUG• #define assert (exp) ((void)0)

Page 25: 04 Operators

© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори

25

Судження (assertion)

#include <cassert>int mod(int m, int n)

• {• int q=0, r=m;• assert ((m==n*q+r) && (r>=0));• while (r>=n)• {• q++; r-=n;• assert ((m==n*q+r) && (r>=0));• }• assert ((m==n*q+r) && (r>=0) && (r<n));• return r;• }

Page 26: 04 Operators

© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори

26

Блок випробувань try

Блок випробувань try

Використовуєоператор спричинення throwоператор захвату catch

Використовується для виявлення помилкового використання програми

Не відмикається ніколи

Page 27: 04 Operators

© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори

27

Блок випробувань

• int n;

• try• {• cout<<"Give your n:";• cin>>n;• if (n<0) throw n; • cout<<"Fibonacci= "<<Fibonacci(n)<<"\n";• }• catch (int n)• {• cout<<"You gave negative "<<n<<endl;• }