- •Лекція 5. Передача параметрів в функціях
- •Домашнє завдання Скласти програму, яка повертає значення суми за допомогою покажчика в списку параметрів: а, b– імена змінних типуint;
- •Результати виконання програми
- •Формальний параметр-багатовимірний масив
- •Формальний параметр – одновимірний масив або покажчик
- •Робота з параметрами – рядками має деякі особливості.
- •Результати виконання програми
Формальний параметр-багатовимірний масив
При використанні формального параметра у вигляді багатовимірного масиву оголошення його меж можна задати одним із двох способів:
всі границі (межі) задати константами; наприклад:
void f1 (int a [k] [m] [n], int b [2] [3] [4],
int c [m] [n], int d [m] [5]);
2) першу межу задати “порожнім” значенням, а інші –константами, наприклад:
void f1 (int a [ ] [m] [n], int b [ ] [3] [4],
int c [ ] [n], int d [ ] [5]);
В будь - якому випадку в якості фактичного параметра використовується ім’я масиву і в область ОП копіюється адреса його початку. При передачі фактичних параметрів система не контролює ні значення меж масивів – фактичних параметрів, ні кількість його вимірювань. Але при звертанні до елементів багатовимірних масивів у викликаній функції система враховує перехід на наступний рядок або матрицю по зміні значення номера рядка і матриці в індексних виразах.
Тому для традиційної форми звернення до елементів масиву можна використовувати в якості фактичних параметрів масиви з різними значеннями кількості його елементів по першому вимірюванню (наприклад, по кількості матриць), а по іншим вимірюванням по кількості рядків і стовпців. Кількість елементів масиву фактичного параметру повинна співпадати з кількістю елементів масиву формального параметра.
Наприклад, в якості формального параметра використовується:
float a [1] [3]
В якості фактичних параметрів використовуються двовимірні масиви з будь-якою кількістю рядків і кількості стовпців, що дорівнює 3, наприклад :
float data[5][3] і також float data[2][3]
Формальний параметр – одновимірний масив або покажчик
Фактичний параметр – і’мя масиву або покажчик на масив.
Правила визначення таких параметрів такі ж, як і для багатовимірних масивів.
Розглянемо приклад визначення середнього значенн елементів одновимірного масива. При чому при оголошенні функції sz в якості формального параметра задано *а – покажчик на дані типу float, а в заголовку функції – а[]. Ці оголошення еквівалентні. Фактичним параметром є ім’я масиву data на m елементів.
Результат виконання функції – середнє значення, яке повертається за допомогою команди return
# include <stdlib.h>
# include <conio.h>
# define m 5
FILE *f;
void main ( )
{ float data [m]; //фактичний масив на m елементів
int i;
float sz (float *a, int k); // формальний параметр – покажчик
f=fopen (“con”, “w”);
clrscr ( );
for (i=0; i<m ; i++) data [i] = 1.5*i;
fprintf (f, “\n середнє значення елементів= %.2f”,
sz (data, m));
fclose (f);
printf (“\n для закінчення натисніть будь- яку клавішу \n”);
getch ( );
}
// функція для визначення середнього значення елементів масиву:
// формальний параметр – масив без границі
float sz (float a [ ], int k) //заголовок функції
{ float s=0.0, int i;
for (i=0, i<k; i++) s+= a [i]; //традиційно
/* або: s+= *(a+i); */
return s/k;
}
У наступному лістингу наведений приклад програми для заповнення одновимірному масиву випадковими числами, сортування їх за збільшенням методом бульбашкового спливання і виведення сортованого масиву. Формальні параметри функції sort:
- а – покажчик на дані типу int;
- m – кількість його елементів.
Фактичні параметри: ім'я масиву data і k – кількість його елементів.
Лістинг – Програма заповнення одновимірного масиву заданого розміру випадковими значеннями з функцією sort для сортування одновимірного масиву методом бульбашкового спливання.
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define k 10
FILE *f; // - покажчик для файлу результатів
int data[k]; // - фактичний масив на k елементів
void main ()
{ void sort ( int *a, int m ); // - оголошення функції
int i;
// f = fopen(“15.rez", bw"); // - для виведення у файл
f = fopen("con", "w")/ // - для виведення на екран
clrscr(); // - очистити екран
randomize();
fprintf (f, "\nНевідсортoваний масив:\n") ;
for (i = 0; i < k; i++) // Заповнення і виведення елементів масиву:
data[i]= rand();
fprintf (f," %d", data[i]);
sort ( data, k); // Виклик функції sort
fprintf (f, "\nВідсортований масив:\n");
for( i = 0; i < k; i++ ) fprintf (f, " %d", data[i] );
fclose (f);
printf("\nДля завершення програми натисніть будь-яку клавішу\n");
getch(); // - натиснути будь-яку клавішу
} // - кінець функції main
{---------- функція для сортування елементів масиву: --------------}
void sort ( int *a, int m ) // - формальний масив - покажчик
{ int i, j, b;
for (i = 0; i < m – 1; i++)
for ( j = m - 1; j > i; j--)
if ( а[j] < а[j-l] )
b = а[j], а,[j] = а[j - 1], а[j - 1]= b;
}
Формальний параметр – рядок