Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика_и_Пр_Бизнес_лекции.doc
Скачиваний:
84
Добавлен:
10.05.2015
Размер:
1.21 Mб
Скачать

8.4. Обмен данными между функциями

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

Для обмена данными между функциями в С++ используются следующие способы:

  • оператор return;

  • глобальные переменные;

  • аппарат формальных и фактических параметров.

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

8.4.1. Использование глобальных переменных

Переменная, объявленная вне функций, называется глобальной. Переменная, объявленная в функции, в том числе и в заголовке функции, называется локальной.

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

#include <conio.h>

#include <iostream.h>

int a=1; //глобальная переменная

void f1(int x) / x – локальная переменная

{

int y=10; //локальная переменная

a=x+y;

cout<<”x=”<<x<<” a=”<<a<<endl; //x=2 a=12

}

int main( )

{

int z=2; //локальная переменная

//Вывод значения глобальной переменной

cout<<”a=”<<a<<endl; //a=1

f1(z); //вызов функции

cout<<”a=”<<a; <<a=12

getch();

}

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

Локальные переменные имеют, как правило, локальную продолжительность жизни: память для них выделяется при входе в блок (составной оператор), а освобождается – при выходе из блока.

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

Пример программы, которая вводит последовательность из n целых чисел и выводит на экран все простые числа этой последовательности:

#include <conio.h>

#include <iostream.h>

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

bool simple(); //прототип функции проверки числа: простое?

void main()

{

int n; //количество чисел

bool ok=false; //true – простое, false - нет

cout <<”n? ” cin>>n;

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

{

cout <<”x? ”;

cin>>x;

if (simple())

{ cout<<x<<’ ‘; ok=true; }

}

if (!ok)

cout<<”No”;

getch();

}

bool simple()

{

int d=2; //пробный делитель

while (d<=sqrt(x) && x%d!=0)

d++;

if (d<=sqrt(x) || x==1)

return false;

return true;

}

Тесты:

n=6, a: 2 13 4 1 121 20 результат: 2 13

n=6, a: 4 15 65 22 24 100 результат: “No”

Недостатки использования глобальных переменных:

  • не позволяют создавать гибкие параметрические функции;

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

  • усложняют распределение работы над программой между несколькими программистами.