Всё сдал! - помощь студентам онлайн Всё сдал! - помощь студентам онлайн

Реальная база готовых
студенческих работ

Узнайте стоимость индивидуальной работы!

Вы нашли то, что искали?

Вы нашли то, что искали?

Да, спасибо!

0%

Нет, пока не нашел

0%

Узнайте стоимость индивидуальной работы

это быстро и бесплатно

Получите скидку

Оформите заказ сейчас и получите скидку 100 руб.!


Программирование и алгоритмизация

Тип Реферат
Предмет Программирование

ID (номер) заказа
3735030

200 руб.

Просмотров
1119
Размер файла
139.1 Кб
Поделиться

Ознакомительный фрагмент работы:

Введение
Функциональное программирование — раздел дискретной математики и парадигма программирования, в которой процесс вычисления трактуется как вычисление значений функций в математическом понимании последних (в отличие от функций как подпрограмм в процедурном программировании).Противопоставляется парадигме императивного программирования, которая описывает процесс вычислений как последовательность изменения состояний (в значении, подобном таковому в теории автоматов).Функциональное программирование предполагает обходиться вычислением результатов функций от исходных данных и результатов других функций, и не предполагает явного хранения состояния программы. Соответственно, не предполагает оно и изменяемость этого состояния (в отличие от императивного, где одной из базовых концепций является переменная, хранящая своё значение и позволяющая менять его по мере выполнения алгоритма).На практике отличие математической функции от понятия «функции» в императивном программировании заключается в том, что императивные функции могут опираться не только на аргументы, но и на состояние внешних по отношению к функции переменных, а также иметь побочные эффекты и менять состояние внешних переменных. Таким образом, в императивном программировании при вызове одной и той же функции с одинаковыми параметрами, но на разных этапах выполнения алгоритма, можно получить разные данные на выходе из-за влияния на функцию состояния переменных.Цель и задачи работы изучить: описание и вызов функций, изменение значений фактических параметров при помощи указателей и ссылок, перезагрузка функций, значение параметров функции по умолчанию, локальные и глобальные переменны.1 История и общие сведения о функцияхλ-исчисления являются основой для функционального программирования, многие функциональные языки можно рассматривать как «надстройку» над ними.Наиболее известными языками функционального программирования являются:XQueryScalaHaskell — чистый функциональный. Назван в честь Хаскелла Карри.LISP (Джон МакКарти, 1958, множество его потомков, наиболее современные из которых — Scheme и Common Lisp).ML (Робин Милнер, 1979, из ныне используемых диалектов известны Standard ML и Objective CAML).Miranda (Дэвид Тёрнер, 1985, который впоследствии дал развитие языку Haskell).Erlang — (Joe Armstrong, 1986) функциональный язык с поддержкой процессов.Nemerle — гибридный функционально/императивный язык.F# — функциональный язык для платформы .NETЕщё не полностью функциональные изначальные версии и Lisp и APL внесли особый вклад в создание и развитие функционального программирования. Более поздние версии Lisp, такие как Scheme, а также различные варианты APL поддерживали все свойства и концепции функционального языка.Как правило, интерес к функциональным языкам программирования, особенно чисто функциональным, был скорее научный, нежели коммерческий. Однако, такие примечательные языки как Erlang, OCaml, Haskell, Scheme (после 1986) а также специфические R (статистика), Mathematica (символьная математика), J и K (финансовый анализ), и XSLT (XML) находили применение в индустрии коммерческого программирования. Такие широко распространенные декларативные языки как SQL и Lex/Yacc содержат некоторые элементы функционального программирования, например, они остерегаются использовать переменные. Языки работы с электронными таблицами также можно рассматривать как функциональные, потому что в ячейках электронных таблиц задаётся массив функций, как правило зависящих лишь от других ячеек, а при желании смоделировать переменные приходится прибегать к возможностям императивного языка макросов.Функция — это поименованный набор описаний и операторов, выполняющих определённую задачу. Функция может принимать параметры и возвращать значение. Информация, передаваемая в функцию для обработки, называется параметром, а результат вычисления функции её значением. Обращение к функции называют вызовом. Как известно, любая программа на C++ состоит из одной или нескольких функций. При запуске программы первой выполняется функция main. Если среди операторов функции main встречается вызов функции, то управление передаётся операторам функции. Когда все операторы функции будут выполнены, управление возвращается оператору, следующему за вызовом функции.Перед вызовом функция должна быть обязательно описана. Описание функции состоит из заголовка и тела функции:тип имя_функции(список_переменных){тело_функции}Заголовок функции содержит:-тип возвращаемого функцией значения, он может быть любым; если функция не возвращает значения, указывают тип void;имя_функции;список_переменных — перечень передаваемых в функцию величин (аргументов), которые отделяются друг от друга запятыми; для каждой переменной из списка указывается тип и имя; если функция не имеет аргументов, то в скобках указывают либо тип void, либо ничего.В отличие от процедур, функции не являются отдельными операторами. Функции возвращают значения (результат обращения к ним) и предназначены для использования в составе выражений или в качестве выражений. Это накладывает определенный отпечаток на синтаксическую структуру описания функций, которая имеет вид: function < имя функции >[(<список формальных параметров>)]:<тип функции >; < описание локальных имён > begin < тело функции - последовательность операторов > end; В заголовке описания функции обязательно указывается тип вырабатываемого функцией результата, которым может быть любой простой тип Турбо Паскаля, а также строковый тип и тип указатель. Другое отличие описания функции состоит в необходимости присутствия в теле функции хотя бы одного оператора присваивания, левой частью которого является имя функции. Смысл этого оператора - в присваивании функции некоторого результата как итога выполнения функции. Заметим, что имя функции не должно присутствовать в правой части операторов присваивания. Список формальных параметров в описании функции обычно является списком аргументов функции, т.е. входных параметров-значений или параметров-констант. Суть классического понятия функции состоит в том, чтобы однозначно отображать значение аргумента (или списка аргументов) на значение функции (результата). Именно такой смысл имеет функция в математике. В языках программирования понятие функции приобретает, вообще говоря, более широкий смысл. Дело в том, что функция - некоторая подпрограмма, которая в процессе своего выполнения может не только вычислять результат функции от значений аргументов, но и производить некоторое дополнительное воздействие на окружающую среду (например, изменять значение некоторых глобальных переменных, выводить информацию в файлы и др.). Такое воздействие называют побочным эффектом вычисления функций. Побочный эффект - весьма опасное явление, которое может приводить к трудно обнаруживаемым ошибкам. Поэтому хорошим стилем считается использование только функций без побочного эффекта (так называемых чистых функций). Если функция использует только параметры-значения и не использует глобальные имена, а также операторы вывода, вызова других подпрограмм, то это гарантирует отсутствие побочного эффекта. Впрочем, в некоторых случаях имеет смысл применять функции с побочным эффектом (например, для реакций на ошибки при вычислении значения функции). Синтаксическая форма вызова функции аналогична вызову процедуры, т.е. включает имя функции и список фактических параметров, заключенный в круглые скобки. Различие лишь в том, что вызов функции есть выражение, а не отдельный оператор. Замечание: Используя так называемый расширенный синтаксис, можно вызывать функцию как процедуру (т.е. как оператор). Для включения расширенного синтаксиса имеется директива компилятора {$X+}. Это находит применение при инициализации динамических объектов. 2 Изменение значения параметраДля изменения значения параметра функция должна знать адрес памяти параметра. Чтобы сообщить функции адрес параметра, ваши программы должны использовать оператор адреса C++ (&). Следующий вызов функции иллюстрирует, как программа будет использовать оператор адреса для передачи адресов переменных big и small в функцию change_values:change_values (&big, &small); -->Передача параметров по адресуВнутри функции вы должны сообщить C++ , что программа будет передавать параметры с помощью адреса. Для этого вы объявляете переменные-указатели, предваряя имя каждой переменной звездочкой, как показано ниже:void сhange_values (int. *big, int. *small) ---> Указатель на тип intПеременная-указатель представляет собой переменную, которая содержит адрес памяти. Внутри функции вы должны сообщить C++ , что функция работает с адресом параметра. Для этого вы предваряете имя параметра звездочкой, как показано ниже:*big = 1001;*small = 1001;Следующая программа CHGPARAM.CPP использует оператор адреса для передачи адресов параметров big и small в функцию change_values. Функция, в свою очередь, использует указатели участков памяти параметров. Следовательно, изменения параметров, сделанные функцией, остаются и после завершения функции:#include void change_values (int *a, int *b){ *a = 1001; *b = 1001; cout << "Значения в функции display_values" << " равны " << *а << " и " << *b << endl;}void main(void){ int big = 2002, small = 0; cout << "Значения перед функцией " << big << " и " << small << endl; change_values(&big, &small); cout << "Значения после функции " << big << " и " << small << endl;}Когда вы откомпилируете и запустите эту программу, на экране появится следующий вывод:C:\> CHGPARAM Значения перед функцией 2002 и 0Значения в функции display_values равны 1001 и 1001Значения после функции 1001 и 1001Как видите, значения, которые функция change_values присваивает параметрам, остаются и после завершения функции. Чтобы понять, почему изменения, которые функция выполнила над переменными, остались после ее завершения, необходимо вспомнить, что функция имеет доступ к ячейке памяти каждой переменной. Если вы передаете параметры по адресу, C++ помещает адрес каждой переменной в стек.Используя указатели (адреса памяти) внутри функции, change_values может обратиться к памяти по адресу каждого параметра, изменяя значения параметров, что и требуется.Для изменения значения параметра в функции, функция должна знать адрес параметра в памяти. Следовательно, ваша программа должна передать адрес параметра с помощью оператора адреса C++ :some_function(&some_variable);Внутри функции вы должны сообщить C++ , что функция будет работать с адресом памяти (указателем). Для этого при объявлении вы предваряете имя параметра звездочкой:void some_function(int *some_variable);Далее внутри функции вы должны употреблять звездочку перед именем переменной:*some_variable = 1001;cout << *some_variable;3 Перегрузка функции«Перегрузка» функции – это объявление функции с тем же именем несколько раз. Таким образом, в некоторой области видимости имя «перегруженной» функции объявляется несколько раз. Чтобы компилятор мог отличать «перегруженные» функции между собой, эти функции должны отличаться списком входных параметров. В общем случае, объявление перегруженной функции в некоторой области видимости выглядит следующим образом:return_type1 FunName(parameters_list_1){ // ...return_typeN FunName(parameters_list_N){ // ...}гдеFunName – имя перегруженной функции;parameters_list1, parameters_list2, …, parameters_listN – списки параметров «перегруженной» функции с именем FunName;return_type1, return_type2, …, return_typeN – типы параметров, которые возвращаются «перегруженной» функцией FunName. Компилятор различает «перегруженные» функции только по списку полученных параметров а не по возвращаемому значению.Перегруженные функции отличаются по списку параметров. Списки параметров перегруженных функций должны отличаться по следующим признакам:- количеством параметров;- если количество параметров одинаковое, то по типам параметров.4 Параметр по умолчаниюПараметр по умолчанию (или «необязательный параметр») — это параметр функции, который имеет определенное (по умолчанию) значение. Если пользователь не передает в функцию значение для параметра, то используется значение по умолчанию. Если же пользователь передает значение, то это значение используется вместо значения по умолчанию. Например:#include void printValues(int a, int b=5){ std::cout << "a: " << a << '\n'; std::cout << "b: " << b << '\n';} int main(){ printValues(1); // в качестве b будет использоваться значение по умолчанию - 5 printValues(6, 7); // в качестве b будет использоваться значение, предоставляемое пользователем - 7}Параметр по умолчанию — это отличный вариант, когда функция нуждается в значении, которое пользователь может переопределить, а может и не переопределить. Например, вот несколько прототипов функций, для которых могут использоваться параметры по умолчанию:void openLogFile(std::string filename="default.log");int rollDice(int sides=6);void printStringInColor(std::string str, Color color=COLOR_RED); // Color - это перечисление.5 Локальные и глобальные переменныеВ программировании особое внимание уделяется концепции о локальных и глобальных переменных, а также связанное с ними представление об областях видимости. Соответственно, локальные переменные видны только в локальной области видимости, которой может выступать отдельно взятая функция. Глобальные переменные видны во всей программе. "Видны" – значит, известны, доступны. К ним можно обратиться по имени и получить связанное с ними значение.К глобальной переменной можно обратиться из локальной области видимости. К локальной переменной нельзя обратиться из глобальной области видимости, потому что локальная переменная существует только в момент выполнения тела функции. При выходе из нее, локальные переменные исчезают. Компьютерная память, которая под них отводилась, освобождается. Когда функция будет снова вызвана, локальные переменные будут созданы заново.def rectangle(): a = float(input("Ширина: ")) b = float(input("Высота: ")) print("Площадь: %.2f" % (a*b)) def triangle(): a = float(input("Основание: ")) h = float(input("Высота: ")) print("Площадь: %.2f" % (0.5 * a * h)) figure = input("1-прямоугольник, 2-треугольник: ")if figure == '1': rectangle()elif figure == '2': triangle()Здесь пять переменных. Глобальной является только figure. Переменные a и b из функции rectangle, а также a и h из triangle – локальные. При этом локальные переменные с одним и тем же идентификатором a, но объявленные в разных функциях, – разные переменные.Следует отметить, что идентификаторы rectangle и triangle, хотя и не являются именами переменных, а представляют собой имена функций, также имеют область видимости. В данном случае она глобальная, так как функции объявлены непосредственно в основной ветке программы.В приведенной программе к глобальной области видимости относятся заголовки объявлений функций, объявление и присваивание переменной figure, конструкция условного оператора.Поскольку функция в функциональном программировании не может порождать побочные эффекты, менять объекты нельзя как внутри области видимости, так и снаружи (в отличие от императивных программ, где одна функция может установить какую-нибудь внешнюю переменную, считываемую второй функцией). Единственным эффектом от вычисления функции является возвращаемый ей результат, и единственный фактор, оказывающий влияние на результат — это значения аргументов.Таким образом имеется возможность протестировать каждую функцию в программе, просто вычислив её от различных наборов значений аргументов. При этом можно не беспокоиться ни о вызове функций в правильном порядке, ни о правильном формировании внешнего состояния. Если любая функция в программе проходит модульные тесты, то можно быть уверенным в качестве всей программы. В императивных программах проверка возвращаемого значения функции недостаточна: функция может модифицировать внешнее состояние, которое тоже нужно проверять, чего не нужно делать в функциональных программах.
Заключение
Таким образом, традиционно упоминаемой положительной особенностью функционального программирования является то, что оно позволяет описывать программу в так называемом «декларативном» виде, когда жесткая последовательность выполнения многих операций, необходимых для вычисления результата, в явном виде не задаётся, а формируется автоматически в процессе вычисления функций. Это обстоятельство, а также отсутствие состояний даёт возможность применять к функциональным программам достаточно сложные методы автоматической оптимизации.Ещё одним преимуществом функциональных программ является то, что они предоставляют широчайшие возможности для автоматического распараллеливания вычислений. Поскольку отсутствие побочных эффектов гарантировано, в любом вызове функции всегда допустимо параллельное вычисление двух различных параметров — порядок их вычисления не может оказать влияния на результат вызова.Недостатки функционального программирования вытекают из тех же самых его особенностей. Отсутствие присваиваний и замена их на порождение новых данных приводят к необходимости постоянного выделения и автоматического освобождения памяти, поэтому в системе исполнения функциональной программы обязательным компонентом становится высокоэффективный сборщик мусора. Для преодоления недостатков функциональных программ уже первые языки функционального программирования включали не только чисто функциональные средства, но и механизмы императивного программирования.Таким образом, были изучены описание и вызов функций, изменение значений фактических параметров при помощи указателей и ссылок, перезагрузка функций, значение параметров функции по умолчанию, локальные и глобальные переменны.
Список использованной литературы
1. А. Филд, П. Харрисон Функциональное программирование: Пер. с англ. — М.: Мир, 2016. — 637 с.2. Роджер Пенроуз. Новый ум короля. О компьютерах, мышлении и законах физики, 2016 г.3. Н. А. Роганова Функциональное программирование: Учебное пособие для студентов высших учебных заведений — М.: ГИНФО, 2016. — 260 с. 4. Ахмечет В. «Функциональное программирование для всех» - Москва- 2016 г. — 150 с.5. Ездаков, А.Л. Функциональное и логическое программирование: Учебное пособие / А.Л. Ездаков. - М.: Бином. Лаборатория знаний, 2015. - 119 c.


Нет нужной работы в каталоге?

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

Цены ниже, чем в агентствах и у конкурентов

Вы работаете с экспертами напрямую. Поэтому стоимость работ приятно вас удивит

Бесплатные доработки и консультации

Исполнитель внесет нужные правки в работу по вашему требованию без доплат. Корректировки в максимально короткие сроки

Гарантируем возврат

Если работа вас не устроит – мы вернем 100% суммы заказа

Техподдержка 7 дней в неделю

Наши менеджеры всегда на связи и оперативно решат любую проблему

Строгий отбор экспертов

К работе допускаются только проверенные специалисты с высшим образованием. Проверяем диплом на оценки «хорошо» и «отлично»

1 000 +
Новых работ ежедневно
computer

Требуются доработки?
Они включены в стоимость работы

Работы выполняют эксперты в своём деле. Они ценят свою репутацию, поэтому результат выполненной работы гарантирован

avatar
Математика
Физика
История
icon
137666
рейтинг
icon
5834
работ сдано
icon
2641
отзывов
avatar
Математика
История
Экономика
icon
137419
рейтинг
icon
3044
работ сдано
icon
1326
отзывов
avatar
Химия
Экономика
Биология
icon
92238
рейтинг
icon
2003
работ сдано
icon
1260
отзывов
avatar
Высшая математика
Информатика
Геодезия
icon
62710
рейтинг
icon
1046
работ сдано
icon
598
отзывов
Отзывы студентов о нашей работе
51 584 оценки star star star star star
среднее 4.9 из 5
Финансовый Университет при Правительстве РФ
работа выполнена оперативно, не придраться! исполнитель очень выручил. :)
star star star star star
МГУТУ
Спасибо огромное за досрочно выполненную работу. Ответственный исполнитель всем рекомендую.
star star star star star
Волгау
Отзывчивый человек, пошла на встречу и в цене и в требованиях. Рекомендую, все быстро и ка...
star star star star star

Последние размещённые задания

Ежедневно эксперты готовы работать над 1000 заданиями. Контролируйте процесс написания работы в режиме онлайн

Обзор приговоров

Другое, Криминология

Срок сдачи к 25 апр.

только что

Конспект урока по русскому для 3 класса

Контрольная, Русский язык с методикой преподавания

Срок сдачи к 22 апр.

1 минуту назад

решить вариант 10

Контрольная, типология объектов недвижимости

Срок сдачи к 30 апр.

2 минуты назад

написать отчет

Отчет по практике, Анализ хозяйственной деятельности

Срок сдачи к 22 апр.

3 минуты назад

пройти итоговый тест

Тест дистанционно, Английский язык

Срок сдачи к 20 апр.

3 минуты назад

Написать индивидуальный проект на какую нибудь социальную...

Другое, Обществознание

Срок сдачи к 30 апр.

4 минуты назад

Рассчитать материальный баланс на один цикл загрузки

Курсовая, технология химических производств

Срок сдачи к 26 апр.

4 минуты назад

Тестирование по маркетингу

Тест дистанционно, Маркетинг

Срок сдачи к 22 апр.

4 минуты назад

сделать практикум весь

Лабораторная, Информационные технологии

Срок сдачи к 1 июня

5 минут назад

Выполнить реферат по введение в экономическую теорию.

Реферат, Экономика

Срок сдачи к 24 апр.

5 минут назад

Решить задачи по Жилищному праву

Решение задач, жилищное право

Срок сдачи к 19 апр.

5 минут назад

Сделать курсовую

Курсовая, Информационые сети и комуникации

Срок сдачи к 19 апр.

6 минут назад

Доказать

Решение задач, Математическая логика

Срок сдачи к 24 апр.

7 минут назад

Сделать курсовую

Курсовая, Оценка бизнеса

Срок сдачи к 26 апр.

7 минут назад
8 минут назад

3 задания

Контрольная, аналитическая геометрия

Срок сдачи к 30 апр.

8 минут назад

Решить 2 задачи

Решение задач, Гражданское право и процесс

Срок сдачи к 24 апр.

9 минут назад

Помощь в решении заданий в СДО

Решение задач, теория вероятностей

Срок сдачи к 17 мая

9 минут назад
planes planes
Закажи индивидуальную работу за 1 минуту!

Размещенные на сайт контрольные, курсовые и иные категории работ (далее — Работы) и их содержимое предназначены исключительно для ознакомления, без целей коммерческого использования. Все права в отношении Работ и их содержимого принадлежат их законным правообладателям. Любое их использование возможно лишь с согласия законных правообладателей. Администрация сайта не несет ответственности за возможный вред и/или убытки, возникшие в связи с использованием Работ и их содержимого.

«Всё сдал!» — безопасный онлайн-сервис с проверенными экспертами

Используя «Свежую базу РГСР», вы принимаете пользовательское соглашение
и политику обработки персональных данных
Сайт работает по московскому времени:

Вход
Регистрация или
Не нашли, что искали?

Заполните форму и узнайте цену на индивидуальную работу!

Файлы (при наличии)

    это быстро и бесплатно
    Введите ваш e-mail
    Файл с работой придёт вам на почту после оплаты заказа
    Успешно!
    Работа доступна для скачивания 🤗.