Файл: Обзор языков программирования высокого уровня (Решение циклических алгоритмов).pdf
Добавлен: 06.04.2023
Просмотров: 103
Скачиваний: 1
ВВЕДЕНИЕ
В своей повседневной жизни мы довольно часто сталкиваемся с повторяющимися действиями, тратим на них большое количество времени и сил, но сделать проще или вовсе отменить эти действия зачастую не получается. Однако с началом появления разнообразных языков программирования, стало возможным описание и упрощение любых действий, например, чтобы предотвратить часто повторяющиеся действия следует использовать циклические алгоритмы. Из вышесказанного ясно, что актуальность избранной темы заключается в необходимости упрощения повторяющихся действий на примере повседневной деятельности применив средства программирования. Объектом исследования в данной курсовой являются возможности языков высокого уровня в работе с циклами и массивами. В данной курсовой работе будут изучены все возможные варианты циклических алгоритмов, и будет продемонстрирована работа с массивами на языке высокого уровня Pascal.
На данный момент существует великое множество различных языков программирования, ход развития которых шел вместе с ходом развития вычислительной техники. Язык Pascal разрабатывался для обучения программированию, однако ввиду легкости изучения и наглядности написанных на нем программ он получил широкое распространение и дальнейшее развитие. Сегодня, Pascal считается одним из самых используемых языков во всем мире.
Целью в данной работе является решение задач прямо связанных с применением циклов — когда нужно применить ту или иную форму циклической структуры, чтобы не возникло ошибок и алгоритм был эффективен. Для ее достижения выделим основные задачи:
- Классификация основных языков программирования, описание особенностей их построения, достоинства и недостатки языков, этапы разработки программ и основные критерии оценки их качества.
- Основные принципы организации алгоритмов циклических структур. Примеры организации циклических структур в различных языках программирования высокого уровня, выполнение сравнительного анализа и выделение особенностей их построения.
- Классификация массивов по различным категориям построения, их достоинства и недостатки. Организация работы с массивами статического и динамического типов в различных языках программирования высокого уровня, сравнительный анализ и выделение особенности их построения.
Алгоритм действий и их повторения позволит изобразить программу понятным для других пользователей языком.
Основные пособия к данной работе. В книге С. Немнюгина «Turbo Pascal» разбираются основные вопросы по программированию в среде Pascal, уделяется пристальное внимание основным понятиям, подробно изображается работа с процедурами, операциями над строками, в том числе и работа с массивами, а также работа с множествами, системное программирование, программирование графики, рекурсивные алгоритмы и введение в обьектно-ориентированное программирование. Также, в своей книге «Turbo Pascal. Наиболее полное руководство» В. Фаронов дает детальное изложение всех конструкций языка, приводит многочисленные примеры программ написанные доступным языком и с использованием различных приемов программирования. Хорошо расписаны все виды циклических алгоритмов с приведением множества примеров, что предоставляет возможность свободно ориентироваться в большом потоке информации и выбрать именно то, что нужно для решения поставленной в курсовой работе цели.
ГЛАВА 1. ТЕОРЕТИЧЕСКИЕ АСПЕКТЫ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ
1.1 Языки программирования
Языки программирования, имитирующие естественные языки, обладающие укрупненными командами, ориентированными на решение прикладных содержательных задач, называют языками «высокого уровня.
Языки программирования высокого уровня имеют следующие достоинства:
• алфавит языка значительно шире машинного, что делает его гораздо более выразительным и существенно повышает наглядность и понятность текста;
• набор операций, допустимых для использования, не зависит от набора машинных операций, а выбирается из соображений удобства формулирования алгоритмов решения задач определенного класса;
• конструкции команд (операторов) отражают содержательные виды обработки данных и задаются в удобном для человека виде;
• используется аппарат переменных и действия с ними;
• поддерживается широкий набор типов данных.
Таким образом, языки программирования высокого уровня являются машинно-независимыми и требуют использования соответствующих программ-переводчиков (трансляторов) для представления программы на языке машины, на которой она будет исполняться.
Примеры: C++, C#, Java, JavaScript, Python, PHP, Ruby, Perl, Паскаль, Delphi, Лисп.
Для строгого и точного описания синтаксиса языка программирования, используют специальные метаязыки (языки для описания других языков). Наиболее распространенными метаязыками являются металингвистические формулы Бэкуса - Наура (язык БНФ) и синтаксические диаграммы Вирта.
Например, метаформулы
<переменная>::=А]В
<выражение>::=<переменная>|<переменная>+<переменная>|<переменная><переменная>-<переменная>
Алфавиты большинства языков программирования близки друг другу и основываются на буквах латинского алфавита, арабских цифрах и общепринятых спецсимволах, таких как знаки препинания, математических операций, сравнений и обозначений.
Несмотря на серьезные различия между языками программирования, некоторые основные понятия в большинстве из них являются схожими.
Оператор представляет собой законченную фразу языка и определяет однозначно трактуемый этап обработки данных. Различают следующие основные операторы языка: присвоения, условный и безусловный переход, пустой оператор. К производным, не основным, относят составной оператор, оператор выбора, оператор цикла и оператор присоединения. Все операторы языка в коде программы отделяются разделителями: Sl;S2;...;Sn
Исполнение операторов происходит в порядке их следования в коде программы. Большая часть операторов осуществляет обработку величин. Величины могут быть постоянными и переменными. Наиболее распространенные типы величин - числовые (целые и вещественные), символьные и логические. Тип величины определяется ее значением.
Имя программного объекта называют идентификатором. Чаще всего идентификатором является любая конечная последовательность букв и цифр, начинающаяся с буквы:
<идентификатор>::=<буква> | <идентификатор> | <буква>
<идентификатор><цифра>
В большинстве языков программирования в роли идентификатора запрещается использовать служебные слова языка. При назначениий имен необходимо избегать мало выразительных обозначений, не использовать краткие имена. Имена должны быть понятны, наглядны, отражать суть обозначаемого объекта, к примеру,
Summa, Time, i, j, integral, init и т. п.
Некоторые идентификаторы являются стандартными, например, Sin.
Переменные играют одну из важнейших ролей в системах программирования. Переменная представляет собой программный объект, способный принимать определенное значение посредством оператора присваивания. Синтаксис переменной имеет следующий вид:
<имя переменной>::=<значение>
Функция является программным объектом, который задает вычислительную процедуру определения значения, зависимого от некоторых аргументов. Бывают выражения арифметические, принимающие числовые значения, логические, символьные, строковые и так далее.
Процедура - программный объект, представляющий собой некоторый самостоятельный этап обработки данных. Процедура обладает входными и выходными параметрами, называемые формальными. При использовании процедуры формальные параметры будут заменены на фактические.
Модуль - программная единица, предназначающаяся для создания библиотек и разделения больших программ на логически связанные блоки. В состав модуля входят разделы: заголовок, интерфейс, реализация, инициализация.
Качество кода определяется различными критериями: низкая сложность кода, небольшое использование ресурсов памяти и процессора, правильная обработка искл. ситуаций, небольшое число предупреждений в процессе компиляции и линковке.
1.2 Развитие языков программирования высокого уровня
Языки программирования высокого уровня в эпоху решения любых повседневных задач с помощью средств вычислительной техники (ВТ) имеют важное значение, они являются инструментом многоцелевого назначения с большими функциональными возможностями. На постоянные эволюционные изменения в семействе ЯП ВУ, с одной стороны, оказывает прогресс аппаратного и системного программного обеспечения, с другой стороны, быстро меняющиеся потребности объективного мира. Язык программирования является своего рода интерфейсом между пользователями - прикладными программистами - и средами разработки, находящимися под жестким влиянием вычислительной системы.
С момента зарождения ЯП ВУ выделяют четыре больших направления в классификации традиционных языков программирования по критерию вычислительных моделей, лежащих в основе языка. Это парадигмы: императивного, объектно-ориентированного (ООП), функционального и логического программирования [1, С.111-204].
Языки программирования высокого уровня, относящиеся к указанным направлениям, с течением времени менялись не только в рамках модели, но изменения их носили сближающий характер относительно выделенных парадигм и функциональных возможностей языка в рамках парадигмы. Такая тенденция определилась, прежде всего, желанием разработчиков сделать «некий» универсальный язык своего времени, лучший предшественника в данном классе и ориентированный на широкий пласт современных многоцелевых задач. Язык программирования XXI века должен быть с «изящным» синтаксисом, содержать элементы функционального программирования, быть ориентированным на объектный подход и легко позволять встраиваться программному коду (созданному на нём) на клиентские станции или серверы - поддерживать распределённую обработку данных. Следуя данным тенденциям, было разработано несколько ярких ЯП ВУ: Scala, Elm, Swift, Rust, Dart. Если к традиционным языкам программирования высокого уровня, таким как структурные: Си, Паскаль, Бейсик, как язык гипертекстовой разметки HTML и язык сценариев JavaScript, как объектно-ориентированным Visual Basic, Object Pascal, C++ пользователи и разработчики приложений уже привыкли, то новые языки программирования, которым нет и десятка лет, не всем известны и пока не очень тиражируются, в частности, в высшей школе.
Поэтому, данная статья, опираясь на информационные ресурсы электронных источников и историческую хронологию новых ЯП ВУ, показывает, как изменились требования к инструменту написания кода, какое влияние оказывает на эволюцию языков прикладного программирования характер стремительно меняющейся экономической картины мира. Остановимся на вышеупомянутых ЯП ВУ: Elm, Swift, Scala, Dart, чьё будущее, в плане максимальной востребованности, как инструмента прикладного программирования, ещё впереди.
Например, функциональный язык программирования Elm, представленный американским программистом Эваном Чаплицким в 2012 году в ходе работы над своим дипломным проектом в Гарварде, обладает ключевой особенностью. Системы программирования, поддерживающие этот язык, содержат отладчик реального времени, с помощью которого легко можно изменить программный код в реальном режиме времени и проследить реакцию на внесённые изменения по выбранным параметрам. Подобные действия по изменению параметров записываются, могут быть просмотрены и проанализированы, а также тщательно и многократно оттестированы и проверены.
Этот современный язык программирования относится к парадигме функционального программирования, с поддержкой принципов функционального реактивного программирования (ФРП). Парадигма ФПР ориентирована на параллельную обработку данных, обеспечивает чёткую работу с динамическими потоками данных и позволяет создавать высоко-интерактивные приложения. Концепция, положенная в основу ФПР, была предложена и сформирована в конце прошлого века для упрощения технологии создания пользовательских интерфейсов, анимации, динамических систем. Поэтому программы, написанные на этом языке программирования, легко конвертируются в JavaScript - код, что немало важно для современных условий работы с браузерами всех категорий пользователей. Кроме того, ЯП ВУ Elm удобен и прост в использовании: небольшой по объёму программный код обеспечивает разработчику приложения возможность работать с мышью для воспроизведения любой (даже сложной) фигуры в приложениях или в браузере. Тем не менее, язык изначально - функциональный, о чём говорят его родственные связи с семейством языка Haskell. На рисунке 1 показаны взаимовлияния традиционных языков программирования и новых, ровесников двадцать первого столетия.
Elm, не смотря на ярко выраженную принадлежность к функциональной парадигме, может быть использован для создания различного уровня сложности веб-приложений, практически всегда имеется возможность встроить написанный на этом языке программный код в блок тегов на странице сайта, так как Elm-программа без труда компилируется в коды HTML, CSS JavaScript.