В.3. базовые алгоритмические структуры

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

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

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

В.3. базовые алгоритмические структуры В.3. базовые алгоритмические структуры

Рис. В.3-1. Алгоритмическая Рис.В.3-2. Алоритмическая

структураструктура

– прследовательность– стандартное разветвление

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

В.3. базовые алгоритмические структуры В.3. базовые алгоритмические структуры

Рис. В.3-3. Алгоритмическая Рис.В.3-4. Алгоритмическая

структура – усеченное разветвление структура – усеченное разветвление

В процессе работы алгоритма в первую очередь вычисляются логические выражения. Если логическое выражение принимает значение «Истина», то выполняется часть алгоритма, расположенная по ветви «Да», если принимает значение «Ложь», то – часть алгоритма по ветви «Нет».

Анализ разветвляющихся алгоритмов, применяемых в практических задачах, показывает, что наиболее часто используются три типа разветвлений:

Стандартное разветвлениесодержит функциональные блоки как в ветви «Да», так и в ветви «Нет» (рис.В.3-2).

Усеченное разветвление содержит функциональные блоки только в ветви «Да» или только в ветви «Нет» (рис.В.3-3, В.3-4).

Вложенное разветвлениесодержит одно или несколько дополнительных разветвлений (рис.В.3-5).

В.3. базовые алгоритмические структуры В.3. базовые алгоритмические структуры

Рис. В.3-5. Алгоритмическая Рис.В.3-6. Алгоритмическая

структура – вложенное разветвление структура – регулярный цикл

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

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

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

В блоке организации цикла используется специальная переменная, которая предназначена для определения условия останова цикла (i). Эта переменная называется параметром цикла. Блоки, следующие за заголовком цикла, составляют тело цикла. Тело цикла выполняется для всех значений параметра цикла i, начинающегося со значения m1 и изменяющегося с шагом m3 до значения m2.

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

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

В зависимости от места расположения условия продолжения цикла (или выхода из цикла) итеративные циклические структуры подразделяются на два вида: с предусловием и с постусловием.

В.3. базовые алгоритмические структуры

Рис. В.3-7. Алгоритмическая Рис.В.3-8. Алгоритмическая

структура – итеративный цикл структура – итеративный цикл

При организации цикла с предусловием (рис.В.3-7) блоки тела цикла, следующие за блоком, в котором проверяется условие выхода из цикла, выполняются всякий раз, когда условие L принимает значение «Истина». При первом невыполнении этого условия происходит выход из цикла. Таким образом, возможен случай, когда тело цикла не будет выполнено ни разу. Поэтому циклические структуры с известным числом повторений (регулярные циклы) относятся к числу циклических алгоритмов с предусловием.

При организации циклов с постусловием, для которых условие выхода из цикла (или повторения тела цикла) проверяется после выполнения цикла
(рис.В.3-8), цикл всегда выполняется хотя бы один раз, независимо от значения L, и только после его выполнения принимается решение – продолжать выполнение цикла или выйти из него.

В.4. Основные средства разработки программ,
и платформа Framework

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

Отрасль, связанная с разработкой программного обеспечения, очень молода. Действительно, ей всего лишь около 50 лет, но накопленный в ней объем знаний, технологических решений, методик и просто практических рекомендаций к действию огромен.

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

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

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

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

Прежде всего, это система программирования.

Система программирования– это программная система для разработки ПО средствами конкретного языка программирования. Современные системы программирования обычно предоставляют пользователям мощные и удобные средства разработки программ. В них входят: средства создания («написания») и редактирования текстов программ (программного кода); трансляторы; библиотеки стандартных процедур; отладочные средства, помогающие находить и устранять ошибки в программе.

«Написать» программу – это означает реализовать алгоритм, или иначе, представить его в виде понятных компьютеру указаний того, что необходимо делать. К сожалению, компьютеры не умеют понимать словесное описание алгоритма, поэтому необходимо превратить его в абсолютно точный набор инструкций, которые однозначно будут интерпретировать ПК. Для этого были созданы языки программирования. Причем процесс «написания» программ за последние 50 лет прошел путь от программирования в инструкциях процессора (машинных командах), через программирование на низкоуровневых языках (языках ассемблера) до программирования на языках высокого уровня.

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

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

С языками программирования связанны следующие понятия:

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

Действительно, язык программирования – это искусственный (формальный) язык, предназначенный для записи алгоритмов. Язык программирования задается своим описанием и реализуется в виде специальных программ: компилятора или интерпретатора.

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

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

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

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

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

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

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

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

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

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

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

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

В настоящее время при разработке программ существует возможность частично избавить себя от «рутины»с помощью, так называемых средств автоматизированной генерации кода, в некоторых случаях эти средства умеют самостоятельно создавать программный код, выполняющий определенные стандартные действия. Примером таких средств может служить MS Visual Studio .NET, которая автоматически создает и заполняет полями класс «Форма» при создании новой формы и наполнении его различными компонентами. Необходимость в создании документации неизбежно возникает в любом технологическом процессе. Процесс разработки программного обеспечения не является исключением. На всех этапах этого процесса создается масса документов различной направленности. Таким образом, создание документации – задача не менее важная, чем создание программного кода, и в ее решении нам помогают различные программные средства.

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

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

Интегрированная среда разработки (IDE – Integrated Development Environment) – это специальная программная система, предоставляющая возможность удобной совместной работы с различными компонентами системы программирования.

Кроме того, интегрированные среды разработки ПО позволяют выполнять и другие операции: визуально (в диалоге) производить быструю настройку параметров каждого из компонентов системы программирования; сохранять разные системы настроек и загружать их по мере необходимости; осуществлять запуск одного или сразу нескольких компонентов системы программирования нажатием нескольких клавиш или выбором соответствующих пунктов меню и многое другое.

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

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

В состав платформы входят следующие программные средства. В первую очередь это средства разработки приложений – Visual Studio .NET. Созданные приложения выполняются при помощи надстройкой над операционной средой .NET Framework – и это второй элемент платформы. Специально для нужд .NET разработано семейство серверных операционных систем Windows. И наконец, расширяемый набор служб .NET объединяет службы со стандартными функциями, используемыми приложениями.

Архитектура .NET – это устройство платформы .NET со всеми ее составными частями и схемами взаимодействия между ними. Говоря об архитектуре, имеют в виду общие принципы и правила создания и использования приложений .NET, представленные в виде описаний, спецификаций и стандартов.

Операционная среда .NET Framework– это важнейшая составная часть платформы .NET, обеспечивающая разработку, распространение и выполнение приложений .NET. Ее роль настолько велика, что довольно часто происходит подмена понятий и под заголовком «Архитектура .NET» находишь хорошее, подробное описание .NET Framework. Поэтому всегда нужно помнить, что .NET Framework – это составная часть платформы .NET. Именно она представляет наибольший интерес для разработчиков. Хочешь писать приложения для .NET, – знай устройство .NET Framework.

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

Службы.NET– Web-службы, разработанные и функционирующие под управлением операционной среды .NET Framework. Хотя некоторые источники определяют .NET как архитектуру и платформу для создания нового поколения именно Web-служб, это только часть (безусловно, важная и перспективная) ее предназначения.

Visual Studio .NET– это высокопроизводительный, интегрированный, расширяемый набор средств поддержки полного жизненного цикла, в том числе для командной разработки, приложений. Во все последние версии в состав VS входят компиляторы трех языков – VB, VC#, VC++, F# и Java. И все же именно первые два фактически олицетворяют собой эту системы. Ведь VC++, несмотря на появление в нем расширений для создания управляемого кода, все же ориентирован на разработку программ в классической архитектуре Win API, и его роль в создании прикладных решений заметно снижается.

Платформа.NET Framework является надстройкой над операционной системой, в качестве которой может быть Windows. Платформа .NET Framework включает в себя:

  • четыре официальных языка: VB, VC#,VC++ и F#;
  • объектно-ориентированную среду CLR (CommonLanguageRuntime), совместно используемую этими языками для создания различных приложений;
  • ряд связанных между собой библиотек классов под общим именем FCL (Framework Class Library).

Библиотека классов FCL – статический компонент каркаса. Понятие каркаса приложений – Framework Applications появилось достаточно давно, оно широко использовалось еще в четвертой версии VS.

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

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

Встроенные примитивные типы. Важной частью библиотеки FCL стали классы, задающие примитивные типы, те типы, которые считаются встроенными в язык программирования. Типы каркаса покрывают основное множество встроенных типов, встречающихся в языках программирования. Типы языка программирования проецируются на соответствующие типы каркаса. Тип, называемый в языке VB– Integer, а в языках С++ и C# — int, проецируется на один и тот же тип каркаса System.Int32. В языке программирования, наряду с «родными» для языка названиями типов, разрешается пользоваться именами типов, принятыми в каркасе. Поэтому, по сути, все языки среды разработки могут пользоваться единой системой встроенных типов, что, конечно, способствует облегчению взаимодействия компонентов, написанных на разных языках.

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

Архитектура приложений. Существенно расширился набор возможных архитектурных типов построения приложений. Помимо традиционных Windows- и консольных приложений, появилась возможность построения Web-приложений. Большое внимание уделяется возможности создания повторно используемых компонентов – разрешается строить библиотеки классов, библиотеки элементов управления и библиотеки Web-элементов управления.

Общеязыковая исполнительная среда CLR – динамический компонент каркаса. Важным шагом в развитии каркаса Framework .Net стало введение динамического компонента каркаса – исполнительной среды CLR. С появлением CLR процесс выполнения приложений стал другим.

Двухэтапная компиляция. Управляемый модуль и управляемый код. Компиляторы языков программирования, включенные в VS, создают код на промежуточном языке IL (IntermediateLanguage) – ассемблерном языке. В результате компиляции проекта, содержащего несколько файлов, создается так называемый управляемый модуль – переносимый исполняемый файл (PortableExecutable или PE-файл). Этот файл содержит код на IL и метаданные – всю информацию, необходимую для CLR, чтобы под ее управлением PE-файл мог быть исполнен. Метаданные доступны и конечным пользователям. В зависимости от выбранного типа проекта, PE-файл может иметь разные уточнения — exe, dll, mod или mdl.

Исполнительную среду следует рассматривать как виртуальную IL-машину. Эта машина транслирует «на лету» требуемые для исполнения участки кода в команды реального процессора, который в и выполняет код.

Виртуальная машина. Отделение каркаса от студии явилось естественным шагом. Каркас Framework .Netперестал быть частью студии, а стал надстройкой над операционной системой. Теперь компиляция и создание PE модулей на IL отделено от выполнения, и эти процессы могут быть реализованы на разных платформах.

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

Компилятор JIT, входящий в состав CLR, компилирует IL код с учетом особенностей текущей платформы. Благодаря этому создаются высокопроизводительные приложения.

Исключительные ситуации. Что происходит, когда при вызове некоторой функции (процедуры) обнаруживается, что она не может нормальным образом выполнить свою работу? Возможны разные варианты обработки такой ситуации. Функция может возвращать код ошибки или специальное значение, может выбрасывать исключение, тип которого характеризует возникшую ошибку. В CLR принято во всех таких ситуациях выбрасывать исключение. Косвенно это влияет и на язык программирования. Выбрасывание исключений наилучшим образом согласуется с исполнительной средой. В языках VB и C# выбрасывание исключений, их дальнейший перехват и обработка – основной рекомендуемый способ обработки исключительных ситуаций.

События. У CLR есть свое видение того, что представляет собой тип. Есть формальное описание общей системы типов CTS. В соответствии с этим описанием, каждый тип, помимо полей, методов и свойств, может содержать и события. При возникновении событий в процессе работы с тем или иным объектом данного типа посылаются сообщения, которые могут получать другие объекты. Механизм обмена сообщениями основан на делегатах – функциональном типе. Надо ли говорить, что в язык VB встроен механизм событий, полностью согласованный с возможностями CLR.

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

В настоящее время компания Microsoft выпустила версию Visual Studio 2013, которая покрывают потребности всех категорий разработчиков – от начинающих программистов до профессионалов высшего класса.

На сайте компании Microsoft(http://www.visualstudio.com) можно получить любую информацию по интегрированной среде VisualStudio.

Мы рекомендуем остановить свой выбор на версии VisualStudioProfessional 2013. Для того, чтобы установить на свой компьютер VS, необходимо, прежде всего, провести инсталляцию этой системы.

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

Для получения бесплатных версий VS, можно воспользоваться акцией Microsoft – DreamSpark (https://www.dreamspark.com/Default.aspx), которая создана для поддержки технического образования путем предоставления доступа к программному обеспечению компании учебных, преподавательских и исследовательских целей.

Algorithmic Trading with Python and Quantopian p. 1


Похожие статьи.

Понравилась статья? Поделиться с друзьями: