- •Методичні поради до користУВання практикумом
- •Послідовність виконання робіт
- •Виконання самостійної роботи для підготовки до лабораторній роботі
- •Методика проведення лабораторної роботи
- •Приклад оформлення титульної сторінки звіту
- •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)
3_14.Exe лисиця бачить сир
і наступного вводу <Enter>, комп’ютер звіряє кількість введених рядків з числом в умові (if(arge!=4)). Коли кількість введених рядків відповідає заданому числу (4), то продовжується виконання програми. Практично корисно використовувати аргументи командного рядку, що відображено у наступній програмі.
//файл PART3\3_14.ccp
// аргументи командного рядка
#include “c:\CPP\SUBPROG\\roll.h”
#include “c:\CPP\SUBPROG\\roll_txt.h”
main ( int argc, char *argv[ ]) }
if (argc!=4)
{ cout<<”\nповторити запуск, але попередньо”
<<”\nнабрати у командньому рядку:”
<<”\n3_14.exe пробіл”
<<”\nслово1 пробіл”
<<”\nслово2 пробіл”
<<”\nслово3\n\n”
<<”викон. файл “<<argv[0]; }
else for (i=0; i<4; i++) cout<< argv[i] <<’\n’;
pause(0); return 0; }
ЗУХУЛЬТАТИ ВИКОНАННЯ ПРОГРАМИ
повторити запуск, але
попередньо набрати
у командньому рядку: слово1
пробіл слово2
пробіл слово3
викон.
файл C:\BOOK2\CPP\PART3\3_14.EXE3_14.Exe пробіл
РЕЗУЛЬТАТ ВИКОНАННЯ ПРОГРАМИ ПРИ БЕЗПОСЕРЕДНЬОМУ ЗАПУСКУ.
C:\BOOK2\CPP\PART3\3_14.EXE Лисиця Бачит сир
Оглядові запитання
Звідкіля передаються аргументи у функцію?
Що визначає вираз argv[ ]?
Що визначає вираз argс?
Що визначає вираз main (int argc, char *argv[ ] )?
Що визначає вираз (if (arge!=4))?
Що визначає вираз else for (i=0; i<4; i++) cout<< argv[i]<<’\n’;?
Лабораторна робота № 26. Динамічне розподілення пам’яті
Мета:
Здобути навики використання середовища розробки мови C++, познайомитися з динамічним розподіленням пам’яті, здобути навички написання програм.
Короткі теоретичні відомості до роботи.
Раніш ми розглядали область дії і час життя змінних, які встановлюються автоматично при напису програми. У С++ передбачена також можливість динамічно виділити і вилучити пам’ять для змінних. Ці дії виконують оператори new і delete у сполучені з показниками.
Нехай:
int *iP;
Виділення пам’яті здійснює вираз
iP=new int;
Оператор new повертає показник типу, що заданий, у виділену пам’ять, достатньою для збереження змінної. Коли пам’яті не достатньо, то повертається показник 0 (нуль).
Після вказівки комп’ютеру про виділену пам’ять, слід перевірити виконання:
if (! iP) {cout<<”\nпомилка ”; pause(0); };
Вираз
delete iP;
звільняє виділену пам’ять.
Коли викликати delete з недійсним показником, тобто з тим, для кого попередньо не виділена пам’ять за допомогою new, в системі розподіленної пам’яті здійснюється збій.
Можлива одночасна ініціалізація змінної. Наприклад,
float *aP= new float(88.1);
Для масиву виділення та звільнення пам’яті виглядає таким чином:
int *mP= new int[12][4]; //показник mP на початок масиву
. . .
delete[ ] mP
Ініціалізація масивів при динамічному виділенні пам’яті не здійснюється.
Приклади динамічного розподілу пам’яті демонструються у наступній програмі.
Спочатку програми виділяється пам’ять для цілої змінної з одночасною ініціалізації цієї змінної числом 77. Після операції виділення пам’яті перевіряється значення, що повертається, так як new не завжди повертає доступний показник. Після використання динамічна пам’ять звільнюється.
//файл PART3\3_16.ccp
// динамічний розподіл пам’яті
#include “c:\CPP\SUBPROG\\roll.h”
#include “c:\CPP\SUBPROG\\roll_txt.h”
#include<iomanip.h>
main () { int *iP=new int(77); /*Виділення пам’яті для змінної int
з ініціалізацієї числом 77 */
if (!iP){ cout<<”\nпомилка виділення пам’яті”;
pause(0); }; //перевірення виділенної пам’яті
cout<<”\n “<<*iP<<end1;
delete iP; //звільнення пам’яті
double *mP=new double[7]; //виділення пам’яті для масиву double
if (!mP) {cout<<”\nпомилка виділенної пам’яті”;
for (k=0; k<7; k++) mP[k]=ch();
for (k=0; k<7; k++)
{ cout<<”\n “<<k<<setw(14)<<mP[k]; } cout<<end1;
delete[ ]mP; //звільнення пам’яті
cout<<”\n *** кінець задачі ***”;
pause(0); return 0; }
Р
77
0 -0.999534
1 0.455192
2 0.473509
3 -0.284798
4 0.00626162
5 -0.432447
6 o.602981
*** кінець
задачі ***
Далі перевіряється і виділяється пам’ять для масиву на 7 чисел типу double. Після використання масиву пам’ять звільнується. Для раніх версій компілятора при звільнені пам’яті потрібно вказувати кількість елементів масиву.
Оглядові запитання
Які дії виконують оператори new і delete?
Що здійснює вираз iP=new int;?
Що виконує оператор new?
if (! iP) {cout<<”\nпомилка ”; pause(0); };
Що здійснює вираз if (! iP) {cout<<”\nпомилка ”; pause(0); };?
Що здійснює вираз delete iP;?
Що здійснює вираз float *aP= new float(88.1);?
Що здійснює вираз if (!mP)?
Що здійснює вираз mP[k]=ch();?
Лабораторна робота № 27. Використання показників та контрольна робота № 2
Мета:
Здобути навики використання середовища розробки мови C++, познайомитися з використанням показників та виконати контрольну роботу № 2, здобути навички написання програм.
Короткі теоретичні відомості до роботи.
Таблиця 3.1
