Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичні вказівки до лаб. робіт по С++.doc
Скачиваний:
5
Добавлен:
01.05.2025
Размер:
5 Мб
Скачать
☆

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; }

ЗУХУЛЬТАТИ ВИКОНАННЯ ПРОГРАМИ

повторити запуск, але попередньо

набрати у командньому рядку:

3_14.Exe пробіл

слово1 пробіл

слово2 пробіл

слово3

викон. файл C:\BOOK2\CPP\PART3\3_14.EXE

РЕЗУЛЬТАТ ВИКОНАННЯ ПРОГРАМИ ПРИ БЕЗПОСЕРЕДНЬОМУ ЗАПУСКУ.

C:\BOOK2\CPP\PART3\3_14.EXE

Лисиця

Бачит

сир

Оглядові запитання

  1. Звідкіля передаються аргументи у функцію?

  2. Що визначає вираз argv[ ]?

  3. Що визначає вираз argс?

  4. Що визначає вираз main (int argc, char *argv[ ] )?

  5. Що визначає вираз (if (arge!=4))?

  6. Що визначає вираз 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. Після використання масиву пам’ять звільнується. Для раніх версій компілятора при звільнені пам’яті потрібно вказувати кількість елементів масиву.

Оглядові запитання

  1. Які дії виконують оператори new і delete?

  2. Що здійснює вираз iP=new int;?

  3. Що виконує оператор new?

if (! iP) {cout<<”\nпомилка ”; pause(0); };

  1. Що здійснює вираз if (! iP) {cout<<”\nпомилка ”; pause(0); };?

  2. Що здійснює вираз delete iP;?

  3. Що здійснює вираз float *aP= new float(88.1);?

  4. Що здійснює вираз if (!mP)?

  5. Що здійснює вираз mP[k]=ch();?

Лабораторна робота № 27. Використання показників та контрольна робота № 2

Мета:

Здобути навики використання середовища розробки мови C++, познайомитися з використанням показників та виконати контрольну роботу № 2, здобути навички написання програм.

Короткі теоретичні відомості до роботи.

Таблиця 3.1