Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lexzii_08 / lexs_5_param.DOC
Скачиваний:
12
Добавлен:
17.05.2015
Размер:
92.67 Кб
Скачать

Формальний параметр-багатовимірний масив

При використанні формального параметра у вигляді багатовимірного масиву оголошення його меж можна задати одним із двох способів:

  1. всі границі (межі) задати константами; наприклад:

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;

}

Формальний параметр – рядок

Соседние файлы в папке lexzii_08