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

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

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

Например, функция поиска наименьшего значения в массиве 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).

4.3 Локальные и глобальные переменные

Внутри функции могут быть объявлены переменные, как, например, переменные p и i в функции power. Такие переменные называются локальными и они определены только внутри этой функции. Переменные, определенные вне тела любой функции (ранее мы такие переменные вообще не рассматривали) называются глобальными и они определены всюду, начиная с места определения и до конца файла. Глобальными переменными можно пользоваться во всех функциях, но современный стиль программирования предполагает, что использовать глобальные переменные следует как можно реже.

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

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

Пример:

#include<iostream>

using namespace std;

int i; // i - глобальная переменная

void f1()

{

int i; // определена локальная переменная i

i=5; // изменяется значение локальной переменной

cout<<i<<endl; // будет напечатано 5

}

void f2()

{

i=3; // изменяется значение глобальной переменной

}

int main()

{

i=1; // изменяется значение глобальной переменной

f1(); // f1() не меняет значение глобальной переменной

cout<<i<<endl; // будет напечатано 1

f2(); // f2() меняет значение глобальной переменной

cout<<i<<endl; // будет напечатано 3

return 0;

}

Вопрос: Как будет работать эта программа, если добавить в функцию main определение переменной i как локальной переменной ? А если при этом убрать объявление глобальной переменной i ?

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