Смекни!
smekni.com

Курс лекции по Информатике (стр. 2 из 11)

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

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

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

Лекция 3

Языки программирования

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

Каждый язык программирования посредством своего синтаксиса и семантики определяет некоторый присущий ему процессор (преобразователь), реальный или мыслимый, которым этот язык, в свою очередь, определяется однозначно. Таким образом, программа на данном языке программирования определяет порядок и вид действий, которые должен выполнить соответствующий данному языку процессор при ее реализации. На практике такой процессор состоит из “языкового процессора” и ЭВМ.

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

Интерпретатор - это программа, которая допускает в качестве входа исходную программу, записанную на языке программирования называемом исходным языком, и производит пооператорное (покомандное) ее выполнение и соответствующие вычисления, пред­писываемые этой программой.

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

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

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

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

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

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

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

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

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

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

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

Расширение сфер использования ЭВМ привело к необхо­димости решать задачи, компактное описание которых выхо­дит за рамки одного процедурно-ориентированного языка. Попытки использовать процедурно-ориентирован­ные языки для решения задач, выходящих за пределы их орие­нтации, привели к практически непреодолимым трудностям. Так возникли проблемно-ориентированные я.п., то есть я.п. предназначенные для описания специальных проблем и решения определенного класса задач. Программа работы на таком языке содер­жит, помимо описания условия задачи, указания решить за­дачу данного класса. Примерами таких языков являются язык ЛИСП, предназначенный для описания процессов обработки информации, представленной в виде списков, и язык ПРОЛОГ, предназначенный для разработки программ и систем искусственного интеллекта. Языком такого рода является также язык STRESS, предназначенный для описания за­дач конструирования. Программа на языке STRESS содер­жит описание общих характеристик системы (размерности, число вершин и др.) и данные, а также указание: решить задачу и представить определенные данные в виде некоторой таблицы. Развитие таких языков име­ет весьма важное практическое значение в силу чрезвычай­ной простоты их использования.