Передача масивів у функції Одномірні масиви
Масиви можуть бути параметрами функцій, і функції як результат можуть повертати вказівник на масив. Розглянемо ці можливості.
При використанні масивів як параметрів функції виникає необхідність визначення в тілі функції кількості елементів масиву, що є аргументом при звертанні до функції.
При роботі з рядками — масивами типу 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.