Вказівники, динамічні змінні й масиви
Завантажити презентаціюПрезентація по слайдам:
Вказівники, динамічні змінні й масивиМаксименко Марина Миколаївнавчитель інформатики вищої категорії, вчитель-методист Конотопської гімназії Конотопської міської ради Сумської області2008 р.
Зміст Статичні та динамічні даніРобота з динамічними данимиПрикладиЗавданняБагатовимірні масивиПрикладЗавданняЛітература
Статичні та динамічні даніУ С++ змінні можуть бути розміщені або статично – під час компіляції, або динамічно – під час виконання програм, шляхом виклику відповідних функцій зі стандартної бібліотеки. Статичне розміщення більш ефективне, тому що виділення пам'яті відбувається до виконання програми, але ми повинні заздалегідь знати тип і розмір розташовуваної змінної. Завдання, у яких потрібно зберігати й обробляти заздалегідь невідоме число елементів, зазвичай вимагають динамічного виділення пам'яті. Після того як потреба у динамічній змінній зникає, місце, яке вона займала, можна звільнити для інших динамічних об'єктів.
Робота з динамічними данимиВиділення динамічної пам'яті здійснюється операцією new. За допомогою new виділяється пам’ять, і адреса, з якої вона починається, заноситься у вказівник на потрібний тип:int *n=new int;int *m=new int (10);У зразку 1 виконується виділення достатньої для розміщення величини типу int ділянки динамічної пам'яті й записує адресу початку цієї ділянки в змінну n. Пам’ять під саму змінну n виділяється на етапі компіляції.У зразку 2, крім описаних вище дій, проводиться ініціалізація виділеної пам'яті значенням 10.
Робота з динамічними даними Виділення динамічної пам'яті int n=100;//розмірність масивуfloat *p=new float [n];У зразку 3 створюється динамічний масив, але p – не його ім'я, а вказівник , що зберігає адресу початку безперервної області динамічної пам'яті, достатньої для розміщення 100 елементів дійсного типу.Увага! Динамічні масиви при створюванні ініціювати не можна, і вони не заповнюються нулями.Доступ до елементів динамічного масиву здійснюється так само, як до статичного: p[5] або *(p+5)
Робота з динамічними даними Звільнення динамічної пам'ятіДля звільнення пам'яті, виділеної за допомогою операції new, використовують операцію delete:delete n;delete m;delete [] p;
Приклади З клавіатури вводиться ціле число n, а потім ще n цілих чисел. Розмістити уведені n чисел у динамічному масиві, після чого вивести їх на екран, відокремивши пропусками. # include< iostream.h># include<conio.h>int main (){int n, *a; //розмір та масивcout<<“n=”; cin>>n;a=new int [n];for(int i=0; i<n; i++) cin>>a[i]; //уведення масивуcout<<“masic:\n”;for (int i=0; i<n; i++) cout<<a[i]<<“ “;cout<<endl; //виведення масивуdelete []a; //вивілненя пам'яті getch(); return 0; }
Приклади (продовження)Скласти програму, яка реалізує такі функцій для роботи з масивами:Уведення елементів;Виведення елементів;Сортування масиву.# include< iostream.h># include<conio.h>//прототипиvoid _Input(int*, int);void _Sort(int*, int); void _Print(int*, int); int main (){int n, *a; //розмір та масивcout<<“n=”; cin>>n;a=new int [n];_Input(a, n);cout<<“masic:\n”;_Print(a, n);_sort(a, n); cout<<“ sort \n”;_Print (a, n);delete []a; //вивілненя пам'яті getch(); return 0; }
Завдання Скласти програму, яка реалізує такі функцій для роботи з масивами:Уведення елементів;Виведення елементів;Пошук максимального елементу масиву.Скласти програму, яка реалізує такі функцій для роботи з масивами:Уведення елементів;Виведення елементів;Обчислення суми додатних елементів масиву.
Багатовимірні масивиСтатичні масивиОпис float a[5][4];Початкові значення int c[3][2]={{4,2},{6,7},{5,8}}; //початкові значення групуються в рядкиint d[2][2]={{10},{9,14}}; // d[0][0]=10, d[0][1]=0Звернення до елементу a[i][j]
Багатовимірні масивиДинамічні масивиОписint ryad, stovp; cin>>ryad>>stovp;int **a=new int *[ryad]; //вказівник на вказівник на int, виділяється пам’ять під масив вказівників на рядки масивуfor (int i=0; i<ryad; i++) //цикл для виділення пам'яті під кожен рядок масиву a[i]= new int [stovp]; //кожному елементу масиву вказівників на рядки присвоюється адреса початку ділянки пам'яті, виділеної під рядок із stovp елементів типу intЗвільнення пам'яті delete [] a;
Приклад Написати програму, в якій для двовимірного масиву цілих чисел визначається номер крайнього стовпця, розташованого ліворуч, що містить тільки додатні елементи. Якщо такого стовпця немає, виводиться відповідне повідомлення.# include< iostream.h># include<conio.h> # include<iomanip.h> int main (){int ryad, stovp; cin>>ryad>>stovp; int i, j; int **a=new int *[ryad]; for (i=0; i<ryad; i++) a[i]= new int [stovp]; //уведення масиву for(i=0; i<ryad; i++) for (j=0; j<stovp; j++) cin>>a[i][j]
ЗавданняВипробуйте програму прикладу. Переробіть її так, щоб визначити номер крайнього стовпця, розташованого ліворуч, що містить тільки від'ємні елементи. Якщо такого стовпця немає, виводиться відповідне повідомлення.Цілочисельний масив з 8 рядків та 15 стовпців заповнити випадковими одноцифровими числами. Скільки разів у масиві зустрічається число 5?Доповнити програму-розв'язок попередньої задачі виведенням таблиці кількості входжень у масив кожного з чисел (наприклад: 0->5 raz, 1->8 raz, …)Заданий одновимірний масив цілих чисел. Вивести значення елементів масиву:У зворотному порядкуЗ парними індексамиЗ непарними індексамиЯкі є парними числамиЯкі є непарними числами
Література Лєхан С.Ф. Інформатика С++. Спецкурс. 10-12 класи. – Шепетівка; Аспект, 2007.Глинський Я.М., Анохін В.Є., Ряжська В.А. С++ і С++ Builder. Навчальний посібник. – Львів: СПД Глинський, 2006.Глушаков С.В., Смирнов С.В., Коваль А.В. Практикум по С++. – Харьков: Фолио, 2006.Павловская Т.А. С/С++. Программирование на языке высокого уровня. – СПб.: Питер, 2003Лисенко Т.І. Поглиблене вивчення програмування в школі. – К.:ТОВ Редакція “Комп'ютер”, 2007.
Схожі презентації
Категорії