Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
О.О.П / 3_кол / Лекції / лекции_C++ (14)у.doc
Скачиваний:
9
Добавлен:
30.05.2020
Размер:
124.93 Кб
Скачать

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

При передачі масивів у функцію передається покажчик на масив, тобто адреса першого елементу масиву. Функція в цьому випадку працює з масивом із зухвалої програми і тому може змінювати або перетворювати інформацію, яка безпосередньо міститься в даному масиві. Формат передачі адреси масиву у функцію має різний синтаксис. Наприклад, коди void f_1(int a[]), void f_1(int *a), void f_1(int а[10]) декларують передачу масиву а у функцію f_1. У всіх трьох випадках код виклику функції однаковий і має наступний синтаксис:

f_1(a), де а – масив, визначений в зухвалій програмі.

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

void vvod(int *x); // x – покажчик.

void vivod (int *x);

const n = 10;

void main()

{

int w[n];

clrscr();

vvod(w); // Виклик функції введення елементів масиву.

vivod(w); // Виклик функції виведення елементів масиву на екран.

getch();

}

void vvod(int *y) // Функція введення елементів масиву, y – покажчик.

{ int i;

cout << “Введи елементи масиву: \n”;

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

{

cout << "а(" << i << ")= ";

scanf("%d" &y[i]);

}

}

void vivod (int *z) // Функція виведення масиву на екран, z – покажчик.

{

int i;

cout << “\nВведен массив:\n”;

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

cout << z[i] << " ";

cout << "\n";

}

Звернемо увагу на те, що імена локальних змінних у функціях різні.

При передачі двовимірного масиву у функцію треба переслати в неї адресу першого елементу масиву. Заголовок функції, в який передається двовимірний масив, може мати наступний синтаксис: void f_1( int x[][m]), де m – раніше оголошена константа. При такій формі передачі завдання розміру m (числа елементів в рядку) обов'язково.

Програма fun_10.

const n = 3, m=2;

void vvod(int x[][m]); // Функція введення елементів матриці.

void vivod (int x[][m]); // Функція виведення елементів матриці.

void main()

{

int w[n][m];

clrscr();

vvod(w); // Виклик функції введення елементів матриці.

vivod(w); // Виклик функції виведення елементів матриці на екран.

getch();

}

void vvod(int y[][m])

{ int i, j;

cout << “Введи елементи матриці: \n”;

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

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

{ cout << "а(" << i << "<< j << ")= ";

scanf("%d" &y[i][j]);

}

}

void vivod (int z[][m])

{

int i, j;

cout << “\nВведена матрица:\n”;

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

{

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

cout << z[i][j] << " ";

cout << "\n";

}

cout << "\n"; }

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

Void f_1 (int *X, int n, int m)

Тут x – покажчик на перший елемент матриці; m, n – розмір матриці. У тілі функції доступ до елементів матриці при такому зверненні можна здійснити лише через адреси до елементів.

Програма fun_11. Функція введення матриці з файлу використовується для матриць різного розміру.

const n1 = 3, m1=2;

const n2 =3, m2 = 3;

void vvod(int *x, int n, int m);

void vivod (int *x, int n, int m);

void main()

{ int а, b[n2][m2];

clrscr();

vvod(а, n1, m1); // Виклик функції введення елементів матриці.

vivod(а, n1, m1); // Виклик функції виведення елементів матриці.

vvod(b[0],n2,m2);

vivod(b[0],n2,m2);

getch(); }

// Функція введення елементів матриці.

void vvod( int *c, int n, int m) // Введення елементів матриці з клавіатури.

{ int i, j; // Індекси для елементів матриці.

cout << “Введи елементи матриці: \n”;

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

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

{

cout << “x(” << i << “<< j << “)= “;

scanf(“%d”, з + i * m + j); // i * m + j – порядковий номер елементу

// матриці з індексом i, j. x + i * m + j – адреса цього елементу.

} }

// Функція виведення елементів матриці на екран.

void vivod( int *c, int n, int m) // Виведення елементів матриці.

{ int i, j;

cout << “\nВведена матрица:\n”;

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

{

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

// i * m + j – порядковий номер елементу матриці з індексом i, j.

printf("%d ", *(з + i * m + j)); // з + i * m + j – адреса цього елементу.

printf ("\n");

} }

10

Соседние файлы в папке Лекції