Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №4.doc
Скачиваний:
8
Добавлен:
11.09.2019
Размер:
129.02 Кб
Скачать

Лабораторная работа №4

Функции, определяемые пользователем,

в языке программирования С++

Цель работы: Изучение принципов структурного программирования, приобретения навыков процедурной декомпозиции задачи. Приобретение навыков структурного программирования на языке С++.

Краткая теория

Функция – это подпрограмма, которая манипулирует с данными и возвращает некоторое значение. Каждая программа на С++ имеет как минимум одну функцию main(), которая при запуске вызывается автоматически. Функция main() может вызывать другие функции, которые могут вызывать следующие функции и т.д.

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

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

Объявление функции: int FindArea (int length, int width);

Сначала указывается тип возвращаемого значения int, затем имя функции FindArea, затем в скобках типы и имена параметров функции через запятую. Значения параметров можно инициализировать в объявлении прототипа. Например: int Area (int W=25, int H);

Допускается задание прототипа функции без имён параметров, а только указывая их типы, например: long Area (int, int);

Определение функции :

int FindArea (int length, int width) // заголовок функции

{

return (length * width);

}

Определение функции состоит из заголовка и тела функции. В заголовке функции указывается тип возвращаемого значения, имя функции и в скобках тип и имена параметров через запятую. Обратите внимание что в конце заголовка функции НЕ СТАВИТСЯ точка с запятой (;) как это обычно принято в С++. Далее открывается фигурная скобка и записывается тело функции, которое определяет то, что данная функция выполняет. Оператор return возвращает значение из функции. Необходимо следить, чтобы тип возвращаемого значения соответствовал типу, указанному в объявлении.

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

Передача данных по значению

Этот способ передачи данных в подпрограмму является основным и действует по-умолчанию. Фактический параметр вычисляется в вызывающей функции и его значение передаётся на место формального параметра в вызываемой функции. На этом связь между фактическим и формальным параметрами прекращается.

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

Даны два числа, хранящиеся в переменных a и b. Используя подпрограмму, выполнить обмен содержимого ячеек этих переменных.

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

Возможный вариант реализации программы:

#include <iostream.h>

void Obmen(double x, double y);

void main()

{

   double a = 2.5, b = 3.1;

   cout << "Do Obmen: a=" << a << " b=" << b << endl;

   Obmen(a, b);

   cout << "Posle Obmen: a=" << a << " b=" << b << endl;

   }

void Obmen(double x, double y)

{

   double c;

   cout << "Function Obmen start:\n x=" << x << " y=" << y << endl;

   c = x;

   x = y;

   y = c;

   cout << "Function Obmen end:\n x=" << x << " y=" << y << endl;

}

Результаты выполнения программы:

Do Obmen: a=2.5 b=3.1

Function Obmen start:

x=2.5 y=3.1

Function Obmen end:

x=3.1 y=2.5

Posle Obmen: a=2.5 b=3.1

Вывод на экран значений переменных показывает, что данные в функцию переданы правильно, перестановка в функции произведена, но это ни как не отразилось на значениях исходных переменных a и b после выхода из функции Obmen().

Этот пример наглядно показывает, что через параметры, передаваемые по значению, нельзя вернуть результаты работы функции.