Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
10
Добавлен:
29.02.2016
Размер:
54.78 Кб
Скачать

Л е к ц и я №9

Передача масивів у функції

Мета роботи: отримати навички роботи з масивами у функціях.

9.1. Теоретичні відомості

Одномірні масиви

Масиви можуть бути параметрами функцій, і функції як результат можуть повертати вказівник на масив. Розглянемо ці можливості.

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

При роботі з рядками - масивами типу char[], проблема розв'язується просто, оскільки останній елемент рядка має значення '\0'. Тому при обробці масиву-аргументу кожен його елемент аналізується на наявність символу кінця рядка.

Приклад 1. Рядок як параметр функції.

Потрібно скласти програму, що містить функцію, яка підраховує кількість елементів у рядку. Можливий варіант програми має вид:

//Масиви у функціях

#include <iostream.h>;

int dl(char[]);//прототип функції dl

void main()

{

char p[]="кафедра";

cout << "\n Довжина рядка дорівнює:" << dl(p);

}

int dl(char c[])

{

int i;

for(i=0;;i++)

if (c[i]=='\0') break;

return i;

}

У результаті виконання програми на екран буде видане повідомлення:

Довжина рядка дорівнює: 7.

Якщо масив-параметр функції не є символьним рядком, то необхідно або використовувати масиви з заздалегідь відомим числом елементів, або передавати розмір масиву за допомогою додаткового параметра. Наступні два приклади ілюструють ці можливості.

Приклад 2. Одномірний масив як параметр функції.

Нехай потрібно скласти програму, у якій функція обчислює суму елементів масиву, що складає з 5 елементів. Можливий варіант програми має вид:

// Одномірний масив як параметр

#include <iostream.h>

int sum(float x[5])

{

float s=0;

for(int i=0;i<5;i++) s=s+x[i];

return s;

}

void main()

{

float z[5], y;

for(int i=0;i<5;i++)

{

cout<<"\n Введіть черговий елемент масиву:";

cin >> z[i];

}

y=sum(z);

cout<<"\n Сума елементів масиву:”<< y;

}

У результаті виконання програми на екран буде виведене значення суми елементів масиву z.

У приведеному прикладі заздалегідь відоме число елементів — 5, тому у функції всього один параметр — масив x. Оскільки у функції існує значення, що повертається, то виклик функції може бути тільки виразом чи частиною виразу. У програмі оператор присвоювання y=sum(z); містить такий вираз у правій частині. Тут аргументом функції є масив z.

Приклад 3. Одномірний масив з довільною кількістю елементів як параметр функції.

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

// Пошук максимального елемента

#include <iostream.h>

float max(int n,float a[])

{

float m=a[0];

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

if (m<a[i]) m=a[i];

return m;

}

void main()

{

float z[6];

for(int i=0;i<6;i++)

{

cout<<"\n Введіть черговий елемент масиву:";

cin >> z[i];

}

cout <<"\n Максимальний елемент масиву:"<< max(6,z);

}

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

Ім'я масиву являє собою константний вказівник на адресу нульового елемента масиву. Тому у будь-якого масиві, використовуваного як параметр функції, можна здійснювати зміну його елементів при виконанні тіла функції.

Приклад 4. Масиви з довільною кількістю елементів як параметри функції.

Нехай потрібно скласти програму з функцією, що формує як результат масив, кожен елемент якого є максимальним з відповідних значень елементів двох інших масивів-параметрів. Можливий варіант програми має вид:

//Вказівники на масив як параметри

#include <iostream.h>;

void maxl(int,int*,int*,int*); // прототип функції

void main()

{

int a[] = {0,1,2,3,4};

int b[]={5,6,0,7,1};

int d[5];

maxl(5,a,b,d) ;

cout << "\n";

for (int i=0;i<5;i++)

cout << "\t" << d[i];

}

void maxl(int n,int *x,int *y,int *z)

{

for (int i=0;i<n;i++)

z[i]=x[i]>y[i] ? x[i]:y[i];

}

У результаті виконання програми на екран монітора будуть видані елементи результуючого масиву d: 5 6 2 7 4.

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

Особливістю мови С++ є несамовизначеність масивів, тому за іменем масиву неможливо довідатися його розмірність і розміри за кожним виміром. Крім того, у С++ багатовимірні масиви не визначені. Наприклад, якщо оголошений масив float d[3][4][5], те це не тривимірний, а одномірний масив d, що включає три елементи, кожний з який має тип float [4][5]. У свою чергу, кожний з чотирьох елементів типу float [5]. І, відповідно, кожний з цих елементів є масивом з п'яти елементів типу float. Ці особливості ускладнюють використання масивів як параметрів функцій.

При передачі масивів як параметрів через заголовок функції варто враховувати, що передавати масиви можна тільки з однією невизначеною границею мірності (ця мірність повинна бути самою лівою).

9.2. Приклад 1

Двовимірний масив як параметр функції.

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

#include <iostream.h>

float summa(int n,float a[][3])

{

float s=0;

for(int i=0;i<n;i++)

for(int j=0;j<3;j++)

s=s+a[i][j];

return s;

}

void main()

{

float z[4][3]={0,1,2,3,4,5,6,7,7,6,5,4 };

cout<< "\n Сума елементів матриці дорівнює" << summa(4,z);

}

У результаті виконання програми на екран буде виведене повідомлення: “Сума елементів матриці дорівнює 50”.

Приклад 2

Допоміжний масив вказівників на масив як параметр функції.

Потрібно скласти програму з функцією, що повертає як результат мінімальний елемент матриці d розміром mxn.

#include <iostream.h>

float min(int m,int n,float *p[]);

void main()

{

float d[3][4]={1,2,-2,4,

5,0,-3,18,

-9,6,7,9};

float *r[]=

{

(float *) &d[0], (float *) &d[1],(float *) &d[2]

};

int m=3;

int n=4;

cout <<"\n Мінімальний елемент матриці дорівнює "<< min(m,n,r);

}

float min(int m,int n,float *p[])

{

float x=p[0][0];

for (int i=0;i<m;i++)

for (int j=0;j<n;j++)

if (x>p[i][j]) x=p[i][j];

return x;

}

У результаті виконання програми на екран буде виведене повідомлення: “Мінімальний елемент матриці дорівнює –9”.

9.3. Порядок виконання роботи

9.3.1. Проаналізувати умову задачі.

9.3.2. Розробити алгоритм та створити програму розв’язання задачі згідно з номером варіанту.

9.3.3. Результати роботи оформити протоколом.

9.4. Варіанти завдань

  1. Скласти функцію, що підраховує кількість повторень заданого символу в довільному рядку.

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

  3. Скласти функцію обчислення скалярного добутку двох векторів.

  4. Скласти функцію обчислення суми двох матриць.

  5. Скласти функцію обчислення добутку двох матриць.

  6. Скласти функцію обчислення добутку вектора на число.

9.5. Контрольні запитання

  1. Яким чином можна визначити кількість елементів у рядку символів?

  2. У чому відмінність оформлення списку параметрів, коли відомо і не відомо кількість елементів у вхідному для функції масиві?

  3. Що являє собою ім'я масиву і як воно зв'язане з нульовим елементом масиву?

  4. Яким чином можна одержати як результат виконання функції масив?

  5. Як визначаються в С++ багатомірні масиви?

  6. Поясніть зв'язок між масивами і вказівниками.

  7. Як можна оформити використання динамічних масивів у функціях?

83

Соседние файлы в папке Методичка_Ci