Структура алгоритмических языков

Классификация задач, решаемых с помощью ПЭВМ.

В зависимости от типа и количества исходных данных задачи. решаемые с помощью ПЭВМ можно разделить на несколько типов.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3.4. Этапы решения задачи на ЭВМ

 

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

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

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

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

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

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

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

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

Шестой этап – собственно программирование, т.е. запись разработанного алгоритма на языке программирования. Вопросы выбора подходящего языка здесь не рассматриваются.

Седьмой этап – тестирование, отладка и исправление обнаруженных ошибок.

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

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

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

Запись алгоритма предназначена для ЭВМ, должна быть на языке "понятном" ЭВМ. И здесь на первый план выдвигается необходимость точной записи команд, не оставляющей места для произвольного толкования их исполнителем. Следовательно, язык для записи алгоритмов должен быть формализован. Такой язык принято называть языком программирования, а запись алгоритма на этом языке – программой для ЭВМ.

Классификация алгоритмических языков

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

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

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

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

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

По первому признаку они делятся на две большие группы: машинозависимые и машинонезависимые языки. Машинозависимые языки классифицируют на машинные и машинноориентированные (автокоды) (рис.17). Различают два уровня машиноориентированных языков: символического кодирования (ассемблеры) и макроязыки (макроассемблеры).

В мнемокоде цифровой код операции заменен буквенным (мнемоническим), а цифровые адреса – буквенными именами.

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

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

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

 

 

Рис.17. Классификация алгоритмических языков

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

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

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

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

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

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

- букв латинского алфавита и алфавита национального языка;

- цифр (от 1 до 9);

- знаков операций:

арифметических

логических

отношения

специальных знаков.

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

В алгоритмических языках есть два класса слов – данные и ключевое слова.

Любой набор знаков, рассматриваемый безотносительно к его смыслу, называют данными.

 

 

 

Рис.18. Структура алгоритмического языка

 

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

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

Описания – это особые операторы, не выполняющие активных действий над данными, но описывающие их свойства (атрибуты), т.е. тип, основание системы счисления, точность представления, форму и т.д.

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

присваивания

безусловной передачи управления

условной передачи управления

цикла

ввода и вывода данных.

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

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

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

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

Программная единица (процедура) – это основная программа или подпрограмма. Выполнение любой составной программы начинается с выполнения основной программы (главной).

Подпрограммы бывают двух типов – собственно подпрограммы (процедуры) и подпрограммы-функции.

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

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

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