Зміст Наступна сторінка Електронні посібники ВНТУ
ЛАБОРАТОРНА РОБОТА №1
РОЗРОБКА ПРОГРАМ З ЛІНІЙНОЮ СТРУКТУРОЮ
Мета роботи
- Ознайомитись з середовищем програмування Visual С++.
- Навчитись створювати консольні додатки, компілювати програму, виконувати, налагоджувати, користуватись системою допомогии і підказками.
- Засвоїти основні символи графічних схем, які використовуються у програмах лінійної структури.
- Ознайомитись з етапами розробки програм.
- Навчитися розробляти програми з лінійною структурою, тобто програм, у яких всі оператори виконуються послідовно, один за одним.
- Навчитися формувати звіт з лабораторної роботи.
ТЕОРЕТИЧНІ ВІДОМОСТІ
Складові мови програмування
У тексті на будь-якій природній мові можна виділити чотири основних елементи: символи, слова, словосполучення і речення. Подібні елементи містить і алгоритмічна мова, але слова називають лексемами (елементарними конструкціями), словосполучення – виразами, а речення – операторами. Лексеми утворюються із символів, вирази з лексем і символів, а оператори – з символів, виразів і лексем.
Алфавіт мови програмування (аlphabet programming language) – це основні неподільні знаки, за допомогою яких пишуться всі тексти мовою.
Лексема (token) – елементарна конструкція, мінімальна одиниця мови, яка має самостійний сенс.
Вираз (expression) задає правило обчислення деякого значення.
Оператор (operator) задає закінчений опис деякої дії.
Кожен елемент мови визначається синтаксисом і семантикою. Синтаксичні визначення встановлюють правила побудови елементів мови, а семантика визначає їх зміст і правила використання.
Етапи створення програми
Об'єднана єдиним алгоритмом сукупність описів і операторів утворює програму на алгоритмічній мові. Для того, щоб виконати програму, потрібно перевести її на мову, зрозумілу процесору – в машинні коди. Етапи процесу підготовки програми на С/С++ наведені на рис. 1.1 [1]: редагування; препроцесорна обробка; компіляція; компонування; завантаження; виконання.
Редагування (еditing). Спочатку програму необхідно підготувати за допомогою одного з текстових редакторів. Це вихідний (початковий) код програми (.с, .сp, .cpp). Файл з вихідним текстом – це ще не програма, її не можна запустити і виконати.
Препроцесорна обробка (preprocessing). Препроцесор виконує директиви, що містяться в тексті програм (наприклад, включення в текст так званих заголовочних файлів або макровизначень).
Компіляція (compilation). Одержаний повний текст програми надходить на вхід компілятора, який виділяє лексеми, а потім, на основі граматики мови програмування, розпізнає вирази і оператори, побудовані з цих лексем. При цьому компілятор виявляє синтаксичні помилки і, в разі їх відсутності, будує об'єктний модуль.
Компілятор (compiler) – програма, що перетворює текст програми на мові високого рівня на еквівалентну програму на машинній мові.
Транслятор (translator) – програма, що перетворює програму з однієї мови програмування на іншу.
Інтерпретатор (interpreter) – програма, що виконує покомандну обробку і виконання програми (без переведення її на машинну мову).
Компонування. На цьому етапі формується виконуваний модуль програми, підключаючи до об'єктного модуля інші об'єктні модулі, в тому числі ті, що містять функції бібліотек, звернення до яких є в будь-якій програмі (наприклад, для здійснення виведення на екран). Якщо програма складається з декількох вихідних файлів, вони компілюються окремо і об'єднуються на етапі компонування.
Компонувач (редактор зв'язків, лінкер – від англ. Link editor, linker) – це програма, яка виконує компонування – приймає на вхід один або декілька об'єктних модулів і збирає у виконуваний модуль.
Бібліотека в програмуванні – набір підпрограм і/або класів (об’єктів), що використовуються для розробки програмного забезпечення. У деяких мовах програмування це те саме, що модуль, в деяких – декілька модулів. Кожна бібліотека зазвичай має заголовочний файл, у якому містяться прототипи функцій, а також оголошення спеціальних типів даних і макросимволів, що використовують ці функції. З точки зору ОС та прикладного ПЗ бібліотеки поділяються на статичні та динамічні.
Статичні бібліотеки можуть бути у вигляді початкового тексту, що підключається програмістом до своєї програми на етапі написання, або у вигляді об'єктних файлів, що приєднуються (лінкуються) до виконуваної програми на етапі компіляції (у Windows такі файли мають розширення .lib, у UNIX-подібних ОС — зазвичай .a).
Динамічні бібліотеки називаються розподілюваними бібліотеками (shared library), або бібліотеками, що динамічно підключаються (Dynamic Link Library, DLL). Це окремі файли, що надають програмі набір використовуваних функцій для завантажування на етапі виконання.
Виконуваний модуль має розширення. ехе і запускається на виконання звичайним чином.
Базові конструкції мови С
Алфавіт мови Сі включає :
- великі та малі літери латинської абетки;
- арабські цифри;
- пробільні символи : пробіл, символи табуляції, символ переходу на наступний рядок тощо;
- символи , . ; : ? ' ! | / \ ~ ( ) [ ] { } < > # % ^ & – + * =
Ідентифікатори використовуються для іменування різних об'єктів: змінних, констант, міток, функцій тощо. При записі ідентифікаторів можуть використовуватися великі та малі літери латинської абетки, арабські цифри та символ підкреслення. Ідентифікатор не може починатися з цифри і не може містити пробілів. Компілятор мови С розглядає літери верхнього та нижнього регістрів як різні символи. Наприклад, кожний з наступних ідентифікаторів унікальний:
Sum sum sUm SUM sUM
Константами називають сталі величини, тобто такі, які в процесі виконання програми не змінюються. В мові Сі існує чотири типи констант: цілі, дійсні, рядкові та символьні.
1. Цілі константи бувають десятковими, вісімковими та шістнадцятковими.
Десяткова константа – послідовність десяткових цифр (від 0 до 9), яка починається не з нуля, якщо це число не нуль. Приклади: 10, 132, 1024.
Вісімкові константи починаються з символу 0, після якого розміщуються вісімкові цифри (від 0 до 7). Наприклад: 023.
Шістнадцяткові константи починаються з символів 0х або 0Х, після яких розміщуються шістнадцяткові цифри (від 0 до F, можна записувати їх у верхньому чи нижньому регістрах). Наприклад : 0ХF123.
2. Дійсні константи складаються з цілої частини, десяткової крапки, дробової частини, символу експоненти (e чи E) та показника степеня. Дійсні константи мають наступний формат представлення :
[ ціла_частина ][ . дробова_частина ][ Е [-] степінь ]
Приклади дійсних констант: 2.2 , 220е-2, 22.Е-1, .22Е1.
Спеціальний символ | Значення |
\a |
звуковий сигнал |
\n |
перехід на наступний рядок |
\r |
повернення каретки |
\t |
горизонтальна табуляція |
\\ |
символ \ |
\' |
символ ' |
\" |
символ " |
\? |
символ ? |
\0 |
нульовий символ |
\0ddd |
вісімковий код символу |
\0xddd |
шістнадцятковий код |
3. Символьна константа – це один або декілька символів, які заключені в апострофи. Якщо константа складається з одного символу, вона займає в пам'яті 1 байт (тип char). Двосимвольні константи займають в пам'яті відповідно 2 байти (тип int).
Послідовності символів, які починаються з символу "\" (обернений слеш) називаються керуючими або escape-послідовностями.
4. Рядкові константи записуються як послідовності символів, заключених в подвійні лапки.
"Це рядковий літерал!\n"
Для формування рядкових констант, які займають декілька рядків тексту програми використовується символ \ (обернений слеш):
"Довгі рядки можна розбивати на \
частини"
Модифікатор const попереджає будь-які присвоювання даному об'єкту, а також інші дії, що можуть вплинути на зміну значення. Наприклад:
const maxint = 32767;
char *const str="Hello,P...!"; /* покажчик-константа */
char const *str2= "Hello!"; /* покажчик на константу */
Коментарі в С здебільшого використовуються для "документування програм" та під час їх відлагодження і виділяються за допомогою /*… */.
/*функція обчислює cуму матриць */
Функція main(): з цього все починається
Усі програми, написані мовою С, повинні містити в собі хоча б одну функцію. Функція main() – вхідна точка будь-якої програмної системи, причому немає різниці, де її розміщувати. Але слід пам'ятати: якщо вона відсутня, завантажувач не зможе зібрати програму, про що буде виведене відповідне попередження. Перший оператор програми повинен розміщуватися саме в цій функції. Мінімальна програма мовою Сі має вигляд:
int main()
{
return 0;
}
Функція починається з імені. В даному прикладі вона не має параметрів, тому за її ім'ям розташовуються порожні круглі дужки (). Далі обидві фігурні дужки {...} позначають блок або складений оператор, з яким ми працюватимемо, як з єдиним цілим.
Базові типи даних
Базові типи даних Сі можна перерахувати у такій послідовності:
char – символ
Тип може використовуватися для зберігання літери, цифри або іншого символу з множини символів ASCII. Значенням об'єкта типу char є код символу. Тип char інтерпретується як однобайтове ціле від -128 до 127.
int – ціле
Цілі числа у діапазоні від -32768 до 32767. Як різновиди цілих чисел, у деяких версіях компіляторів існують short – коротке ціле (2 байти) та long (4 байти) – довге ціле. Розмірність цих типів може коливатися. Гарантовано лише, що співвідношення розмірності є наступним: short <= int <=long.
float – число з плаваючою комою одинарної точності
Тип призначений для зберігання дійсних чисел. Може представляти числа як у фіксованому форматі (наприклад, число π- 3.14159), так і в експоненціальній формі – 3.4Е+8.
double – число з плаваючою комою подвійної точності
Має значно більший діапазон значень, порівняно з типом float, а саме ±(1.7·10-308 ... 1.7·10308).
Крім того, цілі типи char, short, int, long можуть використовуватися з модифікаторами signed (із знаком) та unsigned (без знаку). Цілі без знаку (unsigned) не можуть набувати від'ємних значень, на відміну від знакових цілих (signed). За рахунок цього дещо розширюється діапазон можливих додатних значень типу.
Перетворення типів
Компілятор С виконує автоматичне перетворення типів даних, особливо в математичних виразах, коли найчастіше цілочисельний тип перетворюється у тип з плаваючою комою. При цьому значення типу char та int в арифметичних виразах змішуються: кожний з таких символів автоматично перетворюється в ціле. Взагалі, якщо операнди мають різні типи, перед тим, як виконати операцію, молодший тип "підтягується" до старшого. Результат – старшого типу:
- char та short перетворюються в int;
- float перетворюється в double;
- якщо один з операндів long double, то і другий перетворюється в long double;
- якщо один з операндів long, тоді другий перетворюється відповідно до того ж типу, і результат буде long;
- якщо один з операндів unsigned, тоді другий перетворюється відповідно до того ж типу, і результат буде unsigned.
Але, окрім цього, в С є можливість і примусового перетворення типу, щоб дозволити явно конвертувати (перетворювати) значення одного типу даних в інший. Загальний синтаксис перетворення типу має два варіанти:
1)(новий_тип) вираз ;
2) новий_тип (вираз) ;
Наприклад,
сhar letter = 'a';
int nasc = int (letter);
long iasc = (long) letter;
Приклад розробки програми з лінійною структурою
Задача: Розробити програму, яка переводить температуру у градусах по Фаренгейту у градуси Цельсія за формулою:
,
де С – температура за Цельсієм, F – температура за Фаренгейтом.
Формалізація задачі
- Вхідні дані: F – температура за Фаренгейтом.
- Вихідні дані: С – температура за Цельсієм.
- Типи даних. Оскільки значення температур за Цельсієм і за Фаренгейтом можуть бути і цілими, і дійсними, доцільно обрати тип float.
- Перевірка правильності. Для перевірки правильності обчислень, слід підготувати декілька контрольних прикладів.
Словесний алгоритм
- Початок. { Перейти до п.2. }
- Оголошення змінних: С, F, Х – дійсні,. { Перейти до п3.. }
- Видати запрошення для введення F. { Перейти до п.4. }
- Ввести F. { Перейти до п.5. }
- Обчислити Х = F – 32. { Перейти до п.6. }
- Обчислити С = Х * 5.0 / 9.0. { Перейти до п.7. }
- Вивести на екран значення F i C. { Перейти до п.8. }
- Кінець.
Лістинг програми
#include <conio.h>
#include <locale.h>
int main()
{
// оператор для встановлення російської мови
setlocale(LC_ALL, "Russian");
// оголошення змінних
float F, C, X;
printf("\n\tВведiть F ... ");
// запрошення на введення даних
scanf_s("%f",&F);
// введення значення
X=F-32;
C=X*5/9;
printf("%30s%f%30s%f",
"\n\tТемпература за Фаренгейтом: F = ",F,
"\n\tТемпература за Цельсiєм: С = ",C);
// очікування натискання клавіші
// для затримки екрану
_getch();
return 0;
}
Схема роботи програми
Результати роботи програми
№ | Програма | Контрольний приклад |
1 |
F = 225 C = 107,2 |
|
2 |
F = 24,5 C = -4,2 |
|
3 |
F = -35,2 C = -37,3 |
Висновки
- Засвоєно основні правила роботи у середовищі Visual Studio: порядок створення проектів, використання підказок, способи налагодження.
- Засвоєно використання таких функцій:
- main() – головна функція програми;
- getch() – очікування введення символу;
- printf() – форматоване виведення на екран;
- scanf() – форматоване введення з клавіатури ;
- setlocale() – встановлення потрібної мови у програмах;
- Отримано практичні навички із застосування таких базових понять: оператори присвоєння; основні типи даних; порядок математичних операцій у виразі; оператор препроцесором обробки#include.
- Засвоєно розробку схем лінійних програм.
Порядок виконання роботи
- Ознайомитись з середовищем програмування Visual Studio:
- структура робочого стола середовища та головного вікна;
- структура проектів у Visual Studio С++;
- створення консольного додатку та його складових;
- компілювання програми, протокол компіляції;
- запуск програми на виконання, способи налагодження.
- Ознайомитись з документом "Графічне представлення алгоритмів" (Додаток А), зокрема з символами для побудови схем лінійних програм:
- символи процесу;
- символи початку і кінця програми;
- символи введення даних та виведення на дисплей.
- Розробити в середовищі Visual С++ програму, наведену у прикладі далі, ознайомившись на наведеному прикладі з порядком виконання завдання і оформлення документації за результатами всіх етапів розробки.
- Здійснити розробку програми згідно з індивідуальним завданням і підготувати звіт (для кожної задачі). Звіт повинен містити складові:
- титульний лист (додаток Б);
- віріант і завдання;
- формалізація задачі та словесний алгоритм;
- схема роботи програми;
- лістинг програми;
- результати виконання (не менше 3-х контрольних прикладів);
- висновки.
Варіанти індивідуальних завдань
Варіант | Завдання А | Завдання Б | ||
1 | ||||
2 | ||||
3 | ||||
4 | ||||
5 | ||||
6 | ||||
7 | ||||
8 | ||||
9 | ||||
10 | ||||
11 | ||||
12 | ||||
13 | ||||
14 | ||||
15 |
Рекомендації
- Вибирайте тип змінних з урахуванням діапазону і потрібної точності представлення даних.
- Задавайте змінним імена, що відображають їх призначення.
- Введення з клавіатури слід попереджати запрошенням. Для контролю відразу ж після введення слід вивести початкові дані на екран.
- До запуску програми слід підготувати декілька контрольних прикладів для перевірки правильності обчислень. Крім того, слід підготувати декілька неправильних прикладів, щоб перевірити реакцію програми на неправильні початкові дані.
- При записі виразів слід звертати увагу на пріоритет операцій.
- У функціях printf() і scanf() для кожної змінної необхідно вказати специфікацію формату, що відповідає її типу. Не забувайте, що в scanf() передається адреса змінної, а не її значення.
- При використанні стандартних функцій необхідно за допомогою директиви #include … підключити до програми відповідні заголовочні файли. Встановити, яка бібліотека потрібна, можна за допомогою довідкової системи.
Контрольні питання
- Які середовища програмування мовою С (С++) ви знаєте?
- Охарактеризуйте коротко переваги і недоліка середовища програмування Visual C?
- У чому різниця між інтерпретатором і компілятором?
- Як відбувається компіляція вихідного коду програми?
- Для чого існує компонувач?
- Які види бібліотек ви знаєте? В чому різниця між ними?
- Наведіть основні типи даних, наведіть приклади.
- Який порядок виконання операцій у складних виразах у програмах?
- Яким чином здійснюються перетворення типів у програмах мовою С? Наведіть основні правила перетворення типів.
- Яка головна функція у програмах мовою С?
- Яка послідовність дій при розробці програми?
- Наведіть основні символи для виконання лінійних схем виконання програм і поясніть їх.
- Які ви знаєте функції для введення інформації з клавіатури і виведення на екран?
- Як можна задати формат виведення інформації на екран?
- Наведіть і поясніть різні види опраторів присвоєння.