Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
T9_Mas_34 (1).doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
700 Кб
Скачать
☆

Передача масивів-параметрів

Масиви можуть передаватися у підпрограми як параметри. Але способи їх передачі можуть мати певні обмеження. Так у Pascal передача масивів-параметрів здійснюється будь-яким із доступних у даній мові способом; у С/С++ - тільки за адресою.

Зазвичай, існує декілька способів передачі масивів-параметрів за адресою. Як приклад, формати оголошення таких масивів-параметрів у С/С++:

тип *ім'я_покажчика;

тип ім'я_масива[розмір];

тип ім'я_масива[]1;

тип ім’я_масива[][розмір];

тип ім’я_масива[розмір_1][розмір_2];

Розмір одновимірного масива-параметра вказувати не обов’язково. При передачі у функцію багатовимірного масиву розмірності усіх індексів, окрім першого, треба вказувати обов’язково.

Особливості передачі параметрів-масивів у С/С++:

  1. Для параметра-масива, що може мати різну розмірність, треба передавати два параметри - покажчик на масив (ім’я масиву) і кількість його елементів, наприклад,

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

…

}

  1. Для заборони модифікації значень параметра-масива використовується специфікація const, наприклад,

int mas[9];

float f_4(const int arr[])

{ ... }

int main()

{ cout<<f_4(mas);

…

}

  1. Окремі елементи масиву передаються у функцію за значенням, наприклад,

int mas[7];

float f_5 (int k);

{ . . . };

int main ( )

{ …

cout << f_5 (mas[3]);

}

  1. При передачі у функцію рядка матриці, як одновимірного масиву, передається ім’я матриці і її перший індекс, наприклад,

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");

}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]