Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
функции_new.docx
Скачиваний:
0
Добавлен:
11.02.2026
Размер:
101.67 Кб
Скачать

Void minmax (int a[n], int & min, int & max)

{

min = max = a [0];

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

if (a[i] < min) min = a[i]; else if (a[i] > max) max = a[i];

}

Int main ()

{

int b[n], min, max;

srand (time (0)); //инициализация генератора случайных чисел

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

b[i] = rand (); //массив заполняем случайными числами

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

cout << setw(8) <<b[i] << " "; //вывод массива

cout << endl<<endl;

minmax (b, min, max);

cout << "min ="<<min << ", max =" <<max<<endl;

system("pause");

return 0;

}

2) Формальные параметры - массивы, указатели на массивы

Массив в качестве фактического параметра может быть передан в функцию только по адресу, то есть с использованием указателя.

  1. Формальный параметр- определение массива:

В качестве формальных параметров можно использовать:

  1. определение массива с фиксированными границами, например:

float A [5], int B [3][4][2], char S [25];

  1. определение одномерного символьного массива с открытой границей:

char S1[];

При работе со строками, то есть с одномерными массивами данных типа char, последний элемент которых имеет известное значение - '\0', нет необходимости передавать размеры массива

  1. определение числового или многомерного символьного массива с открытой левой границей и параметр для передачи размера левой границы:

float A [ ], int B[ ][4][2], char S2 [ ][60], и int n

При всех этих определениях, в стеке выделяется оперативная память на один указатель для передачи в функцию адреса нулевого элемента массива – фактического параметра.

Массив, адрес которого будет использован при вызове функции, как фактический параметр, может быть изменен за счет выполнения операторов функции.

Если формальный параметр - массив с фиксированными границами как в первом случае, фактическим параметром будет имя массива из вызывающей программы с теми же фиксированными границами или же значение указателя на такой фиксированный массив.

При использовании второго определения, фактическим параметром будет имя символьного массива, или указателя на первый элемент массива.

При использовании третьего определения, фактическими параметрами будут имя массива из вызывающей программы, но уже с произвольным количеством элементов по первому измерению и размер массива по первому измерению.

Проиллюстрируем сказанное на примере определения функции, заполняющей трехмерный массив – параметр последовательными натуральными числами, начиная с единицы и возвращающей по ссылке сумму его элементов:

#include <iostream>

#include <iomanip>

using namespace std;

const int n = 4, k = 5;

Void f1(float a [ ][n][k], int m, float & s)

{ s = 0; int t = 1;

for (int i = 0; i< m; i++)

for (int j = 0; j< n; j++)

for (int l = 0; l< k; l++)

{a[i][j][l] = t++; s += a[i][j][l];}

}

Int main ()

{

float s, dat[3][n][k];

f1(dat, 3, s); //вызов функции, заполняющей массив dat

for (int i = 0; i < 3; i++)

{ cout << endl << endl;

for (int j = 0; j < n; j++)

{ cout << endl;

for (int l = 0; l < k; l++)

cout << setw (8) << dat [i][j][l];

}

}

cout << "\n\n"<< "sum = "<<s<<endl;

system("pause");

return 0;

}