Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 8 лет назад пользователемПавел Кузнецов
1 Бублик Володимир Васильович Процедурне програмування C/C++ Лекція 3. Базові поняття програмування. Сталі та змінні Лекції для студентів 2 курсу
2 © 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 2 (35) Літерали Літерал (з латинського literal буквальний) це найпростіший обєкт, що позначає сам себе з точністю до обраної системи позначень чи кодування Римська цифра Х позначає число 10 Латиська літера А теж позначає число 10 в шістнадцятковій системі Цифирь ĩ позначає число 10 церковно-слов'янською мовою
3 © 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 3 (35) Цілі літерали 100//десятковий запис //вісімковий (octal) 0х64//шістнадцятковий (hexadecimal, hex) Вісімковими і шістнадцятковими константами варто користуватися лише для типів без знаку, інакше на компютерах з доповненим кодом можна зіткнутися із несподіванками типу значення –1 для константи 0xffffffff
4 © 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 4 (35) Розміщення в пам'яті Яку память виділити для розміщення цілого літералу, наприклад, 1? Півслова? Чи ціле слово? Чи подвійне слово? Що від цього залежатиме? Команди об'єктного коду
5 © 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 5 (35) Disassebly Часом корисно заглядати до асемблерного коду 8: float x=0; mov dword ptr [ebp-0Ch],0 9: x=x+1; fld dword ptr [ebp-0Ch] fadd dword ptr ] fstp dword ptr [ebp-0Ch] 10: double y=0; C mov dword ptr [ebp-14h], mov dword ptr [ebp-10h],0 11: y=y+1; A fld qword ptr [ebp-14h] D fadd qword ptr ] fstp qword ptr [ebp-14h]
6 © 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 6 (35) Тип літералу Визначається з контексту або уточнення типу числового літералу // U, L або UL U L UL // F або L 1.0F L
7 © 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 7 (35) Символьні літерали Декілька систем позначень // 1 //звичайні алфавітно-цифрові символи // з уживаної кодової таблиці ?, -, +, a, b, c, A, B, C, 0, 1, 2, б, в, г, є, ї
8 © 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 8 (35) Символьні літерали // 2 //вісімкові коди // число після back slash вважається вісімковим \77// символ ? \144// символ f \365// символ ї ( з точністю до кодової таблиці ) \11// символ табуляції \12// символ нового рядка \14// символ нової сторінки
9 © 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 9 (35) Символьні літерали // 3 //шістнадцяткові коди // літера х після back slash говорить // про шістнадцятковий код \x3f// символ ? \x66// символ f \x10// символ нового рядка
10 © 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 10 (35) Символьні літерали // 4 //службові символи \t// символ табуляції \n// символ нового рядка \f// символ нової сторінки Як бачимо, деякі з символів можна записати різними рівносильними способами: \x10, \12 і \n f, \144 і \x66
11 © 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 11 (35) Пряма мова Якому випадку відповідає фраза: Написано неправильно ? 2+2 = 5 Чи неправильно
12 © 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 12 (35) Пряма мова А тепер? Написано неправильно? 2+2 = 5 Чи неправильно
13 © 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 13 (35) Багатосимвольні літерали (рядки) Беремо у лапки A// послідовність, складена з A і \0 Це константа, складена із символів This is another string Наступний рядок містить службові символи \nп/п\tНазва\tКількість\n Виведеться як п/пНазваКількість
14 © 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 14 (35) Літерали vs. сталі препроцесора Сталі препроцесора використовуються на етапі підготовки програми до компіляції Препроцесор може визначити сталу періоду компіляції #define _CONSTANT_WITHOUT_VALUE_ або відмінити її визначення #undef _CONSTANT_WITHOUT_VALUE_ Факт визначеності чи невизначеності сталої перевіряється умовними операторами періоду компіляції #ifdef _CONSTANT_WITHOUT_VALUE_ #ifndef _CONSTANT_WITHOUT_VALUE_
15 © 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 15 (35) Сталі препроцесора В традиції чистого С сталі препроцесора використовуються для позначення літералів #define _ONE_ 1 #define _PI_ Ніколи не користуйтесь сталими препроцесора для позначення літералів. – Чому? – Тому що для цього існують іменовані сталі
16 © 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 16 (35) Літерали vs. іменовані об'єкти Літерали не потребують визначення, бо позначають самі себе, а запис літералу однозначно визначає його тип. Іменовані об'єкти вимагають попереднього визначення з одночасним створенням або оголошення при використанні об'єкта, створеного у іншому місці. Визначення визначає, а оголошення інформує про ім'я і тип об'єкту. Визначення приводить до створення об'єкту в пам'яті, тоді як оголошення посилається на об'єкт, створений в іншому місці. Визначення звичайно суміщують з ініціалізацією.
17 © 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 17 (35) Іменовані сталі величини const float pi = ; const float Avogadro = e23; const double dpi = ; const char tab = \t; const char title[] = C++ Programming Language; Помилки const int sample;//сталу необхідно визначити! const int sample = 1756; sample = 456; //значення сталої не можна змінити!
18 © 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 18 (35) Магічні числа Літерали не варто використовувати ніде, крім ініціалізації іменованих сталих // Як правильно зрозуміти цикл? for (i=1; i<=12; ++i)....; // Що таке тут 12? – // Кількість студентів у групі, місяців у році? Ім'я сталої повинно відповідати за її призначення: мати промовну назву const int unsigned numberOfStudents = 12;
19 © 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 19 (35) Застосування злічених типів enum { Jan=1, Feb, Mar, Apr, Mai, Jun, Jul, Aug, Sep, Oct, Nov, Dec }; for (i=Jan; i<= Dec; ++i)
20 © 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 20 (35) Визначення змінних, суміщене і ініціалізацією Окрема змінна з початковим значенням int counter = 0;// краще всього double eps = ; int smth = 0xDEADBEEF; //за Керніганом В стилі С++ int counter (0); double eps ( ); Набір однотипних змінних з початковими значеннями int i=1, j=1, k=1;// все ще добре double a =0.0, b=1.0;
21 © 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 21 (35) Визначення змінних без ініціалізації Визначення – не присвоєння double x;//визначення з наступним присвоєнням x = 0; //чому не ініціалізація double x = 0; ? Немає гарантії відсутності спроби використання змінної між її визначенням і ініціалізацією присвоєнням double x;//не годиться! // чимала порція коду, що не вживає х – зле, // а якщо вживає неініціалізовану змінну, // то просто катастрофа // Перше присвоєння надто далеко від визначення x = 0;
22 © 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 22 (35) Розміщення в пам'яті
23 © 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 23 (35) Арифметичне присвоєння x = e; де x – іменуючий вираз, e – арифметичний вираз 1.Обчислити lvalue (x) 2.Обчислити rvalue (e) 3.Переслати rvalue (e) до lvalue (x) 4.Значенням виразу x = e вважати нове значення value (x) Яке з них lvalue чи rvalue? Залежно від контексту
24 © 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 24 (35) Приклад арифметичного присвоєння x = y; 1.lvalue (x)
25 © 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 25 (35) Приклад арифметичного присвоєння x = y; 2.rvalue (y)
26 © 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 26 (35)© 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні Приклад арифметичного присвоєння x = y; 2.Переслати
27 © 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 27 (35) Приклади присвоєнь // Нормальні присвоєння x=0; s = pi * r * r; i = j+k; Ініціалізація це не присвоєння Краще її записувати в дужках double x(0), а не double x=0
28 © 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 28 (35) Забігаючи наперед Ініціалізацію і присвоєння виконують різні команди complex w=1; call dword ptr [__imp_std::complex ::complex ] …………………………………………. w=1; call dword ptr [__imp_std::complex ::operator= ]
29 © 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 29 (35) Приклади присвоєнь // Присвоєння, суміщені з операціями i += k;// i = i+k i >>= k;// i = i>>k
30 © 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 30 (35) Приклади присвоєнь // Присвоєння, суміщені з операціями i += k;// i = i+k i >>= k;// i = i>>k // За що їх любити? 9: x=x+1; fld dword ptr [ebp-0Ch] fadd dword ptr ] fstp dword ptr [ebp-0Ch]
31 © 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 31 (35) Приклади присвоєнь // Присвоєння, суміщені з операціями i += k;// i = i+k i >>= k;// i = i>>k // За що їх любити? Нема за що 9: x=x+1; fld dword ptr [ebp-0Ch] fadd dword ptr ] fstp dword ptr [ebp-0Ch] 13: x+=1; fld dword ptr [ebp-0Ch] fadd dword ptr F fstp dword ptr [ebp-0Ch]
32
© 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 32 (35) Інкремент (декремент) постфіксний // нехай k==1 j=k++//j=k; k=k+1; // j==1; k==2 (i=++(j=++k))++ ; ??? Не застосовуємо в суперпозиціях; Віддаємо перевагу префіксному, хоча на заголовок циклу, наприклад, такий for (int i=1; i
33 © 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 33 (35) Композиція присвоєнь u = v = w; читається як u = (v = w); rvalue (w) lvalue (v) rvalue (v) lvalue (u) (u = v) = w; rvalue (v) lvalue (u) rvalue (w) lvalue (u)//що б це значило?
34 © 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 34 (35) Зведення типів 1. С (старомодне) week int int (monday) або (int) monday int week (week) i 2. С++ (новітнє) static_cast, dynamic_cast, const_cast, reinterpret_cast Вживаємо static_cast static_cast (monday); Дуже обережно! Може з'явитися багато проблем
35 © 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 35 (35) Висновки Швидкодія комп'ютерів настільки висока, що прослідкувати за змінами, що відбуваються в пам'яті під час виконання програми практично неможливо. Особливої цінності набувають незмінні характеристики процесу обчислень, в першу чергу, сталі величини. Правило сталості: Спочатку кожен об'єкт пробуємо визначити як сталий і лише при крайній необхідності переводимо його до змінних. Не забувайте це!
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.