| Главная страница | Образовательный портал Как узнать результаты егэ Стихи про летний лагерь 3агадки для детей |
|
|
![]() Методичка_Ч1. Методичні вказівки до лабораторного практикуму та самостійної роботи з дисципліни Програмування для студентів напрямів підготовки
Як бачимо, використання модифікаторів обмежено, за виключенням типу int, до якого можна застосувати будь який модифікатор. Та на практиці область використання ще вужча. Модифікатор signed практичного сенсу не має, бо за принципом замовчування усі типи мають знак. Для знаку виділяється старший біт коду числа. Якщо значення цього біту нуль, то число додатне, якщо одиниця - то від’ємне. Модифікатор short зменшує удвічі довжину типу int, а модифікатор long збільшує удвічі довжину основного типу. Модифікатор long для типу int можна використовувати двічі. У цьому разі розмір типу int збільшується у чотири рази. Ці модифікатори можна комбінувати з модифікатором unsigned. У Qt можливі і скорочення, що визначені у заголовному файлі Граничні значення даних цілочислових типів данихГраничні значення різних типів даних можуть залежати від програмного середовища та типу комп’ютера. Для того щоб зменшити цю залежність, у заголовному файлі
ПерелікиПереліки – це типи, яким відповідають набори цілочислових констант, кожна з яких має унікальне ім’я. Оголошення переліку має такий вигляд: enum <імя переліку> {<список іменованих константз>}; Наприклад, якщо ми захочемо перефарбувати вікно консолі, або змінити колір тексту, що виводиться на консоль, нам потрібно буде оперувати з поняттям колір. Кожний колір для консолі кодується цілим числом. Нулю відповідає чорний, одиниці – синій і т.д. Але пам’ятати номери кольорів не дуже зручно. Зручніше користуватися іменами з такого переліку: enum consoleColors{ BLACK, BLUE, GREN, CYAN, RED, MAGENTA, BROWN, LIGHTGRAY, DARKGRAY, LIGHTBLUE, LIGHTGREN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA, YELLOW, WHITE }; Стандартно перший елементу переліку має значення 0, а кожний наступний має значення на 1 більше, ніж попередній. У разі потреби елементам можна присвоювати інші значення. Цілочислові константиЦілочислові константи можна записувати у трьох формах: десятковій, вісімковій та шістнадцятковій. Десяткова константа являє собою послідовність десяткових цифр, перед якою може бути знак + або -. Наприклад, 123, -234, +456. Вісімкова константа завжди починається з 0 і може мати у своєму складі тільки цифри від 0 до 7. Наприклад, 015, 0777. Зверніть увагу на те, що константи 125 і 0125 мають різне значення. Десяткове значення константи 0125 дорівнює 85 (1*64+2*8+5*1) . Шістнадцяткові константи позначаються префіксом 0х. До їх складу, окрім десяткових цифр можуть також входити шістнадцяткові цифри (A, B, C, D, E, F). Наприклад, числу 0x12A відповідає десяткове число 298 (1*256+2*16+1*10). Шістнадцяткові константи дуже зручно використовувати для представлення двійкових кодів, бо кожній шістнадцятковій цифрі відповідає 4 двійкових (тетрада). Так число 0x815F у двійковій формі буде виглядати так: 1000 0001 0101 1111. Тип константи встановлюється компілятором за її значенням. Для не занадто великих констант встановлюється тип int, а якщо ця константа вісімкова або шістнадцяткова то тип unsigned int. Але є можливість і примусово встановити тип константи. Для цього до константи долучають кінцеві символи U (unsigned) та L (long). Наприклад, константа 1UL, незважаючи на те, що вона має маленьке значення отримає тип unsigned long. Символьні константиСимвольні константи поділяються на графічні символи , керуючі слеш-символи та ескейп-послідовності. У будь якому варіанті символьні константи розташовують між одинарними лапками. Наведемо приклади символьних констант: ‘a’ (літера а), ‘\a’ (звуковий сигнал), ‘\x0a’ (перехід на новий рядок). Більш докладно із спеціальними керуючими символами ви можете ознайомитися у підручнику [4] на сторінках 12-16 та 34-35. Константи дійсних типівУ пам’яті комп’ютера дані цього типу зберігаються у формі з плаваючою крапкою. При такому записі число представляється у вигляді мантиси і порядку. Стандартно мантиса у двійковому коді починається з 1, а десяткова має значення більше або рівне 1, але менше 10. Порядок може бути позитивним чи негативним і показує, на скільки порядків реальне число менше або більше мантиси. Перевага такої форми запису полягає в тому, що не доводиться писати незначущі нулі. Довжина запису залежить тільки від кількості значущих цифр і не залежить від значення числа. Наприклад, числа 123450000 і 0.0000000012345 будуть представлені як 1.2345е +8 і 1.2345е-9. Це зручно як для запису чисел на папері, так і для зберігання чисел в пам'яті комп'ютера. Та у програмах дотримуватися цього стандарту не обов’язково. Інколи зручніше записувати дійсні константи у звичайній формі, з фіксованою крапкою. Дійсний тип даних дозволяє оперувати з дробовими десятковими числами в дуже широкому діапазоні і з високою точністю, тому дані цього типу найбільш часто використовуються для інженерних розрахунків. З граничними параметрами дійсних типів можна ознайомитися у підручнику[1] на сторінці 37. За правилом замочування константи зберігаються у пам’яті як числа типу double. Але є можливість і примусово встановити тип константи. Для цього до константи долучають кінцеві символи F (float) або L (long double). 2.1.4Описи зміннихУсі змінні у програмі на мові С мають бути описані, (оголошені). Оголошення змінної - це інструкція, в якій зазначається ім'я змінної та її тип. У простому випадку інструкція оголошення змінної виглядає так: <тип> <имя>; де: <ім'я> - ім'я змінної; <тип> - ім'я типу для оголошуваної змінної. В одній інструкції можна оголошувати декілька змінних одного типу. У цьому випадку імена змінних розділяються комами. У розділі може бути і декілька інструкцій оголошення, наприклад: int i, j, k ; float x; Описуючи змінну, можна одразу надати їй значення. Це зветься ініціалізацією. Інструкція ініціалізації змінної виглядає так: <тип> <имя> = < вираз ініціалізації >; У якості виразу ініціалізації може бути константа, змінна, яка вже має значення, або вираз. Якщо значення, що прийняла змінна після ініціалізації на повинно змінюватися, то для таких змінних використовують кваліфікатор const. Використання такого кваліфікатор перетворює змінну у константу. Нижче наведено приклад оголошення константи 2π. const double twoPi=2*3.1425926; МакроконстантиУ мові С++ існує можливість задавати константи за допомогою макропідстановок або макросів, які визначаються за допомогою директиви #define препроцесора, яка виглядає так: #define <ім’я макросу> < текст заміни> Ця директива виконує заміну ім’я макросу на текст заміни в усьому тексті програми, починаючи з наступного за директивою рядка. За звичай для імен макросів використовують заголовні літери, щоб відрізняти їх від звичайних імен. Наприклад: #define PI 3.1415927 #define TWOPI (2*PI) 2.1.5Операція розміру sizeofОперація sizeof повертає обсяг пам’яті, яку займає або потребує операнд цієї операції, тобто розмір операнда. В ролі операнду може бути змінна, вираз або назва типу. Розмір визначається в байтах. Байт – це основна одиниця виміру обсягу пам’яті в інформатиці. Один байт дорівнює 8 біт. Біт це найменша одиниця виміру обсягу інформації, що відповідає одному розряду двійкового коду і може приймати значення нуль або один. Операція sizeof має декілька стандартних форм: sizeof (тип) sizeof імя змінної sizeof (вираз) Розмір операндів різних типів у мові С не є визначеним і залежить від системи програмування та типу комп’ютера. 2.1.6 Арифметичні операціїПерелік арифметичних операцій С++ наведено у таблиці 2.3. Усі наведені операції, окрім операції %, виконуються над даними усіх числових типів. Операція % має сенс тільки для цілих чисел.
Слід також мати на увазі, що операція ділення для цілих чисел повертає також ціле число. Для того, щоб результат ділення був дійсним числом треба, щоб хоча б один операнд був також дійсним числом. Наприклад, 12 / 5 буде 2, але 12.0 / 5 буде 2.4. 2.1.7Операції присвоєнняПроста операція присвоєнняОперація присвоєння є однією із основних операцій у будь якій мові програмування. У мові С++ вона виглядає так: <змінна> = <вираз>; де: <змінна> - ім'я змінної, значення якої змінюється в результаті виконання інструкції присвоювання; = знак операції присвоювання. <вираз> – вираз, значення якого присвоюється змінній, ім'я якої вказане ліворуч від символу присвоювання. Присвоювання виконується наступним чином:
Операція присвоювання вважається вірною, якщо тип значення, що повертає вираз, відповідає або може бути приведений до типу змінної, яка отримує це значення. Наприклад, змінній типу double можна присвоїти значення виразу, тип якого float або int. Особливість операції присвоювання у мові С полягає у тому, що ця операція повертає результат, що дорівнює значенню виразу у правій частині. Тому цю операцію можна використовувати у виразах. Слід тільки мати на увазі, що ця операція має низький пріоритет. Тому присвоєння у виразах слід брати в дужки. Наприклад, вираз a + (b = c+d) є допустимим у мові С. Комбіновані присвоєнняОкрім простого оператора присвоєння у мові С завжди були ще і так звані комбіновані оператори присвоєння. Згодом вони з’явилися і у інших мовах. Ці оператори використовують у тих випадках, коли ліворуч і праворуч від знака операції присвоєння знаходиться той самий операнд. Наприклад, замість присвоєння number = number + d можна записати number += d. Таке присвоєння можна використовувати у комбінації з будь якою арифметичною операцією та багатьма іншими, наприклад, *=, /=, %=, тощо. Комбіновані присвоєння скорочують запис і вважається, що вони роблять запис більш наочним і скорочують процес обчислення результату. Стиль написання програм на мові С схвалює використання таких присвоєнь. Унарні присвоєнняЦі присвоєння є окремим випадком комбінованого присвоєння. Вони використовуються тоді, коли до змінної треба додати одиницю або відняти її. Відповідно до цього маємо операції інкременту та декременту. Запис операції унарного присвоєння ще простіший ніж комбінованого. Для того щоб, наприклад, збільшити змінну number на одиницю, можна написати number++, або ++ number. Так само можна і зменшувати значення на одиницю: number--, або --number. Операції ++ та -- називають префіксними, якщо знаки цих операцій записуються перед змінною. Якщо ж знаки операції записуються після змінної то операції називають постфіксними. Різниця між префіксними та постфіксними операціями проявляється у тих випадках, коли ці операції використовуються у виразах разом з іншими операціями. Справа у тому, що префіксні операції мають найвищий пріоритет, а постфіксні – найнижчий. Хай, наприклад, змінна х має значення 5. Тоді значення виразу (3+ ++х) буде дорівнювати 9, а значення виразу (3+х++) буде дорівнювати 8, хоча «х» у обох випадках отримає значення 6. 2.1.8ВиразиВираз - це послідовність операндів, об’єднаних знаками операцій та круглими дужками. У мовах високого рівня вираз мало відрізняється від формули. Основна відмінність полягає в тому, що вираз записується в один рядок. У таблиці 2.4 наведені приклади запису деяких виразів
Як вже було сказано, вираз складається з операндів і знаків операцій. В якості операндів виразу можна використовувати: змінну, константу, функцію або інший вираз. Знаки операцій знаходяться між операндами і позначають дії, які виконуються над операндами. У найпростішому випадку вираз може являти собою константу або змінну. При обчисленні значень виразів слід враховувати, що операції мають різний пріоритет. Операції множення і ділення, наприклад, мають вищий пріоритет, ніж операції додавання і віднімання. При обчисленні значення виразу в першу чергу виконуються операції з більш високим пріоритетом. Якщо пріоритет операцій у виразі або його частини однаковий, то операції, зазвичай, виконуються зліва направо, але є виключення. Якщо потрібно змінити порядок виконання операцій у виразі, слід використовувати дужки. Вираз у дужках трактується як один операнд. Це означає, що операції над операндами в дужках будуть виконуватися в звичайному порядку, але раніше, ніж операції над операндами, розташованими за дужками. При записі виразів, що містять дужки, слід дотримуватися парності дужок, тобто скільки дужок відкрито стільки має бути і закрито. 2.1.9Пріоритети операцій у С++У таблиці 2.5 наведено приорітети операцій С++. Чим менший номер пріоритету, тим вищий пріоритет. Деякі операції, можливо, вам незнайомі, та колись ви про них дізнаєтесь.
2.1.10Узгодження типівУ мові С++ є допустимою ситуація, коли операнди операції мають різний тип. У цьому випадку компілятор перевіряє сумісність операндів і встановлює для них спільний тип. Цей же тип і буде типом результату операції. Таке перетворення виконується компілятором автоматично, тому і перетворення звуться автоматичними. Є дві схеми автоматичного узгодження типів: арифметичні перетворення і перетворення під час присвоєнь. Арифметичні перетворенняЦі перетворення виконуються у арифметичних та порозрядних операціях та операціях порівняння. Під час цих перетворень перш за все виконується так званий integral promotion: типи bool, char і short перетворюються у int . bool, char, short à int Зокрема, перетворення bool à int перетворює true в 1, а false у 0. Далі використовується принцип ”найбільшого операнду”, відповідно до ряду: long double, double, float, usigned long, long, unsigned int, int Тобто якщо, наприклад, у виразі є операнди типу float, int та double то усі операнди будуть приведені до типу double. Перетворення типів в операціях присвоєнняУ результаті операції присвоєння результат отриманий у правій частині приводиться до типу лівої частини. При цьому:
Явне перетворення типівМова С++ дозволяє і явне перетворення даних одного типу у інший. Для цього можна використовувати такі конструкції: (тип) вираз тип (вираз) Останній варіант з’явився у С++ і схожий на виклик функції. Але на відміну від виклику функції тут перед круглими дужками рекомендують ставити пробіл. 2.1.11Бібліотека математичних функцій cmathБібліотека математичних функцій cmath надає програмісту можливість використовувати різні функції для обробки даних. Звернення до цих функцій використовуються у виразах і розглядаються як операнди. Для виклику функції необхідно записати її ім'я і далі в дужках, через кому, перерахувати необхідні параметри. Наприклад, щоб обчислити квадратний корінь із змінної n, достатньо записати sqrt (n). При роботі з функціями слід враховувати тип значення, що повертається і типи параметрів. В одних випадках виконується автоматичне приведення типів даних, в інших виникає невідповідність і компілятор виводить повідомлення про помилку. У таблиці 2.6 наведено деякі функції бібліотеки cmath.
2.1.12Використання об’єкту cin для введення данихУ мові С++ введення даних з консолі розглядається як потік символів з клавіатури у програму. Об’єкт cin і представляє цей потік у програмі. Операція >> бере інформацію з цього потоку і перетворює її відповідно до типу змінної, що отримує цю інформацію. Оператори введення інформації з консолі можуть виглядати так: сin >> x; cin>>a>>b >>c; У першому випадку об’єкт забезпечує введення даних у змінну х. У другому – до змінних a,b,c. Об’єкт починає працювати після того, як користувач введе дані з клавіатури і натисне клавішу “Enter”. Вхідні дані розділяють пробілами, табуляцією або переходом до нового рядка. Форматування арифметичних даних під час виведенняТочність представлення чисел дійсного типу дуже висока. Результат обчислень може мати велику кількість значущих цифр. Припустимо, що в результаті обробки результатів експерименту на лабораторній роботі з фізики, ми отримали значення деякої величини рівне 9.85432, хоча вихідні дані для розрахунку мали точність значно меншу. Такий результат краще форматувати перед виведенням, округливши до необхідної кількості цифр після крапки Об’єкт cout можна налаштовувати для форматування за допомогою його методів setf (), precision (),.width(), fill () та інші. Докладнішу інформацію про форматування арифметичних даних під час виведення за допомогою cout можна знайти у [2], стр.911- 927, а також на сайті: https://www.c-cpp.ru/books/formatirovanie-s-pomoshchyu-funkciy-chlenov-ios Тут ми наведемо як приклад тільки фрагмент програми, який ви можете додати до функції main() і подивитися результат. cout << "Науковий формат i знак + :\n"; cout.setf (ios::showpos); cout.setf (ios::scientific); cout <<123 << " " << 123.23<<" " << 123 <<"\n"; cout<<"10 значущих цифр пiсля коми:\n"; cout.precision (10); cout<<1/3.0<<" " <<0.1<<"\n"; cout<<"Ширина поля 10 знакiв:\n"; cout.width(10); cout << 123 <<" "<< 123.23<<" "<<123 << "\n"; cout<<"Використання символiв заповнювачiв:\n"; cout.fill ('#'); cout.width(10); cout <<123<< " " << 123.3<< " "<<123<< "\n"; 2.1.13Зміна кольорів консолі та керування курсоромЦі питання виходять за межі нашої програми, але якщо у когось є бажання цим займатися, то можна у проект додати нижченаведений фрагмент програми, або створити заголовний файл з таким змістом і підключати його директивою #include до будь якого проекту. #define WIDTH 80 //ширина консолі у символах #define HEIGHT 25 //висота консолі у символах //перелік кольорів консолі enum consoleColors{ BLACK, BLUE, GREN, CYAN, RED, MAGENTA, BROWN, LIGHTGRAY, DARKGRAY, LIGHTBLUE, LIGHTGREN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA,YELLOW, WHITE }; /* Пояснення: HANDLE (дескриптор, опис чогось) - число, що задає номер якого ресурсу (тут ресурс - це стандартний пристрій виведення на консоль). Оскільки користувач працює з дескриптором, а не з номером, то номер може змінюватись, але це не позначиться на роботі з пристроєм. */ // Отримуємо номер консолі HANDLE hdlConsole = GetStdHandle(STD_OUTPUT_HANDLE); //функція зміни кольору void setColors(int textColor, int backColor) { backColor <<= 4; //backColor має перейти у старший напівбайт WORD color = backColor | textColor; //Об'єднуємо кольори SetConsoleTextAttribute(hdlConsole, color); //Передаємо кольори консолі } //функція визначення положення курсору void getCursorPos(int &x, int &y){ CONSOLE_SCREEN_BUFFER_INFO bi; GetConsoleScreenBufferInfo(hdlConsole, &bi); x=bi.dwCursorPosition.X; y=bi.dwCursorPosition.Y; } //функція зміни положення курсору void gotoXY(int X, int Y) { COORD coord = { X, Y }; SetConsoleCursorPosition(hdlConsole, coord); } Якщо додати цей код до програми, то після цього можна змінювати кольори і керувати положенням курсору. Ось приклад: #include #include using namespace std; //ТУТ СЛІД ДОДАТИ ВИЩЕНАВЕДЕНИЙ ТЕКСТ, АБО #INCLUDE int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); setColors(YELLOW, BLUE); system("cls"); // очищаємо екран кольором BLUE //Заголовок вiкна консолi SetConsoleTitleA("Змiна кольорiв консолi та керування курсором на екранi"); string s="Тут центр екрану консолi"; int x = (WIDTH - s.length())/2; int y = HEIGHT/2-1; gotoXY(x,y); cout< return a.exec(); } перейти в каталог файловОбразовательный портал
Как узнать результаты егэ
Стихи про летний лагерь
3агадки для детей | |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||