BUY WinRAR

Скачай WinRAR сейчас!

120x90-p2m002.gif (5122 bytes)

Обмен программами по FTP

Партнерская программа для русскоязычных сайтов

Интернет казино
Online Casino Stargame

6. Функции и структура программы.

6.1. Функции пользователя.

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

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

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

В этой программе основные действия оформлены в виде функции. Началом описания функции является зарезервированное слово function. Далее следует имя функции и, в скобках после имени, указан список аргументов. Сама функция ожидает возврат некоего значения, тип которого описывается здесь же. В данном случае это longint;. Структура функции на Паскале такая же, как у обычной программы, за исключением того, что в конце функции, после слова end, ставится знак “точка с запятой”. Кроме того, в тексте функции должно присутствовать, хоть одно присвоение результата работы, “имени” функции.

Теперь рассмотрим программу на Си.

В этой программе, в виде функции, выделен основной цикл. Как же оформляется функция пользователя в языке Си?

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

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

Как и в программе на языке Паскаль, при вызове функции (при обращении к функции) используется оператор присваивания, имя функции и, в скобках, значения фактических аргументов. (2)

Описание самой функции начинается с заголовка функции. Заголовок должен полностью соответствовать своему прототипу. (3)

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

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

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

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

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

В отличие от Паскаля, принципы программирования на Си основаны на понятии функции. Наряду с системными функциями (printf(), scanf(), getchar(), и др.) можно создавать и свои собственные функции и делать их доступными для функции main(), а так же друг для друга.

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

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

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

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

При написании функции придерживаются тех же правил, что и при написании main():

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

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

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

Для передачи значений переменных из программы в функцию, используют функции с аргументами. Здесь, при определении функции, в скобках, после имени, указываются аргументы. В случае если аргументов несколько – они разделяются запятыми: Function1(1,j,number). Для сравнения вспомним, что в Паскале функция с аргументами определяется следующим образом: Function1(l,j,number:integer):integer;, где :integer; - тип значения функции.

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

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

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

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

Однако, по умолчанию тип функции в Си – целый. В Паскале же – тип функции всегда должен быть определён.

Google
Rambler's Top100 Яндекс цитирования PageRank

Регистрация доменов .RU по минимальной ценеРегистрация в системе обмена ссылками