русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Розробка програм з використанням структур


Дата додавання: 2014-05-08; переглядів: 1253.


Приклад 1. Сформувати масив даних про 5 студентів групи. По кожному студенту необхідно мати дані: ПІБ, дата народження, стать. Вивести перелік юнаків, що народились в 1988 році.

 
 
#include <iostream.h> #include <fstream.h> struct zStudent { char FIO[20]; char pol; struct {int d,m,g;} data_r; }; void main() { zStudent stud[5]; int k; for (k=0;k<5;k++) { cout<<"\nVvod FIO "; cin>>stud[k].FIO; cout<<"Vod pol "; cin>>stud[k].pol; cout<<"Vod data r(d m g) "; cin>>stud[k].data_r.d>> stud[k].data_r.m>>stud[k].data_r.g; } cout<<"Spisok "<<endl; for (k=0;k<5;k++) if (stud[k].data_r.g==1988 && stud[k].pol=='m' ) cout<<stud[k].FIO<<endl; }

 


Питання для самоперевірки

 

2) Описати структуру, яка описує карту: масть, достоїнство. Ініціалізувати структуру

3) Описати структуру, яка описує кісточку доміно: значення на лівій частині, значення на правій частині. Використовуючи змінну типу цієї структури, присвоїти полям відповідні значення.

4) Написати оператор виводу значень елементів структури, описаної в п.2.

5) Описати структуру, яка описує студента групи: ПІБ, група. Ініціалізувати структуру.

6) Описати структуру, що описує м'яч: колір, розмір, матеріал. Ініціалізувати структуру.

7) Описати структуру, що описує собаку: порода, окрас, рук народження, наявність медалей. Ініціалізувати структуру.

8) Визначити розмір структури, описаної в п.5.

9) Описати структуру, яка описує студента групи: ПІБ, группа, дата народження(день, місяць, рік), адреса(область, місто, вулиця, дім, квартира), використовуючи вкладені структури. Ініціалізувати структуру.

10) Вивести, використовуючи структуру з п.8, ПІБ стулента і його адресу.

 

Об¢єднання С++ 1) Визначення об‘єднань2) Оголошення об‘єднань3) Доступ до елементів об‘єднань

Об¢єднання - це область пам¢яті, в якій в різні моменти часу можуть знаходитись об¢єкти різних типів. В довільний момент часу об¢єднання може містити тільки один об¢єкт, тому що елементи об¢єднання сумісно використовують одну й ту ж область пам¢яті.

Об¢єднання оголошуються за допомогою ключового слова union в такому ж форматі, як і структури. Формат оголошення:

union Number

{

int x;

float y;

};

Як правило, об¢єднання оголошуються до головної функції, щоб мати доступ до нього з довільної функції.

Пам'ять, яка відповідає змінній типу об'єднання, визначається величиною, необхідною для розміщення найдовшого елемента об'єднання. Коли використовується елемент меншої довжини, то змінна типу об'єднання може містити невживану пам'ять. Всі елементи об'єднання зберігаються в одній і тій же області пам'яті, починаючи з однієї адреси.

Доступ до елементів об'єднання здійснюється тим же способом, що і до структур.

Коли виконано присвоєння Numder.x=78; то звернення то іншого елементу не має сенсу. В пам¢яті буде зберігатись значення останнього присвоєння.

Об¢єднання дозволяє інтерпретувати представлення об'єкту одного типу, начебто цьому об'єкту був привласнений інший тип.

Допустимі операції такі ж, як і у структури.

 

 


Указники 1) Визначення указника2) Операції над указниками3) Зв‘язок між указниками і масивами4) Масиви указників Визначення указника Це змінні, значеннями яких є адреса пам‘яті. Указник містить адресу, за якою знаходиться значення. Кожна змінна, яка оголошується як указник, повинна мати перед собою знак *. Формат опису: <тип> *<ім‘я змінної>Символ * може стояти будь-де: int *ptr; int* ptr; int * ptr;Указник може бути ініційований при оголошенн і: int *ptr=(int*)200; або за допомогою операції присвоєння:
(а)
int y=5;int *ptr;ptr=&y;Пустий указник має значення NULL. Це значення визначено в бібліотеці stdio..Операції над указниками 1) Операція розіменування2) Арифметичні операції3) Операції відношення4) Операція присвоєння Операція розіменування Операція повертає значення об‘єкту, на яке указує указник. Операція позначається символом *, який ставиться поперед указником.Для отримання значення на яке указує указник, використовується операція розіменування.Якщо маємо опис (а), то після виконання cout<<*ptr; буде виведено значення 5. Арифметичні операції
Операція Позначення Опис
Інкремент ++ Збільшення указника для переходу до наступної адреси
Декремент - - Зменшення указника для переходу до попередньої адреси
Додавання +, += Збільшення указника на ціле число
Віднімання -, -= Зменшення указника на ціле число. Можна знайти різницю між двома указниками
Фізичне збільшення або зменшення значення указника залежить від розміру того об‘єкту, на який він указує. Якщо до указника, описаного в (а), додати обо відняти деяке ціле N, то значення ptr зміниться на значення N*sizeof(int). Операції відношення Операції відношення == і != можна використовувати для всіх указників.Операції <, >, >=, <= мають сенс тільки для указників на один і той же масив. Операція присвоєння Указник можна привласнити іншому указнику, якщо обидва мають одинаків тип. Наприклад:int *a,*b;float *c;Допустимо a=b; Зв‘язок між указниками і масивами Указники широко використовуються при роботі з масивами.Ім.‘я масиву є адресою першого елементу масиву. Наприклад, маємо описиint b[5];int *bptr;Так як ім‘я масиву є указником на перший елемент масиву, то можна задати указнику bptr адресу першого елементу масиву b і виконати присвоєння:bptr=b; Ця дія еквівалентна наступній дії: bptr=&b[0];Операції ++ і - - при роботі з масивами будуть означати перехід до наступного або попереднього елементу масиву.Операції + і - деякого значення N будуть означати перехід до елементу масива, що лежить через N елементів від поточного.bptr+=2; буде означати перехід до 3-го елементу. bptr буде указувати на 3-й елемент.bptr+=2; буде означати перехід до 5-го елементу. До 4-го елементу масиву можна звернутись наступним чином:b[3]*(bptr+3)*(b+3)bptr[3] Масиви указників С++ Елементами масивів можуть бути указники. Типовим представником такої структури є формування масиву рядків. Кожний елемент такого масиву є рядок. Змінна рядка є по суті указником на її перший символ. Наприклад: сhar *color[3]={”червоний”,“жовтий”,”зелений”};Масив color оголошено таким, що складається з указників на тип сhar. Кожне з значень ”червоний”, “жовтий”, ”зелений” зберігається в пам‘яті як окремий рядок. Масив color буде містити указники на кожен з рядків. Кожний указник посилається на перший елемент відповідного рядку. Для звернення до елементів масиву необхідно вказати індекс відповідного елементу і операцію розіменування. Наприклад, для виведення значення третього елементу:cout<<*color[2];Використання масиву указників дає більшу гнучкість тому, що розмір рядку не обмежений.Наприклад, подібний масив можна було оголосити як двовимірний масивсhar color[3][10]={”червоний”,“жовтий”,”зелений”};Але в цьому випадку кількість елементів рядків обмежена 10 символами.

Питання для самоперевірки

1) Описати указник на цілу змінну і ініціалізувати його.

2) Описати указник на дійсну змінну і ініціалізувати його.

3) Описати і ініціалізувати указник на масив 10 цілих елементів.

4) Маємо опис:

int b[8];

int *bPtr=b;

Вивести значення третього елементу масив, використовуючи указник.

5) Маємо опис:

int b[8]={1,2,3,4,5,6,7,8};

int *bPtr=b;

Що буде виведено при виконанні операторів:

cout<<b[7];

cout<<*bPtr;

cout<<*(bPtr+2);

 

6) Маємо опис:

int b[8]={1,2,3,4,5,6,7,8};

int *bPtr=b;

Що буде виведено при виконанні операторів:

cout<<*(b+7);

bPtr++;

cout<<*bPtr;

cout<<*(bPtr-1);

7) Маємо опис:

int b[8]={1,2,3,4,5,6,7,8};

int *bPtr=b;

Що буде виведено при виконанні операторів:

cout<<*(b+4);

bPtr-=2;

cout<<*bPtr;

cout<<bPtr[3];

8) Маємо опис:

int b[8]={1,2,3,4,5,6,7,8};

int *bPtr=b;

Що буде виведено при виконанні операторів:

cout<<*(bPtr+5);

bPtr++;

cout<<*bPtr;

bPtr+=3;

cout<<*(bPtr-2);

Файли і потоки С++

 

1) Введення і виведення потоків

2) Робота з файлами послідовного доступу

3) Приклад діалогової програми з використанням файлів послідовного доступу

4) Робота з файлами довільного доступу

 

Введення і виведення потоків

Потік -- це послідовність байтів. В операціях введення байти пересилаються від пристрою в оперативну пам'ять. Байти даних можуть представлятися у вигляді символів в коді ASCII, у вигляді внутрішнього формату, у вигляді графічного зображення, цифрового зображення і т.д.

Мова надає можливості для введення-виведення на «низькому» і «високому» рівнях. Уведення-виведення на низькому рівні (тобто неформатоване уведення-виведення) здійснює просто пересилку даних по байтах від пристрою в пам'ять і навпаки. При використанні введення-виведення на високому рівні (тобто форматоване уведення-виведення) байти групуються в певні елементи, наприклад цілі або речовинні числа, символи, рядки і дані типів, визначених користувачем.

При використанні потокового введення-виведення необхідно підключити наступні заголовні файли:

- <iostream.h> -- містить основні відомості, необхідні для всіх операцій з потоками введення-виведення.

- <iomanip.h> -- відомості для форматування

- <fstream.h> -- інформація для операцій з файлами, обробка яких здійснюється користувачем.

 

В C++ визначено три класи файлового введення-виведення:

 

ifstream вхідні файли для читання
ofstream вихідні файли для запису
fstream файли для читання і запису

 

Файли відкриваються шляхом створення об'єктів цих класів потоків.

При роботі з файлами цих класів можна використовувати ряд властивих їм методів ( open – для відкриття потоку, close – для закриття потоку) і застосовувати дуже зручні операції помістити в потік (<<) і узяти з потоку (>>).

Файли що використовуються є текстовими.

 

Робота з файлами послідовного доступу

 

1) Виведення у файл

2) Приклад

3) Читання з файлу

4) Приклад

 

Необхідно створити об'єкт потоку виведення, пов'язаний з файлом, за допомогою конструктора. Параметром для конструктора буде ім'я файлу виведення і режим відкриття файлу.

Можливі режими відкриття файлу приведені таблиці:

 

Режим Опис
ios::out Відкрити файл для виведення. Вміст файлу очищається
ios::app Відкрити для додавання в кінець файлу
ios::ate Переміститися в кінець відкритого файлу
ios::in Відкрити файл для введення
ios::frunc Очищається вміст файлу
ios::nocreate Якщо файл не існує, то операція його відкриття не виконується.
ios::noreplace Якщо файл існує, то операція його відкриття не виконується.

 

Виведення у файл

 

Формат обісу на відкриття потоку для виведення у файл з використанням ініціалізації:

ofstream <имя вихідного потока>(<имя фізичного файла>[<режим>]);

 

За умовчанням використовується режим ios::out тому його можна не указувати.

Наприклад

ofstream outfile("Test.dat");

Або можна описати об'єкт класу, а потім відкрити файл з використанням методу open:

ofstream outfile;

outfile.open("Test.dat", ios::out);

 

В результаті, при нормальному завершенні операції, створюється вихідний потік outfile, пов'язаний з файлом Test.dat. Якщо файл з таким ім'ям не існує, то він створюється. Якщо файл існує, то він очищається.

Якщо операція завершена з помилкою, то значення потоку буде рівне 0(нуль), якщо помилки не було, то не нуль. Для перевірки правильності завершення операції використовується оператор:

 

if ( !outfile)

cout<<"Файл не вдається створити")<<endl;

else

{

. . . . // робота з файлом

}

При виведенні даних у файл елементи що виводяться необхідно розділяти символом «пропуск».

Для установки поточного покажчика файлу в його початок для вихідного потоку використовується метод seekp:

outfile.seekp(0);

Приклад

Сформувати файл з даними про студентів. Для кожного студента ввести номер залікової книжки і прізвище. Для завершення введення використовувати ознаку кінця файлу введення з клавіатури (^z).

 

 

 


#include <iostream.h>

#include <fstream.h>

void main()

{

long nZach;

char FIO[25];

ofstream Studfile("Student.dat");

if ( !Studfile)

cout<<"Файл не вдається створити"<<endl;

else

{

cout<<"Введите номер залікової книжки і прізвище студента"<<endl;

cout<<"Введите ^z для завершення."<<endl;

while (cin>>nZach>> FIO)

{

Studfile<< nZach<<' '<<FIO<<endl;

cout<<"? ";

}

Studfile.close();

}

}

 

По завершенню роботи з файлом необхідно його закрити за допомогою методу класу close().

 

Примітка. Цикл «поки не кінець вводу» ( while (cin>>nZach>> FIO) ) можна використати у формі while (!cin.eof()). Але в цьому випадку до файлу потрапляє зайвий останній запис з пустими значеннями.

 

Читання з файлу

 

Аналогічно може створюватися вхідний потік, пов'язаний з файлом:

ifstream <имя вхідного потока>(<имя фізичного файла>[<режим>]);

 

За умовчанням використовується режим ios::in тому його можна не указувати.

Наприклад

ifstream infile("Test.dat");

Або можна описати об'єкт класу, а потім відкрити файл з використанням методу open:

ifstream infile;

infile.open("Test.dat", ios::in);

Для установки поточного покажчика файлу в його початок для вхідного потоку використовується метод seekg:

infile.seekg(0);

 

Приклад

Прочитати вміст файла, створеного в попередньому прикладі.

#include <iostream.h>

#include <fstream.h>

void main()

{

long nZach;

char FIO[25];

ifstream Studfile("Student.dat");

if ( !Studfile)

cout<<"Файл не вдається відкрити")<<endl;

else

{

cout<<"Номер залікові книжки прізвище студента"<<endl;

while (Studfile >>nZach>> FIO)

cout<< nZach<<" "<<FIO<<endl;

Studfile.close();

}

}

Коли досягається кінець файлу, вхідна послідовність в операторі while повертає нуль.

Можна цикл читання з файлу записати інакше, використовуючи метод eof() для перевірки досягнення кінця файла:

while (!Studfile.eof())

{

Studfile >>nZach>> FIO;

cout<< nZach<<" "<<FIO<<endl;

}

Приклад діалогової програми з використанням файлів послідовного доступу

Створити файл, що містить відомості про студентів: номер залікової книжки, середній бал, ПІБ студента. Вивести дані про вказаного студента. Мати змогу доповнити файл і переглянути весь вміст.

#include <iostream.h>

#include <fstream.h>

#include <conio.h>

#include <string.h>

void vvod(int); // прототипи функцій

void vivod (void);

void vibor (void);

 

void main() // головна функція. Містить діалог

{

char d;

do

{

clrscr();

cout<<"1 -vvod"<<endl<<"2 - add"<<endl<<"3 - vivod"<<endl

<<"4 - vibor"<<endl<<"5 - exit"<<endl;

d=getch();

switch (d)

{

case '1':vvod(0);break;

case '2':vvod(1);break;

case '3':vivod();break;

case '4':vibor();break;

}

}

while (d!='5');

}

void vvod(int d)// функція для створення файлу і вводу в нього або доповнення

/*d = 0 для вводу

d = 1 для доповнення*/

{

long nZach;

char FIO[25];

float ball;

ofstream Studfile;

if (d==0)

Studfile.open("Student.dat");

else

Studfile.open("Student.dat",ios::app);

if ( !Studfile)

cout<<"Файл не вдається створити"<<endl;

else

{

cout<<"Введiть номер залiкової книжки, cepeднiй bal,прiзвище

студента"<<endl;

cout<<"Введiть ^z для завершення."<<endl;

while (cin>>nZach>>ball>>FIO)

{

Studfile<< nZach<<' '<<ball<<' '<<FIO<<endl;

cout<<"? ";

}

Studfile.close();

cin.clear(); // очистити потік стандартного вводу

}

}

 

void vivod(void) // функція виводу вмісту всього файлу

{

long nZach;

char FIO[25];

float ball;

ifstream iStudfile("Student.dat");

if ( !iStudfile)

cout<<"Файл не вдається вiдкрити"<<endl;

else

{

cout<<"Hомер залiкової книжки, cepeднiй бал,прiзвище студента"<<endl;

while (iStudfile>>nZach>>ball>>FIO)

cout<< nZach<<" "<<ball<<" "<<FIO<<endl;

getch();

iStudfile.close();

}

}

 

 

void vibor (void) // функція вивірки даних про вказаного студента

{

long nZach;

char FIO[25],vFIO[25];

float ball;

ifstream iStudfile("Student.dat");

if ( !iStudfile)

cout<<"Файл не вдається вiдкрити"<<endl;

else

{

cout<<"Введiть ФIО для пошуку"<<endl;

cin>>vFIO;

cout<<"Данi по студенту"<<endl;

while (iStudfile>>nZach>>ball>>FIO)

{

if (strcmp(vFIO,FIO)==0)

cout<< nZach<<" "<<ball<<endl;

}

iStudfile.close();

getch();

}

}

Робота з файлами довільного доступу С++

1) Основні відомості2) Створення і відкриття файлу прямого доступу3) Запис даних у файл4) Читання даних з файлу5) Доступ до довільного запису

 

Основні відомостіПри використанні файлів послідовного доступу неможливо прямо у файлі змінити якесь значення. Це приведе до спотворення інших даних. Найпростішим способом це зробити - використати допоміжний файл у який послідовно записати дані до запису, що змінюється, потім дані, що змінюється, а потім дані, що розміщуються за зміненими даними. Потім цей файл повинен замінити або бути скопійованим у висхідний файл. Це потребує додаткових ресурсів часу і не є вигідним. Спрощує завдання використання файлів з довільним доступом.С++ не накладає обмежень на структуру файлів. Тому додаток може сам створювати їх за своєю потребою для створення файлів довільного доступу може бути використано багато методів. Найбільш простим методом є вимога, щоб всі записи в файлі були однакової довжини. Це дає можливість легко визначати місцеположення потрібних даних. Тому при запису до файлу необхідно явно вказувати розмір даних. Найчастіше для роботи використовуються структури. Створення і відкриття файлу прямого доступуСтворення, відкриття для читання, відкриття для доповнення файлу прямого доступу нічим не відрізняється від цих дій для файлу послідовного доступу. Запис даних у файлДля запису даних до файлу прямого доступу використовується функція елемент write класу ofstream яка виводить у файл фіксовану кількість байтів, починаючи з вказаного місця пам‘яті у позицію файлу на яку вказує файловий вказівник.Формат запису

<ім‘я потоку>.write((char*)&<ім‘я змінної>,sizeof(<ім‘я змінної>));

Приклад формування нового файлу

#include <iostream.h>

#include <fstream.h>

struct zStudent

{

char FIO[20];

char grupa[15];

int god_r;

};

void main()

{

zStudent stud;

ofstream outStud("Stud.dat");

if (!outStud)

cout<<"File not create!!!"<<endl;

else

while (!cin.eof())

{

cout<<"\nVvod FIO ";

cin>>stud.FIO;

cout<<"Vod grupa ";

cin>>stud.grupa;

cout<<"Vod god_r ";

cin>>stud.god_r;

outStud.write((char*)&stud,sizeof(stud));

}

outStud.close();

}

Приклад доповнення файлу

#include <iostream.h>

#include <fstream.h>

struct zStudent

{

char FIO[20];

char grupa[15];

int god_r;

};

void main()

{

zStudent stud;

ofstream outStud("Stud.dat",ios::app);

if (!outStud)

cout<<"File not create!!!"<<endl;

else

while (!cin.eof())

{

cout<<"\nVvod FIO ";

cin>>stud.FIO;

cout<<"Vvod grupa ";

cin>>stud.grupa;

cout<<"Vvod god_r ";

cin>>stud.god_r;

outStud.write((char*)&stud,sizeof(stud));

}

outStud.close();

}

 

Читання даних з файлу Для читання даних з файлу прямого доступу використовується функція елемент read класу ifstream яка читає з файлу фіксовану кількість байтів, починаючи з позиції файлу на яку вказує файловий вказівник у вказане місце у пам‘яті.Формат читання

<ім‘я потоку>. read ((char*)&<ім‘я змінної>,sizeof(<ім‘я змінної>));

Приклад читання з файлу

#include <iostream.h>

#include <fstream.h>

struct zStudent

{

char FIO[20];

char grupa[15];

int god_r;

};

void main()

{

zStudent stud;

ifstream inStud("Stud.dat");

if (!inStud)

cout<<"File not open!!!"<<endl;

else

while (!inStud.eof())

{

inStud.read((char*)&stud,sizeof(stud));

cout<<endl<<stud.FIO<<" "<<stud.grupa<<" "<<stud.god_r<<endl;

}

inStud.close();

}

Доступ до довільного запису Для доступу до довільного запису для виведення даних у файл використовується функція елемент seekp класу. При цьому, якщо файл був закритий, то його необхідно відкрити файл в режимі ios::ate (переміститись в кінець відкритого файлу). Якщо файл був відкритий для запису – ніяких дій для відкриття виконувати не потрібно.Для доступу до довільного запису для виведення даних у файл використовується функція елемент seekg класу.Формат доступу до запису:<ім‘я потоку>.seekp | seekg (<номер запису>*sizeof<ім‘я змінної>); Спочатку необхідно встановити файловий указник на необхідний запис, а потім виконати необхідні дії: читати або писати. Врахувати, що нумерація записів починається з нуля. Приклад зміни вмісту третього запису файлу

#include <iostream.h>

#include <fstream.h>

struct zStudent

{

char FIO[20];

char grupa[15];

int god_r;

};

void main()

{

zStudent stud;

ofstream outStud("Stud.dat",ios::ate);

if (!outStud)

cout<<"File not create!!!"<<endl;

else

{

cout<<"\nVvod FIO ";

cin>>stud.FIO;

cout<<"Vvod grupa ";

cin>>stud.grupa;

cout<<"Vvod god_r ";

cin>>stud.god_r;

outStud.seekp(2*sizeof(stud));

outStud.write((char*)&stud,sizeof(stud));

}

outStud.close();

}

Приклад читання з файлу третього запису

#include <iostream.h>

#include <fstream.h>

struct zStudent

{

char FIO[20];

char grupa[15];

int god_r;

};

void main()

{

zStudent stud;

ifstream inStud("Stud.dat");

if (!inStud)

cout<<"File not open!!!"<<endl;

else

{

inStud.seekg(2*sizeof(stud));

inStud.read((char*)&stud,sizeof(stud));

cout<<endl<<stud.FIO<<" "<<stud.grupa<<" "<<stud.god_r<<endl;

}

inStud.close();

}

 

Динамічний розподіл пам¢яті С++ Пам¢ять може бути виділена і звільнена в процесі виконання програми. Для роботи з динамічною пам¢яттю використовуються оператори new i delete. Оператор new використовується для виділення пам¢яті. Формат оператора може бути представлено в двох формах:new <ім¢я типу> [(<значення для ініціалізації>)]new (<ім¢я типу>)[(<значення для ініціалізації>)] Оператор повертає указівку на об¢єкт вказаного типу.Якщо пам¢ять не може бути виділена, оператор повертає значення NULL.Наприклад: double *d; d=new double; або d=new(double);Коли виділяється пам¢ять, значення об¢єкту (значення записане в цій пам¢яті), буде не визначеним. Об¢єкту можна присвоїти початкове значення при використанні оператора new, наприклад d=new double (3.567); int* i=new int(12345);В якості аргументу можна використовувати стандартні типи і типи, визначені користувачем. При виділення пам¢яті для масиву оператор повертає указівку на перший елемент масиву. В цьому разі формат оператору має вигляд: new <ім¢я типу>[<розмір>] Наприклад:
int *n; n=new int[20];
Ініціалізувати значення елементів масиву не дозволяється.Для виділення динамічної пам¢яті для двовимірного масиву необхідно сформувати масив указівок на одновимірні масиви, тому що в С++ двовимірний масив розглядається як масив масивів. Наприклад, сформуємо динамічний масив розміром 2х2:

іnt **m; //указівка на указівку

m=new int*[2]; //указівка на масив

for(i=0;i<2;i++) //формування указівок на одновимірні масиви(рядки

матриці)

m[i]=new int[2];

Оператор delete використовується для звільнення пам¢яті, відведеної для об¢єкту.Оператор можна записати в двох формах: delete <ім¢я змінної стандартного типу>; delete []<ім¢я змінної масиву>;Наприклад: delete d; delete []n;

Для двовимірного масиву необхідно спочатку звільнити пам¢ять, відведену для одновимірних масивів, а потім -- відведену для масиву вказівок.

 

for (i=0;i<2;i++)

delete[] m[i];

delete []m;

 

Приклад.Записати ціле значення в динамічну пам‘ять.

 

#include <iostream.h>

void main()

{

int* k=new int;

if (k!=NULL)

 

{

cout<<"vvod"<<endl;

cin>>*k;

cout<<"s= "<<*k<<endl;

delete k;

}

}

 

 

Приклад. Сформувати масив 10 цілих чисел. Знайти суму елементів масиву.

 

#include <iostream.h>

void main()

{ int і,s=0;

int* k=new int[10];

if (k!=NULL)

 

{

cout<<”Введіть 10 чисел”<<endl;

for(i=0;i<=9;i++)

cin>>k[i];

for(i=0;i<=9;i++)

s+=k[i];

 

cout<<"s= "<<s<<endl;

delete []k;

}

}


<== попередня лекція | наступна лекція ==>
Приклад 2. | Інвестиції. Суб'єкти і об'єкти інвестиційної діяльності


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн