InCode#A4: Функции

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

Постановка проблемы

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

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

Функции

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

Для нашего псевдокода я буду использовать следующий вид записи:

Тип_Возвращаемого_Значения Имя_Функции (Аргументы) {
    Тело_Функции
}

Согласно этому псевдокоду, функция имеет следующие важные части:

  • Тип_Возвращаемого_Значения — тип данных результата выполнения функции. Результатом работы функции может быть итог математического вычисления, некоторая строка или просто информация о том, правильно ли работает код или возникла некая ошибка.
  • Имя_Функции — идентификатор, по которому мы можем вызвать функцию
  • Аргументы — из названия уже понятно, что это аргументы которые вы передадите внутрь подпрограммы
  • Тело_Функции — непосредственно подпрограмма

Для возврата значения будем использовать следующую структуру

“Вернуть_Значение”

Теперь мы готовы рассмотреть пример написания функции. Задача:

“Напишите функцию для вычисления расстояния между двумя точками (точки записываются в виде двух переменных x и y)”.

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

Для начала мы напишем простой код, который будет вычислять расстояние между двумя точками. Пусть первая точка записана через переменные x_1 и y_1, а вторая точка через x_2 и y_2.

Для поиска расстояния между точками я воспользуюсь известной формулой вычисления расстояния (Евклидова метрика

Расстояние между a и b  = sqrt(pow(a.x — b.x, 2) + pow(a.y — b.y, 2))

Где:
sqrt(val) —  это функция нахождения квадратного корня. val это число от которого необходимо найти степень.
pow(basis, exponent) — функция возведения в степень. basis — число которое необходимо возвести, exponent — степень в которую мы возводим.

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

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

Если порассуждать о том, какие значения можем получить в результате вычисления расстояния — то сразу станет ясно, что это «Дробный» тип.
С аргументами все ясно. Мы знаем, что у нас две точки и каждая точка определяется двумя переменными. Значит, у нас будет 4 аргумента в функции.
А вот название вы можете определить без меня, но подчеркиваю, что оно должно быть понятным. Для своего кода я выберу название “расстояние_2Д”

Дробный расстояние_2Д (Дробный x_1, Дробный y_1, Дробный x_2, Дробный y_2){
    Вернуть sqrt(степень(x_1 - x_2, 2) + pow(y_1 - y_2, 2));
}

Еще одна задача для закрепления пройденного материала.

Давайте посчитаем целочисленную степень для какого-либо числа. Для этой задачи я предлагаю использовать цикл for.

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

Дробный МояСтепень(Дробный  число, Целочисленный степень){
    Дробный результат = 1;
    for (Целочисленный i = 0; i < степень, i++){
       результат *= число;
    }
    Вернуть результат;
}

Рекурсивные функции

Рекурсия — это когда какое-либо явление или объект содержит в себе само себя.

Можно показать рекурсию через эксперимент с зеркалами. Если поставить два зеркала друг напротив друга, мы увидим рекурсию. Зеркало начнёт отражать в себе противоположное зеркало, которое в свою очередь отражает первое зеркало.

Рекурсивная функция ー  это функция, которая вызывает саму себя.

Такие функции схожи с обычными. Но они имеют отличительную деталь ー условие завершения функции. Если мы не укажем условие выхода из рекурсивной функции, то создадим “переполнение” памяти ЭВМ. Переполнение происходит потому что рекурсия, в самом чистом виде, это бесконечное явление.

Задача: посчитать сумму от 0 до N:

Целочисленный СУММА(Целочисленный N){    Если (N == 0) Вернуть 0;    Иначе Вернуть СУММА (N — 1) + 1;}

Сначала постарайтесь сами понять и разобрать.

В этом коде “N == 0” является условием окончания рекурсивного вызова.

Заключение

Вот мы и прошли весь курс введения в программирование.

Теперь вы понимаете основы программирования и построения программ, но вы не знаете никаких языков программирования для реализации себя и своих знаний. Но не спешите расстраиваться. Хоть этот курс и пройден, но скоро я начну писать курс введения в программирование на языке Lua. Он очень простой и не потребует много усилий.

До скорой встречи

InCode#A4: Функции

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *