View
282
Download
1
Category
Preview:
Citation preview
Бублик Володимир Васильович
Програмування - 2
Лекція 4. Базові поняття програмування.Оператори
Лекції для студентів 2 курсу
© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори
2
Прості оператори
• Тотожній• Операторний вираз• Блок• Оператори керування
© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори
3
Тотожній (null statement)
Ніяк не позначається, зовсім не виконується. Тотожній оператор розміщуємо там, де на вимогу синтаксису повинен знаходитися оператор, але нічого робити не треба.
Приклади • 1. int k=0;• while (++k>0) • /* тотожній оператор */;• cout<<k<<endl; // -2 147 483 648• 2. while (*t++ = *s++)• /* тотожній оператор */ ;
© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори
4
Операторний вираз (expression statement)
Вираз обчислюється, а результат ігнорується, якщо тільки він не запам’ятовується внаслідок стороннього ефекту, наприклад, завдяки lvalue.
Приклади• double x = 0;• double a = 1.0;• x = x+a;• x += a;• x++;• x;• cout<<”Hallo, world!”<<endl;
© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори
5
Оператори керування
• Оператор виходу з блоку break служить для виходу з блоку (припинення циклу)
• Оператор продовження (циклу) continue забезпечує перехід на наступну ітерацію циклу;поза циклом не вживається
• Оператор виклику функції f(e1, e2, …, en);• Оператор виходу з функції return expression;
© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори
6
Складені оператори
• Розгалуження• Перемикач• Цикл
© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори
7
Розгалуження може бути скороченим і повним.Скорочене розгалуження:
if (x>y){ z = y; y = x; x = z;}
Розгалуження
© Бублик В.В. Програмування-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;• }
Розгалуження
© Бублик В.В. Програмування-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; }
Перемикач
© Бублик В.В. Програмування-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;• }
© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори
11
Альтернатива за замовчуванням default найчастіше служить для виявлення помилкових значень у даних
У попередньому прикладі це значення, відмінні від номерів дня тижня
Якщо default не було, програма не помітила б некоректного значення
Перемикач
© Бублик В.В. Програмування-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
© Бублик В.В. Програмування-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;
Виправлений приклад перемикача
© Бублик В.В. Програмування-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 ( ; ; ) ?
© Бублик В.В. Програмування-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
© Бублик В.В. Програмування-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
© Бублик В.В. Програмування-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
© Бублик В.В. Програмування-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
© Бублик В.В. Програмування-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
© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори
20
Цикл з постумовою (do-while loop)
do операторwhile (умова продовження циклу);
• do• {• t=s;• s=(s+x/s)*0.5;• }• while ((fabs(s-t)/s)>eps);
© Бублик В.В. Програмування-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;• }
© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори
22
Вправи
1. Виразити цикл з лічильником через цикл з передумовою2. Виразити цикл з передумовою через цикл з постумовою3. Виразити цикл з постумовою через цикл з передумовою4. Усунути break з нескінченого циклу
© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори
23
Налагодження програм
• Макрос суджень assert
• Блок випробувань try
© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори
24
Макрос суджень assert
Використовується для виявлення помилок програмування
Необхідно включити <cassert>#include <cassert>
В робочій версії програми відмикається командою#define NDEBUG
• #ifdef NDEBUG• #define assert (exp) ((void)0)
© Бублик В.В. Програмування-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;• }
© Бублик В.В. Програмування-2. 4. Базові поняття програмування. Оператори
26
Блок випробувань try
Блок випробувань try
Використовуєоператор спричинення throwоператор захвату catch
Використовується для виявлення помилкового використання програми
Не відмикається ніколи
© Бублик В.В. Програмування-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;• }
Recommended