- •Предисловие
- •4. Функции
- •4.1. Объявление функций. Прототипы функций
- •4.2. Вызов функции
- •4.3. Завершение работы функции и возвращение результата.
- •4.4. Локальные переменные
- •4.5. Глобальные переменные
- •4.6. Аргументы функции
- •5. Массивы
- •5.1.Понятие массива. Одномерные массивы
- •5.2. Двумерные массивы
- •6. Передача массивов в функции
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];
}
}