scilab учебник. Учебник Scilab. Учебник Для студентов по дисциплин Базовые средства математических пакетов
Скачать 5.73 Mb.
|
реализовать алгоритм решения поставленной задачи, или иначе, представить алгоритм в виде понятных компьютеру ука- заний того, что и в какой последовательности необходимо делать. К сожале- нию, компьютеры не умеют понимать словесное описание алгоритма, поэтому необходимо превратить его в абсолютно точный набор инструкций (команд), которые однозначно будут интерпретироваться компьютером. Для этого и были созданы языки программирования. Причем процесс создания ПП прошел путь от программирования в инструкциях процессора (машинных командах), через программирование на низкоуровневых языках (языках ассемблера) до программирования на языках высокого уровня и специализированных про- граммных систем. Уровень в данном случае – это уровень машинного восприятия. Так, языки низкого уровня (ассемблер) по возможности приближены к компью- теру, что делает соответствующие программы особенно эффективными с точки зрения их быстродействия. Однако существенная проблема использова- ния таких языков заключается в том, что разработчик ПП – прежде всего че- ловек, и его способы восприятия информации весьма далеки от машинных, что 151 чрезвычайно затрудняет написание элементов ПП на ассемблере. Подавляю- щее большинство ПП реализованы на языке программирования высокого уровня. С языками программирования тесно связаны понятия синтаксиса и се- мантики: синтаксис – это набор правил построения фраз (конструкций) алго- ритмического языка, позволяющий создавать осмысленные предло- жения на этом языке; семантика – это система правил истолкования отдельных языковых конструкций, которая и определяет смысловое значение предложе- ний алгоритмического языка. Язык программирования – это искусственный (формальный) язык, пред- назначенный для записи алгоритмов. Язык программирования задается своим описанием и реализуется в виде специальных программ: трансляторов (компиляторов или интерпретаторов). Под транслятором обычно понимают специальную систему программ, которая переводит исходный программный код, написанный на языке про- граммирования, в последовательность машинных команд – команд процес- сора. Трансляторы универсальных языков программирования высокого уровня, таких как C++, C#, VB и другие, обычно являются компиляторами. Этим подчёркивается общепринятый для подобных языков режим трансля- ции, при котором вначале осуществляется перевод программного кода в дво- ичное представление, в так называемый хранимый в памяти компьютера объ- ектный модуль, а лишь затем этот модуль передаётся на исполнение. Другой способ трансляции, называемый интерпретацией, который со- стоит в совмещении перевода и исполнения программного кода (в этом случае объектный модуль не хранится в памяти компьютера и его, соответственно, нельзя повторно использовать). Другими словами , интерпретация означает, что каждая инструкция программы распознается (транслируется в машинные команды) и тут же исполняется, а программные модули существуют лишь в виде исходных текстовых файлов. В этом случае для выполнения программ- ного кода необходима среда системы программирования. Уже в самом начале развития методов и средств разработки ПП стал при- меняться простой и эффективный приём выделения часто используемых алго- ритмов в самостоятельные программные элементы – модули и процедуры, ко- торые в свою очередь стали объединять в так называемые библиотеки проце- дур. Примером могут служить процедуры вычисления элементарных функций (синус, косинус и др.), а также процедуры обмена с внешними устройствами компьютера. Однажды созданные и откомпилированные, они в дальнейшем могут применяться разработчиками ПП в своих задачах путём подсоединения 152 их к разработанному программному коду основного алгоритма. В более широ- ком плане эта идея нашла своё выражение в технологии модульного и проце- дурного программирования, которая заложена во всех современных системах программирования. Важно, что для создания загрузочного модуля, состоящего из множества оттранслированных программ, в том числе из библиотек, требу- ются специальные средства. Для этого в состав системы программирования входит программный модуль, называемый редактором связей, обеспечиваю- щий поиск необходимых процедур в библиотеках и присоединяющий их к ос- новному программному коду пользователя. Поскольку в основе любой среды системы программирования лежат различные технологии, в том числе технологии структурного, процедурного, визуального и объектно-ориентированного программирования, то в первую очередь необходимо следовать правилам этих технологий. Эти технологии – всего лишь инструменты, которыми можно пользоваться при разработке ПП [ 18 ]. Совокупность идей и понятий, определяющих стиль написания про- грамм – это парадигма программирования. Парадигма, в первую очередь, определяется базовой программной единицей и самим принципом достиже- ния модульности программы. Она определяет и то, в каких терминах описывается логика программы. Так, в традиционном императивном программировании программа описыва- ется как последовательность действий, а в объектно-ориентированном про- граммировании (ООП) программу принято рассматривать как набор взаимо- действующих объектов. ООП есть, по сути, императивное программирование, дополненное принципом модульности (инкапсуляции данных и методов в объ- екте) и наследованием (принципом повторного использования разработанного функционала) [ 18 ]. Сами же методы (процедуры) разрабатываются на принци- пах императивного программирования. Процедурное программирование – это парадигма программирования, основанная на концепции описания и вызова процедур. Процедуры также из- вестны как подпрограммы, методы или функции. Процедурное программиро- вание заключается, прежде всего, в выделении из общего программного кода его некоторых функциональных фрагментов в отдельные блоки (называемые процедурами), которое не только упрощает понимание алгоритма программы в целом, но и, как правило, сокращает код программы за счет удаления из нее многократно повторяющихся фрагментов. В результате разделения программ- ного кода на понятные специализированные функциональные блоки код про- граммы становится значительно проще в понимании, отладке и обслуживании. В ходе выполнения такой программы любая процедура может быть вызвана произвольное число раз. Структурное программирование – это методология разработки ПП, в основе которой лежит представление программного кода в виде базовых про- граммных конструкций. В соответствии с этой методологией [ 19 ]: 153 1) Программный код представляет собой структуру, построенную из трёх типов базовых конструкций: последовательность – однократное выпол- нение операций в том порядке, в котором они записаны в тексте программы; разветвление – однократное выполнение одной из двух или более операций, в зависимости от выполнения некоторого заданного условия; цикл – многократ- ное исполнение одной и той же операции до тех пор, пока выполняется неко- торое заданное условие. В программе базовые конструкции могут быть вло- жены друг в друга произвольным образом, но никаких других средств управ- ления последовательностью выполнения операций не предусматривается. 2) Повторяющиеся фрагменты программы (либо не повторяющиеся, но представляющие собой логически целостные функциональные блоки) могут оформляться в виде процедур (подпрограмм или функций). В этом случае в тексте основной программы, вместо помещённого в подпрограмму фрагмента, вставляется инструкция вызова процедуры. При выполнении такой инструк- ции выполняется вызванная процедура, после чего исполнение программы продолжается с инструкции, следующей за командой вызова процедуры. 3) Разработка ПП ведётся пошагово, методом «сверху вниз». Технология нисходящего проектирования с пошаговой детализацией является неотъемлемой частью создания хорошо структурированных про- грамм. При написании программы с использованием этой технологии вся за- дача рассматривается как единственное предложение (вершина), выражающее общее назначение программы. Вершина разделяется на ряд более мелких за- дач (функций) в том порядке, в котором эти задачи должны выполнятся. В ре- зультате получим первую детализацию. Далее каждая из подзадач разбивается на подзадачи, принадлежащие второму уровню детализации. Этот процесс называется – функциональной декомпозиций. Программист завершает про- цесс нисходящей разработки с пошаговой детализацией, когда алгоритм настолько детализирован, что его можно преобразовать в программу. При декомпозиции используются только три указанные выше базовые управляющих конструкции (последовательность, разветвление, цикл), что позволяет говорить о структурной декомпозиции или структурном проек- тировании программ. Таким образом, пошаговая реализация программы – это тактика её раз- работки, а нисходящее проектирование – это стратегия программирования. Для изучения базовых средств программирования будем использовать простейшие алгоритмы, реализованные в Scilab, как функции пользователя ( sce -функции). Подход к решению задач с ориентацией на разработку функций включает в себя следующие основные этапы, часть из которых осуществля- ются до использования компьютера: 154 1) Постановка задачи. Этап включает в себя: сбор информации о задаче; определение конечных целей решения задачи; определение формы выдачи результатов; описание данных. 2) Анализ и исследование задачи. На этом этапе анализируются существующие аналогичные задачи; разрабатывается математическая модель задачи; осуществляется формализация; определяются структуры данных. 3) Разработка алгоритма. Этап заключается в выборе формы записи алгоритма и в последующем процессе разработки алгоритма и его описания. 4) Программирование (Разработка программного кода). На этом этапе вначале осуществляется выбор и уточнение способов организации данных, а затем разрабатывается программный код, описывающий разработанный алгоритм. 5) Отладка и тестирование. При тестировании и отладке выявляют синтаксические, семантические (смысловые) и логические ошибки, допущенные при разработке алгоритма и программировании. Анализ результатов тестирования позволяет устранить все выявленные семантические и логические ошибки. 6) Анализ результатов решения задачи. На этом этапе осуществляется выполнение прикладной программы при реальных исходных данных. В результате анализа результатов возможно уточнение математической модели и повторение этапов 2-5. Процесс алгоритмизации заключается в описании необходимой после- довательности действий, с помощью которой можно однозначно реализовать выбранный метод решения задачи. На практике только очень простые задачи представляются в виде известной последовательности арифметических или логических действий. Для большинства задач перед написанием программы требуется разработать соответствующую последовательность действий, при- водящую к решению задачи, то есть алгоритм ее решения. Причем, при разра- ботке алгоритма сложной задачи целесообразно провести декомпозицию вы- числительного процесса, составить укрупненную схему алгоритма с целью вы- явления типовых участков алгоритма и использования для их реализации стан- дартных или ранее разработанных алгоритмов (процедурное программирова- ние). Заметим, что время, потраченное на разработку вначале укрупненного, а затем детального алгоритма, полностью окупается при программировании и отладке программы. Алгоритм формально можно определить, как точное предписание (дей- ствие, группу действий), определяющее процесс преобразования исходных данных в результат. Из определения алгоритма вытекают и его основные свойства: 155 детерминированность – однозначность получения результата при одних и тех же исходных данных; результативность – обязательность получения искомого резуль- тата за конечное число шагов; массовость – возможность получения результата при различных исходных данных рассматриваемого класса задач; дискретность – возможность разбиения алгоритма на отдельные элементарные действия, позволяющие рассматривать алгоритм с различным уровнем детализации. Уже упоминалось, алгоритмы реализуются при разработке программ- ного кода на основе базовых алгоритмических структур, которые подробно бу- дут рассмотрены в п. 1.5.4. В п. 1.2-1.4 был рассмотрен интерактивный режим работы системы Scilab в Командном окне и средства (объекты) Scilabэтого режима – команды, операторы и функции, которые являются объектами входного языка общения с системой Scilabв командном режиме Большинство объектов входного языка общения с системой Scilabв командном режиме одновременно являются и объектами языка программирования системы Scilab. Различие между командами, выполняемыми при вводе с клавиатуры в Командном окне, и программными операторами, выполняемыми при вызове процедур, является условным. Эта условность связана с выбором между про- цедурной и функциональной технологиями программирования. Предполага- ется, что модули, процедуры и функции во всех языках программирования вы- сокого уровня имеют возможность храниться в библиотечных файлах. Кроме того, важно, что в современных системах программирования программный код может менять структуру заданного алгоритма вычислений в зависимости от входных данных и данных, полученных в ходе вычислений. С позиций разработчика ПП язык программирования системы Scilab яв- ляется типичным проблемно-ориентированным языком программирования высокого уровня интерпретирующего типа. Точнее говоря, он является язы- ком сверхвысокого уровня, содержащим сложные операторы и функции, реа- лизация которых на обычных универсальных языках программирования (например, Visual Basic, С# или Си++) потребовала бы дополнительных уси- лий и времени. Такой высокий уровень языка программирования Scilab опре- деляется и тем, что базовыми структурами данных являются матрицы, а базовыми программными единицами – функции. Причем над матрицами ре- ализованы как алгебраические, так и поэлементные операции. Практически все программные структуры Scilab, операторы и функции являются средствами языка программирования. По числу математических и графических средств Scilab значительно превосходят VB, C++, JAVA и многие 156 другие, а кроме того система содержит и все необходимые типовые средства программирования, такие как условные выражения, циклы, операторы ввода/вывода и др. В п.п.1.5.2, 1.5.3 будут рассмотрены базовые программные единицы си- стемы программирования Scilab, правила их описания и вызова, а в п.1.5.4 – алгоритмические операторы Scilab и базовые программные струк- туры. 1.5.2. Функциональные структуры – сценарий, функция и средства их создания Уровни функциональных программных структур Использование системы Scilab только в режиме непосредственного рас- чета в Командном окне явно недостаточно для решения сложных задач. По- скольку программы, реализующие сложные алгоритмы, создаются, как пра- вило, в соответствии с принципом процедурного программирования, то оче- видно необходимо иметь системные и программные средства, позволяющие создать функциональные программные структуры, и средства, обеспечиваю- щие их хранение в текстовых и откомпилированных библиотечных файлах, их загрузку в оперативную память и выполнения. В соответствии с концепцией разработчиков в системе Scilab имеется три уровня функциональных структур, из которых можно построить различ- ные приложения. Это – Сценарий, Макрос и Примитив [ 13 ]. Сценарий – это фрагмент программного кода, который можно сохранить в текстовом sce -файле, а затем загрузить с помощью функции exec и выпол- нить сразу после загрузки. Сценарии в Scilab предназначены для выполнения различного рода за- дач . Они могут осуществлять подготовку данных для предстоящих вычисле- ний (инициализировать переменные и осуществлять их логическую проверку); выполнять вспомогательные действия (подгружать различные библиотеки и т.п.); проводить технические расчеты, а также осуществлять ввод и вывод дан- ных расчетов в виде таблиц, инструкций и графиков. Сценарий – это заранее определенная последовательность инструкций Scilab, практически он является подобием сессии Командного окна, и поэтому все инструкции, загруженные из файла, могут быть выполнены точно так же, как если бы вы их вводили с клавиатуры в Командном окне. В начало текста сценария рекомендуется вставлять комментарий о его функциональном назначении и комментировать все его ключевые шаги. Также рекомендуется команду clear , предназначенную для очистки содержимого окна Обозреватель данных от данных, используемых в предыдущей сессии. 157 Особенности сценария состоят в том, что он: хранится в sce -файлах с уникальным именем; не имеет входных и выходных параметров; работает с переменными из Рабочей области (за исключением пере- менных, описанных во внутренних функциях этого сценария); содержимое в процессе выполнения не компилируется; может содержать внутренние встроенные в сценарий функции поль- зователя; строки нумеруются автоматически. |