Программирование >>  Структурное программирование 

1 ... 60 61 62 [ 63 ] 64 65 66 ... 342


ник не будет осведомлен об этом. Далее мы увидим, как это скрытие деталей выполнения способствует разработке хорошего программного обеспечения. На рис. 3.1 показана функция main, иерархически связанная с несколькими рабочими функциями. Заметим, что workerl действует как функция начальника по отношению к worker4 и worker5. Взаимоотношения между функциями могут отличаться от показанных на этом рисунке иерархических отношений.

main

workerl

worker2


workers

Рис 3.1. Иерархическое взаимоотношение функция-начальник / функция-подчиненный

3.3. Математические библиотечные функции

Математические библиотечные функции позволяют программисту выполнять определенные типовые математические вычисления. Мы будем использовать далее разнообразные математические библиотечные функции для иллюстрации самой концепции функций. Позже в этой книге мы обсудим многие другие функции из стандартной библиотеки С. Полный перечень функций стандартной библиотеки С приведен в приложении А.

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

cout sqrt(900.0);

При выполнении этого оператора вызывается математическая библиотечная функция sqrt, которая вычисляет квадратный корень из числа, заключенного в круглые скобки (900.0). Число 900.0 является аргументом функции sqrt. Приведенный выше оператор должен был бы напечатать 30. Функция sqrt получает аргумент типа double и возвращает результат типа double. Вообще все функции в математической библиотеке возвращают данные типа double.

Хороший стиль программирования 3.2

При использовании функций математической библиотеки включайте соответствующий заголовочный файл с помощью директивы препроцессора #include <math.h>.



3.4. Функции

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

Замечание по технике программирования 3.2

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

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

Замечание по технике программирования 3.3

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

Типичная ошибка программирования 3.1

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

Аргументами функции могут быть константы, переменные или выражения. Если с1 = 13.0, d = 3.0 и f = 4.0, то оператор

cout sqrt(cl + d*f)

вычислит и напечатает квадратный корень из 13.0-1-3.0*4.0 = 25.0,а именно, напечатает 5, так как С++ обыкновенно не печатает в конце нуль или десятичную точку в числах с плавающей точкой, не имеющих дробной части).

Некоторые математические библиотечные функции приведены на рис. 3.2, где переменные х и у имеют тип double.



Функция

Описание

Пример

sqrt(x)

корень квадратный из х

sqrtOOO.O) = 30.0 sqrtO.O) = 3.0

ехр{х)

экспоненциальная функция е

exp(l.O) = 2.718282 ехр(2.0) = 7.389056

log(x)

логарифм натуральный х (по основанию е)

log(2.718282) = 1.0 log(7.389056) = 2.0

loglO(x)

логарифм десятичный х (по основанию 10)

loglO(I.O) = 0.0 loglOdO.O) = 1.0 loglO(lOO.O) = 2.0

fabs(x)

абсолютное значение х

если X > 0, TO fabs(x) = x если X = 0, TO fabs(x) =0.0 если X < 0, TO fabs(x) = -x

ceil(x)

округление х до наименьшего целого, не меньшего чем X

ceil(9.2) = 10.0 ceil(-9.8) = -9.0

floor{x)

округление х до наибольшего целого, не большего чем X

floor(9.2) = 9.0 floor(-9.8) = -10.0

pow{x, y)

X в степени у

pow(2, 7) = 128.0 pow(9,0.5) = 3.0

fmod{x, y)

остаток от х/у, как число с плавающей точкой

fmod(13.657, 2.333) = 1.992

sin{x)

синус X (х в радианах)

sin(O.O) = 0.0

cos(x)

косинус X (х в радианах)

cos(O.O) = 1.0

tan(x)

тангенс х (х в радианах)

tan(O.O) = 0.0

Рис. 3.2. Наиболее употребительные математические библиотечные функции Замечание по технике программирования 3.4

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

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

Каждая программа, которую мы рассматривали, содержала функцию, называемую main, которая вызывает стандартные библиотечные функции для выполнения соответствующих им задач. Теперь мы рассмотрим, как программисты пишут свои собственные необходимые им функции. Рассмотрим программу, которая использует функцию square для вычисления квадратов целых чисел от 1 до 10 (рис. 3.3).

Хороший стиль программирования 3.3

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

Функция square активизируется или вызывается в main вызовом

square(х)



1 ... 60 61 62 [ 63 ] 64 65 66 ... 342

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика