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

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

Оглавление

Введение

1.
Обзор и анализ особенностей применения языков программирования

2.
Теоретические аспекты использования процедур и функций в языке Паскаль

3.
Практическая реализация программы «Бортовой компьютер»

Заключение

Список
использованной литературы

Введение

язык программирование бортовой
компьютер

В настоящее время, во всем мире, наряду с
языками высокого программирования, такими как: Фортран, Алгол, Си, С++, Java и
др. особое место занимает Паскаль. Популярности среди программистов он обязан,
прежде всего, своей простоте, универсальности и удобству работы в нем. Язык
программирования Паскаль используется уже более тридцати лет. На сегодняшний
день создано семь версий.

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

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

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

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

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

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

.) Рассмотреть особенности и произвести
квалификацию языков программирования высокого уровня.

.) Обосновать выбор языка Паскаль для дальнейшего
исследования.

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

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

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

. Кнут Д. Искусство программирования для ЭВМ.
Т1. Основные алгоритмы. М.: Мир, 1978.

. Прайс Д. Программирование на языке Паскаль:
Практическое руководство. Пер. с англ. – М.:Мир, 1987.

. Фаронов В.В. Турбо-Паскаль 7.0. Начальный
курс. М.: “Нолидж”, 1999.

. Культин Н.Б. Программирование в Turbo Pascal
7.0 и Delphi. СПб.:БХВ – Санкт-Петербург, 1999.

. Бобровский С. «Программная инженерия»
С.Петербург, изд-во «Питер», 2003

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

1. Обзор и анализ особенностей применения языков
программирования

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

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

процедурно-ориентированные;

проблемно-ориентированные;

объектно-ориентированные.

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

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

а) язык Фортран (Fortran). Является одним из
первых языков программирования высокого уровня. К его основным достоинствам
относится наличие огромного числа математических библиотек, поддержка работы с
целыми, вещественными и комплексными числами высокой точности [3,4], встроенных
средств обработки массивов.

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

б) язык Бейсик (Basic). Был разработан в 1964 г.
в качестве языка для обучения программированию [12].

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

Одним из основных недостатков языка является то,
что он поддерживает только операционные системы семейства Windows, DOS и Mac OS
X, что значительно сужает сферы его применения. Также к недостаткам можно
отнести низкую скорость работы и отсутствие механизма наследования реализации
объектов [6].

в) язык Си (С) был создан в 1969-1973 годах в
качестве языка системного программирования и первоначально предназначался для
написания ОС UNIX [4,12]. В 1980-е гг. язык С был дополнен инструментами
объектно-ориентированного программирования и на основе него был создан язык
C++.

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

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

г) язык Паскаль (Pascal). Был создан математиком
Н. Виртом специально для обучения программированию. Однако со временем стал
широко применяться для разработки программных средств в профессиональном
программировании.

Самая первая версия была создана в 1968 году
профессором кафедры вычислительной техники Швейцарского федерального института
технологии Никласом Виртом [3]. Основной целью, при создании нового языка,
является его простота, с сохранением всех достоинств уже имеющихся языков
высокого уровня программирования.

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

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

В отличие от языка С (С++) в при использовании
Паскаль сведены к минимуму возможные синтаксические неоднозначности [1,2],
синтаксис языка является интуитивно понятным и доступным, поскольку, как уже
было отмечено выше, язык изначально разрабатывался для обучения студентов программированию.

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

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

Рассмотрим особенности языков другого класса.
Основным достоинством проблемно-ориентированных языков программирования
является минимизация трудозатрат программиста при решении задач принадлежащих
некоторому четко выделяемому классу [3]. К проблемно-ориентированным относят
следующие языки программирования:

а) язык Лисп. Считается вторым после Фортрана
старейшим высокоуровневым языком программирования [3,16]. Данный язык наиболее
часто применяется при разработке экспертных систем и систем аналитических
вычислений. Существуют современные версии этого языка, которые активно
применяются при разработке новейших web-технологий. Также модификации данного
языка используются в качестве встроенных языков программирования в САПР.
Примером может послужить AutoLISP – язык для разработки надстроек в продуктах
компании AutoDesk.

б) язык Пролог. Используется для реализации
систем искусственного интеллекта, а также и интеллектуальных систем баз данных
[3].

Написание программ на языке Пролог существенно
отличается от использования других языков программирования. Программа на
Прологе не является реализацией некоторого алгоритма, а представляет собой
запись на языке формальной логики [16]. Таким образом, данный язык относится к
описательным языкам программирования.

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

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

В настоящий момент наиболее активно используются
и развиваются следующие среды программирования [3,4]:

а) Delphi (Lazarus некоммерческая – версия для
ОС семейства Linux) – основана на Object Pascal;

б) C++, С#
(~ C);

в) Visual Basic (~
Basic);

г) Visual Fortran (~
Fortran);

д) Prolog++ (~
Prolog).

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

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

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

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

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

. Теоретические аспекты использования процедур и
функций в языке Паскаль

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

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

Форма записи процедуры: PROCEDURE имя ;

После объявления процедуры идет, как и в
программе, объявление переменных процедуры и между Begin ¾
End ; записывается ее программа (порядок выполнения операторов). Программы, с
применением процедур, имеет следующую структуру:имя программы ;…. ;
Определение меток, констант,….. ; массивов и других переменных

: программы….. ;имя ; Определение процедур и
функций

Var …… ; пользователя

:;имя
;…… ;

:;

:имя
;

Var …… ;

:

:;Основная программа, в которой

: процедуры и функции могут вызы-

: ваться сколь угодно раз

:.

Отметим только одну особенность [13] – в
процедуре после End ставится точка с запятой. Принято считать, что если большая
часть программы размещается в процедурах и функциях, тем рациональнее она
составлена.

Подпрограмма-функция предназначена для
вычисления какого-либо параметра [10]. Результат ее работы возвращается в виде
значения этой функции и может использоваться в выражениях. У этой подпрограммы
два основных отличия от процедуры.

Первое отличие – в заголовке [7]: через
двоеточие указывается тип возвращаемого параметра. Второе отличие заключается в
том, что в теле функции хотя бы один раз имени функции должно быть присвоено
значение. Для вызова функции следует в выражении, где используется ее значение,
указать имя функции.

В качестве примера рассмотрим функцию, которая
возвращает максимальное значение из двух чисел.crt;var a,b:byte;function
max(a,b:byte):byte; {a,b – формальные параметры функции}begin {начало функции}
if a>b then max:=a else max:=b;; {конец функции}

{ основная программа}

begin

clrscr;

readln(a,b);

write(max(a,b)); {фактические параметры a,b
передаются функции max}

readkey.

С применением процедур и функций возникает
вопрос использования переменных. Понятие места работы этих переменных можно
пояснить на простом примере [10]. Имеется некоторый внутригородской транспорт и
междугородний. Естественно, что внутригородской не работает на маршрутах между
городами. Т.е., его применение ограничено (локализовано). Это является прямой
аналогией работы переменной внутри процедуры (работа транспорта внутри города) ¾
такие переменные называются локальными переменными. Но, междугородний транспорт
может перемещаться как между городами, так и внутри любого города — переменная
работает не только между процедурами, но и внутри каждой из них. Подобные
переменные называются ¾ глобальными переменными [10].

Если программа содержит много процедур и
переменных, то может возникнуть ситуация, когда глобальные и локальные
идентификаторы имеют одинаковые имена. Для компилятора это не имеет никакого
значения. Дело в том, что при такой ситуации [18,20], с входом в процедуру,
запоминается значение глобальной переменной, а при выходе из нее ¾
возвращается первоначальное значение. Из этого следует, что Паскаль дает
возможность нескольким программистам писать одну программу, не заботясь об
опасности перепутать идентификаторы [7,9].

Любая большая программа, в основном, собирается
из процедур и функций. В свою очередь процедуры и функции объединяются в
большие блоки, которые называются — программными модулями. Каждый программный
модуль транслируется отдельно [10], объединяясь в выполняемую программу. Для
подключения модуля к программе, необходимо упомянуть его имя в предложении:имя
модуля (модулей – через запятые) ;

Объявление модулей должно записываться в
программе второй строкой, после имени программы. При объявленном модуле
процедуры и функции, встроенные в этот модуль, вписываются в программу только
своим именем, без раскрытия их программного содержания. Это существенно
сокращает текстовую часть основной программы [8]. Ниже, в краткой форме,
изложено содержание и назначение некоторых программных модулей [1].

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

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

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

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

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

Program Pascal ;Crt, Graph ;D,M :
Integer ;

Key : Char ;

D := Detect ;

InitGraph(D, M, ”) ;

SetTextStyle(0,0,10) ;

SetColor(4) ;

OutTextXY(80,150,’Turbo’) ;

OutTextXY(60,250,’Pascal’) ;

Key:=ReadKey;

CloseGraph;.

Результатом работы этой программы является ¾
написание по центру экрана дисплея, на темном фоне, красными буквами: Turbo
Pascal.

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

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

. Практическая реализация программы «Бортовой
компьютер

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

Постановка задачи

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

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

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

Программа реализована в среде Turbo Pascal 7.1.

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

Рис.1. Меню пользователя программы

Рис.2. Ввод исходных данных

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

Рис.3. Окно программы в режиме эмуляции работы

бортового
компьютера

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

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

Пункт меню «Exit» позволяет завершить работу программы.

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

Рис.4. Окно справки о работе программы

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

Вначале мы подключаем необходимые модули,
определяем метки, константы, массивы и другие глобальные переменные
программы.Crt,dos; { подключаем модули, их назначение описано в теоретической
части курсовой работы}{определяем константы, необходимые для реализации
пользовательского меню}=$17; { цвет невыделенного пункта } =$70; { цвет
выделенного пункта } N=4;menu:array[1..N] of string[50];{ названия пунктов меню
} punkt:integer; { номер выделенного пункта }:char; { введенный символ
},j,x,y,col:integer; { координаты первой строки меню } ,tf,ss:integer;
{описываем глобальные переменные, здесь tin – интервал вывода сообщений на
экран, tf – желаемое время финиша, ss – расстояние до финиша,,f1,f2:boolean;
{логические переменные, необходимые для контроля правильности ввода данных
пользователем}

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

Procedure MenuToScr;{ вывод
меню
на
экран
}; { очистка
экрана};

writeln(‘ ГЛАВНОЕ
МЕНЮ’);;;
i:=1 to
N do
{перебираем все пункты меню в цикле}

begin(x,y+i-1); {перевод курсора в нужную
позицию}(menu[i]); {вывод пункта меню, содержащегося в массиве констант};:=SEL;
{изменение атрибутов текста – выделенный}(x,y+punkt-1);(menu[punkt]);{ выделим
строку меню }:=NORM; {изменение атрибутов текста – невыделенный};

Следующая описываемая нами процедура отвечает за
ввод данных пользователем.punkt1; {процедура ввода данных – соответствует
первому пункту меню};:=false;f1:=false;f2:=false; {признак того, что данные еще
не введены}(13); {изменяем цвет текста};(‘ ВВЕДИТЕ ИСХОДНЫЕ ДАННЫЕ
‘);;(14);;{заголовок цикла ввода значений }f=false {если первый параметр еще не
введен}

then begin Write(‘ Введите расстояние до финиша
-> ‘);

{$I-} {директива, которая выключает
автоматическую генерацию объектного кода – необходимо для избежания ошибки
ввода значения}(ss);

{$I+}{директива, которая включает автоматическую
генерацию объектного кода }(ioresult<>0) { если возникла ошибка – в
данном случае, введено некорректное значение}

or (ss<1) then {если введенное значение
меньше допустимого}

begin

textcolor(4);

writeln(‘Ошибка! Расстояние задано неверно!’);

textcolor(14);

continue; {возвращение в начало цикла}

endf:=true; {признак того, что значение введено
корректно};

{Аналочичным образом реализован ввод двух
остальных параметров}f1=false then

begin write(‘ Введите желаемое время финиша
(секунды) -> ‘);

{$I-}(tf);

{$I+}(ioresult<>0) or
(tf<=0) then begin

textcolor(4);

writeln(‘Ошибка! Время финиша введено
неверно!’);

textcolor(14);

continue; endf1:=true;;f2=false then
begin

write(‘ Введите интервал вывода сообщений на
экран (секунды) -> ‘);

{$I-}ReadLn(tin);

{$I+}(ioresult<>0) or
(tin<=0) or (tin>=tf) then begin

textcolor(4);(‘Ошибка! Интервал вывода сообщений
введен неверно!’);

textcolor(14);; f2:=true;

end;(f=true) and (f1=true) and (f2=true); {
условие выхода из цикла – все три параметра введены верно}

Writeln(‘Press any key …’);

ch:=readkey; { ожидание нажатия любой
клавиши}:=#0;; {завершение процедуры}

Следующая процедура, которую мы рассмотрим
отвечает за эмуляцию работы персонального компьютера в режиме реального
времениpunkt2; { процедура, соответствующая пункту 2
меню}vnp,tvr,h,min,s,ds,t:word; {описываем локальные переменные, применяемые в
данной процедуре}

vr:integer;,vs,vsz,vszs,sp,v,vsr,vrk:real;

begin;

if (tf=0) then begin {проверка – введены ли
исходные данные}

textcolor(13); writeln; writeln;

writeln(‘Сначала необходимо ввести исходные
данные!’);

readkey; textcolor(14);

exit; {завершение работы процедуры}

end; (h,min,s,ds);{Вызов
текущего
времени}

vnp:=s+(min*60)+(h*3600); {время старта в
секундах}

sound(3000); delay(2000); nosound; {звуковой
сигнал}

TextColor(12); {Установка цвета
“времени”}(40,1);(‘Время старта ->:’);(h,’ час ‘,min,’ мин ‘,s,’
сек’); {выводим на экран время старта}(13);(‘ ‘:15,’Условные обозначения’);(14);(‘Время
с момента старта ->TPR’);(‘Пройденный к данному моменту времени
путь->PRS’);(‘Средняя скорость на отрезке ->VS’);(‘Средняя скорость к
данному моменту времени ->VSZ’);(‘Время, оставшееся до момента финиша
->TOST’);(‘Рекомендуемая скорость в начале пути->’,ss/tf:4:4);

writeln;(13);(‘ ‘:15,’Поехали!’);

textcolor(14); t:=0;; {инициализация генератора
случайных чисел}

i:=0; vs:=0; j:=0; {обнуляем
переменные}:=round(ss/tf); {рекомендуемая средняя скорость}

repeat {начало
прогона}(h,min,s,ds);:=s+(min*60)+(h*3600);(vs=0)
then for i:=1 to 10 do

begin

{пусть на заданном интервале скорость меняется
случайным образом в пределах +- 1-ца от рекомендуемой 10 раз}

v:=(random(2*100)+100*(vr-1))/100;:=vs+v;;(tvr>vnp)
and ((tvr-vnp) mod tin =0) and ((tvr-vnp)>t) and ((tf-t)>tin) then begin

t:=tvr-vnp;{разница между временем старта и
текущим временем}

write(‘TPR ->’,t,’ ¦ ‘);

vsz:=vsz+vs; {средняя скорость, рекомендуемая к
данному моменту времени}:=j+10; {общее число замеров скорости} :=vsz/j;
:=vs/10; { средняя скорость на отрезке}:=rs+vs*tin; {пройденный к данному
моменту времени путь}

write (‘PRS->’,rs:3:3,’ ¦ ‘);(‘VS
->’,vs:3:3,’ ¦ ‘); :=0; (‘VSZ->’,vszs:3:3,’ ¦ ‘); (‘TOST->’,tf-t,’ ¦
‘); :=(ss-rs)/(tf-t);

writeln(‘Рекомендуемая
скорость->’,vrk:4:4);;;(tvr-vnp)>=tf; {конец цикла – время истекло}

vs:=vs/10;:=rs+vs*(tf-t);:=tvr-vnp;(‘TPR
->’,t,’ ¦ ‘);(tf-t)<tin then vs:=vrk*10;

vsz:=vsz+vs;:=j+10; {общее число замеров
скорости}

vszs:=vsz/j;(‘PRS->’,rs:3:3,’ ¦
‘);(‘VS ->’,vs/10:3:3,’ ¦ ‘); (‘VSZ->’,vszs:3:3,’ ¦ ‘); writeln(‘TOST->’,tf-t,’
¦ ‘); (2000); delay(7000); nosound; textcolor(13); {звуковой
сигнал
– время
истекло}

if rs>=ss {если время прогона меньше
заданного}

then writeln(‘ ‘:15,’Успели!’)
else writeln(‘ ‘:15,’Не успели!’);(h,min,s,ds);

TextColor(12); {Установка цвета
“времени”}(40,25);(‘Время финиша ->:’);(h,’ час ‘,min,’ мин ‘,s,’
сек’);

textcolor(14);; {конец
процедуры}

Далее рассмотрим процедуру, при помощи которой
осуществляется вывод на экран текстового файла справки.punkt3; {процедура,
соответствующая 3-му пункту меню}txt:char; {объявляем локальные переменные
процедуры}:text; {переменная – текстовый файл};(help,’hlp.txt’); {ассоциируем
файловую переменную с именем файла}

writeln;(13);;(14);

{$I-}

Reset(help); {открываем файл для чтения}

{$I+}IOresult<>0 then {если ошибка
возникла – файл не найден}(4);(‘Ошибка! Файл помощи отствует’); readkey;(14);;
{завершение работы процедуры}else {если файл найден}not EOF(help) do {пока не
будет достигнут конец файла}

{считываем из файла символ и выводим его на
экран}

Read(help,txt); Write(txt);
;;;(‘Press any key …’);;;; {конец
процедуры}

Далее следует основная программа, в которой
процедуры и функции могут вызываться сколь угодно раз.:=#0; {переменная, в
которой будет храниться код нажатой клавиши}[1]:=’1. Ввод начальных данных ‘;
[2]:=’2. Работа программы ‘; [3]:=’3. Справка ‘;[4]:=’4. Exit ‘;:=1;
{изначально выбран 1-й пункт меню}:=5; {координаты курсора}:=5; :=NORM;; {вызов
процедуры вывода меню на экран}{начала цикла, в котором на экран выводятся
пункты меню}:=ReadKey; {считываем код нажатой клавиши}

if ch=char(0) then begin
ch:=ReadKey;

chr(80):{ стрелка
вниз
} punkt<N then begin (x,y+punkt-1); write(menu[punkt]);

punkt:=punkt+1; {номер выбранного пункта
возрастает на единицу}

TextAttr:=SEl; (x,y+punkt-1);
(menu[punkt]); TextAttr:=NORM;;(72):{ стрелка
вверх
}punkt>1 then begin (x,y+punkt-1);
write(menu[punkt]);:=punkt-1;:=SEl;(x,y+punkt-1);
(menu[punkt]);:=NORM;;;ch=chr(13) then begin { нажата
клавиша
<Enter> }

case punkt of {вызываем соответствующую
процедуру, в зависимости от номера выбранного пункта}

:punkt1;

:punkt2;

:punkt3;

:ch:=chr(27);{ выход – нажата клавиша Esc};;
{вызов процедуры вывода меню на экран};ch=chr(27);{ условие выхода из цикла, 27
– код <Esc> }. {конец программы}

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

Заключение

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

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

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

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

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

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

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

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

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

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

Список использованной литературы

Абрамов
В.Г., Трифонов Н.П., Трифонова Г.Н. Введение в язык Паскаль. – М.: Наука, 1988

Абрамов
С.А., Гнездилова Г.Г., Капустина Е.Н., Селюн М.И. Задачи по программированию.
М.: “Наука”, 1988

Вирт
Н. Алгоритмы и структуры данных. – М.: Мир, 1989

Дагене
В.А., Григас Г. К., Аугутис К.Ф. 100 задач по программированию. – М.:
Просвещение, 1993.

Епашников
A.M., Епашников В.А. Программирование в среде Турбо Паскаль 7.0. – М.: МИФИ,
1994

Обновлено: 04.05.2023

Язык высокого уровня [high-level language] – Язык программирования, средства которого обеспечивают описание задачи в наглядном, легко воспринимаемом виде, удобном для программиста. Он не зависит от внутренних машинных кодов ЭВМ любого типа, поэтому программы, написанные на языках высокого уровня, требуют перевода в машинные коды программами транслятора либо интерпретатора. К языкам высокого уровня относят Фортран , ПЛ/1 , Бейсик , Паскаль , Си , Ада, C++, Visual Basic, Java, Python, Ruby, Perl, Delphi (Pascal), PHP.

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

Первым языком программирования высокого уровня считается компьютерный язык Plankalkul разработанный немецким инженером Конрадом Цузе ещё в период 1942—1946 гг. Однако, широкое применение высокоуровневых языков началось с возникновением Фортрана и созданием компилятора для этого языка (1957).

Ада [Ada] – Язык программирования высокого уровня, ориентированный на применение в системах реального времени и предназначенный для автоматизации задач управления процессами и/или устройствами, например, в бортовых (корабельных, авиационных и др.) ЭВМ. Разработан по инициативе министерства обороны США в 1980-х гг. Назван в честь английского математика Ады Августы Байрон ( Лавлейс), жившей в 1815-1851 гг.

Дартмутском колледже Томасом Куртом и Джоном Кемени . Первоначально предназначался для обучения программированию. Отличается простотой, легко усваивается начинающими программистами благодаря наличию упрощенных конструкций языка Фортран и встроенных математических функций, алгоритмов и операторов. Существует множество различных версий Бейсика, которые не полностью совместимы друг с другом. Некоторые реализации Бейсика включают средства обработки данных и наборов данных. Большинство версий Бейсика используют интерпретатор, который преобразует его компоненты в машинный код и позволяет запускать программы без промежуточной трансляции. Некоторые более совершенные версии Бейсика позволяют использовать для этой цели трансляторы. На IBM PC широко используются Quick Basic фирмы Microsoft, Turbo Basic фирмы Borland и Power Basic (усовершенствованная версия Turbo Basic, распространяемая фирмой Spectra Publishing ). В начале 1999 г. фирма Microsoft выпустила версию языка Visual Basic 6.0 (VB 6.0), предназначенного для создания многокомпонентных программных приложений для систем уровня предприятий. Подробнее о нем см. [429].

Кобол [COBOL – COmmon Buisiness-Oriented Language] – Язык программирования высокого уровня, разработанный в конце 1950-х гг. ассоциацией КАДАСИЛ для решения коммерческих и экономических задач. Отличается развитыми средствами работы с файлами. Поскольку команды программ, написанных на этом языке, активно используют обычную английскую лексику и синтаксис, Кобол рассматривается как один из самых простых языков программирования. В настоящее время используется для решения экономических, информационных и других задач.

Лисп [LISP – LISt Processing] – Алгоритмический язык, разработанный в 1960 г. Дж. Маккарти и предназначенный для манипулирования перечнями элементов данных. Используется преимущественно в университетских лабораториях США для решения задач, связанных с искусственным интеллектом. В Европе для работ по искусственному интеллекту предпочитают использовать Пролог .

ЛОГО [LOGO от греч. logos – слово ] – Язык программирования высокого уровня, разработан в Массачусетском технологическом институте в ориентировочно 1970 г. для целей обучения математическим понятиям. Используется также в школах и пользователями ПЭВМ при написании программ для создания чертежей на экране монитора и управления перьевым графопостроителем .

Паскаль [PASCAL – акроним с французского – Program Applique a la Selection et la Compilation Automatique de la Litterature] – Процедурно-ориентированный язык программирования высокого уровня, разработанный в конце 1960-х гг. Никлаусом Виртом, первоначально для обучения программированию в университетах. Назван в честь французского математика XVII века Блеза Паскаля. В своей начальной версии Паскаль имел довольно ограниченные возможности, поскольку предназначался для учебных целей, однако последующие его доработки позволили сделать его хорошим универсальным языком, широко используемым в том числе для написания больших и сложных программ. Существует ряд версий языка (например, ETH Pascal, USD Pascal, Turbo Pascal ) и систем программирования на этом языке для разных типов ЭВМ. Для IBM PC наиболее популярной является система Turbo Pascal фирмы Borland (США).

Пролог [PROLOG – PROgramming in LOGic] – Язык программирования высокого уровня декларативного типа (см. выше декларативное программирование), предназначенный для разработки систем и программ Бейсик [BASIC – Beginner’s All-purpose Symbolic Instruction Code] – Язык программирования высокого уровня , разработанный в 1963 – 1964 гг. в искусственного интеллекта. Относится к категории языков пятого поколения. Был разработан в 1971 г. в университете г. Марсель (Франция), относится к числу широко используемых и постоянно развиваемых языков. Последняя его версия Prolog 6.0.

Си [C ] – Многоцелевой язык программирования высокого уровня, разработанный Денисом Ритчи в начале 1970-х гг. на базе языка BCPL. Используется на миниЭВМ и ПЭВМ. Является базовым языком операционной системы Unix , однако применяется и вне этой системы, для написания быстродействующих и эффективных программных продуктов, включая и операционные системы. Для IBM PC имеется ряд популярных версий языка Си, в том числе – Turbo C (фирмы Borland), Microsoft C и Quick C ( фирмы Microsoft ), а также Zortech C (фирмы Symantec ). Многие из указанных версий обеспечивают также работу с Си и Си++ (см. ниже).

Си++ [C++] – Язык программирования высокого уровня, созданный Бьярном Страустрапом на базе языка Си. Является его расширенной версией, реализующей принципы объектно-ориентированного программирования. Используется для создания сложных программ. Для IBM PC наиболее популярной является система Turbo C++ фирмы Borland (США).

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

Содержание работы

Введение
Основная часть
1. Языки программирования высокого уровня
2. Логические выражения
Заключение
Глоссарий
Список использованных источников

Файлы: 1 файл

Основные данные о работе Языков программирования.doc

Содержание

Основные данные о работе

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

2. Логические выражения

Список использованных источников

Введение

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

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

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

Первыми популярными языками высокого уровня, появившимися в 1950-х гг., были Фортран, Кобол (в США) и Алгол (в Европе). Языки Фортран и Алгол были ориентированы на научно-технические расчеты математического характера. Кобол — язык для программирования экономических задач.

Большое количество языков программирования появилось в 1960—1970-х гг. А за всю историю ЭВМ их было создано более тысячи. Но распространились, выдержали испытание временем немногие. В 1965 г. в Дартмутском университете был разработан язык Бейсик. По замыслу авторов это простой язык, легко изучаемый, предназначенный для программирования несложных расчетных задач.

В эпоху ЭВМ третьего поколения получил большое распространение язык PL/I (Program Language One), разработанный фирмой IBM. Это был первый язык, претендовавший на универсальность, т. е. на возможность решать любые задачи: вычислительные, обработки текстов, накопления и поиска информации. Однако PL/I оказался слишком сложным языком.

Значительным событием в истории языков программирования стало создание в 1971 г. языка Паскаль. Его автор — швейцарский профессор Н.Вирт — разрабатывал Паскаль как учебный язык структурного программирования.

Наибольший успех в распространении этого языка обеспечили персональные компьютеры. Фирма Borland International, Inc (США) разработала систему программирования Турбо Паскаль для ПК

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

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

Си++ Международная система единиц, СИ (фр. Le Syst?me International d’Unit?s, SI) — система единиц физических величин, современный вариант метрической системы. СИ является наиболее широко используемой системой единиц в мире, как в повседневной жизни, так и в науке и технике. В настоящее время СИ принята в качестве основной системы единиц большинством стран мира и почти всегда используется в области техники, даже в тех странах, в которых в повседневной жизни используются традиционные единицы. В этих немногих странах (например, в США) определения традиционных единиц были изменены таким образом, чтобы связать их фиксированными коэффициентами с соответствующими единицами СИ.

Полное официальное описание СИ вместе с её толкованием содержится в действующей редакции Брошюры СИ (фр. Brochure SI, англ. The SI Brochure), опубликованной Международным бюро мер и весов (МБМВ) и представленной на сайте МБМВ[1]. Брошюра СИ издаётся с 1970 года, с 1985 года выходит на французском и английском языках, переведена также на ряд других языков.

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

Традиционный Лисп имеет динамическую систему типов. Язык является функциональным, но начиная уже с ранних версий обладает также чертами императивности, к тому же, имея полноценные средства символьной обработки, позволяет реализовать объектно-ориентированность; примером такой реализации является платформа CLOS.

Язык Лисп является языком системного программирования для так называемых Лисп-машин, производившихся в 80-е годы, например, фирмой Symbolics.

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

Пролог (фр. Programmation en Logique) — язык и система логического программирования, основанные на языке предикатов математической логики дизъюнктов Хорна, представляющей собой подмножество логики предикатов первого порядка.

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

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

Факты в базах знаний на языке Пролог представляют конкретные сведения (знания). Обобщённые сведения и знания в языке Пролог задаются правилами логического вывода (определениями) и наборами таких правил вывода (определений) над конкретными фактами и обобщёнными сведениями.

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

Вот некоторые наиболее популярные языки программирования:

Ассе?мблер (от англ. assembler — сборщик) — компилятор исходного текста программы, написанной на языке ассемблера, в программу на машинном языке.

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

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

Ло?го (англ. Logo) — язык программирования высокого уровня, разработанный в 1967 году Сеймуром Пейпертом и Идит Харель в образовательных целях для обучения детей дошкольного и младшего школьного возраста основным концепциям программирования (рекурсии, расширяемости и пр.) Logo также обеспечивает среду, в которой дети могут развивать свои навыки рассуждений и решений задач.

Бе?йсик (от BASIC, сокращение от англ. Beginner’s All-purpose Symbolic Instruction Code — универсальный код символических инструкций для начинающих[1]) — семейство высокоуровневых языков программирования.

Был разработан в 1964 году профессорами Дартмутского колледжа Томасом Курцем и Джоном Кемени.[2]

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

Основная часть

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

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

Высокоуровневые языки программирования были разработаны для платформенной независимости сути алгоритмов. Зависимость от платформы перекладывается на инструментальные программы — трансляторы, компилирующие текст, написанный на языке высокого уровня, в элементарные машинные команды (инструкции). Поэтому, для каждой платформы разрабатывается платформенно-уникальный транслятор для каждого высокоуровневого языка, например, переводящий текст, написанный на Delphi в элементарные команды микропроцессоров семейства x86.

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

Всякий язык программирования имеет три основные составляющие: алфавит, синтаксис и семантику.

Алфавит — это фиксированный для данного языка набор основных символов, т.е. “букв алфавита”, из которых должен состоять любой текст на этом языке — никакие другие символы в тексте не допускаются.

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

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

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

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

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

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

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

Они создаются отдельно для каждой платформы, под конкретный высокоуровневый язык программирования. К примеру, программа транслятор может переводить текс с языка Delphi в машинный код микропроцессора серии x86.

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

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

Попытка создать первый высокоуровневый язык программирования была предпринята еще во время Второй Мировой Войны. Его разработал немецкий инженер, дав ему имя Plankalkül. В 50-е годы эволюция компьютеров привела к началу новой эры программирования. Тогда был создан первый язык программирования, позволяющий писать код независимо от типа процессора, Fortran.

Ваш Путь в IT начинается здесь

Подробнее

Появление парадигмы структурного программирования стало революционным шагом в развитии программирования. Это позволило писать код большего объема с меньшими усилиями. А логичная структура программы облегчала тестирование и позволяла избежать множества ошибок. Задачу по созданию языка программирования в свое время пытались решить и военные США. В результате этих разработок в начале восьмидесятых годов прошлого столетия появился язык Ada.

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

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

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

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

Плюсы и минусы высокоуровневых языков программирования

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

Язык высокого уровня [high-level language] – Язык программирования, средства которого обеспечивают описание задачи в наглядном, легко воспринимаемом виде, удобном для программиста. Он не зависит от внутренних машинных кодов ЭВМ любого типа, поэтому программы, написанные на языках высокого уровня, требуют перевода в машинные коды программами транслятора либо интерпретатора. К языкам высокого уровня относят Фортран , ПЛ/1 , Бейсик , Паскаль , Си , Ада, C++, Visual Basic, Java, Python, Ruby, Perl, Delphi (Pascal), PHP.

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

Первым языком программирования высокого уровня считается компьютерный язык Plankalkul разработанный немецким инженером Конрадом Цузе ещё в период 1942—1946 гг. Однако, широкое применение высокоуровневых языков началось с возникновением Фортрана и созданием компилятора для этого языка (1957).

Ада [Ada] – Язык программирования высокого уровня, ориентированный на применение в системах реального времени и предназначенный для автоматизации задач управления процессами и/или устройствами, например, в бортовых (корабельных, авиационных и др.) ЭВМ. Разработан по инициативе министерства обороны США в 1980-х гг. Назван в честь английского математика Ады Августы Байрон ( Лавлейс), жившей в 1815-1851 гг.

Дартмутском колледже Томасом Куртом и Джоном Кемени . Первоначально предназначался для обучения программированию. Отличается простотой, легко усваивается начинающими программистами благодаря наличию упрощенных конструкций языка Фортран и встроенных математических функций, алгоритмов и операторов. Существует множество различных версий Бейсика, которые не полностью совместимы друг с другом. Некоторые реализации Бейсика включают средства обработки данных и наборов данных. Большинство версий Бейсика используют интерпретатор, который преобразует его компоненты в машинный код и позволяет запускать программы без промежуточной трансляции. Некоторые более совершенные версии Бейсика позволяют использовать для этой цели трансляторы. На IBM PC широко используются Quick Basic фирмы Microsoft, Turbo Basic фирмы Borland и Power Basic (усовершенствованная версия Turbo Basic, распространяемая фирмой Spectra Publishing ). В начале 1999 г. фирма Microsoft выпустила версию языка Visual Basic 6.0 (VB 6.0), предназначенного для создания многокомпонентных программных приложений для систем уровня предприятий. Подробнее о нем см. [429].

Кобол [COBOL – COmmon Buisiness-Oriented Language] – Язык программирования высокого уровня, разработанный в конце 1950-х гг. ассоциацией КАДАСИЛ для решения коммерческих и экономических задач. Отличается развитыми средствами работы с файлами. Поскольку команды программ, написанных на этом языке, активно используют обычную английскую лексику и синтаксис, Кобол рассматривается как один из самых простых языков программирования. В настоящее время используется для решения экономических, информационных и других задач.

Лисп [LISP – LISt Processing] – Алгоритмический язык, разработанный в 1960 г. Дж. Маккарти и предназначенный для манипулирования перечнями элементов данных. Используется преимущественно в университетских лабораториях США для решения задач, связанных с искусственным интеллектом. В Европе для работ по искусственному интеллекту предпочитают использовать Пролог .

ЛОГО [LOGO от греч. logos – слово ] – Язык программирования высокого уровня, разработан в Массачусетском технологическом институте в ориентировочно 1970 г. для целей обучения математическим понятиям. Используется также в школах и пользователями ПЭВМ при написании программ для создания чертежей на экране монитора и управления перьевым графопостроителем .

Паскаль [PASCAL – акроним с французского – Program Applique a la Selection et la Compilation Automatique de la Litterature] – Процедурно-ориентированный язык программирования высокого уровня, разработанный в конце 1960-х гг. Никлаусом Виртом, первоначально для обучения программированию в университетах. Назван в честь французского математика XVII века Блеза Паскаля. В своей начальной версии Паскаль имел довольно ограниченные возможности, поскольку предназначался для учебных целей, однако последующие его доработки позволили сделать его хорошим универсальным языком, широко используемым в том числе для написания больших и сложных программ. Существует ряд версий языка (например, ETH Pascal, USD Pascal, Turbo Pascal ) и систем программирования на этом языке для разных типов ЭВМ. Для IBM PC наиболее популярной является система Turbo Pascal фирмы Borland (США).

Пролог [PROLOG – PROgramming in LOGic] – Язык программирования высокого уровня декларативного типа (см. выше декларативное программирование), предназначенный для разработки систем и программ Бейсик [BASIC – Beginner’s All-purpose Symbolic Instruction Code] – Язык программирования высокого уровня , разработанный в 1963 – 1964 гг. в искусственного интеллекта. Относится к категории языков пятого поколения. Был разработан в 1971 г. в университете г. Марсель (Франция), относится к числу широко используемых и постоянно развиваемых языков. Последняя его версия Prolog 6.0.

Си [C ] – Многоцелевой язык программирования высокого уровня, разработанный Денисом Ритчи в начале 1970-х гг. на базе языка BCPL. Используется на миниЭВМ и ПЭВМ. Является базовым языком операционной системы Unix , однако применяется и вне этой системы, для написания быстродействующих и эффективных программных продуктов, включая и операционные системы. Для IBM PC имеется ряд популярных версий языка Си, в том числе – Turbo C (фирмы Borland), Microsoft C и Quick C ( фирмы Microsoft ), а также Zortech C (фирмы Symantec ). Многие из указанных версий обеспечивают также работу с Си и Си++ (см. ниже).

Си++ [C++] – Язык программирования высокого уровня, созданный Бьярном Страустрапом на базе языка Си. Является его расширенной версией, реализующей принципы объектно-ориентированного программирования. Используется для создания сложных программ. Для IBM PC наиболее популярной является система Turbo C++ фирмы Borland (США).

Читайте также:

      

  • Голосовые помощники доклад по информатике
  •   

  • Доклад на тему развитие способностей у детей
  •   

  • Цифровые образовательные ресурсы в начальной школе презентация и доклад
  •   

  • Доклад по биологии морской камнеточец
  •   

  • Переосмысление прошлого и ориентиры на будущее доклад

Содержание:

ВВЕДЕНИЕ

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

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

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

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

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

  1. Анализ истории языков программирования;
  2. Определение понятия языка программирования;
  3. Анализ видов языков программирования высокого уровня;

Объект курсовой работы – языки программирования и история их развития. Предмет курсовой работы – разработанная программа на языке программирования высокого уровня С++.

Степень разработанности проблемы. В процессе исследования были проанализированы работы, посвященные анализу истории, понятия языков программирования. Весомый вклад в исследование данных вопросов внесли отечественные ученые: Акулич, И.Л., Балдин, К.В., Грошев А.С., Зрюмова А.Г., Зрюмов Е.А., Пронин С.П., и другие.

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

Теоретическая значимость курсовой работы состоит в том, что в процессе рассмотрения данной темы с различных позиций, используются взгляды и мнения различных авторов, таких как Вайсфельд Мэтт., Меженный О.А., Орлова И.В., Таганов Л.С., Пимонов А.Г., Меняев М.Ф., Карпов Ю.Г., Цветкова М.С., Великович Л.С., Хубаева Г.Н., Акулич, И.Л., Балдин, К.В., Грошев А.С., Зрюмова А.Г., Зрюмов Е.А., Пронин С.П.

Основная часть

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

1.1 Понятие языка программирования

В современном мире все программы создаются при помощи языков программирования[1]. Теоретически программу можно написать и на естественном языке, впрочем, из-за неоднозначности естественного языка автоматически перевести такую программу в машинный код пока невозможно. Языки программирования – это формальные искусственные языки. Языки программирования в отличие от естественных языков обладает ограниченным запасом слов (операторов), и строгими правилами их написания, а что касается правил грамматики и семантики, то, как и для любого формального языка, они явно однозначно и четко сформулированы.

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

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

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

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

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

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

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

Разработать язык, который был бы удобный для написания программы – недостаточно, так как каждый язык должен обладать переводчиком, который и является специальной программой – транслятором. Транслятор – это программа, предназначенная для перевода софта, который был написан на одном языке программирования, в софт на другой язык программирования.[5] Данный процесс перевода носит название трансляцией. В качестве примера транслятора можно привести компилятор, являющийся программой. Компилятор предназначен для перевода софта, который написан на каком-либо языке, в софт в кодах машинного типа. Данный процесс носит название – компиляция. Существует еще один способ, который может сочетать в себе процессы трансляции и выполнения программ, и носит он название интерпретация. Суть интерпретации состоит в следующем: сперва переводится в коды машинного типа, затем выполняется первая строчка софта. Когда выполнение первой строчки закончено, начинается перевод второй строчки и так далее. Вследствие чего, можно сделать вывод, что интерпретацией называется программа, которая предназначается для построчных трансляций и исходной программы.

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

1.2 История развития языков программирования

История языков программирования начинается с высказанной в 20-х годах 19 века Ч.Бэббиджем мыслью о предварительной записи порядка действий машины – программе. Революционным моментом в истории языков программирования стало появление системы кодирования машинных команд с помощью специальных символов, которая была предложена Джоном Моучли, сотрудником Пенсильванского университета. Система кодирования Моучли, настолько увлекла одну из сотрудниц его компании, что она посвятила которая посвятила всю свою жизнь компьютерам и программированию. Данной женщиной является Грейс Мюррей Хоппер. Хоппер Г., в процессе работы на компьютере «Марк-i» столкнулась с многочисленными проблемами. В частности, они придумали подпрограммы.[7]

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

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

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

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

В середине 60-х годов был создан специализированный язык программирования, создателями которого являлись сотрудники математического факультета Дартмутского колледжа Томас Курц и Джон Кемени. Данный язык состоял из простых слов английского языка. Новый язык назвали BASIC.[8] Если рассматривать начало 60-х годов, то можно заметить что все существующие языки программирования высокого уровня можно было пересчитать по пальцам, впрочем, впоследствии их число достигло трех тысяч. Безусловно, большая часть языков не получила в истории языков программирования хоть какого-нибудь широкого распространения, так как в практической деятельности используется не более двух десятков. Разработчики ориентировали языки программирования на разные классы задач, в той или иной мере привязывали их к конкретным архитектурам ЭВМ, реализовывали личные вкусы и идеи. В 60-е годы в истории языков программирования были предприняты попытки преодолеть эту «разноголосицу» путем создания универсального языка программирования. И первым выпуском этого направления стал PL/I. PL/I – это Programm Language One. Затем на эту роль претендовал АЛГОЛ-68. Как ожидалось, что подобные языки будут развиваться и усовершенствоваться и вытеснят все остальные, впрочем, ни одна из этих попыток на сегодняшний день не увенчалась успехом. Всеохватность языка приводила к неоправданной, с точки зрения программиста, сложности конструкций, неэффективности компиляторов.

Конец 50 – х годов положил начало языку Алгол . Алгол (ALGOL) – от ALGOrithmic Language, что в переводе с английского означает алгоритмический язык. Язык программирования Алгол предназначен для записи алгоритмов, строящихся в виде последовательности процедур, которые применяются для решения поставленных задач. В 70 – х годах происходит развитие языка Алгол, что нашло свое отражение в процессе создания языка Паскаль . Его создателем был швейцарский ученый Ннклаус Вирт. Язык Паскаль изначально был разработан как учебный, и, действительно, сейчас он является одним из основных языков обучения программированию в школах и вузах.[9]

Начиная с конца 60-х годов и до начала 80 – х годов происходит бурный рост числа различных языков программирования, который сопровождается кризисом программного обеспечения. Данный кризис был особо заметен в военном ведомстве Соединенных Штатов Америки. И только в январе 1975 года, Пентагон все таки решил навести порядок в хаосе трансляторов, было принято решение учредить комитет, которому было предписано разработать один универсальный язык. Победившим языком стал АДА.

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

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

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

Объектно-ориентированный язык. Данный язык формирует окружение в виде множества независимых объектов, где каждый из них ведет себя подобно отдельному компьютеру. Объекты можно использовать для решения задач как «черные ящики», не вникая во внутренние механизмы их функционирования. Примерами языка объектного программирования, из числа основных, прежде всего, можно назвать язык Си++, а для более широкого крута программистов предпочтительны среды типа Delphi и Visual Basic.

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

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

Завершить данную главу хорошо бы на такой оптимистичной ноте, но нет, напоследок хочется сказать: «Единственный способ изучать новый язык программирования – писать на нём программы».

1.3 Примеры основных языков программирования

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

  1. Assembler. Язык Assembler – это язык, в котором каждый оператор соответствует ровно одной машинной команде, иными словами, в программе, написанной на Assembler, существует взаимно однозначное соответствие между машинными командами и операторами. Так, если каждая строка в ассемблерной программе содержит ровно один оператор, и каждое машинное слово содержит ровно одну команду, то из ассемблерной программы размером в п строк получится программа на машинном языке из п слов. Язык программирования Assembler обладает несколькими особенными чертами, которые отличают его от языков высокого уровня. Ими являются:
  2. Взаимно однозначное соответствие между операторами языка ассемблера и машинными командами.
  3. Программист, который пишет на ассемблере, обладает доступом ко всем объектам и командам целевой машины, в то время как, у программистов, пишущих на языках высокого уровня, такого доступа нет. К примеру, если целевая машина содержит бит переполнения, ассемблерная программа может проверить его, а Java-программа – нет.
  4. Ассемблерная программа может работать только на компьютерах одного семейства, а программа, которая написана на языке высокого уровня, потенциально может работать на разных машинах. Возможность переноса программного обеспечения с одной машины на другую очень важна для многих прикладных программ.
  5. Кобол. Под данной группой языков программирования понимается язык программирования, который применяется при описании программ для решения учетно-экономических и управленческих задач с помощью ЭВМ. Кобол обеспечивает наглядную и достаточно компактную запись алгоритмов в форме, независимой от конкретной ЭВМ. Кобол был разработан в США в 1958-1960 годах. Кобол был раскритикован за его многословность и громоздкость, так как одной из целей создателей языка было максимально приблизить конструкции к английскому языку, но, несмотря на это, Кобол является обладателем прекрасными для своего времени средствами для работы со структурами данных и файлами. Кобол стал первым языком, в котором появился тип данных «запись». И до сего времени, каждый год пишутся миллионы новых строк кода на Коболе.
  6. Фортран. Язык программирования Фортран (Fortran) является первым алгоритмическим языком программирования, который был создан ещё в 1954 году программистом John Warner Backus в фирме IBM. Его название является аббревиатурой от FORmula TRANslator, т.е. интерпретатор формул. Фортран широко использовался в основном для научных и инженерных вычислений, вместе с тем, он идеально подходит для решения численных задач, так как за 50 с лишним лет написано множество библиотек, поэтому языком пользуются сейчас и в ближайшем будущем ему не грозит забвение. На данный момент Фортран занимает достаточно скромное место среди языков программирования и его известность никак не может сравниться с былой популярностью в 60-70-е годы, но это совершенно не означает, что Фортран умер, как некоторые его старые конкуренты (Algol 60 и Algol 68, PL/1). Фортран жив. В чем же причина такого долголетия? Фортран занимает свою нишу – решение научно-технических задач и математическая обработка числовых данных. Помимо этого нужно отметить еще и следующее:

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

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

– Огромный объем готовых математических разработок.

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

  1. C и C++. Язык программирования С – это компилируемый статически типизированный язык программирования общего назначения, который был разработан в 1969—1973 годах сотрудником Bell Labs Деннисом Ритчи как развитие языка Би. Язык программирования С оказал значительное воздействие на развитие индустрии программного обеспечения, а его синтаксис стал основой для таких языков программирования, как C++, C#, Java и D. Язык программирования С++ является языком общего назначения, который сочетает в себе свойства как низкоуровневых, так и высокоуровневых языков и поддерживает различные парадигмы программирования. В языке программирования С++, в отличие от языка С, разработчики уделили особое внимание поддержке обобщённого и объектно-ориентированного программирования. В названии «C++», ++ – это инкремент переменной. Язык программирования С++ обширно используется для разработки программного обеспечения, поскольку он является очень популярным языком программирования. Области применения Языка программирования С++: создание разнообразных прикладных программ, операционных систем, высокопроизводительных серверов, приложений для встраиваемых систем, драйверов устройств, а также развлекательных приложений.[10]
  2. Ада. Данный язык программирования был назван в часть Августы Ады Байрон, графини Лавлейс и дочери английского поэта лорда Байрона, она являлась ассистентом, коллегой и сторонницей Чарльза Беббиджа, математика и изобретателя вычислительной машины, названной аналитической машиной. В 1830 году, при помощи Ч. Беббиджа ей была написана практически законченная программа на аналитической машине для вычисления чисел Бернулли, и потому графиню можно назвать первым в мире программистом на вычислительной машине.

Язык Ада – это современный язык программирования, который содержит такие возможности паскалеподобных языков, как определение типов, общие управляющие структуры и подпрограммы. Язык АДА поддерживает логическую модульность, для которой данные, типы и подпрограммы – все могут быть пакетами. Язык Ада поддерживает программирование в реальном масштабе времени за счет механизмов распараллеливания и обработки исключений. Разработка программ на языке Ада обходится на 60% дешевле аналогичных программных проектов, которые реализуются на Си. Вместе с тем, программа на языке Ада обладает меньшим количеством дефектов в 9 раз меньше, чем программа на Си. Что является безусловным плюсом так это то, что трудоемкость изучения языка Ада не выше трудоемкости изучения Си. Программы на Аде более надежны, чем программы на Си.

  1. BASIC (Beginner’s All-purpose Symbolic Instruction Code). Язык программирования BASIC – это семейство высокоуровневых языков программирования, который был разработан профессорами Дартмутского колледжа Томасом Курцем и Джоном Кемени в 1963 году. Изначально BASIC предназначался для обучения программированию, он получил широкое распространение в виде разнообразных диалектов, прежде всего как язык для домашних компьютеров. Вторая жизнь BASIC началась в связи с появлением Visual Basic от Microsoft. На протяжении долго времени BASIC подвергается жёсткой критике за то, что его простота и бесструктурность поощряют порочные методики и привычки программирования, которые могут быть уместны при создании малых программ, но способны привести к краху крупных проектов.
  2. Pascal.[11] Данный язык является языком программирования высокого уровня, впрочем, он очень устарел морально, так как мир не стоит на месте, и иные языки, такие как: C# и Java обладает большей востребовательностью и эффективностью написания кода в отличие от Паскаля. Данный язык не столько для применения, как для обучения в учебных заведениях, и потому что он прост для понимания, и нанести вред системе от некорректного кода пользователя не может. Особенностями Pascal являются: – строгая типизация; – наличие средств структурного (процедурного) программирования.[12]
  3. Delphi. Язык программирования Delphi – это язык программирования, на основе языка Pascal является объектно-ориентированным. Язык программирования Delphi пользуется популярностью среди программистов, поскольку предоставляет значительные возможности в реализации тех или иных программ, при относительной своей простоте. Delphi по своей сути является комбинацией нескольких важных технологий:

– Высокопроизводительный компилятор в машинный код;

– Объектно-ориентированная модель компонент;

– Визуальное построение приложений из программных прототипов;

– Масштабируемые средства для построения баз данных.[13]

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

  1. Лисп. Язык программирования Lisp – это целое множество языков программирования, код программ в которых, также как и данные, представляются системами линейных списков символов. Язык программирования Lisp считается вторым в истории высокоуровневым языком программирования после Фортрана, а так же он применяется до сих пор. Но его так же не обошли стороной изменения, на сегодняшний день наиболее широкую известность приобрели диалекты «Common Lisp» и «Scheme». Изначально Язык программирования Lisp применялся для символьной обработки данных, а также в областях, которые связаны с процессами принятия решений, а данный же момент, пожалуй, самый популярный на сегодня диалект можно назвать универсальным языком программирования. Он активно применяется для решения самых разнообразных задач.
  2. Пролог. Язык программирования Пролог – это язык и система логического программирования, который основан на языке предикатов математической логики дизъюнктов Хорна, представляющей собой подмножество логики предикатов первого порядка. В основные понятия языка Пролог входят факты, правила логического вывода и запросы, которые предоставляют возможность описывать базы знаний, процедуры логического вывода и принятия решений. Факты в языке Пролог описываются логическими предикатами с конкретными значениями. По своей природе язык Пролог – уникален, так как это единственный язык, представляющий парадигму декларативного программирования. Так же он обладает сотнями различных имплементаций, но они все равно называются Prolog, добавляя лишь префиксы и суффиксы к названию. Пролог – это живой язык, в котором не происходит никаких существенных изменений более 20 лет.[14]
  3. ЛОГО. Язык программирования Лого – это язык программирования, который был разработан в 1967 году в Лаборатории Искусственного Интеллекта Массачусетского технологического института, профессором Сеймуром Папертом, специально для развития мышления, творческих и исследовательских способностей детей и подростков.

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

  1. Java. Язык программирования Java является объектно-ориентированным языком программирования, который был разработан компанией Sun Microsystems с 1991 года и официально выпущенный 23 мая 1995 года. Программирование на Java обладает тем преимуществом, что код, написанный на данном языке программирования, переводится с помощью соответствующей программы-транслятора в так называемый байт-код, а он, в свою очередь, — в машинный код с помощью виртуальной машины Java. Поэтому написанная на Java программа выполняема на любом компьютере с любой системой, лишь бы на нем была установлена виртуальная машина Java. Таким образом, и обеспечивается одно из главных преимуществ языка Java — переносимость создаваемых на нем программ на компьютеры разных типов.
  2. Алгол. Язык программирования Алгол – это название семейства императивных языков программирования, которые применяются при составлении программ для решения научно-технических задач на ЭВМ. Алгол был первым языком программирования, использующим пары begin end для выделения блоков выражений. Язык программирования Алгол прошел долгий путь, и необходимо заметить, что, не смотря на повсеместное использование языка в европейских странах, в США он не нашел широкого распространения, что прежде всего, объясняется коммерческими соображениями: пользователи, затратив значительные средства на ФОРТРАНовское программное обеспечение, стали противниками каких-либо изменений в своей программистской практике.

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

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

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

Слово процедура является здесь ключевым элементом. Оно означает набор процедур, который представляет собой набор подпрограмм или набор функций. Мы все знаем о функциях в языке C. C это процедурно-ориентированный язык. В Процедурно-ориентированных языках основное внимание уделяется функциям или подпрограммам. Функции содержат набор команд, выполняющих определенную задачу. Функции в программе вызываются повторно для выполнения определенных задач. Например, программа может включать в себя сбор данных от пользователя (чтение), выполнения какого-то рода расчетов, собранных данных (вычисление) и отображения результатов по запросу пользователя (вывод). Все эти три задачи, чтение, вычисление и вывод результатов, могут быть написаны в программе с помощью трех различных функций, выполняющих три различные задачи.[15] Структура методики Процедурно-ориентированного языка программирования представлен на рисунке 1.

методика процедурно-ориентированного программирования

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

Проблема при применении процедурно-ориентированного языка программирования заключается в обработке данных. В процедурно-ориентированном языке программирования данным не придается никакого значения. Под данными мы понимаем информацию, полученную от пользователя, новые результаты, полученные после вычислений, и т.д. Если вы знакомы с программированием на C, то можете вспомнить классы памяти (storage classes) этого языка. В C элемент данных (переменная) должен быть объявлен как GLOBAL для того, чтобы он мог быть доступен двум или более функциям программы. Что происходит, когда 2 или более функций работают с одним и тем же элементом данных? Если в программе насчитывается 10 функций, то все эти 10 функций могут получить доступ к глобальной переменной. 

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

Одной из наиболее важных особенностей языка C являются структуры. Тот, кто знаком с этим языком, вспомнит, что структуры в C объявляются с помощью ключевого слова struct. Структуры позволяют упаковать вместе разные типы данных в единое целое. Программист может упаковать целочисленные данные, числа с плавающей точкой (float), массивы и прочие виды данных в единый объект с помощью структуры. Способ программирования с помощью структур был впервые введен в языке C, и это послужило основной причиной столь широкой популярности данного языка. И какова же истинная причина этого? Структура достаточно хорошо моделирует требования реального мира в компьютерной программе. Проблемой, связанной со структурами, было то, что она работала только с данными. Структура не позволяет упаковать вместе связанные функции наряду с данными. Все функции, манипулирующие с элементами данных внутри структуры должны быть написаны отдельно внутри программы. По этой причине программа на C имеет большую зависимость от функций.[17]

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

Среди наиболее популярных процедурно- ориентированных языков можно выделить:

1) язык Фортран (Fortran), название которого переводится как Formulae Translation — «преобразование формул»;

2) язык Бейсик (Basic), чье название расшифровывается как «Beginner’s All-purpose Symbolic Instruction Code» (BASIC) — «многоцелевой символический обучающий код для начинающих», был создан в 1964 г. как язык для обучения программированию. Бейсик по своим возможностям не уступает Фортрану, а по некоторым параметрам даже превосходит его;

3) язык Си (С), созданный в 1970-е гг. сотрудником лаборатории Bell Labs Д. Ритчи. Си разрабатывался как специальный язык системного программирования для написания операционной системы UNIX (первоначально реализованной на ассемблере);

4) язык Паскаль (Pascal), названный в честь французского ученого Б. Паскаля, был разработан в 1968—1971 гг. Н. Виртом. Изначально Паскаль создавался для обучения программированию, однако в дальнейшем стал широко использоваться для разработки программных средств профессиональными программистами.

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

2.2 Проблемно-ориентированные языки программирования

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

1. Язык ЛИСП (Lisp — List Information SymbolProcessing), который был изобретен в 1962 г. Дж. Маккарти. Благодаря ЛИСПу возникла совершенно новая для программистов область деятельности — «искусственный интеллект». В настоящее время ЛИСП применяется в экспертных системах, системах аналитических вычислений и т.п.;

2. Язык Пролог (Prolog — Programming in Logic),возникший как язык логического программирования для систем искусственного интеллекта. В основе Пролога лежат средства логического вывода, решающие запросы с использованием заданной базы фактов и правил, к которым обращаются как к утверждениям. Концепция объектно-ориентированного программирования основывается на том, что в основе управления процессом реализации программы лежит передача сообщений объектам.[18]

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

1. Свойство абстракции, т.е. наличия формального представления о качествах или свойствах предмета путем мысленного удаления некоторых частностей или материальных объектов;

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

3. Свойство наследования, т.е. наличия процесса, с помощью которого один объект приобретает свойства другого, т.е. свойства иерархической классификации;

4. Свойство полиморфизма, т.е. наличия возможности использовать один и тот же интерфейс для общего класса действий.[19]

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

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

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

2.3 Объектно-ориентированные языки программирования

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

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

Базовая концепция ООП основана на понятии, схожем с понятием структуры в ПОП и называемым классом. Класс представляет собой важную особенность ООП, он позволяет упаковать вместе различные типы данных наряду с различными функциями, манипулирующими элементами данных этого класса. Элементы данных внутри класса могут быть объявлены как локальные (private) или глобальные (public). Для того, чтобы спрятать данные от внешнего мира, программист должен объявить их как private. В общем, класс действительно схож со структурой в языке C. Как и любая структура, он объединяет в единое целое различные объекты. Основное отличие между классом и структурой кроется в функциях. Структуры не позволяют объединять в себе данные и функции (структуры работают только с данными), тогда как классы позволяют упаковывать данные вместе со связанными с ними функциями.

Кроме того, имеются еще различия, вроде сокрытия данных с помощью private/public. Структуры не облегчают сокрытие данных. В структуре к ее элементам получают доступ с помощью так называемых структурных переменных. В ООП используют другое понятие для доступа к данным и функциям внутри класса — объект. Данные и функции внутри класса называются членами или элементами класса. К элементу класса может быть получен доступ из внешнего мира (вне класса) только с помощью объекта класса.

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

Еще одной особенностью, привнесенной в ООП, является возможность повторного использования кода. Это просто означает то, что кусок кода, который был написан ранее, может быть использован в будущем. Это стало возможным благодаря особенности классов под названием наследование. Благодаря наследованию один класс может приобрести свойства другого класса. Это можно объяснить с помощью простого примера. Возьмем систему школьного управления. Изначально руководство решило разработать программу, сфокусированную только на учеников (без учета данных об учителях). Программист превосходно справился со своей работой, и в процессе программирования он объявил класс для сбора персональных данных, таких как имя, возраст, пол, адрес и т.д. Через год руководство школы решило включить в список данные об учителях. Теперь программист способен добавить эти данные за очень короткое время, поскольку он может использовать многие части кода, которые он написал ранее, благодаря наследованию. Класс персональных данных имеет общий характер (возраст, пол и пр. те же самые для человека вне зависимости от того, учитель он или ученик). Программист может наследовать данный класс новому классу, а также расширять этот новыми записями, например, записью о квалификации учителя. У ООП имеется еще много возможностей, вроде полиморфизма (перегрузки операторов и функций), динамического связывания и т.д. Обо всем этом можно почитать в соответствующей литературе.[21]

Ниже представим неполный список объектно-ориентированных языков программирования: C#; C++; Java; Delphi; Eiffel; Simula; Objective-C; Swift; Object Pascal; Visual DataFlex; Perl; PowerBuilder; Python; Scala; ActionScript (3.0); Dylan; JavaScript; JScript .NET; Ruby; Smalltalk; Ada; Xbase++; X++; Vala; PHP; Cyclone.

3 Составление программы на примере языка программирования C++

3.1 Обоснование выбора языка программирования

В качестве задания мной была выбрана задача коммивояжера. Задача коммивояжёра (англ. Travelling salesman problem, сокращённо TSP) — одна из самых известных задач комбинаторной оптимизации, заключающаяся в отыскании самого выгодного маршрута, проходящего через указанные города хотя бы по одному разу с последующим возвратом в исходный город. В условиях задачи указываются критерий выгодности маршрута (кратчайший, самый дешёвый, совокупный критерий и тому подобное) и соответствующие матрицы расстояний, стоимости и тому подобного. Как правило, указывается, что маршрут должен проходить через каждый город только один раз — в таком случае выбор осуществляется среди гамильтоновых циклов.

В качестве языков программирование был выбран С++, так как в нем:

  1. Поддерживаются различные стили и технологии программирования, включая традиционное директивное программирование, ООП, обобщённое программирование, метапрограммирование (шаблоны, макросы).
  2. Предсказуемое выполнение программ является важным достоинством для построения систем реального времени.
  3. Автоматический вызов деструкторов объектов при их уничтожении, причём в порядке, обратном вызову конструкторов.
  4. Пользовательские функции-операторы позволяют кратко и ёмко записывать выражения над пользовательскими типами в естественной алгебраической форме.
  5. Язык поддерживает понятия физической (const) и логической (mutable) константности.
  6. Используя шаблоны, возможно создавать обобщённые контейнеры и алгоритмы для разных типов данных, а также специализировать и вычислять на этапе компиляции.
  7. Возможность имитации расширения языка для поддержки парадигм, которые не поддерживаются компиляторами напрямую.
  8. Возможность создания встроенных предметно-ориентированных языков программирования.
  9. Используя шаблоны и множественное наследование можно имитировать классы-примеси и комбинаторную параметризацию библиотек.
  10. Кроссплатформенность: стандарт языка накладывает минимальные требования на ЭВМ для запуска скомпилированных программ.
  11. Эффективность. Язык спроектирован так, чтобы дать программисту максимальный контроль над всеми аспектами структуры и порядка исполнения программы.
  12. Имеется возможность работы на низком уровне с памятью, адресами.

3.2 Пример решения задачи коммивояжера методом Прима на C++

Алгоритм исходника решения задачи коммивояжера методом Прима на C++:

Пусть n – это количество вершин графа. Тогда в цикле n-1 выбирается самое короткое еще не выбранное ребро при условии, что оно не образует цикла с уже выбранным. Для проверки того, что новое ребро не образует цикла с уже выбранными, каждую вершину i окрашивают в отличный от других цвет i. При выборе очередного ребра, скажем (i, j), где i и j имеют разные цвета, вершина j и все, окрашенные в ее цвет (т. е. ранее с ней соединенные) перекрашиваются в цвет i.

Таким образом после выбора n-1 ребер все вершины получают один цвет.  Алгоритм Прима: 

1. (ввод). Ввести матрицу расстояний D={dij}, i,j=1,…,n. 

2. (инициализация). Приписать разные цвета всем вершинам: coli:=i; длина дерева L:=0. 

3. (общий шаг). В цикле по k:=1 to n-1 do найти ребро минимальной длины между вершинами разного цвета: пусть это ребро (i,j).

Запомнить результат: res1[k]:=i; res2[k]:=j;

Перекрасить вершины: I1:=col[i]; j1:=col[j].

В цикле по m:=1 to n do If col[m]=j1 then col[m]:=i1;

Нарастить длину дерева: L:=L+d[i,j].

Конец цикла по k.

4.(вывод). Вывести res1, res2.

Код на C++

  1. #include <stdlib.h>
  2. #include <time.h>
  3. #include <stdio.h>
  4. int wpchk(int w, int *wpts)
  5. {
  6. int i=0;
  7. int flg=0;
  8. while(wpts[i]!=-1)
  9. {
  10. if(wpts[i]==w){flg=1;}
  11. i++;
  12. }
  13. if (flg==0) {return 0;} else return 1;
  14. }
  15. void main()
  16. {
  17. srand( (unsigned)time( NULL ) );
  18. //int prices[10][10];
  19. int waypoint[11]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1};
  20. int way[11]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
  21. int start=-1;
  22. int end=-1;
  23. int min;
  24. int imin;
  25. */// 0 1 2 3 4 5 6 7 8 9
  26. int prices[10][10]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //0
  27. 0, 0, 2, 9, 8, 0, 0, 0, 0, 0, //1
  28. 0, 2, 0, 3, 0, 20,0, 0, 0, 0, //2
  29. 0, 9, 3, 0, 7, 4, 0, 0, 0, 0, //3
  30. 0, 8, 0, 7, 0, 11,0, 0, 0, 0, //4
  31. 0, 0, 20,4, 11,0, 0, 0, 0, 0, //5
  32. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //6
  33. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //7
  34. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //8
  35. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};//9
  36. printf(“Enter № of start location:”);
  37. scanf(“%i”,&start);
  38. printf(“Enter № of finish location:”);
  39. scanf(“%i”,&end);
  40. waypoint[0]=start;
  41. int n=0;
  42. int w;
  43. while(waypoint[n]!=end)
  44. {
  45. min=0;
  46. w=waypoint[n];
  47. for(int i=0;i<10;i++)
  48. {
  49. if(((min==0)||((prices[w][i]<min)&&(prices[w][i]>0)))&&wpchk(i,waypoint)==0) {min=prices[w][i];imin=i;}
  50. }
  51. n++;
  52. waypoint[n]=imin;
  53. }
  54. printf(“nThe way is:n“);
  55. int i=0;
  56. while(waypoint[i]!=-1)
  57. {
  58. printf(“%i “,waypoint[i]);
  59. i++;
  60. }
  61. getchar();
  62. getchar();
  63. }

3.3 Решение задачи при помощи алгоритма Дейкстры на C++

Задача: Определить длину (Q) кратчайшего маршрута (L) коммивояжера.

Расстояния (Qij) между шестью городами представлены в таблице 1.

Таблица 1 – Условие задачи

Город

1

2

3

4

5

6

1

6

4

12

14

22

2

6

3

8

7

20

3

4

3

10

11

18

4

12

8

10

9

16

5

14

7

11

9

10

6

22

20

18

16

10

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

Построим математическую модель:

n – число городов.

Xi j , i, j=1..N – матрица затрат, где Ci j – затраты на переход из i-го города в j-й.

Xi j – матрица переходов с компонентами:

Xi j = -1, если коммивояжер совершает переход из i-го города в j-й,

Xi j = 0, если не совершает перехода,

где i, j = 1..N и i≠j.

Критерий:

, (1)

где Сij – матрица стоимости переходов,

Xij – матрица переходов, где xij=0, если переход совершен и xij=1 в противном случае

Ограничения:

, i = 1..N (2)

, j = 1..N (3)

Ui – Uj + N ⋅ Xi j ≤ N-1, i, j = 1..N, i ≠ j. (4)

, k= 1..N,t=k-1 (5)

Условие (2) означает, что коммивояжер из каждого города выезжает только один раз; условие (3) – въезжает в каждый город только один раз; условие (4) – обеспечивает замкнутость маршрута, содержащего N городов, и не содержащего замкнутых внутренних петель; условие (5) – принцип треугольника: ранее выбранный путь оказался длиннее предыдущего.

Разработка алгоритма. Задача коммивояжера является одной из знаменитых задач теории комбинаторики. Она была поставлена в 1934 году, и об неё, как об Великую теорему Ферма обламывали зубы лучшие математики. В своей области (оптимизации дискретных задач) задача коммивояжера служит своеобразным полигоном, на котором испытываются всё новые методы. В данном курсовом проекте реализуется задача коммивояжера методом алгоритма Дейкстры.

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

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

  1. Длина найденного ребра графа должна быть меньше или равна симметричному ребру графа. В противном случае выбирается симметричное ребро
  2. треугольника: ранее выбранный путь оказался длиннее предыдущего.

Представим разработанный код.

Код программы «Решение задачи коммивояжера с помощью алгоритма Дейкстры».

//

#include <vcl.h>

#include <tchar.h>

#include <stdio.h>

#include <conio.h>

//

void main()

{

int c2,c3,i,k,j,n,e,q,v,m,z,x,min,a,min2,h=0,c=0;

printf(“Koli4estvo gorodov : “);scanf(“%i”,&n); //ввод количество городов

int *t=new int[n];

int *t2=new int[n];

int **kg=new int*[n];

for(i=0;i<n;i++)

kg[i]=new int[n];

int **kg1=new int*[n];

for(i=0;i<n;i++)

kg1[i]=new int[n];

for(i=0;i<n;i++)

for(j=0;j<n;j++)

kg[i][j]=0;

for(i=0;i<n;i++) //заполнение расстояние между городами

for(j=i+1;j<n;j++)

{

printf(“vedite racto9nnie %i do %i: “,i+1,j+1);

scanf(“%i”,&kg[i][j]);

kg1[i][j]=kg[i][j];

}

clrscr();

printf(” “);

for(i=0;i<n;i++)

printf(“%3i”,i+1);

printf(“nnnn”);

for(i=0;i<n;i++) // заполнение массива городов симметрично

{

printf(“%2i “,i+1);

for(j=0;j<n;j++)

{

kg[j][i]=kg[i][j];

kg1[j][i]=kg[i][j];

printf(“%3i”,kg[i][j]);

}

printf(“nn”);

}

printf(“Vvedite na4al’nuy to4ky : “);scanf(“%i”,&k); //ввод с какого города гачгётся путь

k–;

e=k;x=k;

q=1;c2=0;

v=0;z=2;

t[0]=k;

do //поиск минимального пути между городами

{

min=99999;

for(j=x+1;j<n;j++)

if(min>=kg[x][j] && kg1[x][j]!=-1)

{

min=kg[x][j];

m=j;

}

for(j=0;j<x;j++)

if(min>kg[j][x] && kg1[j][x]!=-1)

{

min=kg[j][x];

m=j;

}

t2[q]=x;

t[q]=m;

for(j=x+1;j<n;j++)

kg1[x][j]=-1;

for(j=0;j<x;j++)

kg1[j][x]=-1;

x=m;

z=0;

for(i=0;i<n && z!=1;i++)

for(j=i+1;j<n;j++)

if(kg1[i][j]==-1)

v=1;

else

{v=3;z=1;break;}

q++;

}

while(v!=1);

t2[q]=x;t[q]=k;q++;v=q;z=0;q=0;c=0;c2=0;e=0;

do // проверка условий алгоритма Дейкстры

{

if(q!=0)

{ c=c+kg[t2[e]][t[q]];

c2=c-kg[t2[e-1]][t[q-1]]-kg[t2[e]][t[q]]+kg[t[q]][t[q-1]]+kg[t2[e-1]][t[q]];}

if(c>c2 && q!=0 && z<q)

{

z=t2[e];

t2[e]=t2[e-1];

t2[e-1]=z;

z=t[q-1];

t[q-1]=t[q-2];

t[q-2]=z;

z=q;

q=-1;e=-1;c=0;c2=0;

}

q++;

e++;

}

while(v!=q);

printf(“nnput : %i”,t[0]+1); //вывод пути

for(i=1;i<q;i++)

printf(“-%i”,t[i]+1);

printf(“nn”);

printf(“dlina puti : %i”,c);//вывод длинны пути

getch();

}

Описание программы.

Для начала вычислений необходимо ввести количество городов.

На рисунке 2 показан этап выбора количества городов.

программа задача коммивояжер тестирование

1

Рисунок 2 – Выбор количества городов

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

2

Рисунок 3 – Консоль программы после расчета данных

Перейдем к тестированию программы.

Определить длину (Q) кратчайшего маршрута (L) коммивояжера. Расстояния (QIJ) между шестью городами представлены в таблице 2.

Пройдем алгоритм вручную.

Начинаем движение с первого города в нашей таблице (Рисунок 4).

3

Рисунок 4 – Первый шаг расчета

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

3

Рисунок 5 – Второй шаг расчета

Таким образом, проделываем следующие шаги до последнего города.

Условия примера представляют собой симметричную задачу.

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

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

2

Рисунок 6 – Основная форма программы после вывода конечных данных

Ответ: длина маршрута равна 52, порядок обхода городов:

1→3→2→5→6→4→1

При выполнение ручных расчётов результаты получились положительными.

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

  1. Построена математическая модель;
  2. Описан алгоритм задачи;
  3. Разработан программный код на языке программирования C++;
  4. Решена поставленная задача с помощью разработанной программы;
  5. Проанализированы результаты;

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

Заключение

Одной из самых революционных идей, которая привела к созданию автоматических цифровых вычислительных машин, мысль о предварительной записи порядка действий машины – программе, предложенная в 19 веке 20 годах Ч.Бэббиджем, именно с этого момента началась история языков программирования. Языки программирования – это формальные искусственные, и, как и естественные языки, им присущ алфавит, словарный запас, грамматика и синтаксис, а также семантика. Изобретение языка программирования дало возможность человечеству общаться с машиной, понимать её, наподобие того как понимает китаец немного знакомый с русским языком древнюю азбуку Кириллицы. Иными словами, человек на данный момент развития науки программирования пока что с ЭВМ на ВЫ, и это совершенно не сарказм, достаточно только взглянуть на то как развилась наука программирования с того времени, как появились языки программирования, а ведь язык программирования высшего уровня, судя по всему ещё младенец. Единственным способом изучения нового языка программирования написание на нем программ.

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

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

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

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

Позволю себе выделить некоторую общую тенденцию в развитии языков программирования. Языки развиваются в сторону все большей и большей абстракции, что сопровождается эффективности. Отсюда возникает вопрос: а стоит ли этого абстракция? Скажу с уверенностью, что стоит, поскольку повышение уровня абстракции влечет за собой повышение уровня надежности программирования. С низкой эффективностью можно бороться путем создания более быстрых компьютеров. Если требования к памяти слишком высоки, можно увеличить ее объем. Это, конечно, требует времени и средств, но это решаемо. А вот с ошибками в программах можно бороться только одним способом: их надо исправлять, а еще лучше — не совершать, либо максимально затруднить их совершение. И именно на это направлены все исследования в области языков программирования, несмотря на то что, с потерей эффективности придется смириться.

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

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

1) Построена математическая модель;

2) Описан алгоритм задачи;

3) Разработан программный код на языке программирования C++;

4) Решена поставленная задача с помощью разработанной программы;

5) Проанализированы результаты;

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

Библиография

  1. Акулич, И.Л. Математическое программирование в примерах и задачах: Учебное пособие / И.Л. Акулич. – М.: Лань, 2011. – 352 c.
  2. Балдин, К.В. Математическое программирование: Учебник / К.В. Балдин, Н.А. Брызгалов, А.В. Рукосуев. – М.: Дашков и К, 2013. – 220 c.
  3. Вайсфельд Мэтт. Объектно-ориентированное мышление. // Вайсфельд Мэтт. – М.: Питер, 2014, 304 с.
  4. Грошев А.С. Информатика. // Грошев А.С. – М.: АГТУ. 2010, 470 с.
  5. Зрюмова А.Г., Зрюмов Е.А., Пронин С.П. Информатика. // Зрюмова А.Г. – М.: АлтГТУ. 2011, 177 с.
  6. Карпов Ю.Г. Теория и технология программирования. Основы построения трансляторов. // Карпов Ю.Г. – М.: БХВ-Петербург. 2005, 270с.
  7. Меняев М.Ф. Информатика и основы программирования. 3-е изд., стер. // Меняев М.Ф. – М.: Омега-Л. 2007, 458 с.
  8. Меженный О.А. Turbo Pascal. Самоучитель. // Меженный О.А. – М.: Вильямс, Диалектика. 2008, 336с.
  9. Орлова И.В. Экономико-математическое моделирование: Практическое пособие по решению задач. // Орлова И.В. – М.: Вузовский учебник, 2004. – 144 с.
  10. Таганов Л.С., Пимонов А.Г. Информатика. // Таганов Л.С., – М.: КузбГТУ. 2010, 330 с.
  11. Цветкова М.С., Великович Л.С. Информатика и ИКТ. // Цветкова М.С., 3-е изд., стер. – М.: Академия. 2012, 352 с.
  12. Цветкова А.В. Информатика и информационные технологии. Шпаргалки. // Цветкова М.С., – М.: ЭКСМО. 2008, 32 с.
  13. Хубаева Г.Н. Информатика. 3-е изд., перераб. и доп. // Хубаева Г.Н. – М.: Феникс. 2010, 288 с.

ПРИЛОЖЕНИЯ

Приложение А

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

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

Организация данных

Операторы:

  1. Присваивания
  2. Ветвления
  3. Цикла и так далее.

Операции и выражения

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

Обработка данных

Ввод-вывод данных, работа с файлами

Алфавит, лексемы, синтаксис, оформление программы

Организация действий над данными

Элементы языка

Организация и использование подпрограмм

Приложение Б

Основные типы данных в Паскале

Простые типы

Указатели

Сложные типы

Файлы

Перечисления

Интервалы

Символьный тип

Логические числа

Вещественные числа

Множества

Записи

Строки

Массивы

Целые числа

  1. Приложение А ↑

  2. Грошев А.С. Информатика. // Грошев А.С. – М.: АГТУ. 2010, 470 с. ↑

  3. Грошев А.С. Информатика. // Грошев А.С. – М.: АГТУ. 2010, 470 с. ↑

  4. Акулич, И.Л. Математическое программирование в примерах и задачах: Учебное пособие / И.Л. Акулич. – М.: Лань, 2011. – 352 c. ↑

  5. Грошев А.С. Информатика. // Грошев А.С. – М.: АГТУ. 2010, 470 с. ↑

  6. Орлова И.В. Экономико-математическое моделирование: Практическое пособие по решению задач. // Орлова И.В. – М.: Вузовский учебник, 2004. – 144 с. ↑

  7. Цветкова М.С., Великович Л.С. Информатика и ИКТ. // Цветкова М.С., 3-е изд., стер. – М.: Академия. 2012, 352 с. ↑

  8. Акулич, И.Л. Математическое программирование в примерах и задачах: Учебное пособие / И.Л. Акулич. – М.: Лань, 2011. – 352 c. ↑

  9. Меняев М.Ф. Информатика и основы программирования. 3-е изд., стер. // Меняев М.Ф. – М.: Омега-Л. 2007, 458 с. ↑

  10. Акулич, И.Л. Математическое программирование в примерах и задачах: Учебное пособие / И.Л. Акулич. – М.: Лань, 2011. – 352 c. ↑

  11. Приложение Б ↑

  12. Меженный О.А. Turbo Pascal. Самоучитель. // Меженный О.А. – М.: Вильямс, Диалектика. 2008, 336с. ↑

  13. Балдин, К.В. Математическое программирование: Учебник / К.В. Балдин, Н.А. Брызгалов, А.В. Рукосуев. – М.: Дашков и К, 2013. – 220 c. ↑

  14. Карпов Ю.Г. Теория и технология программирования. Основы построения трансляторов. // Карпов Ю.Г. – М.: БХВ-Петербург. 2005, 270с. ↑

  15. Балдин, К.В. Математическое программирование: Учебник / К.В. Балдин, Н.А. Брызгалов, А.В. Рукосуев. – М.: Дашков и К, 2013. – 220 c. ↑

  16. Карпов Ю.Г. Теория и технология программирования. Основы построения трансляторов. // Карпов Ю.Г. – М.: БХВ-Петербург. 2005, 270с. ↑

  17. Вайсфельд Мэтт. Объектно-ориентированное мышление. // Вайсфельд Мэтт. – М.: Питер, 2014, 304 с. ↑

  18. Зрюмова А.Г., Зрюмов Е.А., Пронин С.П. Информатика. // Зрюмова А.Г. – М.: АлтГТУ. 2011, 177 с. ↑

  19. Вайсфельд Мэтт. Объектно-ориентированное мышление. // Вайсфельд Мэтт. – М.: Питер, 2014, 304 с. ↑

  20. Таганов Л.С., Пимонов А.Г. Информатика. // Таганов Л.С., – М.: КузбГТУ. 2010, 330 с. ↑

  21. Карпов Ю.Г. Теория и технология программирования. Основы построения трансляторов. // Карпов Ю.Г. – М.: БХВ-Петербург. 2005, 270с. ↑

СПИСОК ДЛЯ ТРЕНИРОВКИ ССЫЛОК

  • Адаптация ребенка к школе (ТЕОРЕТИЧЕСКИЕ И МЕТОДОЛОГИЧЕСКИЕ ОСНОВЫ ШКОЛЬНОЙ АДАПТАЦИИ)
  • Проблема оценивания учебной деятельности младших школьников (Сущность понятий: контроль, отметка и оценка)
  • Выбор стиля руководства в организации (Традиционные стили руководства и факторы, определяющие выбор стиля руководства)
  • Нотариальная процедура заключения соглашения об уплате алиментов
  • Мотивация в управлении на примере реально существующей организации (ТЕОРЕТИЧЕСКИЕ ОСНОВЫ МОТИВАЦИИ В УПРАВЛЕНИИ)
  • Психологические особенности общения подростков (старшеклассников) с родителями
  • История развития программирования в России (Начало и развитие истории программирования в мире)
  • Корпоративная культура в организации (Значение корпоративной культуры)
  • Корпоративная культура в организации (Понятие корпоративной культуры в организации)
  • Основы бухгалтерского учета Учет труда и заработной платы
  • Бухгалтерский баланс организации и порядок его составления (Бухгалтерский баланс основная форма отчетности)
  • Нотариат в РФ (Правовая природа нотариат)

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ

ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«МОРДОВСКИЙ ГОСУДАРСТВЕННЫЙ ПЕДАГОГИЧЕСКИЙ

УНИВЕРСИТЕТ ИМЕНИ М.Е. ЕВСЕВЬЕВА»

Факультет физико-математический

Кафедра информатики и вычислительной техники

РЕФЕРАТ

ЯЗЫКИ ПРОРАММИРОВАНИЯ СВЕРХВЫСОКОГО УРОВНЯ

Автор работы____________________________________А. О. Половинкина

Направление подготовки 44.03.05 Педагогическое образование

Профиль подготовки Информатика. Математика

Саранск 2021

СОДЕРЖАНИЕ

ВВЕДЕНИЕ 3

ЯЗЫКИ ПРОГРАММИРОВАНИЯ 4

ЯЗЫКИ ПРОГРАММИРОВАНИЯ НИЗКОГО И ВЫСОКОГО УРОВНЯ 5

ПАСКАЛЬ 6

АССЕМБЛЕР 7

C++ 8

НАПРАВЛЕНИЕ 10

JAVA 11

ВОЗМОЖНОСТИ РЕАЛИЗАЦИИ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ 12

КЛАССИФИКАЦИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ 15

МАШИННО-ОРИЕНТИРОВАННЫЕ ЯЗЫКИ 17

МАШИННЫЕ НЕЗАВИСИМЫЕ ЯЗЫКИ 19

ЗАКЛЮЧЕНИЕ 21

СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ 24

ВВЕДЕНИЕ

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

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

В своей работе я хочу проанализировать несколько современных основных языков, таких как Pascal, Assembler, C++, Basics, Refal и Java, а также системы программирования и их компоненты.

Если проследить историю используемых сегодня языков программирования, таких как C и Pascal (а также менее популярных языков Basic, Fortran или Hell), то окажется, что все они зародились на рубеже 1960-х и 1970-х годов. Другими словами, век современных языков программирования (за исключением Java, о котором мы конкретно говорим) прошел уже третье десятилетие, которое является экстремальным периодом для компьютерной индустрии. Современные языки программирования по меньшей мере на десятилетие старше, чем Интернет, Windows и персональные компьютеры. В то же время новые языки не перестали регулярно появляться, но ни один из них не задержался в практике программирования, хотя новые идеи, внедряемые ими, дополняли уже известные (как это произошло с объектно-ориентированным программированием).

Другой важной особенностью развития языка в последние десятилетия является прекращение попыток создания «универсального» языка программирования, который бы объединил в себе все последние достижения в области развития языка (из экспериментов 1960-х _70-х годов можно вспомнить Algol, PL/1 или Hell). Большие «языковые» проекты, как и языки, создавшие их, безвозвратно уходят в прошлое.

Наконец, появление персонального компьютера и операционной системы с графическим интерфейсом пользователя (в первую очередь, MacOS и Windows) переместило внимание разработчиков программного обеспечения из области языков программирования в другие области средств разработки программного обеспечения, такие как визуальное или объектно-ориентированное программирование, сетевые протоколы или модели баз данных. Сегодня программист использует в качестве инструмента специфическую систему программирования (например, Delphi), а не язык, и не так важно, какой язык является основой.

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

ЯЗЫКИ ПРОГРАММИРОВАНИЯ

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

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

ЯЗЫКИ ПРОГРАММИРОВАНИЯ НИЗКОГО И ВЫСОКОГО УРОВНЯ

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

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

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

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

ПАСКАЛЬ

В 1968 году Никлаус Вирт написал первый компилятор языка, Паскаль. Этот язык был назван в честь выдающегося французского математика Блеза Паскаля. Паскаль — успешный, общеприменимый язык, который подходит для программирования как научных, так и коммерческих задач. Входные/выходные возможности этого языка несколько слабее, чем у коммерческих языков, таких как COBOL, поэтому он никогда не претендовал на замену. Тем не менее, с момента своего первого релиза Pascal является довольно солидным языком, который успешно выполняет свою работу.

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

В 1970-х годах Паскаль был «единственным языком программирования, подходящим для всех». Компания IBM попыталась создать нечто подобное с помощью языка PL/I. Как и ПЛ/И, Паскаль не достиг высшей цели. Популярность языка Паскаль снижалась так же быстро, как и росла. В 1970-х годах наблюдался огромный рост использования Паскаля, а в 1980-х годах интерес к Паскалю резко упал.

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

АССЕМБЛЕР

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

Несмотря на то, что ассемблер является машинно-ориентированным языком, т.е. языком низкого уровня, программист может использовать его как для работы на высоком, так и на среднем уровне. Низкий уровень программирования на ассемблере подразумевает прямой доступ к каналам ввода/вывода устройств, называемым идеальными портами, и прямой доступ к оперативной памяти. Использование этого режима позволяет неопытному программисту использовать более четкий и легкий стиль разработки программы. Более опытные программисты ассемблерного языка могут использовать такие идеальные возможности режима, как вложенные структуры и объединения.

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

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

C++

Наследие С++ быстро получило поддержку, так как обновленная версия С. С++ была разработана в начале 1980-х годов шведским программистом по имени Bjarne Stroustrup. В С++ есть несколько дополнительных команд и операторов, но главное отличие — это подход к программированию.

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

Так как C++ в основном основан на C. Поэтому акцент в C на низкоуровневых инструментах достаточен для решения наиболее актуальных задач системного программирования. В свою очередь, С в значительной степени обязан своим предшественником ППГ. C++ — машино-ориентированный язык программирования, предназначенный для того, чтобы сделать программирование более приятным для серьезного программиста. Помимо мелких деталей, С++ — это высокомерие языка программирования Си.

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

Если пользователю нужен этот тип, его можно определить на самом языке. Фактически, основной задачей программирования на С++ является определение универсальных и специальных типов приложений.

Популярность объектно-ориентированного С++ создала много новых языков для современного Интернета. Причиной успешного развития Java (и его производных, таких как JavaScript) является широкое использование С++, и хотя С++ не поддерживает достаточную безопасность при программировании веб-сайтов, его объектно-ориентированная природа делает Java хорошим кандидатом для программирования Интернет-объектов. Компания Sun Microsystems изменила язык С++, добавив элементы с достаточной безопасностью и удалив некоторые сомнительные элементы из языка С++. (Одним из примеров является множественное наследование, которое позволяет генерировать один объект программирования, например, окно, из набора нескольких родительских окон с различными свойствами. Такая концепция запутанна, даже если она сформулирована на высоком уровне).

BASIC был разработан в Дартмутском колледже и предназначен для начинающих. ФОРТРАН был сложным языком для студентов не математических факультетов. Джон Кемени и Томас Курц, учившиеся в Дартмуте, использовали FORTRAN в качестве основы для разработки BASIC. BASIC — это аббревиатура от Beginner’s All-purpose Symbolic Instruction Code, название, которое говорит само за себя. Интерпретатор обычно используется с BASIC, хотя современные версии BASIC скомпилированы. Это позволяет начинающим программистам сконцентрироваться на языке программирования, а не на специфике компиляции. Как и все интерпретируемые языки, программы на BASIC работают медленнее скомпилированных программ, поэтому программы на BASIC не используются в коммерческих приложениях.

Этот язык стал одним из самых распространенных. Базовый был изначально задуман как очень простой язык, который можно выучить очень быстро. Язык содержал примитивные инструменты редактирования, освобождавшие пользователя от необходимости понимать все сложности базовой операционной системы. Вначале Basic использовался только для обработки числовых значений, позже он был расширен обработкой строковых переменных и теперь обеспечивается рядом методов простой манипуляции через символьные цепочки, которые фактически стали стандартом. Простота Basic сделала его наиболее подходящим языком программирования для первых микрокомпьютеров. Сегодня это основной язык программирования для персональных компьютеров. К сожалению, почти каждая машина имеет свой собственный диалект на Базовом, поэтому обеспечить мобильность программ на Базовом довольно сложно. В настоящее время многие основные диалекты включают в себя современные структуры управления, такие как: REPEAT… UNTIL, что дает определенный оптимизм.

НАПРАВЛЕНИЕ

Одним из языков, разработанных в России, является Refal, который был разработан в России (СССР) в 1966 году. АКАДЕМИЯ НАУК СССР. Этот язык прост и удобен для описания манипуляций с любыми текстовыми объектами.

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

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

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

JAVA

Java — объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems. Java-приложения обычно компилируются в специальный байтовый код, так что они могут быть выполнены на любой Java-виртуальной машине (JVM) независимо от архитектуры компьютера. Официальная дата выхода — 23 мая 1995 г. Первоначально язык назывался Oak, он был разработан Джеймсом Гослингом для программирования устройств бытовой электроники. Позже он был переименован в Java и использовался для написания клиентских приложений и серверного программного обеспечения. На эмблеме на официальном языке, названной в честь марки кофе Java, изображена чашка поднимающегося кофе.

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

Одним из недостатков концепции виртуальной машины является то, что выполнение байтового кода виртуальной машиной может снизить производительность программ и алгоритмов, реализованных на языке Java. Это утверждение было верно для первых версий Java Virtual Machine, но в последнее время оно почти утратило свою значимость. Этому способствовал ряд улучшений: использование технологии трансляции байт-кода в машинный код во время работы программы (технология JIT) с возможностью хранения версий класса в машинном коде, широкое использование платформоориентированного (нативного) кода в стандартных библиотеках, аппаратного обеспечения, позволяющего ускорить обработку байт-кода (например, технология Jazelle, поддерживаемая некоторыми процессорами компании ARM).

Идеи, лежащие в основе концепции и различных реализаций Java Virtual Machine Environment, вдохновили многих энтузиастов на расширение списка языков, которые могут быть использованы для создания программ, запускаемых на виртуальной машине. Эти идеи также нашли выражение в общей спецификации инфраструктуры языка CLI, лежащей в основе платформы Microsoft .NET.

ВОЗМОЖНОСТИ РЕАЛИЗАЦИИ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ

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

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

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

Компилятор выдает полный результат — программу в машинном коде. Затем эта программа выполняется. Вы можете сохранить скомпилированную версию исходной программы на диск. Для повторного запуска исходной программы компилятор не нужен. Достаточно загрузить скомпилированную ранее версию с жесткого диска в память компьютера и выполнить ее.

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

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

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

Иногда один и тот же язык может использовать и компилятор, и интерпретатор. Такими языками являются, например, Basic. Как правило, компиляторы и интерпретаторы приравниваются к языкам, с которых они должны переводиться. Слова Pascal, Ada, C могут относиться как к названиям языков, так и к названиям соответствующих программ.

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

Недостатком устных переводчиков является то, что они молчат. Они тратят слишком много времени, пытаясь понять, что делать, вместо того, чтобы заниматься бизнесом. При выполнении операторов программы интерпретатор должен сначала просканировать каждый оператор, чтобы прочитать его содержимое (что этот человек просит меня сделать?), а затем выполнить запрошенную операцию. Операторы в шлейфах сканируются без необходимости. Причиной возобновления интереса к компиляторам стало появление быстрых и сложных 64-битных микропроцессоров, типичным представителем которых является Intel Itanium. Компиляторы нового поколения отвечают за увеличение потенциала производительности будущих 64-битных процессоров, такие компиляторы уже создаются в исследовательских лабораториях одних компаний — Hewlett-Packard, Intel, MetaWare, Microsoft и других.

В феврале прошлого года компания Silicon Graphics объявила, что ее оптимизированные компиляторы позволят увеличить производительность программ, выполняемых на компьютерах с процессорами Itanium и операционной системой Linux, на 30-100% по сравнению с существующими продуктами. Как и их предшественники, оптимизированные компиляторы преобразуют программы языка высокого уровня в машинный код. Они также гарантируют наиболее эффективное использование памяти (и особенно процессорного кэша и механизма распараллеливания). Например, процессоры Itanium рассчитаны на одновременную обработку до шести инструкций на каждый процессорный такт. В прошлом году компания Microsoft объявила о выпуске C#, объектно-ориентированного языка программирования, ориентированного на XML. Компания внедряет новый язык как логическое расширение C и C++ для Web-приложений. Ключевыми модулями станут Common Language Runtime for C# и специальный компилятор, который конвертирует текст, написанный на традиционных языках Kobol, Perl, Fortran или других, в промежуточный язык, работающий на новой платформе Microsoft. сеть. Возможно, появится новое поколение компиляторов, которое позволит повысить производительность до уровня, который позволит убедить профессионалов в использовании 64-битных аппаратных архитектур.

КЛАССИФИКАЦИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ

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

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

Языки декларативного программирования — это языки для объявлений и построения структур. Сюда входят функциональные и логические языки программирования. Эти языки явно не выполняют алгоритмических действий, то есть алгоритм не задается программистом, а собирается программой. Декларативные языки указывают, строят структуру или систему, то есть объявляют (декларируют) некоторые из атрибутов создаваемого объекта. Эти языки получили широкое применение в системах автоматизированного проектирования (САПР), в так называемых CAD-пакетах, в моделировании, в системах искусственного интеллекта.

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

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

МАШИННО-ОРИЕНТИРОВАННЫЕ ЯЗЫКИ

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

Машинный язык. Одиночный компьютер имеет свой специфический машинный язык (далее ML), ему предписано выполнять заданные операции над операндами, которые он определяет, поэтому ML является командным языком. Однако некоторые семейства компьютеров (например, EC, IBM/370/ и т.д.) имеют один ТЕ для компьютеров различной производительности. Инструкция каждого из них содержит информацию о расположении операндов и типе выполняемой операции.

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

Языки символьного кодирования. Языки символьного кодирования (далее — «языки кодирования») являются командными языками, так же как и ME. Однако, коды операций и адреса в машинных инструкциях, представляющие собой последовательность двоичных (внутренний код) или восьмеричных цифр (часто используемых при написании программ), заменяются в СНБ символами (идентификаторами), форма написания которых помогает программисту легче запомнить семантическое содержание операции. Это приводит к значительному сокращению количества ошибок при написании программ.

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

Макроинструкции обеспечивают передачу фактических параметров, которые вставляются в «скелет» программы во время перевода, что делает ее настоящей машинной программой. В системе с генерацией существуют специальные программы, которые анализируют макроинструкции, определяют, какая функция должна быть выполнена, и формируют необходимую последовательность инструкций, реализующих эту функцию. В обеих системах используются трансляторы NSC и набор макроинструкций, которые также являются операторами автокодирования. Разработанные автокоды называются ассемблерами. Утилиты и т.д. обычно компилируются на таких языках, как ассемблер. Подробнее о языке ассемблера я расскажу в главе 5.Macros. Язык, который является средством для замены строки, описывающей требуемые действия компьютера, на более сжатую форму, называется макросом (замена). В принципе, макрос предназначен для сокращения записи исходной программы. Программный компонент, обеспечивающий работу макросов, называется макропроцессором. Процессор макросов получает определение макроса и исходный код. Реакция макропроцессора на вызов вывода выходного текста. Макрос может работать как с программами, так и с данными одинаково.

МАШИННЫЕ НЕЗАВИСИМЫЕ ЯЗЫКИ

Машинно-независимые языки — это средства описания алгоритмов решения проблем и обрабатываемой информации. Они удобны в использовании для широкого круга пользователей и не требуют от них знания специфики организации функционирования компьютеров и БК.

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

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

Например, существует много проблемных языков: Fortran, Algol — языки, созданные для решения математических задач; Simula, Slang — для моделирования; Lisp, Snobol — для работы со списочными структурами. Я пойду в них дальше.

Универсальные языки. Для широкого круга задач были созданы универсальные языки: торговля, наука, моделирование и т.д. Первый универсальный язык был разработан компанией IBM, которая стала Pl/1 в порядке языков. Вторым по мощности универсальным языком является алголь-68, который позволяет работать с символами, битами, числами с фиксированными и плавающими точками. Pl/1 имеет развитую систему операторов для управления форматами, работы с полями переменной длины, с данными, организованными в сложных структурах и эффективного использования каналов связи. Язык учитывает возможности прерывания, которые есть во многих машинах, и имеет соответствующих операторов. Предусмотрена возможность параллельного выполнения разделов программы. Программы в Pl/1 компилируются с использованием автоматических процедур. Язык использует многие свойства Фортрана, Алголя, Кобола. Но это позволяет не только динамическое, но и управляемое и статистическое выделение памяти.

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

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

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

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

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

ЗАКЛЮЧЕНИЕ

Изобретение самого высокого языка программирования позволило нам общаться с машиной, понимать ее (конечно, только если ты знаешь используемый язык), так как американец понимает старый кириллический алфавит, немного знакомый с русским. Проще говоря, мы так далеки от компьютеров к ВАМ в развитии науки программирования. Поверь мне, это не сарказм. Просто посмотрите, как развивалась наука о программировании с момента появления языков программирования, но язык программирования высочайшего уровня, очевидно, еще ребенок. Но если посмотреть на темпы роста и развитие новейших технологий в программировании, то можно предположить, что в ближайшем будущем человеческие знания в этой области помогут создать языки мира, которые смогут получать, обрабатывать и передавать информацию в виде мыслей, слов, звуков или жестов. Это то, что я бы назвал детищем компьютеризированного будущего: «языки программирования «высшего» уровня». Возможно, концепция решения этой проблемы проста, и ближайшее будущее этого проекта не за горами, и в этот момент где-то в Сапороше, Амстердаме, Токио или Иерусалиме молодой, непризнанный специалист подозревает старый 133МГц и разрабатывает новую систему искусственного интеллекта, которая в конечном итоге позволяет людям общаться с машиной на ВАС с помощью своего машинного языка.

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

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

Язык C, разработанный Bell Laboratories, является очень эффективным, но низкоуровневым языком программирования. C — это основа современных языков.

Самым большим преимуществом С++ перед его предшественником является поддержка объектно-ориентированного программирования.

Visual Basic, преемник языка BASIC, предлагает лучшую базу программирования для начинающих.

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

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

СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ

  1. «Информационные технологии и ИКТ. 10-11», Н.Д. Угринович, Москва, 2006;

  2. Технологии управления информацией»: Инфоматика-М.Ф. Меняев: Омега-Л, 2003;

  3. «Информатика», базовый курс, 2-е издание / Под руководством С.В. Симоновича-СПб. Питер, 2004;

  4. Леонтьев. Последняя энциклопедия компьютерного программного обеспечения. — Пресса, 2003;

  5. Ассемблер для Windows, Пирогов В.Ю. 2005 ;

  6. Магданурова Г. I, «Визуальные основы на практике», 2004..;

  7. Васильев П. П. «Турбо Паскаль в примерах и задачах», 2003;

  8. Есипов А.С., «Информатика и информационные технологии», 2003;

  9. В. В. Васильченко «ФОРТРАН». Программирование Windows-приложений на FORTRAN. «», 2003 г;

  10. Брюс Экель «Java Philosophy», 2014.

Реферат: Языки программирования высокого уровня. Сравнительная характеристика

С появлением машин второго поколения возникла потребность создания языков, целиком ориентированных на особенности задач и не зависящих от конкретной машины. Символом второго поколения ЭВМ стали проблемно-ориентированные языки программирования. Их развитие все в большей степени определялось спецификой задач, а не особенностями машин. Эти языки назвали алгоритмическими языками. Одним из первых и наиболее удачных языков такого рода стал Фортран (Formulae Translation), разработанный фирмой IBM в 1954 г. Язык Фортран не только просуществовал до наших дней, но и достаточно распространен. Среди причин такого долголетия можно отметить простую структуру как самого Фортрана, так и предназначенных для него трансляторов. Фортран был заложен в основу диалогового языка Бейсик (Beginner’s All-purpose Symbolic Instruction Code) — широко распространенного ныне в различных модификациях языка. Вскоре после создания Фортрана (1957 г.) появился язык Алгол (Algorithmic Language), созданный на основе широкого международного сотрудничества. В 1960 г. было опубликовано официальное сообщение об алгоритмическом языке, названном Алгол-60. Алгол создавался после разработки и практического применения Фортрана, поэтому характеризуется как введением новых конструкций, так и обобщением понятий, имеющихся в Фортране. Несмотря на то, что и Фортран, и Алгол заслуживали название универсальных языков, ни один них, конечно, не позволял описать все без исключения возникающие задачи. Поэтому примерно в то же время появились алгоритмические языки с проблемной ориентацией (Кобол, Снобол и др.), отвечающие нуждам специфичных направлений науки и техники. Из языков для обработки символьной информации (преобразование формул, аналитическое решение уравнений, анализ и синтез текстов и т.д.) очень популярным является язык Лисп (List Processing), созданный в 1960 г. в Массачусетском технологическом институте. В этом языке вся находящаяся в обработке информация, в том числе и сама программа, организуется в так называемые списки — последовательности элементов. Третье поколение ЭВМ поставило на повестку дня выработку нового подхода к созданию действительно универсального языка. Одной из попыток такого рода являлось создание фирмой IBM алгоритмического языка PL/1 (Programming Language/1 — язык программирования один). Он основывался на языках Фортран и Кобол, ряд изобразительных средств и понятий был почерпнут из Алгола и других языков. В 1971 г. Никлаусом Виртом был предложен алгоритмический язык Паскаль (Pascal). Язык Паскаль является преемником Алгола-60, он имеет конструкции, аналогичные существующим в PL/1 и Алголе-68, однако Паскаль более лаконичен. Язык Паскаль способствовал внедрению современной технологии программирования, основанной на постепенном построении программы, состоящей из небольших четко определенных процедур, т. е. последовательно проводятся в жизнь идеи структурного программирования. Другой существенной особенностью Паскаля является концепция структуры данных как одного из фундаментальных понятий, лежащих, наряду с понятием алгоритма, в основе программирования. На основе языка Паскаль в конце 70-х годов был создан язык Ада, имеющий очень широкую сферу применения, хотя и созданный как официальный язык программирования американских военных. Язык назван так по имени первой женщины-программиста Ады Лавлейс. Это существенно структурированный язык, особенно он подходит для разработки систем реального времени. Однако язык Ада слишком громоздкий, многословный и не предоставляет программисту достаточной свободы. По синтаксической сложности он до сих пор не превзойден ни одним из языков. В отличие от перечисленных языков высокого уровня, предложенный Денисом Ритчи в начале 80-х годов язык программирования Си (название содержит одну латинскую букву С) задумывался языком сравнительно низкого уровня. Но это не значит, что этот язык недостаточно мощный. Алгоритмический язык C достаточно полно отражает возможности современных компьютеров, позволяя писать весьма эффективные программы, не прибегая к языкам ассемблера, главным образом за счет простых, последовательных конструкций потоков управления. Язык приобрел популярность благодаря остроумным решениям, сделавшим запись программы на C весьма компактной. Не накладывая на программиста особых ограничений, он дает возможность для разнообразных трюков, чем тоже многим импонирует. Язык Паскаль в оригинальной авторской версии не содержал средств раздельной компиляции — модулей, разнообразных числовых типов, строк переменной длины и многого из того, что добавлено в известные реализации. Вследствие этого Никлаус Вирт предложил язык Модула-2, который должен был заменить Паскаль, устранив основное его ограничение — отсутствие модульности. Известно, что Модула-2 использовалась и используется в проектах, где важнейшую роль играет надежность. Средства межмодульного контроля Модулы-2 заметно совершеннее аналогичных возможностей Паскаля и C. Компилятор Турбо-Паскаль, разработанный Андерсом Хейльсбергом, был выпущен в продажу фирмой Borland в 1983 г. Эта версия уже содержала расширения языка, хотя и небольшие. В последующих выпусках расширений становилось все больше: встроенная графика, модули, средства объектно-ориентированного программирования (ООП) и т.д. Начиная с версии 7.0, язык стал называться Borland-Паскаль. В качестве мощной объектно-ориентированной версии Паскаля сейчас популярен Объектный Паскаль. Объектный Паскаль по сравнению со стандартным Паскалем содержит очень много синтаксических расширений. В результате из простого и изящного Паскаля получился язык, приближающийся по сложности к языку Ада. Объектно-ориентированный язык C++ предложил Бьярн Страуструп с первоначальным названием «Си с классами». Название отражает тот факт, что C++ является надмножеством языка C. Язык C++, по ряду оценок, сложнее C вдвое. В настоящее время это, без преувеличения, язык номер один в мире для профессиональных программистов, поскольку он перенял преимущества и популярность C и добавил мощные средства написания объектно-ориентированных программ. Его реализации поддерживаются на всех аппаратно-программных платформах, в отличие от Паскаля, который широко распространен лишь на платформе IBM PC. Язык Оберон был разработан Н. Виртом в 1987 г. Он представляет собой существенно упрощенный синтаксически вариант Модулы-2, в который добавлены расширяемые записи — основной механизм ООП. Язык необычайно прост, но при этом сохраняет универсальность и в функциональном отношении не уступает другим языкам. В 1992 г. Н. Виртом были приняты расширения Оберона, предложенные Ханспетером Мёссенбёком. В язык введены аналоги виртуальных методов в других языках. Новая версия получила название Оберон-2. Удивительно, но Оберон-2 оказался проще Оберона, расширением которого является. Самый молодой и самый обсуждаемый ныне объектно-ориентированный язык Java (в английском произношении — Джава, русское еще не устоялось) предложен Джеймсом Гослингом (фирма Sun Microsystems). Основная особенность Java — межплат­форменная переносимость приложений, благодаря чему язык широко используется для написания приложений для Internet. Java — очень сложный синтаксически язык. Его официальное описание — 700-страничный документ — насыщен многословными и громоздкими определениями. Несмотря на эту сложность, в Java есть всего две существенные вещи, которых нет, например, в Обероне: встроенная многопоточность и обработка исключений. В целом, к настоящему моменту известно от 2-х до 3-х тысяч языков программирования, из них около 100 объектных и объектно-ориен­ти­ро­ван­ных. Критерии выбора языка программирования: Выбор языка должен производиться на основе требований к разрабатываемому продукту с учетом следующих факторов: мощность языка (возможности языка); переносимость языка; сложность языка; уровень существующей инструментальной поддержки языка. Сложность языка не всегда напрямую связана с его мощностью. Линия языков Вирта (Паскаль — Модула — Оберон) характеризуется снижением сложности при росте мощности. Ряд исследователей полагает, что существует пять основных разновидностей стилей программирования и, соответственно, языков программирования:

· процедурно-ориентированный алгоритмы
· объектно-ориентированный классы и объекты
· логико-ориентированный цели, часто выраженные в терминах исчисления предикатов
· ориентированный на правила правила «если-то»
· ориентированный на ограничения инвариантные соотношения.

В настоящее время наиболее привлекательные для программистов языки базируются на так называемой объектной модели, которая имеет четыре главных элемента: абстрагирование; инкапсуляция; модульность; иерархия. Абстрагирование — выделения абстракций (abstraction), под которыми понимаются существенные характеристики объекта, которые отличают его от всех других объектов и четко определяют его концептуальные границы для наблюдателя. Инкапсуляция (encapsulation) — разделение элементов абстракции, которые образуют ее структуру и поведение. Модульность (modularity) — разделение системы на модули (module), под которыми понимаются единицы кода, служащие блоками физической структуры системы. Иерархия (hierarchy) — подчинение или упорядочение абстракций. Две типичных иерархии в сложной системе — иерархия наследования «общее/частное», присущая, обычно, типам (классам) и иерархия агрегирования «целое/часть», присущая, обычно, элементам (объектам). Иерархия присуща также модулям и другим частям системы. Наиболее явно эти черты присутствую в языках, реализующих концепции объектно-ориентированного программирования. Под последним понимается методология реализации, при которой программа организуется как совокупность сотрудничающих объектов, каждый из которых является экземпляром какого-либо класса, а классы образуют иерархию наследования. При этом классы обычно статичны, а объекты очень динамичны, что поощряется динамическим связыванием и полиморфизмом. Для ООП характерны понятия наследования и полиморфизма. Наследование (inheritance) — отношение между классами, при котором класс использует структуру или поведение другого (одиночное наследование) или других (множественное наследование). Наследование вводит иерархию «общее/частное». Полиморфизм (polymorphism) — положение теории типов, согласно которому имена (например, переменных) могут обозначать объекты разных (но имеющих общего родителя) классов. Следовательно, любой объект (метод), обозначаемым полиморфным именем, может по-своему реагировать на некий общий набор операций (аргументов).