Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика_и_Пр_Бизнес_лекции.doc
Скачиваний:
85
Добавлен:
10.05.2015
Размер:
1.21 Mб
Скачать

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

Чтобы передать массив в функцию надо указать его имя в списке аргументов функции при ее вызове, например, для вызова функции сортировки целочисленного массива a из 100 элементов используется синтаксис:

sort(a, 100);

Так как в С++ имя массива – это константный указатель, значением которого является адрес первого элемента массива, то в этом вызове в функцию передается адрес массива. Массив всегда передается в функцию по ссылке (в функцию передается адрес массива-аргумента). Формальный параметр функции для массива должен иметь синтаксис:

тип элементов имя [ ]

или

тип элементов имя [максимальный размер массива]

или

тип элементов *имя

Примеры задания формальных параметров-массивов:

void sort (int a[], int n)

void sort (int a[100], int n)

void sort (int *a, int n)

Если в теле функции изменяются значения элементов массива, то изменяется сам передаваемый через параметр массив.

Пример программы вычисления суммы максимальных элементов двух целочисленных массивов из 20 и 15 элементов. В программе алгоритм поиска максимального элемента целочисленного массива из n элементов оформлен в виде функции.

#include <conio.h>

#include <iostream.h>

int max (int a[ ], int n); //поиск максимального элемента массива

void main()

{

int b[20], c[15];

int i; //номер элемента

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

cin>>b[i];

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

cin>>c[i];

cout<<” sum =”<< max(b,20)+ max(c,15);

getch();

}

int max (int a[ ], int n)

{

int amax; //значение максимального элемента

amax=a[0];

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

if( a[i]>amax) amax=a[i];

return amax;

}

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

#include <conio.h>

#include <iostream.h>

//Функция удаления из строки s символов c

void del(char s[ ], char c);

int main( )

{

char s[80]; //текст

char c; //удаляемый символ

cout<<”s? “;

cin.getline(s,80);

cout<<”c? “;

cin>>c;

del(s,c);

if (s[0]==’\0’)

cout<<”s is empty”; //строка стала пустой

else

cout<<s;

getch();

}

void del(char s[], char c)

{

int i=0; //номер сравниваемого символа строки

int j=0; //позиция символа, не совпадающего с символом с

while(s[i]!='\0') //цикл по всем символам строки

{

if (s[i]!=с)

{s[j]=s[i]; j++;}

i++;

}

s[j]='\0'; //завершение строки 0-символом

}

Тесты:

s: Ааа рaрр еaaеее, c: a результат: А ррр ееее

s: ааaaaaa, c: a результат: строка пуста

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

Синтаксис формального параметра двумерного массива:

тип элементов имя [][максимальное количество столбцов]

или

тип элементов имя [максимальное количество строк] [максимальное количество столбцов]

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

#include <conio.h>

#include <iostream.h>

#include <iomanip.h>

//Функция удаления из матрицы a из n строк и m столбцов

// строки c номером k

void del(int a[ ][50], int &n, int m, int k);

void main( )

{

int a[100][50]; //матрица

int n, m; //количества строк и столбцов

int k; //номер удаляемой строки

cout<<”n, m? “;

cin>>n>>m;

cout<<”a? “;

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

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

cin>>a[i][j];

cout<<”k? “; cin>>k;

del(a, n, m, k); //вызов функции

if (n==0)

cout<<”a is empty”;

else

//Вывод матрицы в виде прямоугольника

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

{

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

cout<<setw(7)<<a[i][j];

cout<<endl;

}

getch();

}

void del(int a[][50], int &n, int m, int k)

{

for (int i=k; i<n-1; i++)

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

a[i][j]=a[i+1][j];

n--;

}

В программе для форматирования вывода матрицы используется манипулятор вывода setw(7). Манипулятор определяет ширину поля вывода для любого значения a[i][j] в 7 позиций, что позволяет выровнять столбцы значений матрицы на экране. Манипулятор вывода setw доступен программе при наличии в ней директивы:

#include <iomanip.h>