Этапы рещения задач.ppt
- Количество слайдов: 21
Разработка программ на ПЭВМ
9. 1 Процесс разработки новых программ для ЭВМ. Процесс разработки новых программ для эвм включает в себя: 1) постановку задачи - состоит в четком формулировании целей работы. Необходимо четко определить, что является исходными данными, что требуется получить в качестве результата, каким должен быть интерфейс программы 2) создание алгоритма решения - описание последовательности операций, которые нужно выполнить для решения задачи. 3) реализацию алгоритма на эвм в виде программы на языке программирования 4) отладку программы - исправление в ней ошибок и тщательное ее тестирование.
Язык программирования - искусственный язык, являющийся промежуточным при переходе от естественного человеческого языка к машинным двоичным кодам. Языки программирования бывают высокого и низкого уровней. Языки программирования высокого уровня (как видно из схемы) являются более близкими к естественному человеческому языку по сравнению с языками программирования низкого уровня. Программирование на языках высокого уровня, проще, чем на языках низкого уровня, не требует глубоких знаний устройства компьютера. Однако, программы, написанные на языках низкого уровня, как правило, отличаются более высокой скоростью работы, меньшим объемом и более полным использованием ресурсов вычислительной техники. К языкам высокого уровня относятся: фортран, бейсик, паскаль, си, алгол, кобол, алмир, ада, си++, delphi, java и сотни других. Старейшим языком программирования высокого уровня является фортран. Он был создан группой программистов американской фирмы IBM под руководством джона бекуса в 1957 году.
К языкам сверхвысокого уровня можно отнести лишь Алгол-68 и APL. Повышение уровня этих языков произошло за счет введения сверхмощных операций и операторов. Другая классификация делит языки на вычислительные и языки символьной обработки. К первому типу относят Фортран, Паскаль, Алгол, Бейсик, Си, ко второму типу – Лисп, Пролог, Снобол и др. Можно выделить еще один класс языков программирования – объектно-ориентированные языки высокого уровня. На таких языках не описывают подробной последовательности действий для решения задачи, хотя они содержат элементы процедурного программирования. Примером такого языка может служить язык программирования визуального общения Object Pascal. Языки описания сценариев, такие как Perl, Python, Rexx, Tcl и языки оболочек UNIX предназначаются не для написания приложения с нуля, а для комбинирования компонентов, набор которых создается заранее при помощи других языков. Развитие и рост популярности Internet также способствовали распространению языков описания сценариев. Так, для написания сценариев широко употребляется язык Perl, а среди разработчиков Web-страниц популярен Java. Script.
К языкам низкого уровня отноятся ассемблер и автокод. Ассемблер, как язык низкого уровня, фактически состоит из набора команд данной машины, записанных в виде сокращений на английском языке. Автокод- вариант ассемблера на основе русского языка. Создание текста программы на языке программирования выполняется человеком вручную, а перевод текста программы в машинные двоичные коды - трансляция (англ. translation - перевод) выполняется специальными программами- трансляторами. Программы трансляторы бывают двух типов: Интерпретаторы транслируют текст программы и сразу же выполняют предписанные в нем действия, не создавая. ехе-файл. Компиляторы транслируют текст программы и создают готовую к исполнению программу в виде. ехе-файла, который можно будет после запустить на исполнение.
9. 3 Виды алгоритмов и их реализация Виды алгоритмов как логико-математических средств отражают указанные компоненты человеческой деятельности и тенденции, а сами алгоритмы в зависимости от цели, начальных условий задачи, путей ее решения, определения действий исполнителя подразделяются следующим образом: Механические алгоритмы, или иначе детерминированные, жесткие (например алгоритм работы машины, двигателя и т. п. ); Механический алгоритм задает определенные действия, обозначая их в единственной и достоверной последовательности, обеспечивая тем самым однозначный требуемый или искомый результат, если выполняются те условия процесса, задачи, для которых разработан алгоритм. Гибкие алгоритмы, например стохастические, т. е. вероятностные и эвристические. Вероятностный (стохастический) алгоритм дает программу решения задачи несколькими путями или способами, приводящими к вероятному достижению результата.
Эвристический алгоритм (от греческого слова “эврика”) – это такой алгоритм, в котором достижение конечного результата программы действий однозначно не предопределено, так же как не обозначена вся последовательность действий, не выявлены все действия исполнителя. К эвристическим алгоритмам относят, например, инструкции и предписания. В этих алгоритмах используются универсальные логические процедуры и способы принятия решений, основанные на аналогиях, ассоцияциях и прошлом опыте решения схожих задач. Линейный алгоритм – набор команд, выполняемых последовательно во времени друг за другом. Разветвляющийся алгоритм – алгоритм, содержащий хотя бы одно условие, в результате проверки которого ЭВМ обеспечивает переход на один из двух возможных шагов. Циклический алгоритм – алгоритм, предусматривающий многократное повторение одного и того же действия (одних и тех же операций) над новыми исходными данными. К циклическим алгоритмам сводится большинство методов вычислений, перебора вариантов.
Методы изображение алгоритмов. На практике наиболее распространены следующие формы представления алгоритмов: словесная (записи на естественном языке); графическая (изображения из графических символов); псевдокоды (полуформализованные описания алгоритмов на условном алгоритмическом языке, включающие в себя как элементы языка программирования, так и фразы естественного языка, общепринятые математические обозначения и др. ); программная (тексты на языках программирования).
Словесное описание алгоритма. Данный способ получил значительно меньшее распространение из -за его многословности и отсутствия наглядности. Рассмотрим пример на алгоритме нахождение максимального из двух значений: 1. Определим форматы переменных X, Y, M, где X и Y – значения для сравнения, M – переменная для хранения максимального значения; 2. получим два значения чисел X и Y для сравнения; 3. сравним X и Y. 4. если X меньше Y, значит большее число Y. 5. Поместим в переменную M значение Y. 6. Если X не меньше (больше) Y, значит большее число X. 7. Поместим в переменную M значение X. Словесный способ не имеет широкого распространения по следующим причинам: такие описания строго не формализуемы; страдают многословностью записей; допускают неоднозначность толкования отдельных предписаний.
Блок-схема алгоритма. Структурная (блок-, граф-) схема алгоритма – графическое изображение алгоритма в виде схемы связанных между собой с помощью стрелок (линий перехода) блоков – графических символов, каждый из которых соответствует одному шагу алгоритма. Внутри блока дается описание соответствующего действия. Графическое изображение алгоритма широко используется перед программированием задачи вследствие его наглядности, т. к. зрительное восприятие обычно облегчает процесс написания программы, ее корректировки при возможных ошибках, осмысливание процесса обработки информации.
Блок-схема алгоритма. Структурная (блок-, граф-) схема алгоритма – графическое изображение алгоритма в виде схемы связанных между собой с помощью стрелок (линий перехода) блоков – графических символов, каждый из которых соответствует одному шагу алгоритма. Внутри блока дается описание соответствующего действия. Графическое изображение алгоритма широко используется перед программированием задачи вследствие его наглядности, т. к. зрительное восприятие обычно облегчает процесс написания программы, ее корректировки при возможных ошибках, осмысливание процесса обработки информации.
9. 4 Методы программирования Нисходящее и восходящее программирование. При разработке программ применяются два метода проектирования – нисходящее и восходящее. При нисходящем проектировании разработка программного комплекса идет сверху вниз. Метод нисходящего проектирования предполагает последовательное разложение общей функции обработки данных на простые функциональные элементы ("сверху-вниз"). В результате строится иерархическая схема, отражающая состав и взаимоподчиненность отдельных функций, которая носит название функциональная структура алгоритма (ФСА) приложения. На начальном этапе разработки кодируется, тестируется и отлаживается головной модуль, который отвечает за логику работы всего программного комплекса. Остальные модули заменяются заглушками, имитирующими работу этих модулей. Применение заглушек необходимо для того, чтобы на самом раннем этапе проектирования можно было проверить работоспособность головного модуля. На последних этапах проектирования все заглушки постепенно заменяются рабочими модулями.
Функциональная структура приложения: Ц - цель; п. Ц - подцель; П - приложение; Ф - функция
При восходящем проектировании разработка идет снизу вверх. На первом этапе разрабатываются модули самого низкого уровня. На следующем этапе к ним подключаются модули более высокого уровня и проверяется их работоспособность. На завершающем этапе проектирования разрабатывается головной модуль, отвечающий за логику работы всего программного комплекса. Преимущества и недостатки. Необходимость заглушек при нисходящем проектировании До самого последнего этапа нисходящего проектирования неясен размер программного комплекса и его характеристики, за которые, как правило, отвечают модули самого низкого уровня. Преимущество нисходящего проектирования – на самом начальном этапе проектирования отлаживается головной модуль. Преимущество восходящего программирования – не нужно писать заглушки. Недостаток восходящего программирования – головной модуль разрабатывается на завершающем этапе проектирования, что порой приводит к необходимости дорабатывать модули более низких
На практике применяются оба метода. Метод нисходящего проектирования чаще всего применяется при разработке нового программного комплекса, а метод восходящего проектирования – при модификации уже существующего комплекса. Модульное программирование основано на понятии модуля - логически взаимосвязанной совокупности функциональных элементов, оформленных в виде отдельных программных модулей т. е. программа разбивается на относительно независимые составные части - программные модули. При этом каждый модуль может разрабатываться, программироваться, транслироваться и тестироваться независимо от других. Внутреннее строение модуля для функционирования всей программы, как правило, значения не имеет. Цели модульного программирования: 1. Улучшать читабельность программ. 2. Повышать эффективность и надежность программ, легко находить и корректировать ошибки. 3. Уменьшать время и стоимость программной разработки (уменьшается время отладки).
Разбиение программного комплекса на модули выполняется в соответствии со следующими принципами: Модуль характеризуют: один вход и один выход; функциональная завершенность - модуль выполняет перечень регламентированных операций для реализации каждой отдельной функции; логическая независимость - результат работы программного модуля зависит только от исходных данных, но не зависит от работы других модулей; обмен информацией между модулями должен быть по возможности минимизирован; обозримый по размеру и сложности программный элемент. каждый модуль состоит из спецификации и тела. Спецификации определяют правила использования модуля, а тело - способ реализации процесса обработки. не использовать метки и оператор GOTO. использовать только стандартные управляющие конструкции (условие, выбор, цикл, блок).
При определении набора модулей, реализующих функции конкретного алгоритма, необходимо учитывать следующее: каждый модуль вызывается на выполнение вышестоящим модулем и, закончив работу, возвращает управление вызвавшему его модулю; принятие основных решений в алгоритме выносится на максимально "высокий" по иерархии уровень; для использования одной и той же функции в разных местах алгоритма создается один модуль, который вызывается на выполнение по мере необходимости. Модульность ведет к повышению производительности при создании проекта. Прежде всего, маленькие модули могут быть закодированы быстро и легко. Во-вторых, универсальные модули могут многократно использоваться, что приводит к более быстрому построению последующих программ. В-третьих, модули программы могут быть проверены независимо, что помогает уменьшить время, потраченное на отладку.
Функциона льное программи рование – способ программирования, в которой процесс вычисления трактуется как вычисление значений функции в математическом понимании. В функциональном программировании способ решения задачи описывается при помощи зависимости функций друг от друга, но без указания последовательности шагов. Особенности и преимущества функционального программирования: функциональные программы не содержат операторов присваивания, а переменные, получив однажды значение, никогда не изменяются. обращение к функции не вызывает иного эффекта кроме вычисления результата, это устраняет источник ошибок, и делает порядок выполнения функций несущественным. программист освобождается от описания потока управления, это делает функциональные программы более удобными для математической обработки.
Логи ческое программи рование — метод программирования, основанный на выводе новых фактов из данных фактов согласно заданным логическим правилам. Логическое программирование основано на теории математической логики. Самым известным языком логического программирования является Prolog. В логическом программировании, также как и в функциональном программировании, программист остается в неведении о методах, применяемых при вычислении, и последовательности исполнения элементарных действий. Большая часть ответственности за эффективность вычислений в логическом и функциональном программировании перекладывается на транслятор используемого языка программирования. Функциональное и логическое программирование являют собой части т. н. «декларативного программирования» , т. е. такого стиля программирования, при использовании которого в программах описывается способ решения поставленной задачи, а не предписываются шаги для получения результата.
Процеду рное программи рование — это метод программирования, основанная на концепции вызова процедуры. Процедуры просто содержат последовательность шагов для выполнения. В ходе выполнения программы любая процедура может быть вызвана из любой точки, включая саму данную процедуру. Преимущества: Возможность повторного использования одного и того же кода из нескольких мест программы без его копирования. Легче отследить поток выполнения программы, чем в случае использования инструкций GOTO или JUMP, которые могут сделать из большой, сложной программы так называемый «спагетти-код» . Возможность поддержки модульности и структурности.
Структурное программирование основано на модульной структуре программного продукта и типовых управляющих структурах алгоритмов обработки данных различных программных модуле. Наиболее важное различие между структурным и неструктурным подходом в том, что структурные программы, разработаны модульным способом. Логическая структура программы может быть выражена комбинацией трех базовых структур: следование, ветвление и цикл. Эти структуры могут комбинироваться одна с другой, как того требует программа. Используя эти структуры, можно писать программы без операторов GOTO. Объе ктно-ориенти рованное программи рование — метод программирования, в котором предметная область представляется системой структур данных, каждая из которых представляет некий отдельный предмет (объект) с его внутренними свойствами и действиями над ним. Первым объектно-ориентированным языком программирования была Симула.
Этапы рещения задач.ppt