Вы находитесь на странице: 1из 14

Лекция 1

Введение

Общие понятия

История развития

Определения

Согласно определению Б.Л Ворфа: «Язык формирует наш способ мышления и определяет то, о
чём мы можем мыслить». Для компьютера важнее не просто язык, а язык программирования,
под которым понимают формальную знаковую систему, предназначенную для записи
программ, задающих алгоритм в форме, понятной для исполнителя (например, компьютера).
Язык программирования определяет набор лексических, синтаксических и семантических
правил, используемых при составлении компьютерной программы. Он позволяет программисту
точно определить то, на какие события будет реагировать компьютер, как будут храниться и
передаваться данные, а также какие именно действия следует выполнять над этими данными
при различных обстоятельствах.

Со времени создания первых программируемых машин человечество придумало уже более


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

1.1. Алгоритм и программа

Алгоритм – точное предписание, определяющий вычислительный процесс, идущий от


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

Совокупность средств и правил для представления алгоритма в виде пригодном для


выполнения вычислительной машиной называется языком программирования, алгоритм,
записанный на этом языке, называется программой.

Сначала всегда разрабатывается алгоритм действий, а потом он записывается на одном из


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

1.2.Свойства алгоритма

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


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

2. Результативность: алгоритм должен приводить к получению результата за


конкретное число шагов (при делении 1 на 3 получается периодическая дробь 0,3333(3), для
достижения конечного результата надо оговорить точность получения этой дроби, например, до
4 знака после запятой).

3. Определенность (детерминированность) – каждое действие алгоритма должно быть


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

4. Дискретность – процесс должен быть описан с помощью неделимых операций,


выполняемых на каждом шаге (т. е. шаги нельзя разделить на более мелкие шаги).

Алгоритмы можно представить в следующих формах:

1) словесное описание алгоритма.

2) графическое описание алгоритма.

3) с помощью алгоритмического языка программирования

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


алгоритм. Чтобы получить работающую программу, надо этот текст перевести в

последовательность команд процессора, что выполняется при помощи специальных про-

грамм, которые называются трансляторами. Трансляторы бывают двух видов: компилято-

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

который называется объектным модулем за один непрерывный процесс. При этом сначала

он просматривает исходный текст программы в поисках синтаксических ошибок. Интер-

претатор выполняет исходный модуль программы в режиме оператор за оператором, по ходу


работы, переводя каждый оператор на машинный язык.

Общее понятие алгоритма

Понятие алгоритма - одно из основных понятий программирования и математики. Алгоритм -


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

Запись алгоритма на формальном языке называется программой. Иногда само понятие


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

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


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

ОПРЕДЕЛЕНИЕ ПОНЯТИЙ

Прежде всего дадим определения некоторых важных понятий, о которых пойдёт речь в этой
лекции.

Алгоритм - точное предписание исполнителю совеpшить определенную последовательность


действий для достижения поставленной цели за конечное число шагов.

Язык программирования (Алгоритмический язык) - искусственный (формальный) язык,


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

Программа - последовательность машинных команд, предназначенная для достижения


конкретного результата.

Программа - согласно ГОСТ 19781-90 - данные, предназначенные для управления конкретными


компонентами системы обработки информации в целях реализации определенного алгоритма.

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


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

Исходный код - текст программы на алгоритмическом языке. В компьютере исходный текст


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

Макроязык - программное средство, позволяющее пользователю задавать в тексте условные


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

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


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

Проблемно-ориентированный язык программирования - язык программирования, управляющие


структуры и/или структуры данных которого отражают особенности класса решаемых задач.

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

Процедурно-ориентированный язык программирования - язык программирования высокого


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

http://profbeckman.narod.ru/

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


конструкций. Семантика определяет смысловое значение предложений алгоритмического
языка.

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


осмысленные предложения в этом языке.

Система программирования - программная система, предназначенная для разработки программ


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

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


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

Язык ассемблера - согласно ГОСТ 19781-90 - язык программирования; символьная форма


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

Язык высокого уровня - согласно ГОСТ 19781-90 - язык программирования, понятия и


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

Языки высокого уровня отражают потребности программиста, но не возможности системы


обработки данных.

Язык описания технических средств - язык моделирования, разработки и тестирования


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

Итак, язык программирования - формализованный язык, предназначенный для описания


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

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


языки низкого уровня :

Язык высокого уровня - язык программирования, средства которого обеспечивают описание


задачи в наглядном, легко воспринимаемом виде, удобном для программиста. Он не зависит от
внутренних машинных кодов ЭВМ любого типа, поэтому программы, написанные на языках
высокого уровня, требуют перевода в машинные коды программами транслятора либо
интерпретатора. К языкам высокого уровня относят Фортран, ПЛ/1 , Бейсик, Паскаль, Си, Ада и
др.

Язык низкого уровня, - язык программирования, предназначенный для определенного типа


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

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


однозначного описания алгоритмов и обычно являющаяся часть языка программирования;

Неалгоритмический язык - язык программирования, тексты которого не содержат указаний на


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

Формальный язык - язык программирования, построенный по правилам некоторого


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

Исходный язык - язык программирования, на котором написана программа, в отличие от


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

Машинный (абсолютный) язык, язык ЭВМ - язык программирования, предназначенный для


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

Машинозависимый (машинно-ориентированный) язык, машинозависимый язык


программирования - язык программирования, учитывающий структуру и характеристики ЭВМ
определенного типа или конкретной ЭВМ;

Машиннонезависимый язык - язык программирования, структура и средства которого не


связаны ни с какой конкретной ЭВМ и позволяют выполнять составленные на нем программы
на любой ЭВМ, снабженной трансляторами с этого языка;

Символический язык, язык символического кодирования - язык программирования,


ориентированный на конкретные ЭВМ и основанный на кодировании машинных операций при
помощи определенного набора символов;

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


другого языка;

Графический язык - язык, предназначенный для написания программ машинной графики и


пользования ими.

Базовый язык – машинный язык , общий для семейства ЭВМ;

Язык программирования в системе управления базами данных (СУБД) с автономным языком.

Общий язык - Машинный язык, общий для группы ЭВМ и используемых ими внешних
устройств;

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

http://profbeckman.narod.ru/

Язык ассемблера, ассемблер - универсальный язык программирования , относящийся к


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

Декларативный (непроцедурный язык - язык программирования, который позволяет задавать


связи и отношения между объектами и величинами, но не определяет последовательность
выполнения действий (например, языки Пролог, QBE);

Императивный (процедурный) язык - язык программирования, который позволяет в явной


форме (при помощи задания выполняемых операторов) определять действия и порядок
(последовательность) их выполнения;

Язык функционального программирования, функциональный язык - декларативный язык


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

Специализированный язык - язык программирования, ориентированный на решение


определенного круга задач;

Язык описания страниц [PDL - Page Description Language] - специализированный язык,


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

Автономный язык - специализированный язык высокого уровня, в замкнутых СУБД (СУБД с


автономным языком);

Язык конструирования интерактивных технологий - с СУБД - язык, предназначенный для


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

Язык манипулирования данными, ЯМД [DML - Data Manipulation Language] - в СУБД - язык,
предназначенный для обращения к базе данных и выполнения поиска, чтения и модификации
ее записей;

Язык обработки списков - специализированный язык, предназначенный для описания


процессов обработки данных, представленных в виде списков объектов;

Язык описания данных [DDL - Data Description Language] - язык, предназначенный для
описания концептуальной схемы базы данных;

Язык описания хранения данных [DSDL - Data Storage Description Language] - язык,
предназначенный для описания физической структуры ( схемы ) базы данных;

Язык описания страниц - система для кодировки документов, которая позволяет точно описать
ее внешний вид после подготовки к выводу на печать или на дисплей. Примером использования
такого языка служит PDF (Portable Document Format), разработанный Adobe для хранения и
представления изображений страниц.

Язык представления знаний [KRL - Knowledge Representation Language] - декларативный или


декларативно-процедурный язык, предназначенный для представления знаний в памяти ЭВМ
(например, языки Лисп и Пролог );
Язык публикаций - язык, используемый для публикации алгоритмов и программ;

Язык спецификаций - декларативный язык для задания спецификаций программ ;

Проблемно-ориентированный язык - язык программирования, предназначенный для решения


определенного класса задач (проблем);

Процедурный (процедурно-ориентированный) язык - проблемно-ориентированный язык,


который облегчает выражение процедуры, как точного алгоритма;

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


критическим является время реакции ЭВМ на сигналы, требующие от неё немедленных
действий (например, язык Ада);

Язык управления пакетом - набор команд, директив, квалификаторов и правил их


использования для управления пакетной обработкой данных;

Язык управления заданиями - язык, на котором записывается последовательность команд,


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

Общесетевой командный язык [CNCL - Common Network - Command language] - стандартный в


рамках вычислительной сети язык диалогового (интерактивного) поиска данных,
предназначенный для унификации работы пользователей с неоднородными базами данных,
управляемых различными СУБД ;

Системный язык - язык общения оператора ЭВМ с вычислительной системой, представляющий


собой совокупность команд оператора и сообщений системы;

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


решение задач практически из любой области и объединяющий на единой методической основе
наиболее существенные свойства и средства современных машино- и
проблемноориентированных языков программирования (например, язык ассемблера , ПЛ/1 и
др.);

Язык ориентированный на пользователя - слабоформализованный язык программирования,


близкий к естественному языку ;

Язык меню - язык диалога пользователя с системой, основанный на использовании меню__

Алгоритмизация и программирование.

Алгоритмизация – это метод описания систем или процессов путем составления алгоритмов
их функционирования.

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


ведущий от варьируемых начальных данных к искомому результату (ГОСТ 19.781- 74).

Понятие алгоритма является центральным понятием информатики. Термин «алгоритм» своим


происхождением связан с именем узбекского математика Аль – Хоремзи, который еще в IХ в.
сформулировал правила выполнения четырех арифметических действий.
Алгоритм решения задачи имеет ряд обязательных свойств:

- дискретность - разбиение процесса обработки информации на более простые этапы (шаги


выполнения), выполнение которых компьютером или человеком не вызывает затруднений;

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


преобразования информации;

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


желаемый результат при допустимых исходных данных за конечное число шагов;

- массовость - пригодность алгоритма для решения определенного класса задач.

В алгоритме отражаются логика и способ формирования результатов решения с указанием


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

Алгоритм решения комплекса задач и его программная реализация тесно взаимосвязаны.


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

Из известных основных способов представления алгоритмов:

словесный;

структурно-стилизованный (псевдокод);

графический;

программный.

Графическая форма, в виде блок-схем наиболее удобна. Блок-схемой называется графическое


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

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


ГОСТом, Требованиями Единой системы программной документации (ЕСПД) ГОСТ 19.002-80
и ГОСТ 19-003-80.

Программирование (programming) - теоретическая и практическая деятельность, связанная с


созданием программ.

Программирование является собирательным понятием и может рассматриваться и как наука и


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

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

1. Постановка задачи; 2. Анализ и исследование задачи, модели; 3. Разработка алгоритма; 4.


Программирование; 5. Тестирование и отладка; 6. Анализ результатов решения задачи и
уточнение в случае необходимости математической модели с повторным выполнением этапов
2-5; 7. Сопровождение программы.

ЭВМ непосредственно выполняет программы на машинном языке программирования данной


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

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


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

Каждый язык программирования может быть представлен в виде набора формальных


спецификаций, определяющих его синтаксис и семантику

Эти спецификации обычно включают в себя описание:

Типов и структур данных

Операционную семантику (алгоритм вычисления конструкций языка)

Семантические конструкции языка

Библиотеки примитивов (например, инструкции ввода-вывода)

Философии, назначения и возможностей языка

Последовательное выполнение операторов в языке программирования означает, что они


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

При повторяющемся выполнении некоторые операторы выполняются несколько раз, несмотря


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

Литература: [1], с. 35-49; [3], с. 100-156.

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

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


и типы данных языка программирования. Трансляция. Компиляция и интерпретация. Эволюция
и классификация языков программирования.

Язык программирования (Я.П.) — формальная знаковая система, предназначенная для


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

Если Я.П. ориентирован на конкретный тип процессора и учитывает его особенности, то он


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

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

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


компьютеру (особенности конкретных компьютерных архитектур в них не учитываются).

Эволюция языков программирования. Я.П. делят на пять поколений:

Поколение 1. Входят языки, созданные в начале 50-х гг. (машиннозависимые языки, язык
Ассемблер).

Поколение 2. Конец 50-х-начало 60-х гг. (Символический ассемблер, в котором появилось


понятие переменной. Возросли скорость разработки и надежность программ).

Поколение 3. 60-е гг. – 70-е гг. (Появились универсальные языки высокого уровня, с их
помощью удается решать задачи из любых областей. Качества таких языков: относительная
простота, независимость от конкретного компьютера, возможность использования мощных
синтаксических конструкций. Результат – повышение производительности труда
программистов.) (Кобол –для экономической области, Pascal – универсальный ЯВУ (Н.Вирт),
Basic

Поколение 4. Начало 70-х гг.- по настоящее время. (Языки 4-го поколения предназначены для
реализации крупных проектов, повышения их надежности и скорости создания. – Проблемно-
ориентированные языки). (C++-объектно-ориентированный С, Java – начло 90-х гг. –
компиляция в платформо-независимый байт-код)
Поколение 5. Середина 90-х гг. (Системы автоматического создания прикладных программ с
помощью визуальных средств разработки, без знания программирования. Языки
программирования для Интернета – скрипт-языки – HTML, Perl, PHP, XML).

Одним из важнейших признаков классификации языков программирования является


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

Процедурное (императивное) программирование является отражением архитектуры


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

Программа на процедурном языке программирования состоит из последовательности


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

Сущность функционального (аппликативного) программирования определена А. П. Ершовым


как «... способ составления программ, в которых единственным действием является вызов
функции, единственным способом расчленения программы на части является введение имени
для функции, а единственным правилом композиции — оператор суперпозиции функции.
Никаких ячеек памяти, ни операторов присваивания, ни циклов, ни, тем более, блок-схем, ни
передачи управления».

Роль основной конструкции в функциональных языках играет выражение: К выражениям


относятся скалярные константы, структурированные объекты, функции, тела функций и вызовы
функций. Функция трактуется как однозначное отображение из X в X, где X — множество
выражений.

Новую область — логическое, или реляционное программирование, — открыло появление


языка PROLOG (Пролог) (PROgramming in LOGic — программирование в терминах логики).
Этот язык был создан французским ученым А. Кольмероэ в 1973 году. В настоящее время
известны и другие языки, однако наиболее развитым и распространенным языком логического
программирования является именно Пролог. Так, имеется свыше 15 различных его реализаций
на ПЭВМ. Языки логического программирования, в особенности Пролог, широко используются
в системах искусственного интеллекта, рассматриваемых в данном учебном пособии.

Центральным понятием в логическом программировании является отношение. Программа


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

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


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

Интерпретатор — это программа, которая получает исходную программу и по мере


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

Транслятор — это программа, которая принимает исходную программу и порождает на своем


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

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

Транслятор с языка высокого уровня называют компилятором.

Понятие переменной

Алгоритм состоит из команд исполнителю. Исполнитель может, в свою очередь, командовать


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

Запись алгоритма для универсального исполнителя может включать команды, адресованные


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

Как правило, универсальный исполнитель имеет собственную память, и выполнение им


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

Таким образом, компьютер автомобиля, управляющий работой двигателя, хранит в любой


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

Значение каждого параметра хранится в определенном участке памяти компьютера и может


меняться в процессе выполнения алгоритма. Такой участок памяти компьютера называется
переменной. Понятие переменной - важнейшее понятие алгоритмического языка. Переменные
встроены в конструкцию универсального исполнителя.

Каждой переменной присваивается имя. В рассмотренном примере используются переменные


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

С переменной можно выполнять два действия:

прочитать текущее значение переменной;

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

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


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

имя переменной := выражение;

Знак := читается как присвоить значение. Во многих языках вместо него используется просто


знак равенства:

имя переменной = выражение;

При выполнении оператора присваивания сначала вычисляется значение выражения в правой


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

(6 * интервал времени);

Переменная " число импульсов от датчика скорости " в течение каждого интервала времени


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

скорость := скорость * 3600 / 1000;

Здесь переменная " скорость " входит как в правую, так и в левую части оператора


присваивания. В правой части используется старое значение этой переменной, вычисленное в
м/сек. Поскольку час содержит 3600 секунд, то при домножении на 3600
получается расстояние в метрах, проходимое за 1 час; после деления на 1000
получается расстояние в километрах. Вычисленное значение затем присваивается переменной
" скорость ".

Суммируем сказанное выше:

универсальный исполнитель, или компьютер, - это исполнитель, который может управлять


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

внутреннее состояние универсального исполнителя определяется состоянием его памяти.


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

переменная - это область памяти универсального исполнителя, хранящая порцию информации.


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

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

имя переменной := выражение;

При его выполнении сначала вычисляется значение выражения справа от знака


присваивания :=, затем оно записывается в переменную. Выражение в правой части может
включать имя переменной в левой части. В этом случае при вычислении выражения
используется старое значение переменной.