Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2009 лекции ПЯВУ часть1.doc
Скачиваний:
22
Добавлен:
27.03.2015
Размер:
823.3 Кб
Скачать

Тема 6 Функции

6.1. Программные модули в С++

Большинство компьютерных программ, решающих реальные практические задачи, намного превышают по объему те программы, которые были представлены ранее [1]. Экспериментально доказано, что наилучшим способом создания и поддержки больших программ является их конструирование из маленьких фрагментов или модулей, каждый из которых более управляем, чем сложная программа. Эта техника называется «разделяй и властвуй».

Модули в С++ называются функциямииклассами.

Функция– это именованный блок программы, созданный для решения одной небольшой задачи.Класс– это абстрактный тип данных. Обычно программы на С++ пишутся путем объединения новых функций, которые пишет сам программист, с функциями, уже имеющимися в стандартной библиотеке С, и путем объединения новых классов, которые пишет сам программист, с классами, уже имеющимися в различных библиотеках классов.

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

Рис. 6.1. Вызовы функций

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

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

Начальник (вызывающая функция или вызывающий оператор) просит подчиненного (вызываемую функцию) выполнить задание и возвратить (т.е. сообщить) результаты после того, как задание выполнено (см. рис. 6.1.). Функция-начальник не знает, как функция-подчиненный выполняет порученное ей задание.

6.2. Определения функций

Рассмотрим программу, которая использует функцию squareдля вычисления квадратов целых чисел от 1 до 10 (см. рис. 6.2.).

Функция создает копию значения хв параметреу. Затемsquareвычисляету*у. Результат передает в ту точкуmain, из которой была вызванаsquare, и затем этот результат выводится на экран.

Описание squareпоказывает, что эта функция ожидает передачи в нее целого параметрау. Ключевое словоint, предшествующее имени функции указывает, чтоsquareвозвращает целый результат. Операторreturnвsquareпередает результат вычислений обратно в вызывающую функцию.

Функция не может быть определена внутри другой функции.

#include <iostream>

using namespace std;

int square (int);

int main()

{

for (int x = 1; x<=10; x++)

cout << square (x) << " ";

cout << endl;

return 0;

}

int square (int y)

{

return y*y;

}

Рис. 6.2. Программа, вычисляющая квадраты целых чисел

Строка

int square (int);

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

Другой важной особенностью прототипов функций является приведение типов аргументов, т.е. задание аргументам подходящего типа. Например, оператор

cout << sqrt (4);

правильно вычисляет и печатает значение квадратного корня 4. Функцияsqrtбиблиотеки математических функций принимает значение типаdouble. Прототип функции заставляет компилятор преобразовать целое значение4в значение4.0типаdouble, прежде чем значение будет передано вsqrt.

Преобразования типов могут привести к неверным результатам, если не руководствоваться правилами приведения типовС++. Правила приведения определяют, как типы могут быть преобразованы в другие типы без потерь.

Правила приведения типов применяются к выражениям, содержащим значения двух или более типов данных; такие выражения относятся к выражениям смешанного типа. Тип каждого значения в выражениях смешанного типа приводится к «наивысшему» типу, имеющемуся в выражении (на самом деле создается и используется временная копия выражения – истинные значения остаются неизменными).

Задача. Определить максимальное из трех чисел (рис. 6.3.).

#include <iostream>

using namespace std;

int maximum (int, int, int);

int main(){

int a,b,c;

cout << "Enter 3 integers: ";

cin >> a >> b >>c;

cout << "Maximum is: " << maximum(a,b,c) << endl;

return 0;}

int maximum (int x, int y, int z){

int max = x;

if (y > max) max = y;

if (z>max) max = z;

return max;

}

Рис. 6.3. Программа, вычисляющая максимальное из трех чисел