images.jpg

 

 

Зміст           Наступна сторінка          Електронні посібники ВНТУ

 

 

 

 

 

ЛАБОРАТОРНА РОБОТА №1

РОЗРОБКА ПРОГРАМ З ЛІНІЙНОЮ СТРУКТУРОЮ

images (33).jpg
 

 

Мета роботи

  • Ознайомитись з середовищем програмування Visual С++.
  • Навчитись створювати консольні додатки, компілювати програму, вико­нувати, налагоджувати, користуватись системою допомогии і підказками.
  • Засвоїти основні символи графічних схем, які використовуються у програмах лінійної структури.
  • Ознайомитись з етапами розробки програм.
  • Навчитися розробляти програми з лінійною структурою, тобто програм, у яких всі оператори виконуються послідовно, один за одним.
  • Навчитися формувати звіт з лабораторної роботи.

 

 
 images (47).jpg
        

       ТЕОРЕТИЧНІ ВІДОМОСТІ

 

Складові  мови  програмування

У тексті на будь-якій природній мові можна виділити чотири основних елементи: символи, слова, словоспо­лучення і речення. Подібні елементи містить і алгоритмічна мова, але слова називають лексемами (елемен­тар­ними конструкці­ями), словосполучення – ви­ра­зами, а речення – опера­то­рами.  Лек­семи утворюються із символів, вирази з лексем і символів, а оператори – з символів, виразів і лексем.

Алфавіт мови програмування (аlphabet programming language) – це основні неподільні знаки, за допомогою яких пишуться всі тексти мовою.

Лексема (token) – елементарна конструкція, мінімальна одиниця мови, яка має самостійний сенс.

Вираз (expression) задає правило обчислення деякого значення.

Оператор (operator) задає закінчений опис деякої дії.

Кожен елемент мови визначається синтаксисом і семантикою. Синтаксичні визначення встановлюють правила побудови елементів мови, а семантика визначає їх зміст і правила використання.

Етапи створення програми

Об'єднана єдиним алгоритмом сукупність описів і операторів утворює програму на алгоритмічній мові. Для того, щоб виконати програму, потрібно перевести її на мову, зрозумілу процесору – в машинні коди. Етапи процесу підготовки програми на С/С++ наведені на рис. 1.1 [1]:  редагування; препроцесорна обробка; компіляція; компонування; заван­та­ження; виконання.

Редагування (еditing). Спочатку програму необхідно підготувати за допомогою одного з текстових редакторів. Це вихідний (початковий) код програми (.с, .сp, .cpp). Файл з вихідним текстом – це ще не програма, її не можна запустити і виконати.

Етапи процесу підготовки програми на С++
Рисунок 1.1 – Етапи процесу підготовки програми на С++

 

Препроцесорна обробка (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).

Крім того, цілі типи charshortintlong можуть використовуватися з модифікаторами 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 – температура за Фаренгейтом.

 

Формалізація задачі

  1. Вхідні дані: F – температура за Фаренгейтом.
  2. Вихідні дані: С – температура за Цельсієм.
  3. Типи даних. Оскільки значення температур за Цельсієм і за Фарен­гейтом можуть бути і цілими, і дійсними, доцільно обрати тип float.
  4. Перевірка правильності. Для перевірки правильності обчислень, слід підготувати декілька контрольних прикладів.

 

Словесний алгоритм

  1. Початок.    { Перейти до п.2. }
  2. Оголошення змінних: С, F, Х – дійсні,. { Перейти до п3.. }
  3. Видати запрошення для введення F. { Перейти до п.4. }
  4. Ввести F. { Перейти до п.5. }
  5. Обчислити Х = F – 32. { Перейти до п.6. }
  6. Обчислити С = Х * 5.0 / 9.0. { Перейти до п.7. }
  7. Вивести на екран значення F i  C. { Перейти до п.8. }
  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

 

Висновки

  1. Засвоєно основні правила роботи  у середовищі Visual Studio: порядок створення проектів, використання підказок, способи налагодження.
  2. Засвоєно використання таких функцій:
    • main() – головна функція програми;
    • getch() – очікування введення символу;
    • printf() – форматоване виведення на екран;
    • scanf() – форматоване введення з клавіатури ;
    • setlocale() – встановлення потрібної мови у програмах;
  3. Отримано практичні навички із застосування таких базових понять: оператори присвоєння; основні типи даних; порядок математичних операцій у виразі; оператор препроцесором обробки#include.

  4. Засвоєно розробку схем лінійних програм.

 

images (37).jpg

 

Порядок виконання роботи

 

 

  1. Ознайомитись з середовищем програмування Visual Studio:
    • структура робочого стола середовища та головного вікна;
    • структура проектів у Visual Studio С++;
    • створення консольного додатку та його складових;
    • компілювання програми, протокол компіляції;
    • запуск програми на виконання, способи налагодження.
  2. Ознайомитись з документом "Графічне представлення алгоритмів" (Додаток А), зокрема з символами для побудови схем лінійних програм:
    • символи процесу;
    • символи початку і кінця програми;
    • символи введення даних та виведення на дисплей.
  3. Розробити в середовищі Visual С++  програму, наведену у прикладі далі, ознайомившись на наведеному прикладі з порядком виконання завдання і оформлення документації за результатами всіх етапів розробки.
  4. Здійснити розробку програми згідно з індивідуальним завданням і підго­ту­вати звіт (для кожної задачі). Звіт повинен містити складові:
    • титульний лист (додаток Б);
    • віріант і завдання;
    • формалізація задачі та словесний алгоритм;
    • схема роботи програми;
    • лістинг програми;
    • результати виконання (не менше 3-х контрольних прикладів);
    • висновки.

 

 

images (60).jpg

 

Варіанти індивідуальних завдань

 
Варі­ант Завдання А Завдання Б
1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

 

9380.jpg

 

Рекомендації

 
  1. Вибирайте тип змінних з урахуванням діапазону і потрібної точності представлення даних.
  2. Задавайте змінним імена, що відображають їх призначення.
  3. Введення з клавіатури слід попереджати запрошенням. Для контролю відразу ж після введення слід вивести початкові дані на екран.
  4. До запуску програми слід підготувати декілька контрольних прикладів для перевірки правильності обчислень. Крім того, слід підготувати декілька неправильних прикладів, щоб перевірити реакцію програми на неправильні початкові дані.
  5. При записі виразів слід звертати увагу на пріоритет операцій.
  6. У функціях printf() і  scanf() для кожної змінної необхідно вказати специфікацію формату, що відповідає її типу. Не забувайте, що в scanf() передається адреса змінної, а не її значення.
  7. При використанні стандартних функцій необхідно за допомогою директиви #include … підключити до програми відповідні заголовочні файли. Встановити, яка бібліотека потрібна, можна за допомогою довідкової системи.

 

ask5-1

 

Контрольні питання

 
  1. Які середовища програмування мовою С (С++) ви знаєте?
  2. Охарактеризуйте коротко переваги і недоліка середовища програмування Visual C?
  3. У чому різниця між інтерпретатором і компілятором?
  4. Як відбувається компіляція вихідного коду програми?
  5. Для чого існує компонувач?
  6. Які види бібліотек ви знаєте? В чому різниця між ними?
  7. Наведіть основні типи даних, наведіть приклади.
  8. Який порядок виконання операцій у складних виразах у програмах?
  9. Яким чином здійснюються перетворення типів у програмах мовою С? Наведіть основні правила перетворення типів.
  10. Яка головна функція у програмах мовою С?
  11. Яка послідовність дій при розробці програми?
  12. Наведіть основні символи для виконання лінійних схем виконання програм і поясніть їх.
  13. Які ви знаєте функції для введення інформації з клавіатури  і виведення на екран?
  14. Як можна задати формат виведення інформації на екран?
  15. Наведіть і поясніть різні види опраторів присвоєння.