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

5.3 Передача массива в качестве параметра

Массивы можно передавать функции в качестве параметра, причем при этом размер создаваемого массива может быть и не определен на момент компилирования программы. Поэтому функция не может знать размер полученного массива. Вследствие этого при объявлении функции необходимо задавать два параметра: массив передаваемых элементов (без явного указания его размера) и размер массива.

Например, функция поиска наименьшего значения в массиве double A[n] может быть объявлена так:

double Min (double A[], int n)

Соответственно, внутри функции main мы объявляем массив double A[n] и вызываем функцию min, передав в качестве параметров массив A и его размер n:

a_min = Min(A,n);

Упражнения

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

  1. Напишите функцию int Search (double A[], int n, double x), которая находит в массиве double A[n] элемент, значение которого равно x. Функция возвращает индекс найденного элемента или (-1), если такого элемента в массиве нет.

  2. Напишите функцию int CountMax (double A[], int n), которая подсчитывает, сколько раз в массиве встречается значение, являющееся максимальным. Функция должна выполнять однократный просмотр массива.

  3. Напишите функцию double SecondMax (double A[], int n), которая находит второй по величине элемент в массиве – тот элемент, который будет наибольшим, если из массива удалить наибольший элемент, то есть для массивов {1, 2, 3, 4} и {1, 2, 3, 3} вторым по величине элементом будет 3. Функция должна выполнять однократный просмотр массива.

  4. В массиве double A[n] хранятся коэффициенты многочлена степени n-1: an-1xn-1+...+a1x+a0, то есть элемент массива A[i] равен коэффициенту при xi. Найдите значение многочлена в данной точке x. Оформите алгоритм в виде функции double Polynom (double A[], int n, double x).

  5. Даны два отсортированных массива: double A[n] и double B[m]. Объедините их в один отсортированный массив double C[n+m], то есть если A={1, 4, 6, 7}, B={2, 3, 5}, то C={1, 2, 3, 4, 5, 6, 7}. Оформите алгоритм в виде функции void merge (double A[], int n, double B[], int m, double C).

5.4 Передача указателей на массивы через список аргументов

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

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

Вот пример программы, в которой описана функция sum, предназначенная для суммирования заданного количества элементов массива и возвращения результата через указатель (третий аргумент функции):

#include <iostream>

using namespace std;

void sum(double *,int ,double *);

int main()

{

double a[5]={0.2,0.45,1.34,3.6,-57.93};

double s;

int num=3;

sum(a,num,&s);

cout<<*s<<endl;;

}

void sum(double *d, int k, double *ans)

{

int i;

*ans=0;

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

(*ans)+=d[i];

return;

}

В строке 3 объявлен заголовок функции sum. Функция получает три аргумента, первый типа double * для передачи имени массива, второй типа int определяет количество суммируемых элементов, третий аргумент типа double * для возвращаемого результата.

В строке 9 показан пример вызова функции sum. В качестве первого фактического аргумента передается имя вещественного массива а, второй аргумент num типа int определяет, что функция будет суммировать первые три элемента массива a. Результат суммирования будет записан по адресу s. В строке 10 результат суммирования выводится на экран.

В строках 12-17 приведено описание функции sum. Обратите внимание на использование операции разадресации для получения значения, хранящегося по адресу ans.

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