Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Проектирование программ и программирование на С++ Часть 1. Структурное.pdf
Скачиваний:
18
Добавлен:
15.11.2022
Размер:
3.8 Mб
Скачать

for (int 1=0, k=0;Kstrlen (s) ;I++) if(find(gl, s[I])>0)k++;

printf("%d",k);

}

17.5.3. Передача многомерных массивов в функцию

При передаче многомерных массивов в функцию все размерности должны передаваться в качестве параметров. По определению много­ мерные массивы в С и C++ не существуют. Если мы описываем массив с несколькими индексами, например массив i n t mas [3] [4], то это означает, что мы описали одномерный массив mas, элементами кото­

рого являются указатели на одномерные массивы i n t [ 4 ].

Рассмотрим функцию, которая решает задачу транспонирования квадратной матрицы (поворот матрицы на 90°). Если определить за­ головок функции как

v o i d t r a n s p ( i n t а [ ] [ ] , i n t n ){....},

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

Самый простой вариант решения этой проблемы - определить функцию следующим образом:

/ /Т р а н с п о н и р о в а н и е к в а д р а т н о й матрицы

# i n c l u d e < i o s t r e a m . h >

/ ^ г л о б а л ь н а я п е р ем ен н а я, з а д а е т к о л и ч е с т в о

стр о к и

столб ц ов в м а т р и ц е * /

c o n s t i n t N=10;

v o i d t r a n s p ( i n t a [ ] [ N ] , i n t n)

{

 

i n t

r ;

f o r ( i n t 1 = 0 ; I < n ; I + + ) f o r ( i n t j = 0 ; j < n ; j + + ) i f ( I < j )

{

r = a [ I ] [ j] ;

a

[I]

[ j ] = a [ j ] [I] ;

a

[ j ]

[ I ] = r ;

}

 

v o id m a i n ()

{

int mas[N][N];

for(int 1=0;I<N;I++) for(int j=0;j<Nlj++)

cin>>mas[I][j];

for(1=0;I<N;I++)

{

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

cout<<mas[I][j]

cout<<"\n";

}

transp(N,mas);

for(1=0;I<N;I++)

{

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

cout<<mas[I][j]

cout«"\n";

}

}

Также при передаче многомерных массивов можно интерпре­ тировать их как одномерные и внутри функции пересчитывать ин­ дексы (рис. 13):

//передача матрицы как одномерного массива

#include <iosream.h>

//передаем указатель на первый элемент матрицы void form_matr(int *matr, int n)

{

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

matr[i*n+j]=rand()%10;//пересчитываем индекс //элемента

}

void print_matr(int *matr, int n)

{

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

{

for(int j=0;j<n;j ++) cout<<matr[i*n+j]<<" cout<<"\n"

}

}

void main()

{

int matr [5] [Б] ;

/♦передаем адрес первого элемента матрицы как

фактический параметр*/ form_matr (&matr[0] [0] ,5) ; print_matr (&matr[0][0],5);

}

— ^

t

Н Г

+

4

matr[0]

matr[ 1]

matr[2]

matr[3]

matr[4]

Рис. 13. Размещение двумерного массива в памяти

Вызов такой функции можно записать еще и следующим образом:

//выполняем приведение типов form_matr ((int*)matr,5); print__matr ((int*)matr,5) ;

17.6.Функции с начальными значениями параметров (по умолчанию)

Вопределении функции может содержаться начальное (умалчи^ ваемое) значение параметра. Это значение используется, если при вызове функции соответствующий параметр опущен. Все параметры, описанные справа от такого параметра, также должны быть умалчи­ ваемыми.

void print(char* пате="Номер дома: int value=l)

{

cout<<"\n"<<name<<value;

}

Вызовы:

1. print () ;

Вывод: Номер дома : 1

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]