Встраиваемые интерпретируемые языки программирования. Семантика языков программирования

Языки программирования делятся на три типа:

1. Комплируемые языки

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

То есть жизненный цикл программы представляет собой следующие этапы:
1. Написание исходного текста программы (source code)
2. Компиляция в исполнимый файл (.exe например)
3. Выполнение программы на ПК

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

Примеры таких языков: assembler, C, C++, Pascal

2. Интерпретируемые языки

Соответственно, жизненный цикл программы сводится к:
1. Написание
2. Выполнение

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

Это специфические языки, например языки для создания веб-страниц.
Примеры: PHP, JavaScript, Python

3. Смешанного типа

Принцип работы языков смешанного типа (компилируемо-интерпретируемые) проиллюстрируем такой схемой:


Java относится именно к компилируемо-интерпретируемым языкам программирования. Интерпретатор в Java называется "виртуальная машина", именно поэтому он так обозначен на рисунке.

Возникает вопрос, зачем такая сложность? Дело в том что такой подход объединяет преимущества компилируемых языков (скорость выполнения) и интерпретируемых (независимость от ОС и безопасность)

Примеры таких языков: Java, C#

Эти три подхода можно проиллюстрировать следующим образом:

1. Компилируемые языки это готовая еда. Хорошо иметь ее под рукой, но она быстро портится.
Программы, написанные на компилируемых языках зависят от ОС и от аппаратного оборудования

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

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

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

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

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

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

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

Несмотря на то, что большинство языков ориентировано на императивную модель вычислений, задаваемую фоннеймановской архитектурой ЭВМ, существуют и другие подходы. Можно упомянуть языки со стековой вычислительной моделью (Forth, Factor, Postscript и др.), а также функциональное (Лисп, Haskell, ML и др.) и логическое программирование (Пролог) и язык Рефал, основанный на модели вычислений, введённой советским математиком А.А. Марковым-младшим.

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

Компилируемые и интерпретируемые языки

Языки программирования могут быть разделены на компилируемые и интерпретируемые.

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

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

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

Разделение на компилируемые и интерпретируемые языки является несколько условным. Так, для любого традиционно компилируемого языка, как, например, Паскаль, можно написать интерпретатор. Кроме того, большинство современных «чистых» интерпретаторов не исполняют конструкции языка непосредственно, а компилируют их в некоторое высокоуровневое промежуточное представление (например, с разыменованием переменных и раскрытием макросов).

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

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

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

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

Некоторые языки, например, Java и C#, находятся между компилируемыми и интерпретируемыми. А именно, программа компилируется не в машинный язык, а в машинно-независимый код низкого уровня, байт-код. Далее байт-код выполняется виртуальной машиной. Для выполнения байт-кода обычно используется интерпретация, хотя отдельные его части для ускорения работы программы могут быть транслированы в машинный код непосредственно во время выполнения программы по технологии компиляции «на лету» (Just-in-time compilation, JIT). Для Java байт-код исполняется виртуальной машиной Java (Java Virtual Machine, JVM), для C# -- Common Language Runtime.

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

Современные языки программирования рассчитаны на использование ASCII, то есть доступность всех графических символов ASCII является необходимым и достаточным условием для записи любых конструкций языка. Управляющие символы ASCII используются ограниченно: допускаются только возврат каретки CR, перевод строки LF и горизонтальная табуляция HT (иногда также вертикальная табуляция VT и переход к следующей странице FF).

Подробнее по этой теме см.: Переносимый набор символов.

Ранние языки, возникшие в эпоху 6-битных символов, использовали более ограниченный набор. Например, алфавит Фортрана включает 49 символов (включая пробел): A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 = + - * / () . , $ " :

Заметным исключением является язык APL, в котором используется очень много специальных символов.

Использование символов за пределами ASCII (например, символов KOI8-R или символов Юникода) зависит от реализации: иногда они разрешаются только в комментариях и символьных/строковых константах, а иногда и в идентификаторах. В СССР существовали языки, где все ключевые слова писались русскими буквами, но большую популярность подобные языки не завоевали (исключение составляет. Встроенный язык программирования 1С: Предприятие).

Подробнее по этой теме см.: Русские языки программирования.

Расширение набора используемых символов сдерживается тем, что многие проекты по разработке программного обеспечения являются международными. Очень сложно было бы работать с кодом, где имена одних переменных записаны русскими буквами, других -- арабскими, а третьих -- китайскими иероглифами. Вместе с тем, для работы с текстовыми данными языки программирования нового поколения (Delphi 2006, C#, Java) поддерживают Unicode.

Языки программирования могут быть разделены на компилируемые и интерпретируемые.

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

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

Некоторые языки, например, Java и C#, находятся между компилируемыми и интерпретируемыми. А именно, программа компилируется не в машинный язык, а в машинно-независимый код низкого уровня, байт-код. Далее байт-код выполняется виртуальной машиной.

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

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

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

Классификация языков программирования

Машинно – ориентированные языки

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

Машинно-ориентированные языки по степени автоматического программирования подразделяются на классы:

1. Машинный язык

2. Языки Символического Кодирования

3. Автокоды

Машинно – независимые языки

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

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

Машинно-независимые языки подразделяются на классы:

1. Проблемно-ориентированные языки

2. Универсальные языки

3. Диалоговые языки

4. Непроцедурные языки

18.Обзор языков программирования

Языки программирования компьютеров делятся на 2 основные группы:

1) языки низкого уровня;

2) языки высокого уровня.

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

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

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

Фортран

Фортран самый первый из языков высокого уровня (разработан Бэкусом в начале 1950-х годов) и широко распространенный язык, особенно среди пользователей, которые занимаются численным моделированием. Это объясняется несколькими причинами:

1. существованием огромных фондов прикладных программ на Фортране, накопленных за эти годы, а также наличием огромного количества программистов, эффективно использующих этот язык;

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

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

БЕЙСИК

Бейсик (BASIC - Beginner’s All-Purpose Symbolic Instruction Code – “универсальный символический код инструкций для начинающих”). Прямой потомок Фортрана и до сих пор самый популярный язык программирования для персональных компьютеров.

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

Кобол

Кобол - это один из первых языков программирования, появившийся в 1959, разработанный прежде всего для исследований в экономической сфере.

Язык позволяет эффективно работать с большим количеством данных, он насыщен разнообразными возможностями поиска, сортировки и распределения.

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

Паскаль

Язык программирования Паскаль был разработан профессором кафедры вычислительной техники Швейцарского Федерального института технологии Николасом Виртом в 1968 году как альтернатива существующим и все усложняющимся языкам программирования, таким, как PL/1, Algol, Fortran.

Основные причины популярности Паскаля заключаются в следующем:

1. простота языка позволяет быстро его освоить и создавать алгоритмически сложные программы

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

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

4. оптимизирующие свойства трансляторов с Паскаля позволяют создавать эффективные программы. Это послужило одной из причин использования Паскаля в качестве языка системного программирования

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

Сотрудник фирмы Bell Labs Денис Ритчи создал язык Си в 1972 году во время совместной работы с Кеном Томпсоном, как инструментальное средство для реализации операционной системы Unix, однако популярность этого языка быстро переросла рамки конкретной операционной системы и конкретных задач системного программирования.

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

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

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

Си – мощный и гибкий язык. Большая часть операционной системы Unix, компиляторы и интерпретаторы языков Фортран, Паскаль, Лисп, и Бейсик написаны именно с его помощью.

Язык C++ появился в начале 80-х годов. Созданный Бьерном Страуструпом с первоначальной целью избавить себя и своих друзей от программирования на ассемблере, Си или различных других языках высокого уровня.

По мнению автора языка, различие между идеологией Си и C++ заключается примерно в следующем: программа на Си отражает “способ мышления” процессора, а C++ - способ мышления программиста. Отвечая требованиям современного программирования, C++ делает акцент на разработке новых типов данных наиболее полно соответствующих концепциям выбранной области знаний и задачам приложения. Класс является ключевым понятием C++.

Язык С++ является средством объектного программирования, новейшей методики проектирования и реализации программ, которая в текущем десятилетии, скорее всего, заменит традиционное процедурное программирование.

Язык создан в основном в 1975 - 1980 годах в результате грандиозного проекта, предпринятого Министерством Обороны США с целью разработать единый язык программирования для так называемых встроенных систем (т. е. систем управления автоматизированными комплексами, работающими в реальном времени).

PL/1 разработан в 1964-1965 годах фирмой IBM. PL/1 относится к числу универсальных языков, т. е. позволяет решать задачи из разных областей: численные расчеты, текстовая обработка, экономические задачи и т. д.

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

Модула

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

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

Лисп

Язык Лисп был предложен Дж. Маккарти в работе в 1960 году и ориентирован на разработку программ для решения задач не численного характера. Английское название этого языка – LISP является аббревиатурой выражения LISt Processing (обработка списков) и хорошо подчеркивает основную область его применения. Понятие “список” оказалось очень емким. В виде списков удобно представлять алгебраические выражения, графы, элементы конечных групп, множества, правила вывода и многие другие сложные объекты.

После появления Лиспа различными авторами был предложен целый ряд других алгоритмических языков ориентированных на решение задач в области искусственного интеллекта, среди которых можно отметить Плэнер, Снобол, Рефал, Пролог. Однако это не помешало Лиспу остаться наиболее популярным языком для решения таких задач. На протяжении почти сорокалетней истории его существования появился ряд диалектов этого языка: Common LISP, Mac LISP, Inter LISP, Standard LISP и др.

Язык программирования Лисп предназначен в первую очередь для обработки символьной информации. Поэтому естественно, что в мире Лиспа числа играют далеко не главную роль. Основные типы данных в Лиспе называются “атом” и “точечная пара”.

19.Описание линейного процесса обработки данных с помощью блок-схем

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

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

Основные элементы схем алгоритма:

Наименование Обозначение Функция
Блок начало-конец (пуск-остановка) Элемент отображает вход из внешней среды или выход из неё (наиболее частое применение − начало и конец программы). Внутри фигуры записывается соответствующее действие.
Блок вычислений (вычислительный блок) Выполнение одной или нескольких операций, обработка данных любого вида (изменение значения данных, формы представления, расположения). Внутри фигуры записывают непосредственно сами операции, например, операцию присваивания: a = 10*b + c.
Логический блок (блок условия) Отображает решение или функцию переключательного типа с одним входом и двумя или более альтернативными выходами, из которых только один может быть выбран после вычисления условий, определенных внутри этого элемента. Вход в элемент обозначается линией, входящей обычно в верхнюю вершину элемента. Если выходов два или три, то обычно каждый выход обозначается линией, выходящей из оставшихся вершин (боковых и нижней). Если выходов больше трех, то их следует показывать одной линией, выходящей из вершины (чаще нижней) элемента, которая затем разветвляется. Соответствующие результаты вычислений могут записываться рядом с линиями, отображающими эти пути. Примеры решения: в общем случае − сравнение (три выхода: >, <, =); в программировании − условные операторы if (два выхода: true, false) и case (множество выходов).
Предопределённый процесс Символ отображает выполнение процесса, состоящего из одной или нескольких операций, который определен в другом месте программы (в подпрограмме, модуле). Внутри символа записывается название процесса и передаваемые в него данные. Например, в программировании − вызов процедуры или функции.
Данные (ввод-вывод) Преобразование данных в форму, пригодную для обработки (ввод) или отображения результатов обработки (вывод). Данный символ не определяет носителя данных (для указания типа носителя данных используются специфические символы).
Граница цикла Символ состоит из двух частей − соответственно, начало и конец цикла − операции, выполняемые внутри цикла, размещаются между ними. Условия цикла и приращения записываются внутри символа начала или конца цикла − в зависимости от типа организации цикла. Часто для изображения на блок-схеме цикла вместо данного символа используют символ условия, указывая в нём решение, а одну из линий выхода замыкают выше в блок-схеме (перед операциями цикла).
Соединитель Символ отображает вход в часть схемы и выход из другой части этой схемы. Используется для обрыва линии и продолжения её в другом месте (для избежания излишних пересечений или слишком длинных линий, а также, если схема состоит из нескольких страниц). Соответствующие соединительные символы должны иметь одинаковое (при том уникальное) обозначение.

Cтраница 1


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

Интерпретируемый язык (interpretive language) - язык программирования, программы на котором компьютер считывает, транслирует и исполняет немедленно, строка за строкой; примером служит интерпретируемый Бейсик.  

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

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

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

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

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

Язык представления, подобный тому, что используется в STRIPS, с точки зрения программной реализации является интерпретируемым языком, т.е. трансляция с этого языка выполняется интерпретатором, программой, которая способна распознавать в операторах языка формулы, подобные ризЬ (ящик1, комнатаБ, комнатаА), и выразить заложенный в формулах смысл в терминах выполняемых процедур.  

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

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

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

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

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

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

Языки программирования могут быть разделены на компилируемые и интерпретируемые.

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

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

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

Разделение на компилируемые и интерпретируемые языки является несколько условным. Так, для любого традиционно компилируемого языка, как, например, Паскаль, можно написать интерпретатор. Кроме того, большинство современных «чистых» интерпретаторов не исполняют конструкции языка непосредственно, а компилируют их в некоторое высокоуровневое промежуточное представление (например, с разыменованием переменных и раскрытием макросов).

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

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

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

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

Некоторые языки, например, Java и C#, находятся между компилируемыми и интерпретируемыми. А именно, программа компилируется не в машинный язык, а в машинно-независимый код низкого уровня, байт-код. Далее байт-код выполняется виртуальной машиной. Для выполнения байт-кода обычно используется интерпретация, хотя отдельные его части для ускорения работы программы могут быть транслированы в машинный код непосредственно во время выполнения программы по технологии компиляции «на лету» (Just-in-time compilation, JIT). Для Java байт-код исполняется виртуальной машиной Java (Java Virtual Machine, JVM), для C# -- Common Language Runtime.

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

Современные языки программирования рассчитаны на использование ASCII, то есть доступность всех графических символов ASCII является необходимым и достаточным условием для записи любых конструкций языка. Управляющие символы ASCII используются ограниченно: допускаются только возврат каретки CR, перевод строки LF и горизонтальная табуляция HT (иногда также вертикальная табуляция VT и переход к следующей странице FF).

Ранние языки, возникшие в эпоху 6-битных символов, использовали более ограниченный набор. Например, алфавит Фортрана включает 49 символов (включая пробел): A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 = + - * / () . , $ " :

Заметным исключением является язык APL, в котором используется очень много специальных символов.

Использование символов за пределами ASCII (например, символов KOI8-R или символов Юникода) зависит от реализации: иногда они разрешаются только в комментариях и символьных/строковых константах, а иногда и в идентификаторах. В СССР существовали языки, где все ключевые слова писались русскими буквами, но большую популярность подобные языки не завоевали (исключение составляет. Встроенный язык программирования 1С: Предприятие).

Расширение набора используемых символов сдерживается тем, что многие проекты по разработке программного обеспечения являются международными. Очень сложно было бы работать с кодом, где имена одних переменных записаны русскими буквами, других -- арабскими, а третьих -- китайскими иероглифами. Вместе с тем, для работы с текстовыми данными языки программирования нового поколения (Delphi 2006, C#, Java) поддерживают Unicode.

Задание №1

язык программирование семантика компилируемый

1. Для создания на диске D папок первого уровня нужно выполнить следующие действия:

Открыть Мой компьютер, перейти на диск D:

Выбрать пункт меню Файл, Создать, Папку, напечатать имя создаваемой папки П1.

Аналогично создаются папки П2 и П3.

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

Перейти в папку первого уровня, в которой нужно создавать папку второго уровня. Например папку П21 нужно создавать в папке П2, папку П31 - в папке П3 и т.д.

Повторить действия из 1-го пункта при создании папок 3-его уровня нужно папку П311 создавать в папке П31 и т.д.

2. Чтобы переименовать папку нужно

Выбрать папку П31

Выбрать пункт меню Файл, Переименовать, напечатать фамилию Хомченко

Выбрать папку П1 и дать имя Инна.

3. Для переноса 9-ой папки во 2-ю папку нужно

Выбрать папку П312

Выбрать пункт меню Правка, Вырезать

Перейти в нужную папку П2

Выбрать пункт меню Правка, Вставить.

4. Дерево диска D до выполнения пунктов 2-3 будет выглядеть так:

Так выглядит дерево диска D: после выполнения пунктов 2-3:

Пояснения к выполнению задания №4

1. Для форматирования ячеек нужно выполнить следующее:

* выделить ячейку или диапазон ячеек

* выбрать пункт меню Формат, ячейки, выравнивание.

2. Чтобы ввести в ячейку формулу нужно:

* активизировать нужную ячейку

* набрать знак =, а затем нужную формулу вручную на клавиатуре или с использованием мыши.

Например, в ячейку H7 нужно ввести формулу: =G7+C7-F7

3. Для заполнения колонки Примечание 1 нужно использовать функцию

ЕСЛИ(). Таким образом в ячейке К7 будет размещена формула:

ЕСЛИ(I7>=15000;"Очень хорошая работа"; ЕСЛИ(I7>=5000; "Хорошая работа"; ЕСЛИ(I7<0; "Надо больше покупать валюты"; "Надо меньше продавать валюты")))

4. Для заполнения колонки Примечание 2, предварительно необходимо преобразовать условие в таблицу:


Затем в ячейку L7 занести формулу:

ПРОСМОТР(I7;$O$7:$O$12;$P$7:$P$12)

В результате у вас должно получиться такое же значение, как и в колонке Примечание 1;


5. Для использования "автозаполнения" нужно

* выделить ячейку с формулой

* указатель мыши установить в правый нижний угол ячейки, чтобы появился маркер заполнения

* не отпуская левой клавиши мыши растянуть выделение на нужный диапазон ячеек.

6. Для заполнения итоговой строки нужно: установите курсор в нужную ячейку и произвести двойной щелчок по кнопке Автосуммирование на панели инструментов.

Описание выполнения пункта №2

Установить курсор в любую свободную ячейку и ввести формулу:

МАКС(F7:F16). Аналогично: =МИН(G7:G16) и =СРЗНАЧ(H7:H16). Формулу можно

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

Для создания имени нужно

* выделить диапазон (например H7:H16)

* выбрать поле имен и задать нужное имя (например Остаток) или выбрать пункт меню Вставка, Имя, Присвоить.

Тогда формула из предыдущего пункта будет выглядеть так:

СРЗНАЧ(Остаток)

Для построения диаграммы нужно

  • ? выделить диапазон данных по которым будем строить диаграмму например В2:D8. Левый столбец и верхняя строка будет использоваться в качестве меток осей.
  • ? вызываем мастер диаграмм.
  • ? выбираем тип диаграммы, например гистограмма, трехмерная.
  • ? Вводим соответствующие надписи для осей и название диаграммы.
  • ? выбираем лист, на котором будем строить диаграмму и выбираем кнопку Готово.

Для распечатки списка имен нужно выбрать пункт меню Вставка, Имя, Вставить, Все имена.

Чтобы получить таблицу с расчетными формулами нужно выбрать пункт меню

Сервис, Параметры, Вид, Параметры окна, Формулы.

Для оформления колонтитулов можно

* выбрать пункт меню Вид, Колонтитулы.

* выбрать пункт меню Файл, Параметры страницы, Колонтитулы.

Чтобы убрать сетку для печати нужно выбрать

Файл, Параметры страницы, Лист и отменить печать сетки.

Для распечатки полученной книги нужно выбрать:

  • ? Файл, Печать или
  • ? соответствующую пиктограмму на панели инструментов

Если диаграмма построена на том же рабочем листе, что и таблица, то печатать следует вместе с таблицей. Если диаграмма построена на новом рабочем листе, то нужно:

  • ? перейти на лист с построенной диаграммой
  • ? выполнить печать как в пункте №5

Пояснения к выполнению задания №5

  • 1. Для того чтобы отсортировать список необходимо:
    • ? установить курсор на то поле списка, по которому нужно провести

сортировку.

  • ? выбрать соответствующую пиктограмму на панели инструментов.
  • 2. Для работы с автофильтром необходимо:

установить курсор в любую ячейку списка.

выбрать пункт меню Данные, Фильтр, автофильтр.

1. выбрать изделия, цена которых <= 100000 и >300000 или расход которых не превышает 100 единиц.

Описание выполнения пункта 1.

  • 1. Включаем Автофильтр.
  • 2. Нажимаем кнопку автофильтра в поле Цена.
  • 3. Выбираем пунк меню Условие:
    • ? задаем условие
    • ? выбираем логическое условие И
    • ? задаем условие >300000
    • ? кнопка ОК