Функция это некоторая часть программы

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

тип_функции имя_функции (спецификация_формальных_параметров)

Здесь тип_функции – тип возвращаемого функцией значения, в том числе void, если функция не возвращает никакого значения. Тип функции может быть любым кроме массива и функции. Имя_функции – идентификатор. Спецификация_формальных_параметров может отсутствовать (но скобки обязательны) или представлять собой список спецификаций для каждого параметра, имеющий вид:

тип имя_параметра= умалчиваемое значение.

Тело_функции — это блок или составной оператор, заключенный в скобки <>. Очень важным оператором тела функции является оператор возврата в точку вызова

return выражение;

Выражение в операторе return определяет возвращаемое функцией значение, именно то значение, которое будет результатом обращения к функции. Если функция имеет тип void, то этот оператор можно опустить.

C. Урок 12. Функции

Обращение к функции (вызов функции) – это выражение вида

При обращении к функции формальные параметры заменяются фактическими, причем соблюдается строгое соответствие параметров по типам. Именно поэтому необходимо определить или хотя бы объявить функцию до ее вызова. Объявление функции (прототип) совпадает с заголовком определения функции после которого ставится;. В списке формальных параметров в этом случае могут отсутствовать имена параметров.

Приведем несколько примеров.

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

int max (int n, int m) // определение функции нахождения максимума

int cube(int); //прототип функции вычисления куба целого числа

m=cube(max(i,j));// вложенные вызовы функций – m – куб

// максимального из двух чисел

int cube(int x)// Определение функции вычисления

//куба целого числа

Пример 2. Определить функцию, подсчитывающую количество нулей в троичной записи натурального числа. Найти все пары натуральных чисел в диапазоне [n1,n2], разность между которыми равна 4 и в троичной записи которых равное число нулей. Например, такой парой является пара 6(203) и 10(1013) (в троичной записи по одному нулю).

int oct (int a)// определение функции

//разность между которыми равна 4

if (oct(i)==oct(i+4) oct(i)>0)// условие, содержащие

//три вызова функции oct

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

Основы программирования / Урок #10 – Функции

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

Пример 3. Напишите рекурсивную функцию, вычисляющую x n (n-целое, неотрицательное).

float step(float x, int n)

k=x*step(x,n-1); //рекурсивный вызов

Для n=0 функция возвращает значение 1. В противном случае вызывается та же функция с уменьшенным на 1 значением параметра степени. Таким образом, организуется последовательность вычислений x n = x * x n -1 , x n -1 = x * x n -2 …, x 2 = x * x 1 , x 1 = x * x 0 , x 0 =1. Обратите внимание, что последовательность рекурсивных обращений к функции прерывается только при вызове функции step(x,0). Таким образом, важным моментом при составлении любой рекурсивной функции является организация выхода их рекурсии. Каждая задача, решаемая рекурсивным образом, при некоторых наборах данных должна иметь элементарное нерекурсивное решение, например, в нашем примере x 0 =1.

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

Функции для работы со строками описаны в заголовочном файле string.h. ([7] стр. 501, [8] стр. 167.) Как было отмечено в главе 5 строка в языке С задается как массив символов и строковые функции работают именно с символьными массивами, завершающимися символом ‘’, причем вся ответственность за переполнение массивов ложится на плечи программиста. Так как имя массива является указателем-константой на его первый элемент, то параметрами строковых функций чаще всего являются именно указатели-константы на объект типа char (const char *). Рассмотрим описание некоторых функций библиотеки string.h

Источник: studopedia.su

Функции. Зачем они нужны и как их писать, чтобы вас уважали программисты

Сложная важная статья для тех, кто хочет стать крутым программистом.

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

Если вы не совсем понимаете, что такое функция и зачем она нужна — добро пожаловать в наш кат:

Читайте также:
Как запустить программу блокнот в командной строке

Что такое функция

Функция — это мини-программа внутри вашей основной программы, которая делает какую-то одну понятную вещь. Вы однажды описываете, что это за вещь, а потом ссылаетесь на это описание.

Например, вы пишете игру. Каждый раз, когда игрок попадает в цель, убивает врага, делает комбо, заканчивает уровень или падает в лаву, вам нужно добавить или убавить ему очков. Это делается двумя действиями: к старым очкам добавляются новые, на экран выводится новая сумма очков. Допустим, эти действия занимают 8 строк кода.

Допустим, в игре есть 100 ситуаций, когда нужно добавить или убавить очки — для каждого типа врага, преграды, уровня и т. д. Чтобы в каждой из ста ситуаций не писать одни и те же восемь строк кода, вы упаковываете эти восемь строк в функцию. И теперь в ста местах вы пишете одну строку: например, changeScore(10) — число очков повысится на 10.

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

Зачем нужны функции

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

Возьмём тот же пример с подсчётом очков. Что если при добавлении очков нужно не только выводить их на экран, но и записывать в файл? Просто добавляете в определении функции дополнительные команды, связанные с файлами, и они теперь будут исполняться каждый раз, когда функцию снова вызовут в основной программе. Не нужно ползать по всему коду, искать места с добавлением очков и дописывать там про файлы. Меньше ручного труда, меньше опечаток, меньше незакрытых скобок.

А что если нужно не только писать очки в файл, но и следить за рекордом? Пишем новую функцию getHighScore(), которая достаёт откуда-то рекорд по игре, и две другие — setHighScore() и celebrateHighScore() — одна будет перезаписывать рекорд, если мы его побили, а вторая — как-то поздравлять пользователя с рекордом.

// Объявляем новую функцию. Она будет называться changeScore и принимать один аргумент, который мы для этого фрагмента назовём howMuch. Дальше мы просто будем подавать в функцию число. function changeScore(howMuch) < // Прибавим к старым очкам новые playerScore = playerScore + howMuch; // Выведем новые очки на экран $(‘#scoretext’).text(playerScore) // Узнаем, какой у нас рекорд.

Для этого объявим новую переменную highScore, вызовем функцию getHighScore(), запишем её результат в эту переменную var highScore = getHighScore(); // А теперь сравним, больше ли наши очки, чем рекорд по игре if (playerScore >highScore) < //Рекорд побит, значит, надо его записать setHighScore(playerScore, playerName); // Делаем тут что-то, что обычно делают, когда ты побил рекорд игры. Фейерверки? Музыка? Мигание рекордных очков на экране?

Мы не знаем пока, что именно будет делать эта функция, и нам это сейчас неважно celebrateHighScore(); >>

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

Сила ещё в том, что при разборе этой функции нам неважно, как реализованы getHighScore(), setHighScore() и celebrateHighScore(). Они задаются где-то в другом месте кода и в данный момент нас не волнуют. Они могут брать данные с жёсткого диска, писать их в базу данных, издавать звуки и взламывать Пентагон — это будет расписано внутри самих функций в других местах текста.

Без функций трудно повесить действия на какие-либо кнопки в интерфейсе. Например, у вас на сайте есть форма, и при клике на кнопку «Отправить» вы хотите проверять, что данные в форме правильно введены. Вы спокойно описываете где-то в коде функцию validateForm() и вешаете её на нажатие кнопки. Кнопку нажали — функция вызвалась. Не нужно вписывать в кнопку полный текст программы.

А без функции пришлось бы писать огромную программу-валидатор прямо внутри кнопки. Это исполнимо, но код выглядел бы страшно громоздким. Что если у вас на странице три формы, и каждую нужно валидировать?

Хорошо написанные функции резко повышают читаемость кода. Мы можем читать чужую программу, увидеть там функцию getExamScore(username) и знать, что последняя каким-то образом выясняет результаты экзамена по такому-то юзернейму. Как она там устроена внутри, куда обращается и что использует — вам неважно. Для нас это как бы одна простая понятная команда.

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

Функции — это бесконечная радость. На этом наш экскурс в функции закончен, переходим к чистоте.

Что такое чистые функции

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

Читайте также:
5 из 36 как угадать числа в лотерее с помощью программы

Один и тот же результат

Допустим, мы придумали функцию, которая считает площадь круга по его радиусу: getCircleArea(). Для наших целей мы берём число пи, равное 3,1415, и вписываем в функцию:

function getCircleArea(radius) < // Задаём наше местное определение числа пи var localPi = 3.1415; // Считаем площадь: пи на радиус в квадрате. Это то же самое, что пи умножить на радиус и ещё раз умножить на радиус var circleArea = localPi * radius * radius; // Говорим функции вернуть то, что мы сейчас рассчитали return circleArea; >

Теперь этой функции надо скормить число, и она выдаст площадь круга:

  1. getCircleArea(2) всегда выдаст результат 12,6060
  2. getCircleArea(4) всегда выдаст 50,2640

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

Другой пример. Мы пишем программу-таймер, которая должна издать звук, например, за 10 секунд до конца отведённого ей времени. Чтобы узнать, сколько осталось секунд, нам нужна функция: она выясняет количество секунд между двумя отметками времени. Мы даём ей два времени в каком-то формате, а функция сама неким образом высчитывает, сколько между ними секунд.

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

  • getInterval(’09:00:00′, ’09:00:12′) всегда выдаст 12
  • getInterval(’09:00:00′, ’21:00:00′) всегда выдаст 43 200

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

  • getSecondsTo(’23:59:59′) в один момент даст 43 293 секунды,
  • а спустя 2 минуты эта же функция getSecondsTo(’23:59:59′) даст 43 173 секунды.

Это функция с непредсказуемым результатом. У неё есть непредсказуемая зависимость, которая может повлиять на работу программы — зависимость от текущего времени на компьютере. Что если во время исполнения у пользователя обнулились часы? Или он сменил часовой пояс? Или при запросе текущего времени происходит ошибка?

Или его компьютер не поддерживает отдачу времени?

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

  • var now = getCurrentTime();
  • var interval = getInterval(now, ’23:59:59′);

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

Побочные эффекты

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

Функции в программировании

Функции в программировании — это часть кода программы (обычно это подпрограмма), обращение к которой возможно из других программных элементов.

Введение

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

Определение 2

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

Сдай на права пока
учишься в ВУЗе
Вся теория в удобном приложении. Выбери инструктора и начни заниматься!

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

Функции в программировании

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

Замечание 1

Входные данные являются параметрами, а выходные данные называются возвращаемым значением.

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

«Функции в программировании»
Готовые курсовые работы и рефераты
Решение учебных вопросов в 2 клика
Помощь в написании учебной работы

Читайте также:
Как работать в программе мое дело бухгалтерия

funсtion имя_функции(перечень_парамeтров)

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

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

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

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

Итоговые результаты функции

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

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

return значение возврата;

Рассмотрим ещё один пример:

Оклад = 10000; Процент = 15; Выплата = Оклад + Премия( Оклад, Процент);

function Премия (Оклад, Процент) < return Оклад * Процент / 100; >

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

Размер премии определяется при помощи функции Премия (Оклад, Процент), которая получает пару параметров. А именно, оклад и процент от оклада. Эта функция выполняет в итоге возврат размера премии (знак * означает операцию умножения). Затем, полученное значение премии, суммируется с величиной переменой Оклад и итоговое значение суммы задаётся переменой Выплата.

Само определение функции Премия, помещается в окончании программного текста. Эта программа представлена не некотором абстрактном программном языке (практически это почти JavaScript), но она служит хорошей иллюстрацией метода использования функций. Можно эту программу задать в любом текстовом редакторе, к примеру, использовать Блокнот Windows:

Код. Автор24 — интернет-биржа студенческих работ

Рисунок 1. Код. Автор24 — интернет-биржа студенческих работ

Здесь выполнена вставка сценария на языке JavaScript в код HTML. Сценарный код помещается среди тегов и имеет отличие от приведённого выше примера лишь вставленной функцией alert (), которая выводит сообщение в окне диалога. Если сохранить этот текст в файле, имеющем расширение htm или html, а потом открыть его в веб-браузере, то можно увидеть появление окна диалога и в нём сообщение «Выплата =11500».

Предназначение

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

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

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

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

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

Источник: spravochnick.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru