Тема: Вказівники, динамічні змінні й масиви 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Тема: Вказівники, динамічні змінні й масиви



Мета:

  1. Ознайомити учнів з прийомами роботи з динамічними змінними
  2. Розвиток навичок аналізу кодів наведених програм
  3. Формування уважності, наполегливості, комунікативної компетентності

Тип: Засвоєння нового матеріалу, розвиток навичок

Обладнання:

  1. Лєхан С. А. Інформатика. С++. Спецкурс 10-12 клас. с.92
  2. Презентація “Вказівники, динамічні змінні й масиви” слайд № 1-9
  3. Картки “Одновимірні масиви”

Епіграф “Напимание хороших программ требует ума, вкуса и терпения” /Б. Страуструп/

Хід уроку

Етап уроку Діяльність учителя Діяльність учнів
  Організаційний момент Оголошення теми та плану уроку. Мотивація. Записують у зошит
  Засвоєння нового матеріалу Лекція з використанням презентації План: 1. Статичні та динамічні дані 2. Робота з динамічними даними 3. Приклади 4. Завдання Конспектування     Розібрати дію кожного оператора
  Виконання тренувальних вправ Спостереження. Надання допомоги в разі необхідності. Реалізувати будь-яку програму з прикладів
  Закріплення   Розібрати завдання слайду № 9 Якщо вистачає часу – картки “Одновимірні масиви” реалізувати з використанням динамічного масиву Занотувати. Складання та реалізація програм    
  Домашнє завдання Розв’язати завдання слайду № 9 Записати в зошит

Теоретичний матеріал до уроку «Вказівники, динамічні змінні й масиви»

Статичні та динамічні дані

У С++ змінні можуть бути розміщені або статично – під час компіляції, або динамічно – під час виконання програм, шляхом виклику відповідних функцій зі стандартної бібліотеки.

Статичне розміщення більш ефективне, тому що виділення пам'яті відбувається до виконання програми, але ми повинні заздалегідь знати тип і розмір розташовуваної змінної.

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

Робота з динамічними даними

Виділення динамічної пам'яті здійснюється операцією new. За допомогою new виділяється пам’ять, і адреса, з якої вона починається, заноситься у вказівник на потрібний тип:

1. int *n=new int;

2. int *m=new int (10);

У зразку 1 виконується виділення достатньої для розміщення величини типу int ділянки динамічної пам'яті й записує адресу початку цієї ділянки в змінну n. Пам’ять під саму змінну n виділяється на етапі компіляції.

У зразку 2, крім описаних вище дій, проводиться ініціалізація виділеної пам'яті значенням 10.

Робота з динамічними даними. Виділення динамічної пам'яті

3. int n=100;//розмірність масиву
float *p=new float [n];

У зразку 3 створюється динамічний масив, але p – не його ім'я, а вказівник, що зберігає адресу початку безперервної області динамічної пам'яті, достатньої для розміщення 100 елементів дійсного типу.

Увага! Динамічні масиви при створюванні ініціювати не можна, і вони не заповнюються нулями.

Доступ до елементів динамічного масиву здійснюється так само, як до статичного: p[5] або *(p+5)

Робота з динамічними даними. Звільнення динамічної пам'яті

Для звільнення пам'яті, виділеної за допомогою операції new, використовують операцію delete:

1. delete n;

2. delete m;

3. 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. Скласти програму, яка реалізує такі функцій для роботи з масивами:

· Уведення елементів;

· Виведення елементів;

· Пошук максимального елементу масиву.

2. Скласти програму, яка реалізує такі функцій для роботи з масивами:

· Уведення елементів;

· Виведення елементів;

· Обчислення суми додатних елементів масиву.

Розв’язки завдань


Задача 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;}

 

Задача 2

#include <iostrem.h>

#include <conio.h>

//----------------------------------------------

void _Input(int *, int);

void _Print(int *, int);

int Sum(int a[], int n)

{int s=0;

for (int I=1; I<n; I++)

s+=a[I];

return (s);}

//----------------------------------------------

int main ()

{int n, *a; cin>>n;

a=new int [n];

_Input(a,n);

int L=Sum(a,n);

_Print(a,n);

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

}



Урок № 30

Тема: Багатовимірні масиви

Мета:

  1. Ознайомити учнів з прийомами опрацювання матриць
  2. Розвиток алгоритмічного мислення
  3. Формування уважності, спостережливості

Тип: Засвоєння нового матеріалу, розвиток навичок

Обладнання:

  1. Лєхан С. А. Інформатика. С++. Спецкурс 10-12 клас. с.97
  2. Презентація “Вказівники, динамічні змінні й масиви” слайд № 10-14

Епіграф “Все идеи извлечены из опыта” /Ф. Энгельс/

Хід уроку

Етап уроку Діяльність учителя Діяльність учнів
  Організаційний момент Оголошення теми та плану уроку. Мотивація. Записують у зошит
  Засвоєння нового матеріалу Лекція з використанням презентації План: 1. Багатовимірні масиви 1.1. Опис 1.2. Опрацювання 2. Приклад 3. Завдання Конспектування   Розібрати дію кожного оператора
  Закріплення Спостереження Надання допомоги за необхідністю Виконання вправ слайду № 13 (якомога більше)
Домашнє завдання   Доопрацювати завдання слайду № 13 Записати в зошити

Теоретичний матеріал до уроку «Багатовимірні масиви»

Багатовимірні масиви. Статичні масиви

p Опис

float a[5][4];

p Початкові значення

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

p Звернення до елементу a[i][j]

Багатовимірні масиви. Динамічні масиви

p Опис

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

p Звільнення пам'яті

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]

//виведення масиву
for(i=0; i<ryad; i++)
{for (j=0; j<stovp; j++)
cout<<setw(4)<<a[i][j]<<“ “;
cout<<endl;}

// аналіз масиву

int n=-1; bool dodat;

for (j=0; j<stovp; j++)

{ // перегляд по стовпцях

dodat=true;

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

if (a[i][j]<0)

{dodat=false; break;}

If (dodat)

{n=j; break;}

}

if (n==-1) cout<<“no”<<endl;

else cout<<“n=“<<n<<endl;

delete []a; //вивільнення пам'яті
getch(); return 0; }

Завдання (Слайд № 13)

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



Поделиться:


Последнее изменение этой страницы: 2016-06-06; просмотров: 246; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.119.107.161 (0.038 с.)