Раздел 7. Языки программирования высокого уровня
Конец программы
Начало программы
Конец функции
Конец цикла
СУММА=S
писать("введите значения массива А")
начало цикла для j=1 до 15
читать А(j)
конец цикла
Р:= СУММА(G,W)*СУММА(T,L)
писать ("произведение равно",Р:6)
В программу введены константы: G=1; W=12;T=8;L=15.
Ответ. Результатом работы программы является произведение сумм элементов массива с 1 по 12 и с 8 по 15
9. Задан фрагмент алгоритма:
1. Если А<В, то С=В-А иначе С=2*(А-В)
2. D=0
3, Пока С>А выполнять: D=D+1;C=C-1
Ответ. При А=8; В=3 на выходе из этого фрагмента переменные D и C примут значения: D=2; C=8
10. Представлен алгоритм (div(x,y) - целочисленное деление х на у, mod(х,у) - целый остаток от деления):
k=50
Выбор
при div(k,12)=4: D:=k
при mod(k,12)<5: D:=2
при mod(k,12)>9: D:=3
иначе D:=1
Всё
Ответ. Значение переменной D после выполнения алгоритма равно 2
11. Представлен алгоритм (mod(х,у) - целый остаток от деления):
k=70
Выбор
при mod(k,12)=7: D:=k
при mod(k,12)<5: D:=2
при mod(k,12)>9: D:=3
иначе D:=1
Всё
Ответ. Значение переменной D после выполнения алгоритма равно 3
|
|
12. Представлен фрагмент программы:
X:=9; Y:=7; P:=X=Y; Q:=Y>X; P:=P and Q
Ответ. В результате выполнения фрагмента программы переменные P и Q примут значения P=false; Q=false
Эволюция и классификация языков программирования. Основные понятия языков программирования. Структуры и типы данных языка программирования
В истории программирования можно выделить несколько этапов по способу программирования алгоритмов задач:
1. Программирование в машинных командах.
2. Машинно-ориентированные языки низкого уровня.
3. Языки высокого уровня.
4. Языки структурного программирования.
5. Объектно-ориентированные языки.
Для того, чтобы ЭВМ могла выполнять программу, программа должна быть записана по строгим правилам в виде, доступном процессору, т. е. представлять собой последовательность двоичных чисел и кодов. Такие коды называются машинными кодами, а программа, написанная на машинном языке, – исполняемым модулем. Записывать программу на машинном языке неудобно. Это нудная и долгая работа не обходилась без ошибок, которые было очень непросто найти.
Поэтому возникла идея записывать программу на так называемом алгоритмическом языке или языке программирования. Языки программирования – специально разработанные искусственные языки, предназначенные исключительно для записи алгоритмов, исполнение которых поручается ЭВМ.
Обычный разговорный язык состоит из четырех основных элементов: символов, слов, словосочетаний и предложений. Алгоритмический язык содержит подобные элементы, только слова называют элементарными конструкциями, словосочетания - выражениями, предложения - операторами. Алгоритмический язык (как и любой другой язык), образуют три его составляющие: алфавит, синтаксис и семантика.
|
|
Алфавит – фиксированный для данного языка набор символов (букв, цифр, специальных знаков и т.д.), которые могут быть использованы при написании программы.
Синтаксис - правила построения из символов алфавита специальных конструкций, с помощью которых составляется алгоритм.
Семантика - система правил толкования конструкций языка. Таким образом, программа составляется с помощью соединения символов алфавита в соответствии с синтаксическими правилами и с учетом правил семантики.
XX. Краткая история и классификация
алгоритмических языков программирования
Ассемблер – язык низкого уровня, в котором каждая конструкция заменяется одной или несколькими (не больше пяти) машинными командами, но они записываются не в двоичном коде, а с помощью удобных для человека символов.
Язык высокого уровня – каждая конструкция реализуется через много (более пяти) машинных команд.
Первые языки программирования были очень примитивными и мало чем отличались от формализованных упорядоченных последовательностей единиц и нулей, понятных компьютеру. Использование таких языков было крайне неудобно с точки зрения программиста, так как он должен был знать числовые коды всех машинных команд, должен был сам распределять память под команды программы и данные.
Для того, чтобы облегчить общение человека с ЭВМ были созданы языки программирования типа Ассемблер. Переменные величины стали изображаться символическими именами. Числовые коды операций заменились на мнемонические обозначения, которые легче запомнить. Язык программирования приблизился к человеческому языку, и отдалился от языка машинных команд.
Один из первых языков программирования высокого уровня – Фортран (For mula Tran slation) был создан в середине 50-х годов. Благодаря своей простоте и тому, что на этом языке накоплены большие библиотеки программ Фортран и в наши дни остается одним из самых распространенных. Он используется для инженерных и научных расчетов, для решения задач физики и других наук с развитым математическим аппаратом.
Для решения экономических задач был создан язык программирования - Кобол.
Расширение областей применения ЭВМ влечет за собой создание языков, ориентированных на новые сферы применения: Снобол – алгоритмический язык для обработки текстовой информации, Лисп - алгоритмический язык для обработки символов. Лисп находит широкое применение в исследованиях по созданию искусственного интеллекта.
В 1968 г. был объявлен конкурс на лучший язык программирования для обучения студентов. Победителем стал язык Алгол-68, но широкого распространения не получил. Для этого конкурса Никлаус Вирт создал язык Паскаль, достаточно простой, удобный, с наличием мощных средств структурирования данных. Хотя Паскаль был разработан как язык для обучения программированию, он впоследствии получил широкое развитие и в настоящее время считается одним из самых используемых языков. Для обучения младших школьников Самуэлем Пайпертом был разработан язык Лого. Он отличается простотой и богатыми возможностями.
Широкое распространение в школах в качестве обучающего языка получил язык Бейсик, позволяющий взаимодействовать с ЭВМ в режиме непосредственного диалога. Спустя много лет после изобретения Бейсика, он и сегодня самый простой для освоения из десятков языков общецелевого программирования.
Необходимость разработки больших программ, управляющих работой ЭВМ, потребовала создания специального языка программирования СИ в начале 70-х г. Он является одним из универсальных языков программирования. В отличии от Паскаля, в нем заложены возможности непосредственного обращения к некоторым машинным командам и к определенным участкам памяти компьютера. Си широко используется как инструментальный язык для разработки операционных систем, трансляторов, баз данных и других системных и прикладных программ. Си – это язык программирования общего назначения, хорошо известный своей эффективностью, экономичностью, и переносимостью. Во многих случаях программы, написанные на Си, сравнимы по скорости с программами, написанными на языке Ассемблера. При этом они имеют лучшую наглядность и их более просто сопровождать. Си сочетает эффективность и мощность в относительно малом по размеру языке.
|
|
Появление функционального программирования привело к созданию языка Пролог. Этот язык программирования разрабатывался для задач анализа и понимания естественных языков на основе языка формальной логики и методов автоматического доказательства теорем.
В 80-х г. 20 века был создан язык Ада. Этот язык в дополнение к классическим свойствам, обеспечивает программирование задач реального времени и моделирования параллельного решения задач.
Существуют различные классификации языков программирования. По наиболее распространенной классификации все языки программирования делят на языки низкого, высокого и сверхвысокого уровня.
В группу языков низкого уровня входят машинные языки и языки символического кодирования: (Автокод, Ассемблер). Операторы этого языка – это те же машинные команды, но записанные мнемоническими кодами, а в качестве операндов используются не конкретные адреса, а символические имена. Все языки низкого уровня ориентированы на определенный тип компьютера, т. е. являются машинно-зависимыми. Машинно-ориентированные языки – это языки, наборы операторов и изобразительные средства которых существенно зависят от особенностей ЭВМ (внутреннего языка, структуры памяти и т.д.).
Следующую, существенно более многочисленную группу составляют языки программирования высокого уровня. Это Фортран, Алгол, Кобол, Паскаль, Бейсик, Си, Пролог и т.д. Эти языки машинно-независимы, т.к. они ориентированы не на систему команд той или иной ЭВМ, а на систему операндов, характерных для записи определенного класса алгоритмов. Однако программы, написанные на языках высокого уровня, занимают больше памяти и медленнее выполняются, чем программы на машинных языках.
|
|
К языкам сверхвысокого уровня можно отнести лишь Алгол-68 и APL. Повышение уровня этих языков произошло за счет введения сверхмощных операций и операторов.
Другая классификация делит языки на вычислительные и языки символьной обработки. К первому типу относят Ф ортран, Паскаль, Алгол, Бейсик, Си, ко второму типу - Лисп, Пролог, Снобол и др.
В современной информатике можно выделить два основных направления развития языков программирования: процедурное и непроцедурное.
Процедурное программирование возникло на заре вычислительной техники и получило широкое распространение. В процедурных языках программа явно описывает действия, которые необходимо выполнить, а результат задается только способом получения его при помощи некоторой процедуры, которая представляет собой определенную последовательность действий.
Среди процедурных языков выделяют в свою очередь структурные и операционные языки. В структурных языках одним оператором записываются целые алгоритмические структуры: ветвления, циклы и т.д. В операционных языках для этого используются несколько операций. Широко распространены следующие структурные языки: Паскаль, Си, Ада, ПЛ/1. Среди операционных известны Фортран, Бейсик, Фокал.
Непроцедурное (декларативное) программирование появилось в начале 70-х годов 20 века, но стремительное его развитие началось в 80-е годы, когда был разработан японский проект создания ЭВМ пятого поколения, целью которого явилась подготовка почвы для создания интеллектуальных машин. К непроцедурному программированию относятся функциональные и логические языки.
В функциональных языках программа описывает вычисление некоторой функции. Обычно эта функция задается как композиция других, более простых, те в свою очередь разлагаются на еще более простые и т.д. Один из основных элементов в функциональных языках - рекурсия, то есть вычисление значения функции через значение этой же функции от других элементов. Присваивания и циклов в классических функциональных языках нет.
В логических языках программа вообще не описывает действий. Она задает данные и соотношения между ними. После этого системе можно задавать вопросы. Машина перебирает известные и заданные в программе данные и находит ответ на вопрос. Порядок перебора не описывается в программе, а неявно задается самим языком. Классическим языком логического программирования считается Пролог. Построение логической программы вообще не требует алгоритмического мышления, программа описывает статические отношения объектов, а динамика находится в механизме перебора и скрыта от программиста.
Можно выделить еще один класс языков программирования - объектно - ориентированные языки высокого уровня. На таких языках не описывают подробной последовательности действий для решения задачи, хотя они содержат элементы процедурного программирования. Объектно-ориентированные языки, благодаря богатому пользовательскому интерфейсу, предлагают человеку решить задачу в удобной для него форме. Примером такого языка может служить язык программирования визуального общения Object Pascal.
Языки описания сценариев, такие как Perl, Python, Rexx, Tcl и языки оболочек UNIX, предполагают стиль программирования, весьма отличный от характерного для языков системного уровня. Они предназначаются не для написания приложения с нуля, а для комбинирования компонентов, набор которых создается заранее при помощи других языков. Развитие и рост популярности Internet также способствовали распространению языков описания сценариев. Так, для написания сценариев широко употребляется язык Perl, а среди разработчиков Web-страниц популярен JavaScript.
XXI. Основные типы данных
Самостоятельная работа: [4] стр.
1. Целые:
– Byte- 0-256;
– Integer – -32768– 32767;
– Long – -2 147 483 648 – 2 147 483 647)/
2. Вещественные:
– Single – 7-8 значащих цифр от -1,4*10-45 до 3,4*1038;
– Double – 15-16 значащих цифр от -5,0*10-324 до 1,7*10308).
3. символьные
4. логические (Boolean)
XXII. Понятие о трансляции
Самостоятельная работа: [3] стр. 198–209; [4] стр. 182–184
Трансляция – преобразование программы, написанной на алгоритмическом языке, в программу, написанную: в машинных командах (кодах процессора). В настоящее время применяются две технологии трансляции: интерпретация и компиляция. Программа, которая осуществляет трансляцию, называется транслятором или, с учётом технологии, интерпретатором или компилятором. В интегрированные среды программирования для языков высокого уровня обычно включают как интерпретаторы, так и компиляторы.
Исходный модуль – программа, написанная на алгоритмическом языке (обычно высокого уровня).
Интерпретатор – транслятор, который работает пошагово: переводит в машинные команды очередную строку исходного модуля, сразу же выполняет её, «забывает» и переходит к обработке следующей строки. Удобен на этапе отладки программы, так как если в ней есть ошибка, понятно, в какой она строке.
Компилятор – транслятор, преобразующая алгоритм, записанный на языке высокого уровня (исходный модуль), в программу, состоящую из машинных команд (исполняемый модуль). Удобен для расчётов по уже отлаженной и протестированной программе.
Процесс компиляции разбивается на два этапа: собственно компиляцию и компоновку.
Технология работы компилятора:
Объектный модуль – промежуточная программа, в которой конструкции исходного модуля переведены в машинные коды, но ещё не дополнены стандартными и служебными программами, необходимыми для её работы.
Исполняемый модуль – программа, написанная в машинных кодах и полностью готовая к работе.
------------------------------------------------------------------------------------------------------