Бублик Володимир Васильович Процедурне програмування C/C++ Лекція 3. Базові поняття програмування. Сталі та змінні Лекції для студентів 2 курсу.

Презентация:



Advertisements
Похожие презентации
Вказівники Вказівник (або покажчик) – особливий тип даних, значенням якого є адреса певного байта оперативної памяті. Значення покажчика - це беззнакове.
Advertisements

Основи алгоритмізації та програмування Надання значень величинам. Вказівки присвоєння та введення.
Типи даних мови Visual Basic та їх опис. Опис величин Величина - це об'єкт, який має стале або змінне значення. Основні характеристики величин: ім'я,
8 Практична робота 11 Налагодження готової програми За новою програмою Урок 38.
Коротка О.Б.. Це зрозуміла та точна інструкція (указівка) виконавцю, як йому реалізувати певну послідовність дій, призначених досягнути поставленої мети.
Тема: «Абетка мови Пасаль. Структура програми.». Навчитися складати програми для розв`язування задач на обчислення. Мета.
Людмила Лоскутова © Київ Тема: «Абетка мови Пасаль. Структура програми.»
Цикли в мові С++ Цикл - це процес виконання певного набору команд деяку кількість разів.
Основні поняття математичної логіки. Висловлення. Логічні константи. Логічні операції Один з розділів логіки - математична логіка є наукою про закони.
Запити в Access Запити в базі даних Запити використовуються для перегляду, зміни й аналізу даних різними способами. Основні операції з використанням.
Основи алгоритмізації та програмування Вказівка повторення. Цикли.
Вступ до програмування на Python. Особливості Python Простий Свобідний і відкритий Мова високого рівня Портується Інтерпретується Об'єктно-орієнтований.
Основи алгоритмізації і програмування. Тема 3. Мови програмування (4 год) Структура програми Елементи мови програму- вання.
Вміст клітин. Введення та редагування даних різного типу.
Програми з розгалуженнями.Команда IF Підготувала Крилік Анастасія 7-Д.
* Тема: Величини (змінні і константи), їхні властивості. Прості типи величин: числовий, логічний, символьний, рядковий.
Класи пам'яті даних. Клас пам'яті, час існування та видимість об'єкта Кожен обєкт програми (змінна, функція,...) має свій тип і клас памяті. Тип визначає.
Бублик Володимир Васильович Процедурне програмування C/C++ Лекція 2. Базові поняття програмування. Арифметичні типи даних Лекції для студентів 2 курсу.
Лекція 2 Тема: Операції. Вирази. Оператори.. План Операції Основні операції Порядок виконання операцій Додаткові операції Вирази Оператори Оператор присвоєння.
Транксрипт:

Бублик Володимир Васильович Процедурне програмування C/C++ Лекція 3. Базові поняття програмування. Сталі та змінні Лекції для студентів 2 курсу

© 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 2 (35) Літерали Літерал (з латинського literal буквальний) це найпростіший обєкт, що позначає сам себе з точністю до обраної системи позначень чи кодування Римська цифра Х позначає число 10 Латиська літера А теж позначає число 10 в шістнадцятковій системі Цифирь ĩ позначає число 10 церковно-слов'янською мовою

© 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 3 (35) Цілі літерали 100//десятковий запис //вісімковий (octal) 0х64//шістнадцятковий (hexadecimal, hex) Вісімковими і шістнадцятковими константами варто користуватися лише для типів без знаку, інакше на компютерах з доповненим кодом можна зіткнутися із несподіванками типу значення –1 для константи 0xffffffff

© 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 4 (35) Розміщення в пам'яті Яку память виділити для розміщення цілого літералу, наприклад, 1? Півслова? Чи ціле слово? Чи подвійне слово? Що від цього залежатиме? Команди об'єктного коду

© 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]

© 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 6 (35) Тип літералу Визначається з контексту або уточнення типу числового літералу // U, L або UL U L UL // F або L 1.0F L

© 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 7 (35) Символьні літерали Декілька систем позначень // 1 //звичайні алфавітно-цифрові символи // з уживаної кодової таблиці ?, -, +, a, b, c, A, B, C, 0, 1, 2, б, в, г, є, ї

© 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 8 (35) Символьні літерали // 2 //вісімкові коди // число після back slash вважається вісімковим \77// символ ? \144// символ f \365// символ ї ( з точністю до кодової таблиці ) \11// символ табуляції \12// символ нового рядка \14// символ нової сторінки

© 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 9 (35) Символьні літерали // 3 //шістнадцяткові коди // літера х після back slash говорить // про шістнадцятковий код \x3f// символ ? \x66// символ f \x10// символ нового рядка

© 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 10 (35) Символьні літерали // 4 //службові символи \t// символ табуляції \n// символ нового рядка \f// символ нової сторінки Як бачимо, деякі з символів можна записати різними рівносильними способами: \x10, \12 і \n f, \144 і \x66

© 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 11 (35) Пряма мова Якому випадку відповідає фраза: Написано неправильно ? 2+2 = 5 Чи неправильно

© 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 12 (35) Пряма мова А тепер? Написано неправильно? 2+2 = 5 Чи неправильно

© 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 13 (35) Багатосимвольні літерали (рядки) Беремо у лапки A// послідовність, складена з A і \0 Це константа, складена із символів This is another string Наступний рядок містить службові символи \nп/п\tНазва\tКількість\n Виведеться як п/пНазваКількість

© 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 14 (35) Літерали vs. сталі препроцесора Сталі препроцесора використовуються на етапі підготовки програми до компіляції Препроцесор може визначити сталу періоду компіляції #define _CONSTANT_WITHOUT_VALUE_ або відмінити її визначення #undef _CONSTANT_WITHOUT_VALUE_ Факт визначеності чи невизначеності сталої перевіряється умовними операторами періоду компіляції #ifdef _CONSTANT_WITHOUT_VALUE_ #ifndef _CONSTANT_WITHOUT_VALUE_

© 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 15 (35) Сталі препроцесора В традиції чистого С сталі препроцесора використовуються для позначення літералів #define _ONE_ 1 #define _PI_ Ніколи не користуйтесь сталими препроцесора для позначення літералів. – Чому? – Тому що для цього існують іменовані сталі

© 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 16 (35) Літерали vs. іменовані об'єкти Літерали не потребують визначення, бо позначають самі себе, а запис літералу однозначно визначає його тип. Іменовані об'єкти вимагають попереднього визначення з одночасним створенням або оголошення при використанні об'єкта, створеного у іншому місці. Визначення визначає, а оголошення інформує про ім'я і тип об'єкту. Визначення приводить до створення об'єкту в пам'яті, тоді як оголошення посилається на об'єкт, створений в іншому місці. Визначення звичайно суміщують з ініціалізацією.

© 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; //значення сталої не можна змінити!

© 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 18 (35) Магічні числа Літерали не варто використовувати ніде, крім ініціалізації іменованих сталих // Як правильно зрозуміти цикл? for (i=1; i<=12; ++i)....; // Що таке тут 12? – // Кількість студентів у групі, місяців у році? Ім'я сталої повинно відповідати за її призначення: мати промовну назву const int unsigned numberOfStudents = 12;

© 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 19 (35) Застосування злічених типів enum { Jan=1, Feb, Mar, Apr, Mai, Jun, Jul, Aug, Sep, Oct, Nov, Dec }; for (i=Jan; i<= Dec; ++i)

© 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;

© 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 21 (35) Визначення змінних без ініціалізації Визначення – не присвоєння double x;//визначення з наступним присвоєнням x = 0; //чому не ініціалізація double x = 0; ? Немає гарантії відсутності спроби використання змінної між її визначенням і ініціалізацією присвоєнням double x;//не годиться! // чимала порція коду, що не вживає х – зле, // а якщо вживає неініціалізовану змінну, // то просто катастрофа // Перше присвоєння надто далеко від визначення x = 0;

© 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 22 (35) Розміщення в пам'яті

© 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? Залежно від контексту

© 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 24 (35) Приклад арифметичного присвоєння x = y; 1.lvalue (x)

© 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 25 (35) Приклад арифметичного присвоєння x = y; 2.rvalue (y)

© 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 26 (35)© 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні Приклад арифметичного присвоєння x = y; 2.Переслати

© 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 27 (35) Приклади присвоєнь // Нормальні присвоєння x=0; s = pi * r * r; i = j+k; Ініціалізація це не присвоєння Краще її записувати в дужках double x(0), а не double x=0

© 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 28 (35) Забігаючи наперед Ініціалізацію і присвоєння виконують різні команди complex w=1; call dword ptr [__imp_std::complex ::complex ] …………………………………………. w=1; call dword ptr [__imp_std::complex ::operator= ]

© 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 29 (35) Приклади присвоєнь // Присвоєння, суміщені з операціями i += k;// i = i+k i >>= k;// i = i>>k

© 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]

© 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]

© 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<bound; ++i) це не впливає префіксний // нехай k==1 j=++k //k=k+1; j=k; // j==2; k==2

© 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)//що б це значило?

© 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); Дуже обережно! Може з'явитися багато проблем

© 2006 Бублик В.В. Процедурне програмування. Лекція 3. Сталі та змінні 35 (35) Висновки Швидкодія комп'ютерів настільки висока, що прослідкувати за змінами, що відбуваються в пам'яті під час виконання програми практично неможливо. Особливої цінності набувають незмінні характеристики процесу обчислень, в першу чергу, сталі величини. Правило сталості: Спочатку кожен об'єкт пробуємо визначити як сталий і лише при крайній необхідності переводимо його до змінних. Не забувайте це!