Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Классификация языков программирования высокого уровня (Обзор и характеристика языков программирования высокого уровня)

Содержание:

Введение

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

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

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

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

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

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

Цели исследования:

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

Задачи исследования:

  1. Познакомится с классификацией языков программирования.
  2. Обзор современных языков программирования высокого уровня.
  3. Рассмотреть сведения про алгоритм.

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

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

В третьей главе рассматриваются общее сведения об алгоритме и его свойствах.

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

Основными источниками, раскрывающими теоретические основы классификации языков программирования, явились работы Хайдарова К.А., Трофимовой В.В., Г. Р. Кадырова и статьи с сайтов.

Обзор языков программирования помогли сделать работы Макарова В.Л., Кадырова Г. Р., Трофимовой В.В. Аузяк А.Г., Богомолова Ю.А., Маликова А.И. и статьи с сайтов.

Основы алгоритмов были раскрыты работами Аузяк А.Г., Богомолова Ю.А., Маликова А.И., Старостина Б.А., Жданова Т.А., Бузыкова Ю.С., Белова П.М., Рака И.П., Терехова А.В., Селезнева А.В. и курс лекций.

Глава 1. Поколения и классификация языков программирования

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

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

Первое поколение (Поколение 1GL).

Начало 1950-х годов - язык первых компьютеров. Первый язык ассемблера, созданный по принципу «одна инструкция - одна строка». [11]

Машинные языки, языки низкого уровня - двоичные языки процессоров, представляющие собой набор (алфавит) команд, записанных в двоичном коде (0,1), которые данный процессор может выполнить непосредственно, если эти команды ввести в его память в виде последовательности или сразу подать в арифметическо-логическое устройство процессора. Примеры: язык процессора IBM-PC, язык ARM-процессора. [2]

Основная отличительная особенность: ориентирование на конкретный компьютер. [11]

Второе поколение (Поколение 2GL).

Конец 1950-х - начало 1960-х г.г. Разработан символьный ассемблер, в котором появилось понятие переменной. Это первая полноценная язык. [11]

Ассемблеры, автокоды, системные языки, языки среднего уровня - текстовые языки, понятные человеку и однозначно переводимые (транслируемые) в языки низкого уровня, то есть машинный двоичный код. Программирование на 2GL на порядок производительнее, чем на 1GL, так как более удобны для человеческого восприятия. Примеры: Макроссемблер, С, PL/1. [2]

Основная отличительная особенность: ориентирование на абстрактный компьютер с такой же системой команд. [11]

Третье поколение (Поколение 3GL).

1960-е гг. - Языки программирования высокого уровня. Их характеристики [11]:

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

Простота языка позволяет писать небольшие программы и людям, которые не являются профессиональными программистами. [11]

Основная отличительная особенность языка третьего поколения: ориентирование на алгоритм (алгоритмические языки). [11]

Языки высокого уровня — текстовые языки, приближенные по словарю и синтаксису к человеческому языку (обычно утрированному английскому, пиндосу), позволяющие записывать программные конструкции в форме, удобной для человеческого мышления и подобные обычному тексту — конспекту, стенограмме. Программирование на 3GL на порядок производительнее, чем на 2GL, так как более удобны для человеческого восприятия и на порядок короче ассемблерных. Примеры: бейсик, фортран, PHP и практически все сетевые языки. [2]

Всего в мире существует около 200 популярных языков программирования третьего уровня. [11]

Четвертое поколение (Поколение 4GL).

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

Языки визуального программирования ‑ языки блок-схем, позволяющие отображать алгоритмы в программных проектах, что облегчает создание и анализ алгоритмов. Программирование на 4GL на порядок производительнее, чем на 3GL. Примеры: RAD-системы, CAD-пакеты, OLAP-системы. [2]

Часто относят: SQL, SGML (HTML, XML ), Prolog, и многие другие узкоспециализированных декларативных языков. Правда ряд языков, которые относят к четвертому поколению, не являются языками программирования как таковыми. Например, SQL является языком запросов к базам данных, HTML является языком разметки гипертекста, а не полноценными языками программирования, скорее они выступают своеобразными специализированными дополнениями к языкам программирования. Тоже самое касается XML. [11]

Основная отличительная особенность языка четвертого поколения: приближение к человеческой речи (декларативные языки). [11]

Некоторые языки имеют черты одновременно и третьего и четвертого поколений. [11]

Пятое поколение (Поколение 5GL).

Пятого поколения языков программирования пока не существует. [11]

Производители пропроиетарних программных продуктов часто пытаются приписать своим продуктам какие маркетинговые особенности, и порой указывают что их продукт - это «язык пятого поколения». В действительности, все эти продукты - это просто среды для ускоренного создания продуктов (Rapid Application Development - RAD), и используют языки третьего и четвертого поколений. [11]

Речь пятого поколения вытеснит ли существенно потеснит языка третьего (напр. Java) и четвертого поколения (например SQL) за счет значительно увеличенной производительности труда программиста - в 10-1000 раз. По прогнозам, 5GL будет оперировать мета-мета-данными. [11]

Интеллектуальные языки программирования - позволяют передать функцию создания алгоритмов компьютеру, а за человеком оставить лишь постановку задачи. Программирование на 5GL на порядок производительнее, чем на 4GL. Примеры: система MatCAD, экспертные системы. [2]

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

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

Можно классифицировать языки на вычислительные и языки символьной обработки. К первому типу относят ФОРТРАН, ПАСКАЛЬ, АЛГОЛ, БЕЙСИК, С, ко второму – ЛИСП, ПРОЛОГ, СНОБОЛ и др. [10]

Классификация языков программирования по типам задач приведена в таблице Таблица 1. [10]

Таблица 1 ‑ Классификация языков программирования по типам задач [10]

Тип задачи

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

Задачи искусственного интеллекта

ЛИСП, ПРОЛОГ, Common Lisp, РЕФАЛ, Planner, QLisp

Параллельные вычисления

Fun, Apl, ML, SML, Occam, Actus, параллельный КОБОЛ, ОВС-АЛГОЛ, ОВС-ФОРТРАН

Задачи вычислительной математики и физики

Occam, Actus, параллельный КОБОЛ, ОВС-АЛГОЛ, ОВС-ФОРТРАН

Разработка интерфейса, программ-оболочек, систем

Forth, С, C++, АССЕМБЛЕР, МАКРОАССЕМБЛЕР, СИМУЛА-67,0 А К, Smalltalk, Java, РПГ

Задачи вычислительного характера

АЛГОЛ, ФОРТРАН, КОБОЛ, Ada, PL/1, БЕЙСИК, ПАСКАЛЬ

Оформление документов, обработка больших текстовых файлов, организация виртуальных трехмерных интерфейсов в Интернете, разработка БД

HTML, Perl, SQL, Informix 4GL, Natural, DDL, DSDL, SEQUEL

Еще одна распространенная классификация языков программирования основана на принципе их организации. По этой классификации языки делят на две группы: процедурные (употребляются также термины императивные и структурные, хотя это не совсем одно и то же) и непроцедурные (объектно-ориентированные, функциональные и логические) (Рисунок 1). [5]

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

В процедурных языках программа явно описывает действия, которые необходимо выполнить, а результат задается только способом получения его при помощи некоторой процедуры, которая представляет собой определенную последовательность действий. В эту большую группу входят, например, ПАСКАЛЬ, С, АДА, ПЛ/1, ФОРТРАН и БЕЙСИК. [10]

Классификация языков программирования. Автор24 — <a href=

Рисунок 1 ‑ Общая классификация языков программирования [5]

Процедурные языки разделяют на языки низкого и высокого уровня.

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

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

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

Язык высокого уровня – это язык программирования, предназначенный для удовлетворения требований программиста; он не зависит от внутренних машинных кодов компьютера любого типа. Языки высокого уровня используют для решения проблем, и поэтому их часто называют проблемно-ориентированными языками. Каждая команда языка высокого уровня эквивалентна нескольким командам в машинных кодах, поэтому программы, написанные на языках высокого уровня, более компактны, чем аналогичные программы в машинных кодах. [10]

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

Работа всех трансляторов строится по одному из двух принципов: интерпретация или компиляция. [5]

Интерпретация подразумевает пооператорную трансляцию и последующее выполнение оттранслированного оператора исходной программы. В связи с этим можно отметить два недостатка метода интерпретации: во-первых, интерпретирующая программа должна находиться в памяти ЭВМ в течение всего процесса выполнения исходной программы, т. е. занимать определенный объем памяти; во- вторых, процесс трансляции одного и того же оператора повторяется столько раз, сколько раз должна исполняться эта команда в программе, что резко снижает производительность работы программы. [5]

Несмотря на указанные недостатки, трансляторы-интерпретаторы получили достаточное распространение, так как они удобны при разработке и отладке исходных программ. [5]

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

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

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

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

При использовании декларативного языка программист указывает исходные информационные структуры, взаимосвязи между ними и то, какими свойствами должен обладать результат. При этом процедуру его получения («алгоритм») программист не строит (по крайней мере, в идеале). В этих языках отсутствует понятие «оператор» («команда»). Декларативные языки можно подразделить на два семейства - логические (типичный представитель - Пролог) и функциональные (Лисп). [5]

В функциональных языках программа описывает вычисление некоторой функции. Обычно эта функция задается как композиция других, более простых, те в свою очередь разлагаются на еще более простые и т.д. Один из основных элементов в функциональных языках – рекурсия, т.е. вычисление значения функции через значение этой же функции от других элементов. Присваивания и циклов в классических функциональных языках нет. Представителями этой группы являются ЛИСП, ML и Haskell. [10]

В логических языках программа вообще не описывает действий. Она задает данные и соотношения между ними. После этого системе можно задавать вопросы. Машина перебирает известные и заданные в программе данные и находит ответ на вопрос. Порядок перебора не описывается в программе, а неявно задается самим языком. Классическим языком логического программирования считается ПРОЛОГ. Построение логической программы вообще не требует алгоритмического мышления, программа описывает статические отношения объектов, а динамика находится в механизме перебора и скрыта от программиста. [10]

С развитием глобальной сети было создано много языков программирования, адаптированных специально для Интернета. Характерные особенности: языки являются интерпретируемыми, интерпретаторы для них распространяются бесплатно, сами программы - в исходных текстах. Такие языки называются скрипт- языками. [5]

Языки веб-программирования - это языки, которые в основном предназначены для работы с веб-технологиями. Языки вебпрограммирования можно условно разделить на две пересекающиеся группы: клиентские и серверные. [5]

Как следует из названия, программы на клиентских языках обрабатываются на стороне пользователя, как правило их выполняет браузер. Это и создает главную проблему клиентских языков - результат выполнения программы (скрипта) зависит от браузера пользователя. То есть если пользователь запретил выполнять клиентские программы, то они исполняться не будут, как бы ни желал этого программист. Кроме того, может произойти такое, что в разных браузерах или в разных версиях одного и того же браузера один и тот же скрипт будет выполняться по-разному. С другой стороны, если программист возлагает надежды на серверные программы, то он может упростить их работу и снизить нагрузку на сервер за счет программ, исполняемых на стороне клиента, поскольку они не всегда требуют перезагрузку (генерацию) страницы. Самыми распространенными клиентскими языками программирования являются [5]:

  • HTML
  • CSS
  • JavaScript
  • VBScript
  • ActionScript
  • Java

Серверные языки. Когда пользователь дает запрос на какую- либо страницу (переходит на неё по ссылке или вводит адрес в адресной строке своего браузера), то вызванная страница сначала обрабатывается на сервере, то есть выполняются все программы, связанные со страницей, и только потом возвращается к посетителю по сети в виде файла. Этот файл может иметь расширения: HTML, PHP, ASP, ASPX, Perl, SSI, XML, DHTML, XHTML. [5]

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

К серверным языкам программирования можно отнести [5]:

  • PHP;
  • Perl;
  • Python;
  • Ruby;
  • любой .NET язык программирования (технология ASP.NET);
  • Java;
  • Groovy.

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

Глава 2. Обзор и характеристика языков программирования высокого уровня

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

  1. Фортран (FORmula TRANslating system - система трансляции формул) старейший и сегодня активно используемый в решении задач математической ориентации язык. Является классическим языком для программирования на ЭВМ математических и инженерных задач. [5]

В 1954 г. группой разработчиков во главе с Джоном Бэкусом был создан язык программирования Фортран. Это первый язык программирования высокого уровня. Впервые программист мог по-настоящему абстрагироваться от особенностей машинной архитектуры. Ключевой идеей, отличающей новый язык от Ассемблера, была концепция подпрограмм. Транслятор с Фортрана в машинные коды был весьма сложной программой, которая в отличие от современных трансляторов не выполняла контроль многих ошибок программиста. Кроме того, генерируемый машинный код был менее эффективен, чем если бы программа изначально писалась на Ассемблере. [10]

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

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

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

  1. Кобол. В 1960 г. был создан язык программирования Кобол (COBOL – Common Business-Oriented Language). Он задумывался как язык для создания коммерческих приложений. На КОБОЛе написаны тысячи прикладных коммерческих систем. Отличительной особенностью языка является возможность эффективной работы с большими массивами данных. Популярность Кобола столь высока, что даже сейчас, при всех его недостатках, появляются его новые диалекты и реализации. Например, недавно появилась реализация Кобола для Microsoft.NET. [5]

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

К числу других плюсов Кобола относят его структурированность. Довольно мощные компиляторы с этого языка разработаны для персональных компьютеров. Некоторые из них столь эффективны, что программу, отлаженную на персональном компьютере, нетрудно перенести на большие ЭВМ. [4]

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

Еще одной причиной, сдерживающей развитие языка, является наличие в США отраслевого комитета, вырабатывающего стандарты, за соблюдением которых следит правительственная комиссия. Как это всегда бывает в подобных случаях, фирмы, занимающиеся разработкой программного обеспечения, не торопятся подгонять свои заготовки к жестким требованиям комиссии, отсутствует конкуренция, а в итоге проигрывает распространение языка. [4]

  1. ПЛ/1. В 1964 г. в корпорации IBM был создан язык ПЛ/1 (PL/1 – Programming Language 1), который был призван заменить Кобол и Фортран в большинстве приложений. Язык обладал исключительным богатством синтаксических конструкций. Однако язык оказался крайне сложным для написания и в особенности отладки программ, поэтому так и не приобрел широкую популярность.
  2. Бейсик (Beginner's All-purpose Symbolic Instruction Code - универсальный символический код инструкций для начинающих) несмотря на многие недостатки и изобилие плохо совместимых версий - самый популярный по числу пользователей. Широко употребляется при написании простых программ. [5]

Был разработан язык программирования Бейсик в 1963 г. в Дартмутском колледже. Язык задумывался в первую очередь как средство первоначального обучения программированию. Бейсик действительно стал языком, на котором учились программировать несколько поколений. Бейсик был также доступен на ПК, обычно он встроен в ПЗУ. Так Бейсик завоевал популярность. Он и сегодня самый простой для освоения из десятков языков общецелевого программирования. Было создано несколько мощных реализаций БЕЙСИКа, поддерживающих самые современные концепции программирования (ярчайший пример – Microsoft Visual Basic). [10]

  1. Алгол. В 1960 г. командой во главе с Петером Науром был создан язык программирования Алгол (ALGOL – Algorithmic Language). Этот язык дал начало целому семейству алголоподобных языков (важнейший представитель – Паскаль). В 1968 г. появилась новая версия языка. Она не нашла столь широкого практического применения, как первая версия, но была весьма популярна в кругах теоретиков.

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

Эти языки (Фортран, Кобол, ПЛ/1, Бейсик, Алгол и др.) послужили фундаментом для более поздних разработок.

  1. Паскаль (Pascal - назван в честь ученого Блеза Паскаля) чрезвычайно популярен как при изучении программирования, так и среди профессионалов. Создан в начале 70-х годов швейцарским ученым Никлаусом Виртом. Язык Паскаль первоначально разрабатывался как учебный, и, действительно, сейчас он является одним из основных языков обучения программированию в школах и вузах. Однако качества его в совокупности оказались столь высоки, что им охотно пользуются и профессиональные программисты. [5]

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

Хотя Паскаль был разработан как язык для обучения программированию, он впоследствии получил широкое развитие и в настоящее время считается одним из самых используемых языков. Отрицательной чертой языка было отсутствие в нем средств для разбиения программы на модули. Никлаус Вирт это осознавал и разработал язык Modula-2 (1978), в котором идея модуля стала одной из ключевых концепций языка. В 1988 г. появилась Modula-З, в которую были добавлены объектно-ориентированные черты. Логическим продолжением Паскаля и Modula являются языки Oberon и Oberon-2. Они характеризуются движением в сторону объектно- и компонентно-ориентированности. [10]

Не менее впечатляющей, в том числе и финансовой, удачи добился Филип Кан, француз, разработавший систему Турбо-Паскаль. Суть его идеи состояла в объединении последовательных этапов обработки программы - компиляции, редактирования связей, отладки и диагностики ошибок - в едином интерфейсе. Версии Турбо-Паскаля заполонили практически все образовательные учреждения, программистские центры и частные фирмы. На базе языка Паскаль созданы несколько более мощных языков (Модула, Ада, Дельфи). [5]

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

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

Достоинства языка Паскаль [4]:

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

Сегодня Паскаль является одним из трех основных языков программирования. Строгость и четкость делают его почти идеальным для академического изучения. Этот язык считается базовым во многих неспециализированных высших учебных заведениях и университетах мира. [4]

  1. АДА является языком, победившим (май 1979 г.) в конкурсе по разработке универсального языка, проводимым Пентагоном с 1975 году. Разработчики - группа ученых во главе с Жаном Ихбиа. Победивший язык окрестили АДА, в честь Огасты Ады Лавлейс. Язык АДА - прямой наследник языка Паскаль. Этот язык предназначен для создания и длительного (многолетнего) сопровождения больших программных систем, допускает возможность параллельной обработки, управления процессами в реальном времени и многое другое, чего трудно или невозможно достичь средствами более простых языков. [5]
  2. Си (С - «си»). В 1972 г. Брайан Керниган и Деннис Ритчи создали язык программирования Си (это была третья, удачная, версия, первой и второй были соответственно языки А и В). Язык Си создавался как язык для разработки операционной системы UNIX. Его часто называют "переносимым ассемблером", поскольку он позволяет работать с данными практически так же эффективно, как на Ассемблере, предоставляя при этом структурированные управляющие конструкции и абстракции высокого уровня (структуры и массивы). Именно с этим связана его огромная популярность и поныне. И именно это является его ахиллесовой пятой. Компилятор Си очень слабо контролирует типы, поэтому очень легко написать внешне совершенно правильную, но логически ошибочную программу. [10]

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

Си – современный язык. Он включает в себя те управляющие конструкции, которые рекомендованы теорией и практикой программирования. [4]

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

Си – переносимый и мобильный язык. [4]

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

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

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

Характерным недостатком языка стала относительно высокая сложность изучения по сравнению с языками Паскаль и Бейсик. [4]

  1. С++ (С++). В начале 1970-х годов Деннис Ритчи (Dennis Ritchie) вместе с программистом Кеннетом Томпсоном (Kenneth Thompson) разработали язык программирования Си. Представленный в 1973 году, Си широко применяется до сих пор и оказал влияние на многие более современные языки. Ритчи как создатель Си также внес большой вклад в создание операционной системы UNIX. Язык С++ был разработан Бьерном Страуструпом в начале 80-х годов, как дальнейшее развитие языка Си. [9]

Язык С++ обладает рядом свойств, которые делают его более совершенным языком по сравнению с Си, однако наиболее важным является то, что он обеспечивает возможность объектно-ориентированного программирования. [9]

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

В отличие от традиционных структур Си и Паскаля, в Си++ членами класса являются не только данные, но и функции. Функции имеют привилегированный доступ к данным внутри объектов этого класса и обеспечивают интерфейс между этими объектами и остальной программой. При дальнейшей работе совершенно не обязательно помнить о внутренней структуре класса и механизме работы встроенной функции. В этом смысле класс подобен электрическому прибору: мало кто знает о его устройстве, но все знают, как им пользоваться. [4]

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

В последнее время появились среды быстрого проектирования на Си++, которые предоставляют готовые компоненты для ввода и вывода информации и поддерживают концепцию виртуального проектирования приложений Windows. Это значительно упростило изучение языка. [4]

  1. Дельфи (Delphi) язык объектно-ориентированного «визуального» программирования; в данный момент чрезвычайно популярен. Созданный на базе языка Паскаль специалистами фирмы Borland язык Delphi, обладая мощностью и гибкостью языков Си и Си++, превосходит их по удобству и простоте интерфейса при разработке приложений, обеспечивающих взаимодействие с базами данных и поддержку различного рода работ в рамках корпоративных сетей и сети Интернет. [5]
  2. Ява (Java ‑ назван по марке кофе) платформенно-независимый язык объектно-ориентированного программирования, чрезвычайно эффективен для создания интерактивных веб-страниц. Этот язык был создан в 1995 г. в корпорации Sun Microsystems Кеном Арнольдом и Джеймсом Гослингом. Он наследовал синтаксис С и С+ + и был избавлен от некоторых неприятных черт последнего. Отличительной особенностью языка является компиляция в код некоей абстрактной машины, для которой затем пишется эмулятор (Java Virtual Machine) для реальных систем. [10]
  3. C# (произносится си шарп) - объектно-ориентированный язык программирования. Разработан в 1998-2001 годах группой инженеров под руководством Андерса Хейлсберга в компании Microsoft как язык разработки приложений для платформы Microsoft .NET Framework и впоследствии был стандартизирован как ECMA- 334 и ISO/IEC 23270. C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. [5]

С тех пор язык сильно вырос в плане популярности и стал чуть ли не самым предпочитаемым языком среди разработчиков Windows- и Web-приложений, которые используют .NET Framework. Отчасти привлекательность языка С# связана с его понятным синтаксисом, который происходит от синтаксиса C/C++, но упрощает некоторые вещи. Несмотря на это упрощение, язык С# обладает той же мощью, что и C++. [5]

С# в достаточной степени схож с Java (и задумывался как альтернатива последнему), но имеет и отличительные особенности. Ориентирован в основном на разработку многокомпонентных интернет-приложений. [10]

  1. Оберон (Oberon) - язык общего назначения, созданный автором Pascal и Modula-2 Никлаусом Виртом (Niklaus Wirth) и его коллегами из Швейцарского федерального технического института г. Цюрих (ETH Zurich) в ходе разработки одноименной операционной системы для однопользовательской рабочей станции Ceres. Язык и операционная система названы именем одного из спутников планеты Уран - Оберона. Имеет долгую историю создания, является наследником Algol 60 (1960), Pascal (1970) и Modula (1979). Oberon синтезировал более четверти века исследований Н.Вирта по методологии и языкам программирования. Ему с учениками удалось добиться точного синтеза «старых» достижений структурного и модульного программирования с «новыми» объектными методами. Вот, что говорил сам Вирт о своем «детище»: «Он (Oberon) включает в себя средства, необходимые для объектно-ориентированного программирования, сохраняя стиль Паскаля, и является результатом моего стремления к простоте без потери выразительности. В этом должна состоять сущность языка, равно пригодного как для учебной аудитории, так и для профессиональной деятельности.» Неслучайно, что в качестве эпиграфа к сообщению о языке Oberon Н. Вирт выбрал высказывание А.Эйнштейна: «Сделай так просто, как возможно, но не проще того». Наращивание мощи языка без его усложнения - принцип, которому неуклонно следует Н. Вирт. В 1992 году сотрудничество Н.Вирта с Ханспетером Мёссенбёком (Hanspeter Mossenbock) привело к добавлению в язык ряда новых средств. Новая версия получила название Oberon-2. Оберон-2 представляет собой почти правильное расширение Оберона и является фактическим стандартом языка, который поддерживается большинством современных Оберон-систем. [5]
  2. Лисп (LISP – List Information Symbol Processing, язык для обработки списков). Появился язык в конце 1950-х гг. для работы со строками символов. Это особое предназначение Лиспа открыло для программистов новую область деятельности, известную ныне как "искусственный интеллект". В настоящее время Лисп успешно применяется в экспертных системах, системах аналитических вычислений и т.п. [10]

Обширность области возможных приложений Лиспа вызвала появление множества различных диалектов Лиспа. Это легко объяснимо: применение Лиспа для понимания естественного языка требует определенного набора базисных функций, отличных, например, от используемого в задачах медицинской диагностики. Потомки ЛИСП – Planner (1967), Scheme (1975), Common Lisp (1984). Последний был принят в университетах США, а также многими разработчиками систем искусственного интеллекта в качестве основного диалекта языка ЛИСП. Многие его черты были унаследованы современными языками функционального программирования. [10]

  1. Пролог (PROgramming in LOGic - логическое программирование). Главное назначение языка - разработка интеллектуальных программ и систем. Пролог - это язык программирования, созданный специально для работы с базами знаний, основанными на фактах и правилах (одного из элементов систем искусственного интеллекта). В языке реализован механизм возврата для выполнения обратной цепочки рассуждений, при котором предполагается, что некоторые выводы или заключения истинны, а затем эти предположения проверяются в базе знаний, содержащей факты и правила логического вывода. Если предположение не подтверждается, выполняется возврат и выдвигается новое предположение. В основу языка положена математическая модель теории исчисления предикатов. [5]

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

Пролог является родоначальником большинства языков логического программирования. У него есть ряд потомков – Parlog (1983, ориентирован на параллельные вычисления), Delta Prolog и др. [10]

Пролог – это язык, предназначенный для поиска решений. Это декларативный язык, т.е. формальная постановка задачи может быть использована для ее решения. Пролог определяет логические отношения в задаче как отличные от пошагового решения этой задачи. [10]

  1. HTML (HyperText Markup Language). Общеизвестный язык для оформления документов. Не является алгоритмическим языком программирования, а язык разметки гипертекста. Очень прост, содержит элементарные команды форматирования текста, добавления рисунков, задания шрифтов и цветов, организации ссылок и таблиц. Все Web-страницы написаны на языке HTML или используют его расширения. [5]
  2. PHP - скриптовый язык программирования, применяющийся для создания сайтов. Важное его достоинство языка php - это создания динамических веб-сайтов, работа с базами данных (mysql). [5]

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

Глава 3. Понятие об алгоритме

Слово «Алгоритм» происходит от algorithmi – латинского написания имени аль-Хорезми, под которым в средневековой Европе знали величайшего математика из Хорезма (город в современном Узбекистане) Мухаммеда бен Мусу, жившего в 783-850 гг. В своей книге «Об индийском счете» он сформулировал правила записи натуральных чисел с помощью арабских цифр и правила действий над ними столбиком. В дальнейшем алгоритмом стали называть точное предписание, определяющее последовательность действий, обеспечивающую получение требуемого результата из исходных данных. Алгоритм может быть предназначен для выполнения его человеком или автоматическим устройством. Создание алгоритма, пусть даже самого простого, - процесс творческий. Он доступен исключительно живым существам, а долгое время считалось, что только человеку. Другое дело – реализация уже имеющегося алгоритма. Ее можно поручить субъекту или объекту, который не обязан вникать в существо дела, а возможно, и не способен его понять. Такой субъект или объект принято называть формальным исполнителем. [9]

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

Каждый алгоритм создается в расчете на вполне конкретного исполнителя. [9]

Те действия, которые может совершать исполнитель, называются его допустимыми действиями. Совокупность допустимых действий образует систему команд исполнителя. Алгоритм должен содержать только те действия, которые допустимы для данного исполнителя. [9]

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

  1. Дискретность. Алгоритм должен представлять процесс решения задачи как последовательность выполнения простых действий (шагов, этапов). При этом для выполнения каждого действия алгоритма требуется время. [8]
  2. Детерминированность (Однозначность). Каждое действие (шаг, этап) должно быть четким, однозначным, исключающим произвольное толкование и не оставляющим места для двусмысленности. Выполнение алгоритма носит, по сути, механический характер и не требует никаких дополнительных указаний. [8]
  3. Результативность. Алгоритм должен приводить к решению задачи или сообщению, что задача решений не имеет за конечное число шагов. [8]
  4. Конечность. Каждое отдельное действие, как и весь алгоритм должны иметь возможность реального исполнения. Поэтому алгоритм имеет придел, т. е. конечен. [8]
  5. Массовость. Алгоритм разрабатывается в общем виде так, чтобы его можно было применять для класса задач, различающихся только исходными данными. При этом исходные данные выбираются из некоторой области, которая называется областью применяемости алгоритма. Например, для решения квадратного уравнения ax+bx+c=0, коэффициенты действительные числа, а ≠ 0, и а, в, с – различные. [8]

Способы записи алгоритмов.

I. Словесный способ.

Словесный способ записи алгоритмов представляет собой последовательное описание основных этапов обработки данных и задается в произвольном изложении на естественном языке. [1]

В качестве примера рассмотрим запись алгоритма нахождения наибольшего общего делителя двух натуральных чисел и п). Алгоритм может быть записан в следующем виде [1]:

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

Способ основан на использовании общепринятых средств общения между людьми и с точки зрения написания трудностей не представляет. Такой способ записи удобно использовать на начальном этапе алгоритмизации задачи. К недостаткам словесного способа записи можно отнести следующее [1]:

1) полное подробное словесное описание алгоритма получается очень громоздким;

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

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

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

II. Графический способ (блок-схем).

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

Запись блоков [7]:

  1. Начало и конец алгоритма (программы):

  1. Блок присваивания:

  1. Ввод данных с клавиатуры:

  1. Вывод информации на экран (на печать):

  1. Блок ветвления (проверки условия):

  1. Блок цикла с параметром:

  1. Нумерация блоков, значок перехода на блок с указанным номером:

III. Запись с помощью псевдокода.

Псевдокод - это система обозначений, предназначенная для неформального представления идей в процессе разработки алгоритмов. [6]

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

Альтернатива выражается на псевдокоде следующей структурой: if (условие) then (действие) else (действие).

Сокращенный синтаксис этого конструкта, когда не предусмотрено действие для варианта else выглядит так [6]:

if (условие) then (действие).

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

Эта инструкция предписывает проверить условие и, если оно верно, выполнить действие, а затем вновь проверить условие. Если при очередной проверке условие оказывается неверным, следует перейти к инструкции, следующей за данной структурой [6]:

while (условие) do (действие).

Цикл-do на псевдокоде имеет следующий вид: repeat (действие) until (условие)

Оператор присваивания. Часто желательно ссылаться на некоторые значения с помощью описательных имен. Для установки подобных связей будет использоваться следующая конструкция присваивания [6]:

assign имя the value выражение,

здесь параметр имя - это описательное имя, а параметр выражение описывает значение, связываемое с этим именем. Например: assign Итог the value Цена + Налог

При ее выполнении результат суммирования значений переменных Цена и Налог будет связан с именем Итог .

Процедуры. Используются для описания действий, которые могут выступать в роли вспомогательных программ в других приложениях. Такие программные элементы имеют несколько различных названий, а именно: подпрограммы, процедуры и функции. [6]

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

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

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

Такие обобщенные имена в псевдокоде выделяют угловыми скобками и указывают их в круглых скобках, а той же строке, в которой определяется имя данной процедуры. В частности, процедура Сортировка, предназначенная для сортировки произвольных списков имен, будет начинаться следующей инструкцией: procedure Сортировка(<список>). [6]

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

Виды алгоритмов.

1. Алгоритм последовательного поиска.

Этот алгоритм решает задачу поиска в списке некоторого заданного значения. Он позволяет установить, есть ли заданное значение в списке. Если это значение в списке присутствует, поиск будет считаться успешным, в противном случае - неудачным. [6]

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

procedure Поиск (<список>, <искомое значение>) if (список пуст)

then (объявить поиск неудачным)

else

(выбрать как <проверяемое значение> первый

элемент списка)

while (<искомое значение> > <проверяемое значение> и есть непроверенные элементы) do

(выбрать следующий элемент списка как <проверяемое значение>) if (<искомое значение> =

<проверяемое значение>)

then (объявить поиск успешным) else (объявить поиск неудачным)

По окончании выполнения структуры while искомое значение либо будет найдено, либо выяснится, что его нет в списке. В любом случае успешность поиска можно установить, сравнивая искомое значение с проверяемым. Если они эквивалентны, поиск объявляется успешным. Для полной уверенности в правильности программы она помещается в предложение else инструкции if. [6]

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

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

2. Алгоритм двоичного поиска.

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

Реализовать эту стратегию можно с помощью следующего алгоритма, в котором учитывается возможность получения пустого списка. [6]

procedure Search (<список>, <искомое_значение>) if (<список> пуст)

then (Объявить поиск неудачным)

else

(Выбрать "средний" элемент в <список> в качестве

<проверяемый_элемент>)

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

Case 1: <искомое_значение> = <проверяемый_элемент> (Объявить поиск успешным)

Case 2: <искомое_значение> < <проверяемый_элемент> (Применить процедуру Search, чтобы определить, есть ли в части списка, предшествующей элементу <проверяемый элемент>, элемент <искомое_значение>, и if (тот поиск успешен then (Объявить этот поиск успешным) else (Объявить этот поиск неудачным) Case 3:

<искомое_значение> > <проверяемый__элемент> (Применить процедуру Search, чтобы определить, есть ли в части списка, следующей за элементом <проверяемый_элемент>,

элемент <искомое_значение> и if (тот поиск успешен)

then (Объявить этот поиск успешным) else (Объявить этот поиск неудачным)

Если выбранный элемент не является искомым, то эта программа предлагает два варианта дальнейших действий - поиск в начальной или конечной половине списка. В каждом из них предусматривается выполнение вторичного поиска той же процедурой Search. [6]

При выполнении этой процедуры и при достижении инструкции <Применить процедуру Search, чтобы ...>, будет применяться этот же метод поиска к меньшему списку, который является частью исходного списка. Если этот вторичный поиск завершится успешно, то осуществляется возврат в исходную процедуру, чтобы объявить выполняемый в ней поиск успешным. Если же вторичный поиск окончится неудачей, то объявляется неудачным и исходный поиск. [6]

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

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

3. Алгоритм сортировки методом вставки.

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

procedure Сортировка (<список>) assign N the value 2;

while (значение N не превышает <длина списка>)

do (Выбрать N-й элемент списка в качестве опорного; Переместить этот элемент во временное хранилище, оставив в списке пустое место;

while (над пустым местом есть имя, которое по алфавиту размещается ниже, чем опорный элемент)

do (переместить имя, находящееся над пустым местом вниз, оставив в прежней позиции пустое место); Поместить опорный элемент на пустое место в списке assign

N the value N+1

здесь N - счетчик, параметр <длина списка> - количество элементов в списке.

Программа сортирует список, многократно повторяя следующие действия: «Элемент извлекается из списка, а затем вставляется на надлежащее ему место». [6]

Каждое выполнение тела внешнего цикла приводит к тому, что внутренний цикл инициализируется и выполняется до тех пор, пока не будет выполнено условие его окончания. Условие окончания внешнего цикла выполняется, когда значение счетчика N превысит длину сортируемого списка. [6]

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

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

Заключение

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

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

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

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

  1. Белов П.М. Основы алгоритмизации в информационных системах: Учебн. Пособие.- Спб.: СЗТУ, 2003. – 85с. Режим доступа: http://window.edu.ru/resource/128/25128/files/nwpi225.pdf.
  2. Хайдаров К.А. Основы программирования. Алгоритмы, структуры данных и программирование [Электронный ресурс]: Классификация языков программирования. Режим доступа: http://bourabai.ru/alg/classification.htm#2 (дата обращения: 21.06.2020).
  3. Макаров В.Л. Программирование и основы алгоритмизации.: учебн. пособие.-Спб., СЗТУ, 2003, - 110с. Режим доступа: http://window.edu.ru/resource/126/25126/files/nwpi223.pdf.
  4. Мир знаний [Электронный ресурс]: Языки программирования. Обзор, возможности, достоинства, недостатки. Режим доступа: https://mirznanii.com/a/309490-2/yazyki-programmirovaniya-obzor-vozmozhnosti-dostoinstva-nedostatki-2/ (дата обращения: 20.06.2020).
  5. Основы алгоритмизации и программирования : учебное пособие / Г. Р. Кадырова. – Ульяновск : УлГТУ, 2014. – 95 с. . Режим доступа: http://venec.ulstu.ru/lib/disk/2014/137.pdf.
  6. Основы алгоритмизации и программирования. Курс лекций. Режим доступа: http://lib.ssga.ru/fulltext/UMK/исходные%20для%20Кацко/заменить%20полностью/Информатика/лекции/13%20Основы%20алгоритмизации%20и%20программирования.pdf
  7. Основы алгоритмизации и программирования: Метод. указ. / Сост.: И.П. Рак, А.В. Терехов, А.В. Селезнев. Тамбов: Изд-во Тамб. гос. техн. ун-та. Режим доступа: https://www.tstu.ru/book/elib/pdf/2003/terehov.pdf.
  8. Основы алгоритмизации и программирования: учеб. пособие / Т.А. Жданова, Ю.С. Бузыкова. – Хабаровск : Изд-во Тихоокеан. гос.ун-та, 2011. – 56 с. Режим доступа: http://pnu.edu.ru/media/filer_public/2013/02/25/book_basics.pdf.
  9. Программирование и основы алгоритмизации: Для инженерных специальностей технических университетов и вузов. /А.Г. Аузяк, Ю.А. Богомолов, А.И. Маликов, Б.А. Старостин. Казань: Изд-во Казанского национального исследовательского технического ун-та - КАИ, 2013, 153 с. Режим доступа: http://au.kai.ru/documents/Auzyak_Progr_osn_alg_C_2013.pdf.
  10. Трофимова В.В. Информатика [Электронный ресурс]: учебник, 2015. Режим доступа: https://studme.org/97154/informatika/informatika (дата обращения: 20.06.2020).
  11. Языки программирования [Электронный ресурс]: Пять поколений языков программирования. Режим доступа: https://life-prog.ru/view_zam2.php?id=194&cat=5&page=12 (дата обращения: 20.06.2020).