Компьютерная программа представляет собой логически упорядоченную последовательность команд, предназначенных для управления компьютером. Писать программы на языке машинных команд очень сложно и с ростом размера программы эта задача усложняется еще больше. Практически все современные программы создаются с помощью языков программирования.
Языки программирования — это формализованные искусственные языки. Как и естественные языки, они имеют алфавит, синтаксис и семантику. Каждому языку программирования присущ свой набор основных понятий (конструкций), которые могут называться операторами, идентификаторами, функциями, процедурами и т.д. и строятся по определенным правилам.
Алфавит — это разрешенный к использованию в данном языке набор символов, из которых строятся все другие его конструкции.
Синтаксис — это система правил, в соответствии с которыми из символов алфавита строятся допустимые для данного языка программирования конструкции.
Семантика языка программирования — это система правил толкования каждой языковой конструкции, позволяющих производить обработку данных.
7 0ПACHbIX КОМАНД для Linux/Termux/Kali Nethunter/Andrax | UnderMind
В отличие от естественных языков, правила синтаксиса и семантики языков программирования сформулированы четко и допускают только однозначное толкование.
В настоящее время существуют тысячи различных языков программирования. Их можно классифицировать по различным признакам. Но, прежде всего, языки программирования принято разделять на две большие группы: языки низкого уровня и языки высокого уровня.
Языки низкого уровня ориентированы на команды конкретного процессора и учитывают его особенности. Операторы такого языка близки к машинному коду. Языком самого низкого уровня является Ассемблер. Написанная на нем программа представляет собой последовательность машинных команд, записанных с помощью мнемонических обозначений.
Отметим особенности (как достоинства, так и недостатки), присущие языкам низкого уровня:
- 1) высокое качество создаваемых программ с точки зрения их компактности и скорости выполнения;
- 2) возможность прямого использования аппаратных ресурсов;
- 3) учет особенностей функционирования данного компьютера;
- 4) трудоемкость процесса составления программ;
- 5) низкая скорость программирования;
- 6) невозможность непосредственного использования программы, составленной на языке низкого уровня, на компьютере с процессором другого типа.
Языки высокого уровня не требуют от программиста знания особенностей функционирования конкретного компьютера, поскольку эти особенности в конструкциях языков высокого уровня никак не учитываются. Эти языки стоят гораздо ближе к естественным, и создавать программы на них гораздо проще.
Языки высокого уровня являются аппаратно-независимыми и требуют использования специальных программ-переводчиков, преобразующих текст программы в последовательность машинных команд, которые в итоге обрабатываются процессором.
Рассмотрим три группы языков высокого уровня: процедурные, декларативные и объектно-ориентированные.
ЯЗЫК АССЕМБЛЕРА С НУЛЯ | #1 НАЧАЛО
Процедурные языки
Процедурные языки называют также директивными или императивными. Программа, написанная на процедурном языке, определяет, как найти ответ какой-либо задачи в соответствии с заданным алгоритмом (т.е. описывает процедуру решения). Основной конструкцией в языке является оператор присваивания, который определяет и изменяет память компьютера. Выполнение программы сводится к последовательному преобразованию памяти от ее исходного состояния до результирующего. К процедурным языкам относятся Алгол, Фортран, Бейсик, Паскаль, Си.
Процедурные языки, в свою очередь, можно разделить на структурные и неструктурные языки программирования:
- 1) в структурном программировании исходная задача разбивается на большое число мелких подзадач, каждая из которых решается с помощью своей отдельной процедуры или функции. Такой подход позволяет разрабатывать большие проекты силами нескольких программистов;
- 2) неструктурное программирование допускает использование в явном виде команды так называемого «безусловного перехода» (в большинстве языков это команда называется GOTO). Это влечет за собой серьезную проблему: большую программу, которая содержит множество переходов вверх-вниз по тексту, очень трудно читать, изменять и дополнять. Типичными представителями неструктурных языков являются ранние версии Бейсика и Фортрана.
Декларативные языки
Декларативные языки оперируют с помощью задания данных и отношений между ними. Вместо алгоритмов в таких языках используются правила логического вывода, которые позволяют системе находить заранее не определенные решения. Потому декларативные языки называют также языками искусственного интеллекта.
Главное различие между декларативными и процедурными языками заключается в том, что декларативная программа заявляет, что именно должно быть достигнуто в качестве цели, а процедурная предписывает, как этой цели достичь.
Например, надо пройти из пункта А в пункт Б по улицам города.
Декларативная программа будет состоять из плана города, в котором указаны оба пункта, и правил дорожного движения. Руководствуясь этими правилами и планом, прохожий сам найдет дорогу из пункта А в пункт Б.
Процедурная программа будет представлять собой список команд, предписывающий последовательность действий: например, сколько метров или кварталов требуется пройти в данном направлении и куда, направо или налево, повернуть на данном перекрестке.
В процедурной программе действия задаются командами, подготовленными ее составителем. Исполнитель просто им следует. Команды в различных языках процедурного программирования выглядят по-разному, но все они сводятся либо к присваиванию некоторого значения переменной, либо к выбору следующей команды, которая будет выполняться. Присваиванию может предшествовать выполнение арифметических или логических операций, вычисляющих искомое значение, а команды выбора могут быть реализованы в виде условных операторов и операторов цикла.
В классических процедурных языках последовательность команд, которые в итоге будут выполнены, совершенно однозначно определяется входными данными программы. Таким образом, поведение исполнителя императивной программы полностью детерминировано. Декларативные программы не предписывают выполнение определенной последовательности действий, в них лишь дается разрешение совершать эти действия. Исполнитель должен сам найти способ достижения поставленной перед ним (составителем программы — программистом) цели, причем зачастую это можно сделать различными способами.
Декларативные языки, в свою очередь, делятся на функциональные (аппликативные) и логические языки.
- 1. В основе функциональных языков лежит понятие функции как «черного ящика», имеющего несколько параметров (аргументов) на входе и один результат (значение функции) — на выходе. В таких языках нет ни операторов присваивания, ни циклов, ни передачи управления. Все действия выполняются при помощи вызовов функций, а единственным правилом композиции является суперпозиция функций. Одним из первых функциональных языков был язык Лисп (LISP), созданный американским ученым Джоном Маккарти.
- 2. Логическое программирование представляет собой попытку возложить на программиста (пользователя) только постановку задачи, а поиски путей ее решения (по правилам логического вывода, установленным языком) предоставить компьютеру. Вычисления в логических программах осуществляются методом проб и ошибок, поиском с возвратом к предыдущим шагам. Логические языки (например, Пролог) имеют специальные конструкции для описания объектов и связей (отношений) между ними.
Например, если дано, что:
А — отец Б,
Б — отец В,
Дед — это отец отца или отец матери, то программа логического вывода должна сама сделать заключение о том, что А — дед В.
Объектно-ориентированное программирование — это методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию наследования.
Первичными понятиями в данном случае считаются объекты (данные), которые могут активно взаимодействовать друг с другом с помощью механизма передачи сообщений (называемого также механизмом вызова методов). Программист играет роль творца в свой маленькой вселенной — он должен придумать и реализовать такие объекты, взаимодействие которых после старта программы приведет к достижению необходимого конечного результата.
Каждый объект относится к некоторому классу, которому присуши определенные свойства и определенные процедуры управления объектом (методы).
Каждый класс может содержать несколько подклассов. Любой подкласс имеет, наряду с общими свойствами, присущими исходному классу, также ряд специфических отличительных свойств. Такой принцип и образует иерархию наследования свойств (от общего к частному).
Например, для описания объекта «геометрическая фигура на экране» можно использовать класс, содержащий три свойства (цвет, координаты х и у, определяющие начальную точку рисования данной фигуры на экране) и два метода (поменять цвет и переместить фигуру в точку с данными координатами).
Для данного класса можно определить подклассы, описывающие частные случаи геометрических фигур, за счет добавления новых специфических свойств: подклассу «прямоугольник» можно приписать свойства ширина и высота, подклассу «круг» — свойство радиус и т.п. При этом и для прямоугольника, и для круга будут применимы общие свойства и методы, заданные для класса «геометрическая фигура».
Типичными представителями объектно-ориентированных языков программирования являются языки C++, Java, Visual Basic.
Языки программирования для компьютерных сетей
Появление и развитие компьютерных сетей стало причиной появления многочисленных версий популярных языков, адаптированных для использования в сети. Остановимся более подробно на языке HTML (Hyper Text Markup Language) — универсальном языке разметки гипертекста.
Гипертекст представляет собой текст, в котором выделены (чаще всего цветом) отдельные знаки, слова, фразы или рисунки, называемые полями. С каждым полем в гипертексте связано определенное действие, например переход в другое место того же гипертекста, переход в другой гипертекст, проигрывание фрагмента звуко- или видеозаписи. Если при просмотре гипертекста выбрать мышкой (или курсором) одно из выделенных полей, то выполнится действие, связанное с выбранным полем, скажем, переход в другой гипертекст. Правила создания гипертекстов были разработаны несколько лет назад в рамках проекта «Всемирная паутина» (World Wide Web).
Язык HTML представляет собой набор элементарных команд форматирования текста, добавления графических объектов, задания шрифтов и цвета, организации ссылок. Этот язык позволяет каждому пользователю сети Интернет подготовить свой вебдокумент и сделать его доступным любому другому пользователю Интернета.
Вопросы для самоконтроля
- 1. Дайте определение алгоритма.
- 2. Перечислите основные свойства алгоритмов.
- 3. В чем недостатки словесного способа описания алгоритмов?
- 4. Что такое псевдокод?
- 5. В чем достоинство блок-схем как способа описания алгоритмов?
- 6. Какие алгоритмические конструкции вы знаете?
- 7. Что такое языки программирования и для чего их создают?
- 8. Что такое алфавит, синтаксис и семантика языка программирования?
- 9. В чем отличие языков программирования низкого и высокого уровня?
- 10. Как вы полагаете, для написания какого рода программ предназначены процедурные языки программирования?
- 11. Чем отличаются декларативные языки программирования от процедурных?
- 12. Опишите основные особенности объектно-ориентированных языков программирования.
- 13. Для чего предназначен язык HTML?
Источник: bstudy.net
Лекция 8. Языки программирования
Компьютерная программа представляет собой логически упорядоченную последовательность команд, предназначенных для управления компьютером. Процессор компьютера исполняет программы, написанные на машинным кодом. Писать программы в машинных кодах вручную очень сложно, причем с ростом размера программы эта задача усложняется.
В компьютерах первого поколения использовались программы, написанные в машинных кодах, причем для каждого компьютера существовал свой собственный машинный код. В тот период (начало 50-х гг.) средства программирования и программное обеспечение только зарождались и были еще не развиты.
Для того чтобы сделать программу читабельной и иметь возможность следить за ее смысловой структурой, разработали символический язык ассемблер, близкий к машинному (конец 50-х – начало 60-х гг.), в котором появилось понятие переменной. Ассемблер стал первым полноценным языком программирования.
Благодаря этому заметно уменьшилось время разработки и возросла надежность программ. Для записи кодов операций и обрабатываемой информации в ассемблере используются стандартные обозначения, позволяющие записывать числа и текст в общепринятом виде, для кодов команд приняты мнемонические обозначения, например MOV AX, BX (переместить машинное слово из регистра AX в регистр BX), ADD AX, CX (сложить регистр AX c CX), JMP loop1 (безусловный переход не метку loop1) и др.
Для обозначения величин, размещаемых в памяти, можно применять имена констант. После ввода программы ассемблер сам заменяет символические имена на адреса памяти, а символические коды команд на числовые. Использование ассемблера сделало процесс программирование более наглядным. Дальнейшее развитие этой идеи привело к созданию языков программирования высокого уровня, в которых длинные и сложные последовательности машинных кодов были заменены одним единственным обозначающим их словом – операторы.
Источник: studfile.net
Обзор языков программирования
Компьютерная программа представляет собой логически упорядоченную последовательность команд, предназначенных для управления компьютером. Процессор компьютера — это большая интегральная схема. Все данные и команды он получает в виде электрических сигналов. В двоичном коде наличие сигнала описывается понятием «1», а его отсутствие — понятием «О».
Команды, обрабатываемые процессором, можно интерпретировать как ряд чередующихся определенным образом единиц и нулей, то есть любая команда преобразуется в двоичное число. Таким образом, процессор исполняет программы, представляющие собой последовательность чисел и называемые машинным кодом.
Писать программы в машинных кодах очень сложно, причем с ростом размера программы эта задача усложняется. В компьютерах первого поколения использовались программы, написанные в машинных кодах, причем для каждого компьютера существовал свой собственный машинный код. Числовая кодировка команд, адресов ячеек и обрабатываемых данных, зависимость вида программы от ее места в памяти не давали возможность следить за смыслом программы. Это во многом ограничивало область применения компьютеров первого поколения.
В тот период (начало 50-х гг.) средства программирования и программное обеспечение только зарождались и были еще не развиты. Для того чтобы сделать программу читабельной и иметь возможность следить за ее смысловой структурой, придумали символический язык ассемблер, близкий к машинному (конец 50-х -начало 60-х гг.), в котором появилось понятие переменной.
Ассемблер стал первым полноценным языком программирования. Благодаря этому заметно уменьшилось время разработки и возросла надежность программ. Для записи кодов операций и обрабатываемой информации в ассемблере используются стандартные обозначения, позволяющие записывать числа и текст в общепринятом виде, для кодов команд приняты мнемонические обозначения.
Для обозначения величин, размещаемых в памяти, можно применять имена. После ввода программы ассемблер сам заменяет символические имена на адреса памяти, а символические коды команд на числовые. Использование ассемблера сделало процесс программирование более наглядным. Дальнейшее развитие этой идеи привело к созданию языков программирования высокого уровня, в которых длинные и сложные последовательности машинных кодов были заменены одним единственным обозначающим их словом — операторы.
Сегодня практически все программы создаются с помощью языков программирования. Теоретически программу можно написать и на естественном языке (говорят: программирование на метаязыке), но из-за неоднозначности естественного языка автоматически перевести такую программу в машинный код пока невозможно.
Языки программирования — это формальные искусственные языки. Как и естественные языки, они имеют алфавит, словарный запас, грамматику и синтаксис, а также семантику.
Алфавит — разрешенный к использованию набор символов, с помощью которого могут быть образованы слова и величины данного языка.
Словарный состав или лексика языка — это совокупность употребляемых в нем слов, т.е. правильных слов данного языка.
Грамматика — это конечная система правил, определяющих язык.
Грамматика определяет способы построения изменения и сочетания слов.
Синтаксис — система правил, определяющих допустимые конструкции языка программирования из букв алфавита.
Семантика — система правил однозначного толкования каждой языковой конструкции, позволяющих производить процесс обработки данных.
Взаимодействие синтаксических и семантических правил определяет основные понятия языка, такие как операторы, идентификаторы, константы, переменные, функции, процедуры и т.д. В отличие от естественных, язык программирования имеет ограниченный запас слов (операторов) и строгие правила их написания, а правила грамматики и семантики, как и для любого формального языка, явно однозначно и четко сформулированы.
Языки программирования, ориентированные на команды процессора и учитывающие его особенности, называют языками низкого уровня. «Низкий уровень» не означает неразвитый, имеется в виду, что операторы этого языка близки к машинному коду и ориентированы на конкретные команды процессора.
Языком самого низкого уровня является ассемблер. Программа, написанная на нем, представляет последовательность команд машинных кодов, но записанных с помощью символьных мнемоник. С помощью языков низкого уровня создаются компактные оптимальные программы, так как программист получает доступ ко всем возможностям процессора. С другой стороны, при этом требуется хорошо понимать устройство компьютера, а использование такой программы на компьютере с процессором другого типа невозможно. Такие языки программирования используются для написания небольших системных приложений, драйверов устройств, модулей стыковки с нестандартным оборудованием, когда важнее компактность, быстродействие, прямой доступ к аппаратным ресурсам.
Языки программирования, имитирующие естественные, обладающие укрупненными командами, ориентированные «на человека», называют языками высокого уровня. Чем выше уровень языка, тем ближе структуры данных и конструкции, использующиеся в программе, к понятиям исходной задачи. Особенности конкретных компьютерных архитектур в них не учитываются, поэтому исходные тексты программ легко переносимы на другие платформы, имеющие трансляторы этого языка. Разрабатывать программы на языках высокого уровня с помощью понятных и мощных команд значительно проще; число ошибок, допускаемых в процессе программирования, намного меньше. В настоящее время насчитывается несколько сотен таких языков (без учета их диалектов).
Таким образом, языки программирования высокого уровня, ориентированные на решение больших содержательных прикладных задач, являются аппаратно-независимыми и требуют использования соответствующих программ-переводчиков для преобразования текста программы в машинный код, который в итоге и обрабатывается процессором.
Язык высокого уровня «непонятен» компьютеру, поэтому существуют специальные программы-трансляторы, переводящие операторы языка высокого уровня в машинные коды.
Существуют два типа программ-трансляторов: компилятор и интерпретатор.
Компилятор работает сразу со всем исходным модулем, формируя на его основе загрузочный модуль, т. е. исполняемый файл, готовый для выполнения на компьютере. Программа в виде загрузочного модуля выполняется независимо от исходного модуля.
Интерпретатор работает с исходным модулем по шагам. Он разбирает (интерпретирует) каждый оператор исходного модуля и выполняет его. В режиме интерпретации проще отлаживать программу, однако программа работает значительно медленнее, чем скомпилированная программа.
Существенным шагом по снижению трудоемкости создания программ при повышении их качества, надежности и возможности использования в массовом порядке явилось структурированное программирование. Его основные принципы следующие:
Нисходящее программирование основано на иерархическом подходе к решению задач и используется на начальной стадии процесса разработки решения задачи. При этом составляется иерархическая модель объекта, выбираются функция, степень детализации.
Иерархическая модель строится по следующим правилам:
— каждый модуль может быть связан только с одним модулем верхнего уровня и с несколькими модулями нижнего уровня;
— для каждого модуля нижнего уровня имеется выход в модуль верхнего уровня;
— связи между модулями организуются сверху вниз;
— обращение к одному модулю возможно несколько раз, при этом он изображается один раз и оформляется как подпрограмма.
Модульное программирование предполагает независимое программирование каждого модуля, начиная с верхнего уровня иерархии. При осуществлении тестирования модулей верхнего уровня на модули нижнего уровня ставится «заглушка», чаще всего в виде оператора печати. Модули добавляются по одному. После окончания разработки каждого модуля тестируется весь комплекс в целом.
Модульное программирование позволяет существенно сократить время, необходимое на отладку программ.
Структурное программирование — это процесс программирования на алгоритмическом языке с использованием определенных конструкций. При этом следует соблюдать следующие правила:
— любая программа составляется на базе основных алгоритмических структур трех видов: линейного, разветвляющегося, циклического;
— между этими структурами производится передача управления только вперед — от более высокого уровня иерархии к более низкому;
— запрещается использовать команду переходов «GOTO». Структурное программирование используется в основном для программирования отдельных модулей.
Структурный контроль используется при решении сложных многомодульных задач. Группе специалистов-сотрудников выдаются рабочие материалы по разрабатываемой задаче, они обсуждают и вносят замечания, которые разработчики должны реализовать.
Свойства языков программирования:
Понятность (удобочитаемость) конструкций языка — это свойство, обеспечивающее легкость восприятия программ человеком.
Под надежностью понимается степень автоматического обнаружения ошибок, которое может быть выполнено транслятором или операционной средой, в которой выполняется программа.
Гибкость языка программирования проявляется в том, сколько возможностей он предоставляет программисту для выражения всех операций, которые требуются в программе, не заставляя его прибегать к вставкам ассемблерного кода или различным ухищрениям.
Простота языка обеспечивает легкость понимания семантики языковых конструкций и запоминания их синтаксиса.
Естественность
Язык должен содержать такие структуры данных, управляющие структуры и операции, а также иметь такой синтаксис, которые позволяли бы отражать в программе логические структуры, лежащие в основе реализуемого алгоритма.
Мобильность
Язык, независимый от аппаратуры, предоставляет возможность переносить программы с одной платформы на другую с относительной легкостью. Это позволяет распределить высокую стоимость программного обеспечения на ряд платформ.
Суммарная стоимость использования языка программирования складывается из нескольких составляющих. В нее входят:
• стоимость обучения языку;
• стоимость создания программы;
• стоимость трансляции программы;
• стоимость выполнения программы;
• стоимость сопровождения программы.
Языки программирования или алгоритмические языки классифицируются: по степени их зависимости от вычислительной машины; по ориентации на сферу применения; по специфике организационной структуры языковых конструкций и т.п. (рис. 6.1),
Рис. 6.1. Классификация языков программирования
Любую систему обозначений и согласованную с ней систему понятий, которую можно использовать для описания алгоритмов и структур данных, в первом приближении можно считать языком программирования.
Знание концептуальных основ языков программирования с точки зрения использования и реализации базовых языковых конструкций позволит:
— более обоснованно выбрать язык программирования для реализации конкретного проекта;
— разрабатывать более эффективные алгоритмы;
— систематически пополнять набор полезных языковых конструкций;
— ускорить изучение новых языков программирования;
— использовать полученные знания как методологическую основу для разработки новых языков программирования;
— получить базовые знания, необходимые для разработки трансляторов для языков программирования, поддерживающих разные вычислительные модели.
Все эти языки называются еще и формальными. Нас более всего интересуют алгоритмические языки, к которым относятся все известные языки программирования.
Для решения задачи на ЭВМ составляется алгоритм, обеспечивающий выполнение всех необходимых действий для получения искомых результатов. Этот алгоритм описывается средствами формального языка, понятного ЭВМ — языка программирования.
К таким средствам относятся элементы языка — символы, цифры, специальные знаки, а также правила составления операторов для описания действий по вводу — выводу и распределению памяти, управлению ветвлением и организацией циклов, обращениям ко внешним устройствам, контролю и отладке отдельных фрагментов и программы в целом, формированию выходных документов и так далее. Каждая ЭВМ имеет свой собственный язык кодов команд, называемый машинным, который обеспечивает непосредственное выполнение любой последовательности машинных операций. Практически компьютер выполняет программы, записанные только на машинном языке. Однако с помощью дополнительных средств (системных программ) реализуются многоуровневые переводы (трансляции) текстов программ с различных языков программирования на язык ЭВМ. Эти языки программирования в отличие от машинных, называются языками высокого уровня, они мало зависят от особенностей конфигурации конкретной ЭВМ, то есть эти языки являются машинно-независимыми.
В языке символического кодирования (ЯСК), в отличие от машинного, цифровые коды заменены буквенными или буквенно-цифровыми (мнемоническими) обозначениями. Это облегчает работу по составлению программы и позволяет автоматизировать действия, связанные с размещениями программы и данных в памяти ЭВМ. Каждой команде языка символического кодирования при трансляции соответствует одна машинная команда. Такие языки называются мнемокодами или языками ассемблеров.
Язык более высокого уровня — макроязык — включает наряду с мнемоническими обозначениями машинных команд отдельные макрокоманды, которые при трансляции заменяются группами команд машинного языка (подпрограммами). Это сокращает запись исходной программы и упрощает программирование, так как исключаются записи часто повторяющихся фрагментов программы. В настоящее время все языки ассемблерного типа допускают использование макросредств, то есть являются макроассемблерами.
Машинно-ориентированные языки содержат все необходимые средства для программирования любых задач. Однако они применяются, когда требуется создать особо быстродействующие программы при минимальных объемах используемой памяти. В частности, на этих языках пишут программы управления устройствами ЭВМ и предварительной обработки данных.
Большинство производственных задач решают с помощью программ, написанных на процедурно — ориентированных языках. Средства этих языков позволяют наиболее просто описать часто встречающиеся фрагменты действий в соответствующих задачах. Процедурно-ориентированные языки предполагают знания пользователя в области математических (численных) методов и основ алгоритмизации (базовый язык для научно-технических расчетов ФОРТРАН, БЕЙСИК (персональные ЭВМ — основной), современный ПАСКАЛЬ).
В процессе развития созданы многоцелевые (универсальные) языки программирования, объединяющие основные средства и возможности многих процедурно — ориентированных языков, например: ПЛ/1 -используемый для решения задач обработки экономической и научно-технической информации, задач управления объектами и т.п.; язык АДА — многоцелевой стандартный язык, способный заменить множество других языков и на длительный период обеспечить разработку и совершенствования программ обеспечения; язык МОДУЛА — объединяет средства и особенности. машинно-ориентированных и процедурно — ориентированных языков; включает средства для написания подпрограмм управления устройствами, управления потоками сообщений, для чего традиционно использовались языки ассемблерного типа.
Для пользователей, не имеющих специальной подготовки, но нуждающихся в оперативном использовании ЭВМ для решения стереотипных задач, разрабатываются специальные проблемно — ориентированные языки (непроцедурные), которые не требуют подробной записи алгоритма решения задачи. На таком языке лишь формулируется задача и указывается последовательность подзадач из готового набора с указанием исходных данных и форм требуемых документов. Специальные средства программы-генераторы из готовых блоков автоматически формируют программу для решения поставленной задачи. Эти языки ещё более высокого уровня, т.е. удалены от машины более, чем процедурно-ориентируемые языки. К ним относятся языки для задания и обработки таблиц данных при решении экономических задач, а также языки моделирования сложных систем СИМУЛА, НЕДИС и другие (СИМСКРИПТ).
Граница между проблемно — и процедурно — ориентированными языками очерчена не очень четко (условно) — ЛИСП, ПРОЛОГ.
Источник: studopedia.org