Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
154.docx
Скачиваний:
11
Добавлен:
01.07.2025
Размер:
1.11 Mб
Скачать

24. Понятие системы программирования

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

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

Таблица 4. Классы систем программирования (СП)

Признак классификации

Типы

Набор исходных языков

Одноязыковые

Многоязыковые

Возможности расширения

Замкнутые

Открытые

Трансляция

Компиляция

Интерпретация

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

    - отличительной особенностью многоязыковых систем является то, что отдельные части (секции, модули или сегменты) программы могут быть подготовлены на различных языках и объединены во время или перед выполнением в единый модуль;

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

Рисунок 4 Схема обработки прикладных программ в среде системы программирования

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

    Препроцессинг - необязательная фаза, состоящая в анализе исходного текста, извлечения из него директив препроцессора и их выполнения.

    Директивы препроцессора представляют собой помеченные спецсимволами (обычно %, #, &) строки, содержащие аббревиатуры или другие символические обозначения конструкций, включаемых в состав исходной программы перед ее обработкой компилятором.

    Данные для расширения исходного текста могут быть стандартными, определяться пользователем либо содержаться в системных библиотеках ОС.

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

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

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

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

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

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

    Загрузка программы. Загрузочный модуль после сборки либо помещается в качестве раздела в пользовательскую библиотеку программ, либо в качестве последовательного файла на накопителе на магнитном диске (НМД). Выполнение модуля состоит в загрузке его в оперативную память, настройке по месту в памяти и передаче ему управления. Образ загрузочного модуля в памяти называется абсолютным модулем, поскольку все команды ЭВМ здесь приобретают окончательную форму и получают абсолютные адреса в памяти. Формирование абсолютного модуля может осуществляться как программно, путем обработки командных кодов модуля программой-загрузчиком, так и аппаратно, путем применения индексирования и базирования команд загрузочного модуля и приведения указанных в них относительных адресов к абсолютной форме.

    Современные системы программирования позволяют удобно переходить от одного этапа к другому. Это осуществляется в рамках так называемой интегрированной среды программирования, которая содержит в себе текстовый редактор, компилятор, компоновщик, встроенный отладчик и, в зависимости от системы или ее версии, предоставляет программисту дополнительные удобства для написания и отладки программ.     Библиотеки подпрограмм. В предыдущем разделе определено понятие подпрограммы как средства многократного использования одного и того же фрагмента алгоритма в разных местах основной программы (например, вычисление одной и той же арифметической функции при разных значениях аргумента).     Однако довольно распространенной является и такая ситуация, когда один и тот же алгоритм - вычисление значений элементарных функций, перевод чисел из одной системы в другую, преобразование символьной информации к строчному или заглавному представлению и т.д. - используется при решении самых разных задач. Если один из подобных алгоритмов уже был один раз разработан и реализован при решении некоторой задачи, то возникает естественное желание использовать уже готовую подпрограмму как часть любой другой программы. Таким образом, организовав сбор, хранение и удобное использование готовых подпрограмм, можно существенно упростить и ускорить разработку программ различного назначения, записывая лишь обращения к готовым подпрограммам и заново проектируя уже гораздо меньшую часть кода.     В процессе использования готовых подпрограмм возникает ряд проблем, связанных, с одной стороны, с хранением имеющихся подпрограмм и размещением используемых подпрограмм в памяти ЭВМ, и с другой стороны - с организацией их взаимодействия с основной программой. В связи с этим для обеспечения удобства практической работы выбирается определенная система использования подпрограмм, в которой тем или иным образом эти проблемы решены. Такая система всегда предъявляет определенные требования к подпрограммам с точки зрения их организации и оформления. Подпрограммы, которые удовлетворяют всем требованиям выбранной системы, называются стандартными, а организованный соответствующим образом набор таких подпрограмм называется библиотекой подпрограмм.

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

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

    Схема вызова подпрограмм статической и динамической библиотек изображена на рис. 5.

Рисунок 5 Компиляция статической и динамической библиотек

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

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

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

    - если необходимо постоянно вносить изменения в программу большого объема: разделение программы на исполняемую часть и динамическую библиотеку позволит модифицировать и затем распространять только измененную часть программы.

25. Решение задач на ЭВМ. Этапы разработки программ.

26. Алгоритм решения задач на ЭВМ.

На ЭВМ могут решаться задачи различного характера, например: научно-инженерные; разработки системного программного обеспечения; обучения; управления производственными процессами и т. д. В процессе подготовки и решения на ЭВМ научно-инженерных задач можно выделить следующие этапы:

постановка задачи;

математическое описание задачи;

выбор и обоснование метода решения;

алгоритмизация вычислительного процесса;

составление программы;

отладка программы;

решение задачи на ЭВМ и анализ результатов.

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

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

Постановка задачи

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

Математическое описание задачи

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

Математическая модель должна удовлетворять по крайней мере двум требованиям: реалистичности и реализуемости.

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

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

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

Выбор и обоснование метода

Модель решения задачи с учетом ее особенностей должна быть доведена до решения при помощи конкретных методов решения. Само по себе математическое описание задачи в большинстве случаев трудно перевести на язык машины. Выбор и использование метода решения задачи позволяет привести решение задачи к конкретным машинным операциям. При обосновании выбора метода необходимо учитывать различные факторы и условия, в том числе точность вычислений, время решения задачи на ЭВМ, требуемый объем памяти и другие.

Одну и ту же задачу можно решить различными методами, при этом в рамках каждого метода можно составить различные алгоритмы.

Алгоритмизация вычислительного процесса

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

Составление программы

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

Отладка программы

Отладка заключается в поиске и устранении синтаксических и логических ошибок в программе.

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

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

Решение задачи на ЭВМ и анализ результатов

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

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

Этапы разработки программ

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

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

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

Разработка или выбор алгоритма решения задачи — выполняется на осно­ве ее математического описания. Многие задачи можно решить различными способами. Программист должен выбрать оптимальное решение. Неточности в постановке, анализе задачи или разработке алгоритма могут привести к скрытой ошибке — программист получит неверный результат, считая его правильным.

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

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

Отладка и тестирование программы. Под отладкой понимается устранение ошибок в программе. Тестирование позволяет вести их поиск и, в конечном счете, убедиться в том, что полностью отлаженная программа дает правильный результат. Для этого разрабатывается система тестов — специально подобранных контрольных примеров с такими наборами па­раметров, для которых решение задачи известно. Тестирование должно охватывать все возможные ветвления в программе, т. е. проверять все ее инструкции, и включать такие исходные данные, для которых решение невозможно. Проверка особых, исключительных ситуаций, необходима для анализа корректности. Например, программа должна отказать клиенту банка в просьбе выдать сумму, отсутствующую на его счете. В ответст­венных проектах большое внимание уделяется так называемой "защите от дурака" подразумевающей устойчивость программы к неумелому обращению пользователя. Использование специальных программ — отладчиков, которые позволяют выполнять программу по отдельным шагам, просматривая при этом значения переменных, значительно упрощает этот этап.

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

Публикация результатов работы, передача заказчику для эксплуатации.

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

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

Решение задач на ЭВМ осуществляется посредством составления программы, в основу которой кладется алгоритм решения данной задачи, т. е. точное предписание о последовательности действий, которые должны быть произведены для получения результата. Алгоритм - более общее понятие, чем программа; в этом смысле программа – это запись алгоритма решения некоторой задачи в виде, пригодном для ЭВМ. Отсюда следует, что основная сущность процесса решения задач с помощью ЭВМ – это разработка алгоритмов решения задач. Когда алгоритм решения задачи ясен, он без особого труда может быть представлен на языке программирования.

Если рассматривать процесс решения задачи в целом, то разработка алгоритма - составная часть того сложного процесса, который обеспечивает полное решение задачи на ЭВМ.

Вопрос №27

Структура программы на Турбо Паскаль

Программа на языке Паскаль состоит из заголовка, разделов описаний и раздела операторов. Заголовок программы содержит имя программы, например:

Program PRIM;

Описания могут включать в себя:

раздел подключаемых библиотек (модулей);

раздел описания меток;

раздел описания констант;

раздел описания типов;

раздел описания переменных;

раздел описания процедур и функций.

Раздел описания модулей определяется служебным словом USES и содержит имена подключаемых модулей (библиотек) как входящих в состав системы Turbo Pascal, так и написанных пользователем. Раздел описания модулей должен быть первым среди разделов описаний. Имена модулей отделяются друг от друга запятыми:

uses CRT, Graph;

Любой оператор в программе может быть помечен меткой. Имя метки задается по правилам образования идентификаторов Турбо Паскаль. В качестве метки также могут использоваться произвольные целые числа без знака, содержащие не более четырех цифр. Метка ставится перед оператором и отделяется от него двоеточием. Все метки, используемые в программе, должны быть перечислены в разделе описания меток, например:

label 3, 471, 29, Quit;

Описание констант позволяет использовать имена как синонимы констант, их необходимо определить в разделе описания констант:

const K= 1024; MAX= 16384;

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]