Курсова. Курсовая. Основные правила работы с функциями и ограничения использования функций в различных языках программирования
Скачать 126.44 Kb.
|
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ МОСКОВСКИЙ ФИНАНСОВО-ПРОМЫШЛЕННЫЙ УНИВЕРСИТЕТ «СИНЕРГИЯ» курсовая работа По дисциплине: Основы Алгоритмизации и программирования На тему: Основные правила работы с функциями и ограничения использования функций в различных языках программирования
Москва 2022 ОГЛАВЛЕНИЕ Введение…………………………………………………………....3 Глава 1. ЯЗЫКИ ПРОГРАММИРОВАНИЯ МОДУЛЬНОЕ ПРОГРАММИРОВАНИЕ……………………………………………….….4 1.1. Языки программирования низкого и высокого уровня..4 1.2. Анализ некоторых языков программирования……….…7 Модульное программирование……………………………….…9 Глава 2. Работа с функциями в Python и C++…………….…..15 2.1. Использование Функций в Python и C++………………....15 2.2. Использование Функций в Python………………………....17 2.3. Использование функций в C++………………………….….28 Заключение……………………………………………………..…..34 Список использованной литературы……………………………35 ВВЕДЕНИЕ Данная тема подразумевает развитие и ежегодно использование функции как элемент модульного программирования, благодаря чему мы получаем удобство в программировании при чтении программ, при использовании различных модулей в разных программах, что в разы позволяет ускорить процесс программирования. Модульное программирование – является одним из основных способов разработки программного обеспечения в наши, которое строится из нескольких относительно независимых друг от друга частей – модулей. Значимость модульности является одним из основополагающих при разработке современного программного обеспечения. Модуль — функционально законченный фрагмент программы, оформленный в виде отдельного файла с исходным кодом или поименованной непрерывной её части предназначенный для использования в других программах. Модули позволяют разбивать сложные задачи на более мелкие в соответствии с принципом модульности. Цель курсовой работы – рассмотреть и изучить использование функций в языках программирования Python и C++ и осуществлению их применений. Для достижения цели курсовой работы указаны следующие задачи: Рассмотреть и изучить языки: Python, C++; Изучить основные принципы и технологии модульного программирования; Рассмотреть использование функций в Python и С++; Изучить и провести практику алгоритма определения Максимального и Минимального положительного элемента массивов с использованием функций на языке Python; Изучить и провести практику алгоритма определения факториала числа на языке C++; ГЛАВА 1. ЯЗЫКИ ПРОГРАММИРОВАНИЯ МОДУЛЬНОЕ ПРОГРАММИРОВАНИЕ 1.1. Языки программирования низкого и высокого уровня С момента появления первых персональных программируемых компьютеров было создано порядка 700 языков и более. С каждым годом их количество увеличивается. Правда некоторые языки используются чаще всего теми, кто их разработал чем пользователи. Профессиональные программисты в основном используют несколько языков. Языки программирования низкого уровня – это язык программирования, предназначенный для определенного типа ЭВМ и отражающий его внутренний машинный код. На самых первых персональных компьютерах в основном программировали двоичным машинным кодом. Для упрощения задачи решили использовать языки программирования низкого уровня так как они в более понятном виде для человека. Для преобразования кода в двоичный код использовались специальные программы – Трансляторы. Транслятор – это программа, предназначенная для перевода программы, написанной на одном языке программирования, в программу на другом языке программирования. Процесс перевода называется трансляцией. Тексты исходной и результирующей программ находятся в памяти компьютера. Трансляторы делятся на: Компиляторы, которые переводят исходный текст программы с языка в двоичный код инструкций процессора. Кратко говоря, компилятор перевод исходный текст программы на машинный язык сразу и целиком, создавая при этом отдельно исполняемую программу, а интерпретатор выполняет исходный текст прямо во время исполнения программы Интерпретаторы непосредственно выполняют (интерпретируют) исходный текст без предварительного перевода. Самый простой пример языка программирования низкого уровня – Ассемблер. Ассемблер – [assembly language -собирать компоновать]. Язык Ассемблера — это символическое представление машинного языка – язык низкого уровня. Этот язык так же, как и Фортран предназначался для решения научно-технических задач. Кроме того, этот язык применялся как средство обучения основам программирования – искусства составления программ; он облегчает процесс программирования по сравнению с программированием в машинных кодах. Главным преимуществом языка программирования низкого уровня является: компактность и эффективность, так как разработчик использует всю возможность языка программирования. Недостатки появляются в том случае: Если необходимо иметь высокий опыт программиста, пользователя с языками низкого уровня, отличное понимание ЭВМ устройства и микропроцессорной системы, для которой и создается программа. Для создания программы на компьютер нам нужно в первую очередь, знание устройства компьютера или того или иного устройства и особенностей работы процессора. Невозможность перенести результирующей программы на компьютер или иное устройство с другим типом процессора. Время на разработку больших и сложных программ. Использования языка программирования как правило для написания системных программ, драйверов устройств и модулей. Язык высокого уровня – язык программирования, средства которого обеспечивает описание задачи в наглядном, легко воспринимаемом виде, удобном для программиста. Он не зависит от внутренних машинных кодов ЭВМ любого типа, поэтому программы, написанные на языках высокого уровня, требуют перевода в машинные коды программами транслятора либо интерпретатора. К языкам высокого уровня относят Фортран, ПЛ/1, Бейсик, Паскаль, Си, Ада, Питон, Си ++, Си Шарп. Языки высокого уровня имитируют естественные языки, используя некоторые слова разговорного языка и общепринятые математические символы. Эти языки более удобные для человека с помощью них можно написать программы до нескольких тысяч строк длинной. Однако легко понимаем в коротких программах этот язык становится нечитаемым и трудно управляемым, когда дело доходило до больших программ. Но при этом язык программирования высокого уровня значительно сокращает время разработки программ, что крайне необходимо при разработке больших программных обеспечений. В список языков высокого уровня программирования относятся: Python, C++, C#, Objective C, Basic, Java, JavaScript, Delphi и т д. Основным достоинством машинно-независимых языков программирования являются их простота и универсальность. Как следствие, значительно сокращается продолжительность написания кода и отладки. Одна и та же программа может быть выполнена на компьютерах разной архитектуры. Также к преимуществам языков программирования высокого уровня следует отнести такие факты: алфавит существенно шире машинного. Он содержит 256 символов и позволяет описать любые конструкции; для операторов и ключевых слов используются осмысленные слова естественного языка; развитые операторы управления и огромный арсенал средств описания структур данных; существует понятие типа данных и поддерживается их широкий набор. Кратко говоря, языки программирования высокого уровня независим и им необходимы программы-переводчики (трансляторы) для представления программы на языке машины. 1.2 Анализ некоторых языков программирования Python (лучше произносить "питон", хотя некоторые говорят "пайтон") - предмете данного изучения, лучше всего говорит создатель этого языка программирования, голландец Гвидо ван Россум: "Python - интерпретируемый, объектно-ориентированный высокоуровневый язык программирования с динамической семантикой. Встроенные высокоуровневые структуры данных в сочетании с динамическими типизацией и связыванием делают язык привлекательным для быстрой разработки приложений (RAD, Rapid Application Development). Кроме того, его можно использовать в качестве сценарного языка для связи программных компонентов. Синтаксис Python прост в изучении, в нем придается особое значение читаемости кода, а это сокращает затраты на сопровождение программных продуктов. Python поддерживает модули и пакеты, поощряя модульность и повторное использование кода. Интерпретатор Python и большая стандартная библиотека доступны бесплатно в виде исходных и исполняемых кодов для всех основных платформ и могут свободно распространяться." Он имеет свои преимущества и недостатки, а также сферы применения. В поставку Python входит обширная стандартная библиотека для решения широкого круга задач. В Интернете доступны качественные библиотеки для Python по различным предметным областям: средства обработки текстов и технологии Интернет, обработка изображений, инструменты для создания приложений, механизмы доступа к базам данных, пакеты для научных вычислений, библиотеки построения графического интерфейса и т.п. Кроме того, Python имеет достаточно простые средства для интеграции с языками C, C++ (и Java) как путем встраивания (embedding) интерпретатора в программы на этих языках, так и наоборот, посредством использования библиотек, написанных на этих языках, в Python-программах. Язык Python поддерживает несколько парадигм программирования: императивное (процедурный, структурный, модульный подходы), объектно-ориентированное и функциональное программирование. Язык С++ был разработан в 1979 году Бьерном Страуструпом из компании AT&T Bell Laboratories. Язык С++ был задуман как преемник языка С, но в отличии от процедурного C должен быть ориентирован на объекты. Поэтому в нем реализованы такие концепции как наследование, абстракция, полиморфизм и инкапсуляция. Два символа «++» в названии – это игра слов, символами «++» в языке С обозначается операция инкремента (увеличение значения переменной на 1), таким образом, С++ был задуман как язык C с расширенными возможностями. Большая часть языка C вошла в C++ как подмножество, поэтому многие программы на С можно скомпилировать (т.е. превратить в набор низкоуровневых команд, которые компьютер может непосредственно выполнять) с помощью компилятора С++. C++ считается языком программирования промежуточного уровня, поскольку он позволяет создавать как высокоуровневые приложения, так и низкоуровневые библиотеки, работающие с аппаратными средствами. В том числе и это объясняет неуменьшающуюся популярность С++ для разработки различных приложений. Основными этапами создания приложения C++ являются: 1) написание в текстовом редакторе кода С++; 2) компилирование кода посредством компилятора С++, который преобразует код, написанный программистом, в код на машинном языке, который записывается в объектный файл; 3) компоновка результатов работы компилятора с помощью компоновщика, в результате чего получается исполняемый файл (.exeв ОС семейства windows). Код С++ содержится обычно в текстовом файле с расширением .cpp. Для объединения перечисленных выше этапов в пределах единого пользовательского интерфейса большинство программистов предпочитают использовать интегрированную среду разработки (Integrated Development Environment – IDE). Также IDE предоставляют средства отладки, облегчающие обнаружение ошибок и устранение проблем. Модульное программирование При разработке современного программного обеспечения существуют и используются множество различных методов, один из которых нам известен под именем «программирование сверху-вниз» или «пошаговая детализация». Основная идея этого метода проста: первоначальная задача разделяется на достаточно большие и относительно обособленные друг от друга подзадачи. В том случае, когда полученные подзадачи могут быть достаточно легко реализованы, для каждой из них разрабатывается соответствующий алгоритм, иначе следует дальнейшее разбиение на более простые подзадачи и т.д. Далее следует реализация каждой полученной задачи на каком-либо языке программирования, и такая реализация обычно называется (программным) модулем. Получается, что использование модулей и модульного подхода является естественным способом разработки и построения сложных программ. Стоит отметить, что и сам модуль допускает дальнейшую пошаговую детализацию, однако полученные подзадачи реализуются уже в виде процедур и функций [1]. Модульное программирование — разработка и структуризация программы как совокупности небольших независимых блоков, называемых модулями, структура и поведение которых подчиняются определенным правилам. Использование модульного программирования позволяет упростить тестирование программы и обнаружение ошибок. Аппаратно-зависимые подзадачи могут быть отделены от других подзадач, что улучшает мобильность создаваемых программ и дает возможность повторно использования готовых модулей в других проектах [2]. Основная часть При использовании модульного программирования при разработке программы можно выделить плюсы и минусы данного подхода [3]: Плюсы: – возможность разрабатывать модули с использованием различных языков программирования; – модуль является естественной единицей локализации имен; – локализация места ошибки: обычно исправление ошибки внутри одного модуля не влечет за собой исправление в других модулях (естественно, если это свойство будет выполняться только при хорошей разбивке программы на части, с малым числом связей между модулями); – возможность повторного использования разработанных модулей в других программах. Минусы: – модули не являются совсем уж независимыми друг от друга: между ними существуют связи, то есть один модуль иногда может завязываться на переменные, константы и программный код из другого модуля; – перед тем, как будет произведен первый запуск программы, необходимо собрать все нужные модули для программы в особую сборку. Этот процесс достаточно сложен, так как кроме собственно объединения всех модулей в одну программу, необходимо проконтролировать и установить все связи между этими частями; – программа-компилятор, с помощью которой делается сборка программы, не видит сразу всех модулей и не может проконтролировать, установлены ли правильно связи между модулями. Несмотря на выделенные недостатки, преимущества модульного программирования настолько огромны, что сейчас оно является основным способом разработки сложного программного обеспечения. Таким образом, модули содержат определение доступных для обработки данных, операции обработки данных, схемы взаимосвязи с другими модулями. Каждый модуль состоит из спецификации и тела. Спецификации определяют правила использования модуля, а тело - способ реализации процесса обработки. Приступая к разработке каждой программы ПС, следует иметь ввиду, что она, как правило, является большой системой, поэтому мы должны принять меры для ее упрощения. Для этого такую программу разрабатывают по частям, которые называются программными модулями. А сам такой метод разработки программ называют модульным программированием. Программный модуль - это любой фрагмент описания процесса, оформляемый как самостоятельный программный продукт, пригодный для использования в описаниях процесса. Это означает, что каждый программный модуль программируется, компилируется и отлаживается отдельно от других модулей программы, и тем самым, физически разделен с другими модулями программы. Более того, каждый разработанный программный модуль может включаться в состав разных программ, если выполнены условия его использования, декларированные в документации по этому модулю. Таким образом, программный модуль может рассматриваться и как средство борьбы со сложностью программ, и как средство борьбы с дублированием в программировании (т.е. как средство накопления и многократного использования программистских знаний). Модульное программирование является воплощением в процессе разработки программ обоих общих методов борьбы со сложностью и обеспечение независимости компонент системы, и использование иерархических структур. Для воплощения первого метода формулируются определенные требования, которым должен удовлетворять программный модуль, т.е. выявляются основные характеристики "хорошего" программного модуля. Для воплощения второго метода используют древовидные модульные структуры программ (включая деревья со сросшимися ветвями). Основные характеристики программного модуля Не всякий программный модуль способствует упрощению программы [7.2]. Выделить хороший с этой точки зрения модуль является серьезной творческой задачей. Для оценки приемлемости выделенного модуля используются некоторые критерии. Так, Хольт [7.4] предложил следующие два общих таких критерия: хороший модуль снаружи проще, чем внутри; хороший модуль проще использовать, чем построить. Прочность модуля — это мера его внутренних связей. Чем выше прочность модуля, тем больше связей он может спрятать от внешней по отношению к нему части программы и, следовательно, тем больший вклад в упрощение программы он может внести. Для оценки степени прочности модуля Майерс предлагает упорядоченный по степени прочности набор из семи классов модулей. Самой слабой степенью прочности обладает модуль, прочный по совпадению. Это такой модуль, между элементами которого нет осмысленных связей. Такой модуль может быть выделен, например, при обнаружении в разных местах программы повторения одной и той же последовательности операторов, которая и оформляется в отдельный модуль. Необходимость изменения этой последовательности в одном из контекстов может привести к изменению этого модуля, что может сделать его использование в других контекстах ошибочным. Такой класс программных модулей не рекомендуется для использования. Вообще говоря, предложенная Майерсом упорядоченность по степени прочности классов модулей не бесспорна. Однако, это не очень существенно, так как только два высших по прочности класса модулей рекомендуются для использования. Эти классы мы и рассмотрим подробнее. Функционально прочный модуль — это модуль, выполняющий (реализующий) одну какую-либо определенную функцию. При реализации этой функции такой модуль может использовать и другие модули. Такой класс программных модулей рекомендуется для использования. Информационно прочный модуль — это модуль, выполняющий (реализующий) несколько операций (функций) над одной и той же структурой данных (информационным объектом), которая считается неизвестной вне этого модуля. Для каждой из этих операций в таком модуле имеется свой вход со своей формой обращения к нему. Такой класс следует рассматривать как класс программных модулей с высшей степенью прочности. Информационно-прочный модуль может реализовывать, например, абстрактный тип данных. В модульных языках программирования как минимум имеются средства для задания функционально прочных модулей (например, модуль типа FUNCTION в языке ФОРТРАН). Средства же для задания информационно прочных модулей в ранних языках программирования отсутствовали - они появились только в более поздних языках. Так в языке программирования Ада средством задания информационно прочного модуля является пакет. Сцепление модуля — это мера его зависимости по данным от других модулей. Характеризуется способом передачи данных. Чем слабее сцепление модуля с другими модулями, тем сильнее его независимость от других модулей. Для оценки степени сцепления Майерс предлагает упорядоченный набор из шести видов сцепления модулей. Худшим видом сцепления модулей является сцепление по содержимому. Таким является сцепление двух модулей, когда один из них имеет прямые ссылки на содержимое другого модуля (например, на константу, содержащуюся в другом модуле). Такое сцепление модулей недопустимо. Не рекомендуется использовать также сцепление по общей области — это такое сцепление модулей, когда несколько модулей используют одну и ту же область памяти. Такой вид сцепления модулей реализуется, например, при программировании на языке ФОРТРАН с использованием блоков COMMON. Единственным видом сцепления модулей, который рекомендуется для использования современной технологией программирования, является параметрическое сцепление (сцепление по данным по Майерсу) — это случай, когда данные передаются модулю либо при обращении к нему как значения его параметров, либо как результат его обращения к другому модулю для вычисления некоторой функции. Такой вид сцепления модулей реализуется на языках программирования при использовании обращений к процедурам (функциям). Рутинность модуля — это его независимость от предыстории обращений к нему. Модуль будем называть рутинным, если результат (эффект) обращения к нему зависит только от значений его параметров (и не зависит от предыстории обращений к нему). Модуль будем называть зависящим от предыстории, если результат (эффект) обращения к нему зависит от внутреннего состояния этого модуля, хранящего следы предыдущих обращений к нему. Майерс не рекомендует использовать зависящие от предыстории (непредсказуемые) модули, так как они провоцируют появление в программах хитрых (неуловимых) ошибок. Однако такая рекомендация является неконструктивной, так как во многих случаях именно зависящий от предыстории модуль является лучшей реализаций информационно прочного модуля. Поэтому более приемлема следующая (более осторожная) рекомендация: всегда следует использовать рутинный модуль, если это не приводит к плохим (не рекомендуемым) сцеплениям модулей; зависящие от предыстории модули следует использовать только в случае, когда это необходимо для обеспечения параметрического сцепления; в спецификации зависящего от предыстории модуля должна быть четко сформулирована эта зависимость таким образом, чтобы было возможно прогнозировать поведение (эффект выполнения) данного модуля при разных последующих обращениях к нему. В связи с последней рекомендацией может быть полезным определение внешнего представления (ориентированного на информирование человека) состояний зависящего от предыстории модуля. В этом случае эффект выполнения каждой функции (операции), реализуемой этим модулем, следует описывать в терминах этого внешнего представления, что существенно упростит прогнозирование поведения данного модуля. Глава 2. Работа с функциями в Python и C++ 2.1. Использование Функций в Python и C++ Процедуры и функции – это относительно самостоятельные фрагменты программы, оформленные специальным образом и снабженные именем. Упоминание этого имени в тексте программы называется вызовом процедуры (функции). Отличие функции от процедуры в том, что результатом исполнения операторов, образующих тело функции, всегда является некоторое значение, поэтому обращение к функции можно использовать в соответствующих выражениях наряду с переменными и константами. [] Каждая процедура или функция имеет свое уникальное имя. Текст подпрограммы можно поместить в раздел описаний процедур и функций программы или в специальным образом оформленную библиотеку. В подпрограммах могут быть все разделы описаний программы, за исключением оператора подключения используемых модулей. Все параметры, которые использует подпрограмма, можно разбить на две категории: 1. локальные параметры, объявленные внутри подпрограммы, и доступные только ей самой. 2. глобальные – объявленные в основной программе и доступные как программе, так и всем ее подпрограммам. Обмен информацией между основной программой и подпрограммой может осуществляться только с помощью глобальных параметров. Подпрограмма может использовать глобальные параметры двояким образом: непосредственно обращаясь к глобальному параметру по его имени или используя механизм формальных параметров. Подпрограмма может непосредственно использовать любые глобальные параметры за исключением тех, которые имеют те же имена, что и ее локальные параметры. Подпрограмма – средство языка программирования, позволяющее упаковывать и параметризовать функциональность. Как правило, подпрограмма – это именованный фрагмент программного кода, к которому можно обратится из другого места программы, однако она может и не иметь имени (называясь в таком случае Анонимной). Подпрограмма должна быть объявлена и в общем случае содержать: имя; список имен и типов передаваемых параметров (необязательно); тип возвращаемого значения (не обязательно); Если подпрограмма возвращает значение вызывающему коду (одно или несколько), она называется функцией, иначе – процедурой. Большинство современных языков программирования для управления вызовом подпрограмм и используют стек-вызовов. Примерный цикл работы стека вызова, следующий: Вызов подпрограммы создает запись в стеке; каждая запись может содержать информацию о данных вызова (аргументах, результате, а также адресе возврата) Когда подпрограмма завершается, запись удаляется из стека и программа начинает выполняться, начиная с адреса возврата. 2.2. Использование Функций в Python Функция Python min() возвращает наименьший элемент в итерации. Его также можно использовать для поиска наименьшего элемента между двумя или более параметрами. Функция имеет две формы: // to find the smallest item in an iterable min(iterable, *iterables, key, default) // to find the smallest item between two or more objects min(arg1, arg2, *args, key) // to find the smallest item in an iterable min(iterable, *iterables, key, default) // to find the smallest item between two or more objects min(arg1, arg2, *args, key) // to find the smallest item in an iterable min(iterable, *iterables, key, default) // to find the smallest item between two or more objects min(arg1, arg2, *args, key) С повторяемыми аргументами Чтобы найти наименьший элемент в итерации, мы используем следующий синтаксис: min(iterable, *iterables, key, default) min(iterable, *iterables, key, default) min(iterable, *iterables, key, default) Параметры iterable ‒ итерируемый объект, такой как список, кортеж, набор, словарь и т. д.; * iterables (необязательно) ‒ любое количество итераций, может быть более одного; key (необязательно) ‒ ключевая функция, в которую передаются итерации, и выполняется сравнение на основе ее возвращаемого значения; default (необязательно) ‒ значение по умолчанию, если данная итерация пуста. Как получить наименьший элемент в списке? number = [3, 2, 8, 5, 10, 6] smallest_number = min(number); print("The smallest number is:", smallest_number) number = [3, 2, 8, 5, 10, 6] smallest_number = min(number); print("The smallest number is:", smallest_number) number = [3, 2, 8, 5, 10, 6] smallest_number = min(number); print("The smallest number is:", smallest_number) Выход The smallest number is: 2 The smallest number is: 2 The smallest number is: 2 Если элементы в итеративном элементе являются строками, возвращается наименьший элемент (упорядоченный в алфавитном порядке). Пример: Наименьшая строка в списке languages = ["Python", "C Programming", "Java", "JavaScript"] smallest_string = min(languages); print("The smallest string is:", smallest_string) languages = ["Python", "C Programming", "Java", "JavaScript"] smallest_string = min(languages); print("The smallest string is:", smallest_string) languages = ["Python", "C Programming", "Java", "JavaScript"] smallest_string = min(languages); print("The smallest string is:", smallest_string) Выход The smallest string is: C Programming The smallest string is: C Programming The smallest string is: C Programming В случае словарей команда возвращает наименьший ключ. Давайте воспользуемся ключевым параметром, чтобы найти ключ словаря с наименьшим значением. На примере в словарях square = {2: 4, 3: 9, -1: 1, -2: 4} # the smallest key key1 = min(square) print("The smallest key:", key1) # -2 # the key whose value is the smallest key2 = min(square, key = lambda k: square[k]) print("The key with the smallest value:", key2) # -1 # getting the smallest value print("The smallest value:", square[key2]) # 1 square = {2: 4, 3: 9, -1: 1, -2: 4} # the smallest key key1 = min(square) print("The smallest key:", key1) # -2 # the key whose value is the smallest key2 = min(square, key = lambda k: square[k]) print("The key with the smallest value:", key2) # -1 # getting the smallest value print("The smallest value:", square[key2]) # 1 square = {2: 4, 3: 9, -1: 1, -2: 4} # the smallest key key1 = min(square) print("The smallest key:", key1) # -2 # the key whose value is the smallest key2 = min(square, key = lambda k: square[k]) print("The key with the smallest value:", key2) # -1 # getting the smallest value print("The smallest value:", square[key2]) # 1 Выход The smallest key: -2 The key with the smallest value: -1 The smallest value: 1 The smallest key: -2 The key with the smallest value: -1 The smallest value: 1 The smallest key: -2 The key with the smallest value: -1 The smallest value: 1 Во второй функции мы передали лямбда-функцию ключевому параметру. key = lambda k: square[k] key = lambda k: square[k] key = lambda k: square[k] Функция возвращает значения словарей. На основе значений (а не ключей словаря) вычисляется ключ, имеющий минимальное значение. Несколько заметок: Если мы передаем пустой итератор, возникает исключение ValueError. Чтобы этого избежать, мы можем передать параметр по умолчанию. Если мы передаем более одного итератора, возвращается наименьший элемент из данных итераторов. Без итерации Чтобы найти наименьший элемент между двумя или более параметрами, мы можем использовать этот синтаксис: min(arg1, arg2, *args, key) min(arg1, arg2, *args, key) min(arg1, arg2, *args, key) Параметры арг1 ‒ объект, могут быть числами, строками и т. д.; арг2 ‒ объект, могут быть числами, строками и т. д.; * args (необязательно) ‒ любое количество объектов; key (необязательно) ‒ ключевая функция, в которую передается каждый аргумент, и сравнение выполняется на основе его возвращаемого значения. По сути, функция min() может найти наименьший элемент между двумя или более объектами. Как найти минимум среди заданных чисел в Python? result = min(4, -5, 23, 5) print("The minimum number is:", result) result = min(4, -5, 23, 5) print("The minimum number is:", result) result = min(4, -5, 23, 5) print("The minimum number is:", result) Выход The minimum number is -5 The minimum number is -5 The minimum number is -5 Если вам нужно найти самый большой элемент, вы можете использовать функцию max() в Python. Функция Python max() возвращает самый большой элемент в итерируемом объекте. Его также можно использовать для поиска самого большого элемента между двумя или более параметрами. Функция имеет две формы: // to find the largest item in an iterable max(iterable, *iterables, key, default) // to find the largest item between two or more objects max(arg1, arg2, *args, key) // to find the largest item in an iterable max(iterable, *iterables, key, default) // to find the largest item between two or more objects max(arg1, arg2, *args, key) // to find the largest item in an iterable max(iterable, *iterables, key, default) // to find the largest item between two or more objects max(arg1, arg2, *args, key) 1 С повторяемыми аргументами Чтобы найти самый большой элемент в итерации, мы используем следующий синтаксис: max(iterable, *iterables, key, default) max(iterable, *iterables, key, default) max(iterable, *iterables, key, default) Параметры iterable ‒ итерируемый объект, такой как список, кортеж, набор, словарь и т. д.; * iterables (необязательно) ‒ любое количество итераций, может быть более одного; key (необязательно) ‒ ключевая функция, в которую передаются итерации, и выполняется сравнение на основе ее возвращаемого значения; default (необязательно) ‒ значение по умолчанию, если данная итерация пуста. Пример 1: Как получить самый большой элемент в списке в Python? number = [3, 2, 8, 5, 10, 6] largest_number = max(number); print("The largest number is:", largest_number) number = [3, 2, 8, 5, 10, 6] largest_number = max(number); print("The largest number is:", largest_number) number = [3, 2, 8, 5, 10, 6] largest_number = max(number); print("The largest number is:", largest_number) Выход The largest number is: 10 The largest number is: 10 The largest number is: 10 Если элементы в итерируемом элементе являются строками, возвращается самый большой элемент (упорядоченный в алфавитном порядке). Пример 2: Самая большая строка в списке languages = ["Python", "C Programming", "Java", "JavaScript"] largest_string = max(languages); print("The largest string is:", largest_string) languages = ["Python", "C Programming", "Java", "JavaScript"] largest_string = max(languages); print("The largest string is:", largest_string) languages = ["Python", "C Programming", "Java", "JavaScript"] largest_string = max(languages); print("The largest string is:", largest_string) Выход The largest string is: Python The largest string is: Python The largest string is: Python В случае словарей max() возвращает самый большой ключ. Давайте воспользуемся ключевым параметром, чтобы найти ключ словаря, имеющий наибольшее значение. Пример 3: В словарях square = {2: 4, -3: 9, -1: 1, -2: 4} # the largest key key1 = max(square) print("The largest key:", key1) # 2 # the key whose value is the largest key2 = max(square, key = lambda k: square[k]) print("The key with the largest value:", key2) # -3 # getting the largest value print("The largest value:", square[key2]) # 9 square = {2: 4, -3: 9, -1: 1, -2: 4} # the largest key key1 = max(square) print("The largest key:", key1) # 2 # the key whose value is the largest key2 = max(square, key = lambda k: square[k]) print("The key with the largest value:", key2) # -3 # getting the largest value print("The largest value:", square[key2]) # 9 square = {2: 4, -3: 9, -1: 1, -2: 4} # the largest key key1 = max(square) print("The largest key:", key1) # 2 # the key whose value is the largest key2 = max(square, key = lambda k: square[k]) print("The key with the largest value:", key2) # -3 # getting the largest value print("The largest value:", square[key2]) # 9 Выход The largest key: 2 The key with the largest value: -3 The largest value: 9 The largest key: 2 The key with the largest value: -3 The largest value: 9 The largest key: 2 The key with the largest value: -3 The largest value: 9 Во второй функции мы передали лямбда-функцию ключевому параметру. key = lambda k: square[k] key = lambda k: square[k] key = lambda k: square[k] Функция возвращает значения словарей. На основе значений (а не ключей словаря) возвращается ключ, имеющий максимальное значение. Несколько заметок: Если мы передаем пустой итератор, возникает исключение ValueError. Чтобы этого избежать, мы можем передать параметр по умолчанию. Если мы передаем более одного итератора, возвращается самый большой элемент из данных итераторов. Без итерации Чтобы найти самый большой объект между двумя или более параметрами, мы можем использовать этот синтаксис: max(arg1, arg2, *args, key) max(arg1, arg2, *args, key) max(arg1, arg2, *args, key) Параметры арг1 ‒ объект, могут быть числами, строками и т. д.; арг2 ‒ объект, могут быть числами, строками и т. д.; * args (необязательно) ‒ любое количество объектов; key (необязательно) ‒ ключевая функция, в которую передается каждый аргумент, и сравнение выполняется на основе его возвращаемого значения. По сути, функция max() находит самый большой элемент между двумя или более объектами. Пример 4: Найдите максимум среди заданных чисел result = max(4, -5, 23, 5) print("The maximum number is:", result) result = max(4, -5, 23, 5) print("The maximum number is:", result) result = max(4, -5, 23, 5) print("The maximum number is:", result) Выход The maximum number is: 23 The maximum number is: 23 The maximum number is: 23 241-15cookie-checkФункции min() и max() в Python yes 2.3. Использование функций в C++ Рекурсивные функции Под рекурсией в программировании понимают функцию, которая вызывает сама себя. Рекурсивные функции чаще всего используют для компактной реализации рекурсивных алгоритмов. Классическими рекурсивными алгоритмами могут быть возведение числа в целую положительную степень, вычисление факториала. С другой стороны, любой рекурсивный алгоритм можно реализовать без применения рекурсий. Достоинством рекурсии является компактная запись, а недостатком — расход памяти на повторные вызовы функций и передачу параметров, существует опасность переполнения памяти. Рассмотрим применение рекурсии на примерах [7, 8]. Задача 4.8. Вычислить факториал числа n. Вычисление факториала подробно рассмотрено в задаче 3.12 (рис. 3.25). Для решения этой задачи с применением рекурсии создадим функцию factoial, алгоритм которой представлен на рис. 4.10. Рис. 4.10. Рекурсивный алгоритм вычисления факториала Текст программы с применением рекурсии: #include using namespace std; long int factorial ( int n ) { if ( n<=1) return n; else return n*factorial ( n-1); } int main ( ) { int i; long int f; cout<<"i="; cin >>i; f=factorial ( i ); cout< return 0; } Задача 4.9. Вычислить n-ю степень числа a (n — целое число). Результатом возведения числа a в целую степень n является умножение этого числа на себя n раз. Но это утверждение верно только для положительных значений n. Если n принимает отрицательные значения, то a^{-n}=\frac{1}{a^n}.В случае n=0,\ \ a^0=1. Для решения задачи создадим рекурсивную функцию stepen, алгоритм которой представлен на рис. 4.11. Рис. 4.11. Рекурсивный алгоритм вычисления степени числа Текст программы с применением рекурсии: #include using namespace std; float stepen ( float a, int n ) { if ( n==0) return 1; else if ( n<0) return 1/ stepen ( a,-n ); else return a * stepen ( a, n-1); } int main ( ) { int i; float s, b; cout<<"b="; cin >>b; cout<<"i="; cin >>i; s=stepen ( b, i ); cout<<"s="< return 0; } Задача 4.10. Вычислить n-е число Фибоначчи. Если нулевой элемент последовательности равен нулю, первый — единице, а каждый последующий представляет собой сумму двух предыдущих, то это последовательность чисел Фибоначчи (0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ... ). Алгоритм рекурсивной функции fibonachi изображён на рис. 4.12. Рис. 4.12. Рекурсивный алгоритм вычисления числа Фибоначчи Текст программы: #include using namespace std; long int fibonachi ( unsigned int n ) { if ( ( n==0) | | ( n==1)) return n; else return fibonachi ( n -1)+fibonachi ( n-2); } int main ( ) { int i; long int f; cout<<"i="; cin >>i; f=fibonachi ( i ); cout<<"f="< return 0; } ЗАКЛЮЧЕНИЕ Основной неотъемлемой частью программирования ЯВУ является возможность использования подпрограмм – определенным образом оформленных и логически завершенных блоков операторов. Процедуры и функции полезны так как можно создать код 1 раз и использовать его в дальнейшем многократно по необходимости. Преимущества использования подпрограмм крайне очевидны: 1.Отсутствие дублированного кода. Благодаря чему упрощается создание программы, отладки и внесения изменений. 2.Повышенная надежность. Использование подпрограмм не только полезно для упрощения создания программ, но и удобное разделение задач на подзадачи и оформление подзадачи как подпрограммы. При этом мы видим улучшение читаемости кода и как следствие облегчение процесса отладки программ. В 1 главе мы проанализировали языки низкого уровня, познакомились с языками высокого уровня, принципы модульного программирования, где определили понятие, изучили технологию проектирования “Сверху Вниз” имеющая непосредственное отношение к модульному программированию и раскрыты принципы модульного программирования. Во 2 главе мы подробно осмотрели использование функций в языках Python и C++ их использование и особенности. После мы провели практическое задание нахождение минимального и максимального значения массивов, Изучили и провели практику алгоритма определения факториала числа на языке C++; Электронный адрес: В библиографии = постраничная сноска: Бекман Н.И. Компьютерные Науки / Н.И. Бекман // Курс Лекций. URL: http://www.profbeckman.narod.ru/Komp.files/Lec8.pdf. (Дата обращения: 05.05.2022). Сузи Р.А. Язык программирования Python/ Р.А. Сузи //Курс Лекций. URL: http://www.wiki.nntc.nnov.ru/images/7/75/Программирование_на_Python.pdf. (Дата обращения 05.05.2022). Шилд Г. С++ Базовый курс / Г. Шилд // C++ Базовый Курс третье издание. URL: http://www.bsuir.by/m/12_100229_1_98220.pdf. (Дата обращения 05.05.2022) Автор статьи GeekBrains. Высокоуровневый язык программирование: отличительные черты и основные виды / GeekBrains // Высокоуровневый язык программирования URL: http://www.gb.ru/blog/vysokourovnevyj-yazyk-programmirovaniya/. (Дата обращения 05.05.2022) Сикиржицкий А.Ю. Модульное программирование/ А.Ю. Сикиржицкий // Модульное программирование: основные понятия и назначение // URL: http://media.miu.by/files/store/items/rnpsmu-pipsn/iv/mspp_2013_33.pdf. (Дата обращения 05.05.2022) Процедуры и Функции // URL: http://www.pandia.ru/text/78/209/41921.php. (Дата обращения 07.05.2022) Подпрограммы // URL: http://infolymp.ru/russian-team/videosrate/pdf/07.pdf. (Дата обращения 07.05.2022) Функции Min Max в Python // URL: http://www.pythonstart.ru/osnovy/min-max-python. (Дата обращения 07.05.2022) http://www.intuit.ru/studies/courses/3479/721/lecture/25556?page=7. (Дата обращения 07.05.2022) Разработка Структуры программы и модульное программирование // URL: http://www.vit-prog.narod.ru/page/TRPP/section_1/subject_1.3.htm. (Дата обращения 07.05.2022) |