Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Семестр_1_С++.doc
Скачиваний:
2
Добавлен:
23.04.2019
Размер:
290.82 Кб
Скачать

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

Массивы могут быть параметрами функции. При объявлении и описании такой функции массив следует описать в списке формальных параметров.

void DisplayArrayFixed ( int A[10] )

{

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

cout << A[i] << ' ';

}

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

void DisplayArray(int A[], int ArraySize)

{

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

cout << A[i] << ' ';

}

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

Приведем фрагмент функции main, вызывающей функции DisplayArray и DisplayArrayFixed:

int main()

{

int A[10], B[5], C[30];

DisplayArrayFixed (A); //Вызов функции DisplayArrayFixed

//для массива A

DisplayArray(A,10); //Вызов функции DisplayArray для массива A

DisplayArray(B,5); //Вызов функции DisplayArray для массива B

DisplayArray(C,30); //Вызов функции DisplayArray для массива C

return 0;

}

Следует обратить внимание, что функция DisplayArrayFixed может быть вызвана для любого целочисленного массива , только имеющего размер 10. Вызов этой функции с аргументом C, DisplayArrayFixed(C); не вызовет ошибки компилятора, но на экран будут выведены только первые 10 элементов массива вместо 30.

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

Пример.

#include<iostream.h>

#include<stdlib.h>

void EnterArray(int A [], int N);

void DisplayArray(int A [], int N);

int main()

{

const int N = 100;

int A[N], n;

cout << "Введите размерность массива (n):";

cin >> n;

cout << "Введите элементы массива:" << endl;

EnterArray(A, n);

cout << "\n\tСодержимое массива:" << endl;

DisplayArray(A, n);

cout << endl;

system("pause");

return 0;

}

void EnterArray(int A[], int Size)

{

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

{

cout << "A[" << i << "]=";

cin >> A[i];

}

}

void DisplayArray(int A[], int Size)

{

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

cout << A[i] << ' ';

}

Данный пример демонстрирует ввод и вывод одномерного массива с помощью функций. В программе объявляется массив A размером N. Потом он вводится с клавиатуры с помощью функции EnterArray и выводится на экран с помощью функции DisplayArray.

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

#include<iostream.h>

#include<stdlib.h>

const M=5;

void EnterArray(int Array [][M], int Size);

void DisplayArray(int Array [][M], int Size);

int main()

{

const int N = 4;

int A[N][M];

cout << "\nВведите элементы массива:" << endl;

EnterArray(A, N);

cout << "\n\tСодержимое массива:" << endl;

DisplayArray(A, N);

cout << endl;

system("pause");

return 0;

}

void EnterArray(int A[][M], int Size)

{

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

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

{

cout << "A[" << i << "][" <<j << "]=";

cin >> A[i][j];

}

}

void DisplayArray(int A[][M], int Size)

{

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

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

cout << A[i][j] << ' ';

}

Пример 6.1. Одномерный целочисленный массив проинициализировать случайным образом. Найти номер минимального элемента массива. Оформить в виде функций:

-заполнение массива случайными числами;

-вывод массива на экран;

-получение номера минимального элемента.

#include <iostream.h>

#include <stdlib.h>

void EnterArray(int A[], int N);

void DisplayArray(int A[], int N);

int MinElement(int A[], int N);

int main()

{

const int DIM = 10;

int A[DIM];

EnterArray(A, DIM);

cout << "Исходный массив\n";

DisplayArray(A, DIM);

int iMin= MinElement( A,DIM);

cout << " Номер минимального элемента массива A="<<iMin<<endl;

cout << " Минимальный элемент массива A="<<A[iMin]<<endl;

system("pause");

return 0;

}

void EnterArray(int A[], int N)

{

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

A[i] = random(N)- random(N);

return;

}

void DisplayArray(int A[], int N)

{

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

cout << A[i] << ' ';

cout<<endl;

return;

}

int MinElement(int A[], int N)

{

int iMin =0;

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

if (A[i] < A[iMin]) iMin = i;

return iMin;

}

Пример 6.2. Дан одномерный целочисленный массив. Отсортировать массив по не убыванию методом "пузырька". Оформить в виде функций:

-консольный ввод массива;

-вывод массива на экран;

-сортировку массива.

#include <iostream.h>

#include <stdlib.h>

void EnterArray(int A[], int N);

void DisplayArray(int A[], int N);

void SortArray(int A[], int N);

int main()

{

const int M = 10;

int A[M], x, n;

EnterArray( A, M);

cout << "\nИсходный массив\n";

DisplayArray( A, M);

SortArray( A,M);

cout << "\nОтсортированный массив\n";

DisplayArray( A, M);

system("pause");

return 0;

}

void EnterArray(int A[], int N)

{

cout << "\nВведите элементы массива:"<<endl;

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

{

cout << "A[" << i << "] = ";

cin >> A[i];

}

return;

}

void DisplayArray(int A[], int N)

{

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

cout << A[i] << ' ';

return;

}

void SortArray(int A[], int N)

{

for(int i = 1; i < N; i++) //Сортировка массива

for(int j =0; j<N-i; j++)

if (A[j] > A[j+1] )

{

int x = A[j];

A[j] = A[j+1];

A[j+1] = x;

}

return;

}

Пример 6.3. Дана матрица A (N ,M) . Вычислить суммы элементов строк матрицы.

Оформить в виде функций:

-заполнение массива случайными числами;

-вывод массива на экран;

-получение сумм элементов строк.

#include <iostream.h>

#include <stdlib.h>

const int M=5;

void EnterArray(int A[][M], int N);

void DisplayArray(int A[][M], int N);

void SummaString(int A[][M], int N, int Summa[]);

int main()

{

const int N = 10;

int A [ N][M];

EnterArray(int A[][M], int N);

cout << "\nИсходная матрица\n";

DisplayArray(int A[][M], int N);

int Summa[N];

SummaString(int A[][M], int N, int Summa[]);

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

cout <<"\nСумма элементов "<<i<<"строки матрицы "<<Summa[i];

cout << endl;

system("pause");

return 0;

}

void EnterArray(int A[][M], int N)

{

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

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

A[i][j] =random(N*M);

}

void DisplayArray(int A[][M], int N)

{

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

{

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

{

cout.width(6);

cout << A[i][j];

}

cout << endl;

}

}

void SummaString(int A[][M], int N, int Summa[])

{

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

{

Summa[i]=0;

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

Summa[i]+= A[i][j];

}

return;

}

Пример 6.4. Дана матрица A (N ,M) . Найти максимальный элемент матрицы.

Оформить в виде функций:

-консольный ввод матрицы;

-вывод матрицы на экран;

-получение максимального элемента матрицы.

#include <iostream.h>

#include <stdlib.h>

const int M=4;

void EnterArray(int A[][M], int N);

void DisplayArray(int A[][M], int N);

int MaxElement(int A[][M], int N);

int main()

{

const int N = 5;

int A [N][M];

EnterArray( A, N);

DisplayArray( A, N);

int Max=MaxElement( A, N);

cout << "\nМаксимальный элемент матрицы "<<Max;;

system("pause");

return 0;

}

void EnterArray(int A[][M], int N)

{

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

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

cin>>A[i][j];

return;

}

void DisplayArray(int A[][M], int N)

{

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

{

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

{

cout.width(4);

cout << A[i][j];

}

cout << endl;

}

}

int MaxElement(int A[][M], int N)

{

int Max =A[0][0];

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

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

if (A[i][j] > Max)

Max=A[i][j];

return Max;

}

Пример 6.5. Дана матрица A (N ,M) . Найти максимальный и минимальный элементы матрицы.

Оформить в виде функций:

-консольный ввод матрицы;

-вывод матрицы на экран;

-получение максимального и минимального элементов матрицы.

#include <iostream.h>

#include <stdlib.h>

const int M=4;

void EnterArray(int A[][M], int N);

void DisplayArray(int A[][M], int N);

void MaxMinElement(int A[][M], int N, int &Max, int &Min);

int main()

{

const int N = 5;

int A [N][M];

EnterArray( A, N);

DisplayArray( A, N);

int Max, Min;

MaxMinElement( A, N, Max, Min);

cout << "Максимальный элемент матрицы "<<Max;

cout << "Минимальный элемент матрицы "<<Min;

system("pause");

return 0;

}

void EnterArray(int A[][M], int N)

{

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

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

cin>>A[i][j];

return;

}

void DisplayArray(int A[][M], int N)

{

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

{

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

{

cout.width(4);

cout << A[i][j];

}

cout << endl;

}

}

void MaxMinElement(int A[][M], int N, int & Max, int & Min)

{

Max =A[0][0];

Min=A[0][0];

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

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

{

if (A[i][j] > Max) Max=A[i][j];

if (A[i][j] < Min ) Min=A[i][j];

}

}

40