- •Методичні поради до користУВання практикумом
- •Послідовність виконання робіт
- •Виконання самостійної роботи для підготовки до лабораторній роботі
- •Методика проведення лабораторної роботи
- •Приклад оформлення титульної сторінки звіту
- •2. Побудова структурних блок-схем алгоритмів
- •3. Процедурне програмування
- •Void pause (int p) //заголовок функції
- •Int abs1(int I) // для цілих чисел
- •1) Int abs (int); 2) double fabs (double); 3) long labs (long);
- •Int dd[4][6]; //двовимірний масив
- •4. Техніка показників
- •Void fun(double [ ]);
- •Void fun(double array[ ]) {…..}
- •Void deg(double [], unsigned, unsigned);
- •Void deg(double array[], unsigned size, unsigned mn);
- •Void fr(int [], unsigned, int []);
- •Void fr(int ms[], unsigned size, int ms1[]);
- •Void sort(int [], const unsigned, int (*)(int, int));
- •Void sort(int array[], const unsigned k, int (*var)(int, int));
- •If ((var)(array[k], array[I]))
- •Initialize(); Sc r(15);
- •Initialize(); Scr(15);
- •Void tarabar(string text[])
- •Idkln dkln 5
- •Idkln гджу -122
- •3_14.Exe лисиця бачить сир
- •3_14.Exe пробіл
- •Зведенна таблиця використання показників
- •4. Об’єктно-оріентоване програмування
- •Void swop(client &a, client &b);
- •Void sort(client c[ ], unsigned k, int ind);
- •Void fun1(int);
- •Void Client::swop(int, int j)
1) Int abs (int); 2) double fabs (double); 3) long labs (long);
Для здійснення перевантаження треба записати три варіанта прототипу нової функції та три варіанта опису функції, що й зроблено в наступній програмі. Прототипи записані у вигляді коментаря.
При виклику функції x=abs1(a) компілятор визначає тип змінної а та виконує потрібний варіант. Для перевантаження функції застосовується нове ім’я abs1.
Можна перевантажувати функції, у котрих різняться аргументи по типу, кількості, порядку слідування.
Неможливо перевантажувати функції, що різняться тільки типом значення, що повертаються.
Всередині тіл функцій, що перевантажені, можна виконувати різні алгоритми.
Програма – перевантажена функція abs1.
/*файл SUBPROG\abs.cpp – Перевантаження функцій abs, fabs, labs*/
//int abs1(int); для цілих чисел
//double abs1(double); для чисел типу double
//long abs1(long); для цілих типу long
Int abs1(int I) // для цілих чисел
{return abs(i);}
double abs1(double a) // для чисел типу double
{return fabs(a);}
long abs1(long i); // для цілих типу long
{return labs(i);}
Оглядові запитання
Що може мати кожна базова змінна крім атрибутів: ім’я, тип розмір, значення?
Яка у змінної є область дії?
Що таке область життя (існування) при виконанні якої змінна існує у пам’яті комп’ютера?
Для чого використовуються спеціфікатори auto та register?
Для чого використовується клас пам’яті extern?
Для яких змінних використовуються спеціфікатори extern та auto: для локальних або глобальних?
У якому блоці локальні змінні з атрибутом static доступні?
Аргументи функції – локальні або глобальні змінні для блока-функції?
Як діє “генератор випадкових чисел” з прототипом: double ch()?
Операція ::, яка в середині блоку, дає доступ до глобальної змінної чи ні?
Перерахуйте властивості функцій.
Які для здійснення перевантаження треба записати три варіанта прототипу нової функції та три варіанта опису функції?
Чи можна перевантажувати функції, у котрих різняться аргументи по типу, кількості, порядку слідування?
Чи можна виконувати всередині тіл функцій, що перевантажені, різні алгоритми?
Лабораторна робота № 11. Передача аргументів за посиланням та масиви
Мета:
Здобути навики використання середовища розробки мови C++, створити проект, що пояснює передачу аргументів за посиланням та застосування масивів, здобути навички написання програм.
Короткі теоретичні відомості до роботи.
Після виконання функцій, що розглядалися раніше, значення змінних, які використовувалися в якості аргументів, не змінювалося. Цей ефект пояснюється тим, що у функції йшла передача не самої змінної, а її тимчасової копії, котра знищувалася після виходу із функції. Такий спосіб має назву передачі змінних у функцію за значенням.
Копії змінних потребують додаткову пам’ять, коли аргументів багато. Іноді буває потреба змінити значення змінних-аргументів по смислу алгоритму. Такий спосіб має назву передачі аргументів за посиланням.
Розглянемо відому функцію swap обміну значеннями між змінними.
На передачу за посиланням вказує символ & (амперсенд). Аргументи, що змінилися у процесі виконання, зберігають ці значення для подальшого використання. При виклику функції аргументи записуються звичайним чином. Розглянемо виклик перевантаженої для трьох типів функції swap.
РЕЗУЛЬТАТ ВИКОНАНННЯ ПРОГРАМИ
ФУНКЦІЇ З АРГУМЕНТАМІ ЗА ЗАМОВЧУВАННЯМ
Розглянемо ще один варіант функції – з аргументами за замовчуванням – на прикладі функції-підпрограми paral, яка розраховує об’єм паралелепіпеду.
У програмі є підпрограма, у котрій два аргументи (другий та третій) задаються у прототипі. Можливі три варіанта виклику функції: з першим аргументом, з першим та другим аргументами або з трьома аргументами. У першому випадку задається перший аргумент, а два останні використовують значення за замовчуванням – функція притому обчислює довжину лінії. У другому випадку задається перший аргумент і змінюється другий, а третій використовує значення за замовчуванням, - функція обчислює площу прямокутника. У третьому випадку задаються значення трьох аргументів, - функція обчислює об’єм паралелепіпеду. Аргументи, що задані за замовчуванням, повинні записуватися праворуч від звичайних, тобто не ініціалізовані і обов’язково задані при виклику функції, та пере назначаються тільки підряд зліва на право.
РЕЗУЛЬТАТ ВИКОНАНННЯ ПРОГРАМИ
ВБУДОВАНІ ФУНКЦІЇ inline
Для економії ресурсів комп’ютера в С++ передбачені вбудовані функції, які визначені атрибутом inline. Для об’яви вбудованої потрібно вписати спочатку спеціфікатор inline поперед імені функції. Вбудована функція повинна бути описана до її першого виклику. Компілятор вписує код такої функції в місце програми відкіля вона викликається і стільки разів, скільки вона викликається. Ця функція компілюється разом з програмою при її виклику.
Розглянемо вбудовану функцію та результат її виконання. У програмі генератора випадкових чисел chance та функції перевірки числа на парність even оформлені як вбудовані з бібліотечною функцією chr , для того, щоб не ставити компілятор перед вибором між двома однаковими іменами.
У програмі організований цикл, у якому робиться перевірка на парність (even – парні, odd – непарні) керуюча змінна i та випадкове число j.
Вбудовані функції можуть мати аргументи за замовчуванням. Дозволена перевантаження вбудованих функцій.
РЕЗУЛЬТАТ ВИКОНАНННЯ ПРОГРАМИ
МАСИВИ
Масив – це послідовна група змінних, котрі мають одне ім’я та один тип.
Масиви слугують для розміщення набору даних, котрі можна зберігати або змінювати, використовуючи у процесі виконання програми. Як і змінну, масив можна оголосити. Наприклад, double array [14]; - визначає, що резервується пам’ять для 14 чисел типа double з іменем array та порядковим номером від 0 до 13. Ім’я масиву повинно відповідати вимогам, що й ім’я змінної. Окремий елемент масиву має ім’я масиву та у квадратних дужках індекс.
array [0] – перший елемент масиву з індексом 0,
array [13] – останній елемент масиву з індексом 13.
Масив у цілому та його елементи окремо обкладають усіма атрибутами змінних С++. Масиви можуть бути багатовимірними. Наприклад, int dd [4][6]; - це об’ява двовимірного масиву на 24 (4х6=24) цілих чисел з іменем dd .
Можливо об’ява масивів у загальному ряду змінних:
double array [14], a; char cch [4], cc=‘4’;
int dd[4][6], mi[18], mj[3][14][48], is=221;
Можливо ініціалізація масиву:
char cel1[ ]={‘5’,’g’,’ ‘, ‘&’, ‘ю’ };
int array1[2]={5, -33};
Кількість елементів масиву cel компілятор підраховує самостійно. Властивості масивів розглядається у програмі за результатом виконання.
//файл PART1\1_41.cpp
// МАСИВИ
#include<stdlib.h> //for rand
#include “c:\CPP\SUBPROG\\roll.h”
#include “c:\CPP\SUBPROG\\ roll_txt.h”
#define N 15 // розмір масиву
main() {clrscr();
char cel1[ ]={‘5’,’g’,’ ‘, ‘&’, ‘ю’ }; /* ініціалізація при об’яві */
i=-1; do{i++; cout<<“\n”<<i<<“ “<< cel[i];}while(cel[i]!= ‘ю’);
cout<<“\nРозмір масиву cel у байтах = “<<sizeof(cel);
char cel2[8]={‘6’,’d’,’s‘, ‘%’, ‘0’ , ‘щ’};
cout<<“\n\n”<<cel2 //вивід символу масиву за ім’ям
<<“\nРозмір масиву cel2 у байтах = “<<sizeof(cel2);
<<“\nЕлемент №2 (з індексом 1)=“<<cel2[1];
<<“\nЕлемент №8 (з індексом 7)=“<<cel2[7];
<<“\nЕлемент №10 (з індексом 9)=“<<cel2[9];
