Передача масивів-параметрів
Масиви можуть передаватися у підпрограми як параметри. Але способи їх передачі можуть мати певні обмеження. Так у Pascal передача масивів-параметрів здійснюється будь-яким із доступних у даній мові способом; у С/С++ - тільки за адресою.
Зазвичай, існує декілька способів передачі масивів-параметрів за адресою. Як приклад, формати оголошення таких масивів-параметрів у С/С++:
тип *ім'я_покажчика;
тип ім'я_масива[розмір];
тип ім'я_масива[]1;
тип ім’я_масива[][розмір];
тип ім’я_масива[розмір_1][розмір_2];
Розмір одновимірного масива-параметра вказувати не обов’язково. При передачі у функцію багатовимірного масиву розмірності усіх індексів, окрім першого, треба вказувати обов’язково.
Особливості передачі параметрів-масивів у С/С++:
Для параметра-масива, що може мати різну розмірність, треба передавати два параметри - покажчик на масив (ім’я масиву) і кількість його елементів, наприклад,
const int n=9, m=7;
int mas1[n], mas2[m];
float f_3(int arr[], int r)
{ ... }
int main()
{ cout<<f_3(mas1, n)<<" "<<f_3(mas2, m);
…
}
Для заборони модифікації значень параметра-масива використовується специфікація const, наприклад,
int mas[9];
float f_4(const int arr[])
{ ... }
int main()
{ cout<<f_4(mas);
…
}
Окремі елементи масиву передаються у функцію за значенням, наприклад,
int mas[7];
float f_5 (int k);
{ . . . };
int main ( )
{ …
cout << f_5 (mas[3]);
}
При передачі у функцію рядка матриці, як одновимірного масиву, передається ім’я матриці і її перший індекс, наприклад,
int mas[5][4];
float f_6 (int arr[ ]);
{ . . . };
int main ( )
{ . . .
for (int i=0; i<n; i++)
cout << f_6 (mas[ i ]) << endl;
}
Приклад. Знайти добуток сум додатних елементів цілочисельних масивів А(n) і В(n) та ініціалізувати цим значенням елементи матриці М(n x n).
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
#include <iomanip.h>
const int n=4; //розмір розмірностей матриці, масива
typedef int Matrix[n][n]; //тип матриці
typedef int Array[n]; //тип масиву
Matrix M; //результуюча матриця
Array А, В; //вихідні масиви
int i, j, d;
void input_a(int*); // ініціалізація масиву
void output_a(int*); // виведення масиву
sum (int []); // обчислення суми
void input_m(int); // створення матриці
void output_m(int [][n]); // виведення матриці
//----------------------- головна функцiя ----------------------------------------------
main()
{ srand(time(NULL));
input_a(A);
input_a(B);
cout << “A:”; output_a(A);
cout << “B:”; output_a(B);
printf (“s1 = %3d s2 = %3d \n",sum(A),sum(B));
d = sum(A)*sum(B);
input_m(d);
cout << "M:" << endl; output_m (M);
}
//----------------------- генерація масиву -------------------------------------------
void input_a(int *p)
{ for (i=0; i<n; i++)
{ *p = rand()%19 - 9;
p++;
}
}
//----------------------- виведення масиву ---------------------------------------------
void output_a(int *p)
{ for (i=0; i<n; i++)
printf ("%3d", *(p + i));
printf (“\n");
}
//---------------------- обчислення суми -----------------------------------------------
sum (int arr[])
{ int s=0;
for (i=0; i<n; i++)
if (arr[i] >= 0) s += arr[i];
return s;
}
//----------------------- створення матриці --------------------------------------------
void input_m(int num)
{ for (i=0; i<n; i++)
for (j=0; j<n; j++)
M[i][j] = num;
}
//----------------------- виведення матриці ------------------------------------------------
void output_m (int matr[][n])
{ for (i=0; i<n; i++)
{ for (j=0; j<n; j++)
printf("%4d", matr[i][j]);
printf("\n");
}
}
