- •Урок № 24
- •Опис та ініціалізація масиву
- •Розв’язки завдань
- •Розв’язки завдань
- •Тема: Практична робота “Програми з масивами”
- •Р озв’язки завдань
- •Тема: Алгоритми сортування
- •Ров’язки завдань
- •Тема: Практична робота “Впорядкування масивів”
- •Тема: Вказівники, динамічні змінні й масиви
- •Задача 2
- •Тема: Багатовимірні масиви
- •Звільнення пам'яті
- •Знаходимо індекс останнього від’ємного елементу
- •Якщо від’ємного елементу немає, змінна l вкаже на перший елемент масиву
Тема: Практична робота “Впорядкування масивів”
Мета:
Розвиток навичок роботи опрацювання масивів
Розвиток навичок аналізу та локалізації помилок
Формування самостійності
Тип: Розвиток навичок
Обладнання:
Презентація “Впорядкування масивів”
Програми, що були збережені на попередньому уроці
Епіграф “Глаза бояться – руки делают” /народна мудрість/
Хід уроку
№ |
Етап уроку |
Діяльність учителя |
Діяльність учнів |
1 |
Організаційний момент |
Оголошення теми та плану уроку. Мотивація. Визначення стратегії роботи:
|
Записують у зошит
Обирають варіант роботи |
2 |
Самостійна практична робота
|
Спостереження. Надання допомоги в разі необхідності. Перевірка виконання завдань |
Розв’язування задач та їх реалізація. Міні-турнір (оцінка від кожної пари учнів)
|
3 |
Домашнє завдання |
Доопрацювати завдання з урахуванням зауважень |
Записати в зошит Запитання по виконанню завдань |
Урок № 29
Тема: Вказівники, динамічні змінні й масиви
Мета:
Ознайомити учнів з прийомами роботи з динамічними змінними
Розвиток навичок аналізу кодів наведених програм
Формування уважності, наполегливості, комунікативної компетентності
Тип: Засвоєння нового матеріалу, розвиток навичок
Обладнання:
Лєхан С. А. Інформатика. С++. Спецкурс 10-12 клас. с.92
Презентація “Вказівники, динамічні змінні й масиви” слайд № 1-9
Картки “Одновимірні масиви”
Епіграф “Напимание хороших программ требует ума, вкуса и терпения” /Б. Страуструп/
Хід уроку
№ |
Етап уроку |
Діяльність учителя |
Діяльність учнів |
1 |
Організаційний момент |
Оголошення теми та плану уроку. Мотивація. |
Записують у зошит |
2 |
Засвоєння нового матеріалу |
Лекція з використанням презентації План:
|
Конспектування
Розібрати дію кожного оператора |
3 |
Виконання тренувальних вправ |
Спостереження. Надання допомоги в разі необхідності. |
Реалізувати будь-яку програму з прикладів |
4 |
Закріплення
|
Розібрати завдання слайду № 9 Якщо вистачає часу – картки “Одновимірні масиви” реалізувати з використанням динамічного масиву |
Занотувати. Складання та реалізація програм
|
3 |
Домашнє завдання |
Розв’язати завдання слайду № 9 |
Записати в зошит |
Теоретичний матеріал до уроку «Вказівники, динамічні змінні й масиви»
Статичні та динамічні дані
У С++ змінні можуть бути розміщені або статично – під час компіляції, або динамічно – під час виконання програм, шляхом виклику відповідних функцій зі стандартної бібліотеки.
Статичне розміщення більш ефективне, тому що виділення пам'яті відбувається до виконання програми, але ми повинні заздалегідь знати тип і розмір розташовуваної змінної.
Завдання, у яких потрібно зберігати й обробляти заздалегідь невідоме число елементів, зазвичай вимагають динамічного виділення пам'яті. Після того як потреба у динамічній змінній зникає, місце, яке вона займала, можна звільнити для інших динамічних об'єктів.
Робота з динамічними даними
Виділення динамічної пам'яті здійснюється операцією 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; }
//--------функції------------------ void _Input(int*a, int n); { for(int i=0; i<n; i++) cin>>a[i]; } //----------------------------- void _Print(int*a, int n); { for(int i=0; i<n; i++) cout<<a[i]<<“ “; cout<<endl; } //----------------------------- void _Sort(int*a, int n); { int temp; bool fl=true; for(int j=1; ;j++) { for(int i=0; i<n; i++) if (a[i]>a[i+1] {temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; fl=false} if (fl==true) break; fl=true; } }
Завдання (Слайд № 9)
Скласти програму, яка реалізує такі функцій для роботи з масивами:
Уведення елементів;
Виведення елементів;
Пошук максимального елементу масиву.
Скласти програму, яка реалізує такі функцій для роботи з масивами:
Уведення елементів;
Виведення елементів;
Обчислення суми додатних елементів масиву.
Розв’язки завдань
Задача 1
#include <iostrem.h>
#include <conio.h>
//----------------------------------------------
void _Input(int *, int);
void _Print(int *, int);
int MaxEl(int a[], int n)
{int max=a[0]; int L=0;
for (int I=1; I<n; I++)
if (a[I]>max)
{max=a[I]; L=I;}
return (L);}
//----------------------------------------------
int main ()
{int n, *a; cin>>n;
a=new int [n];
_Input(a,n);
int L=MaxEl(a,n);
_Print(a,n);
cout<<a[L]<<endl;
delete []a;
getch ();
return 0;
}
//-----------------------------------------------
void _Inpur (int *a, int n)
{for (int I=0; I<n; I++) cin>>a[I];}
//-----------------------------------------------
void _Print( int *a, int n)
{for (int I=0; I<n; I++) cout<<a[I]<<” “;
cout<<endl;}