Файл: Особенности и примеры использования массивов при разработке программ (Способы описания алгоритмов).pdf
Добавлен: 30.03.2023
Просмотров: 256
Скачиваний: 2
Ввод А,В
y=x*z/(A+B)
z=1
x=1
Ввод А,В
Х=1,10,1
Вывод x, y, z
z=1,4,1
z=z+1
да
y=x*z/(A+B)
z≤4
нет
Вывод x, y, z
x=x+1
x≤10
да
нет
Конец
Конец
|
Рисунок 5 - Алгоритм со сложным циклом |
Рисунок 6 - Модифицированная блок-схема алгоритма |
Вход в цикл
Х=1,10,2
Вход i+1 Выход из цикла
шага цикла
Выход i-го шага цикла
Рисунок 7 – Компактные условные обозначения
Первой цифрой внутри фигуры (рис. 7) задается начальное значение переменной, второй ее конечное значение, а третьей - шаг изменения переменной. При отсутствии последней цифры шаг изменения переменной по умолчанию равен 1. [7, с. 18-22]
2. Языки высокого уровня: понятие, достоинства
2.1. Обзор языков программирования высокого уровня
Со времени появления первых программируемых компьютеров было создано больше двух с половиной тысяч языков программирования, ежегодно их число увеличивается. Некоторые языки использует только небольшое число их собственных разработчиков, другими пользуются миллионы людей. Профессиональными программистами обычно применяется в своей работе несколько языков программирования. [13]
Языки программирования низкого уровня. На первых компьютерах программировали двоичными машинными кодами, что является достаточно трудоемкой и сложной задачей. Чтобы упростить эту задачу стали пользоваться языками программирования низкого уровня, задающими машинные команды в более понятном для человека виде. Преобразования их в двоичный код выполнялись специальными программами - трансляторами. [20]
Трансляторы подразделяются на:
- компиляторы, превращающие текст программы в машинный код, сохраняемый и затем используемый уже без компилятора (к примеру, исполняемые файлы с расширением *. exe).
- интерпретаторы, превращающие часть программы в машинный код, выполняющие его и затем переходящие к следующей части. Причем использование интерпретатора осуществляется каждый раз при выполнении программы. [19]
Пример языка низкого уровня - ассемблер. Языки низкого уровня ориентируются на конкретный тип процессора с учетом его особенностей, поэтому при переносе программы на ассемблере на другую аппаратную платформу ее нужно почти полностью переписывать. Синтаксис программ для разных компиляторов также различается. Правда, существует практическая совместимость центральных процессоров для компьютеров фирм AMD и Intel, отличия лишь в некоторых специфических командах. А вот специализированные процессоры для других устройств, например, видеокарт, телефонов существенно различаются.
Преимущество языков низкого уровня в том, что они позволяют создание эффективных и компактных программ, так как разработчик пользуется всеми возможностями процессора. [19]
Недостатки проявляются в том, что:
- необходима высокая квалификация программиста, работающего с языками низкого уровня, хорошее понимание устройства микропроцессорной системы, для которой создается программа. При создании программы для компьютера, необходимо знание устройства компьютера и, особенно, устройства и особенностей работы его процессора.
- невозможность перенесения результирующей программы на компьютер или устройство с другим типом процессора.
- значительность времени разработки больших и сложных программ.
- использование языков низкого уровня, как правило, для написания небольших системных программ, драйверов устройств, модулей стыков с нестандартным оборудованием, программирования специализированных микропроцессоров, когда важнейшие требования в компактности, быстродействии и возможности прямого доступа к аппаратным ресурсам. [20]
Языки высокого уровня (ЯВУ). Эти языки позволяют писать программы текстом, похожим на английский язык. Транслятор с языка высокого уровня переводит код на язык низкого уровня, затем Компилятор каждую команду преобразует в машинный код, создавая исполняемый файл. Программы, написанные на ЯВУ, более компактны, легче для понимания, а вероятность появления в них ошибок меньше, процесс отладки (поиска и исправления ошибок) легче. [17]
Они позволяют не учитывать особенностей конкретных компьютерных архитектур, благодаря чему возможно легкое перенесение созданных программ на другие компьютеры. В основном достаточна простая перекомпиляция программы в другой компьютерной архитектурной и операционной системе. При этом достигается значительное сокращение времени разработки программ, что особенно важно при разработке больших программных проектов. [20]
К языкам программирования высокого уровня относят: Фортран; Кобол; Алгол; Pascal; Basic; Java; DC, C++, C#; Objective C; Smalltalk; Delphi и другие. Перечислим достоинства языков высокого уровня:
- aлфавит языка значительно шире машинного, чем достигается его большая выразительность и существенное повышение наглядности и понятности текста;
- набор используемых операций не зависит от набора машинных операций, их выбор определяется соображениями удобства составления алгоритма решения задач определенного класса;
- конструкциями команд (операторов) отражается содержательность видов обработки данных и задание в удобном для человека виде;
- использование аппарата переменных и действий с ними;
- поддержка широкого набора типов данных.
Таким образом, языки программирования высокого уровня машинно-независимы и им необходимы соответствующие программы-переводчики (трансляторы) для представления программ на языке машин, на которых они будут выполняться. [14]
Недостаток ЯВУ в большом размере программ по сравнению с программами на языках низкого уровня. Поэтому в основном ЯВУ используют при разработках программного обеспечения компьютеров и устройств, имеющих большой объем памяти. А различные подвиды ассемблера применяют для программирования иных устройств, где имеет значение размер программ. [19]
Язык программирования высокого уровня (ЯПВУ) является инструментом, относящимся к категории машинно-независимых и позволяющим осуществление взаимодействия пользователя с ПК не зависимо от конкретного оборудования, установленного на компьютере. Поэтому он относится к машинно-независимым. При написании операционных систем чаще всего используется ЯПВУ, позволяющий писать программы текстом, схожим с английским языком. Программы, написанные на ЯПВУ, отличают большая компактность, легкость понимания, меньшая вероятность ошибок. [14]
Важнейшими элементами, входящими в ЯПВУ, являются трансляторы, функция которых может быть разной. Одно из ключевых применений трансляторов заключается в «переводе» команд на ЯПВУ, в машинный код, понятный компьютеру. Трансляторы с выполнением данной функции называют также компиляторами. Есть и иная разновидность— интерпретаторы, предназначенные для «перевода» высокоуровневых команд в понятные операционной системе или программам. [20]
Классификация высокоуровневых языков
Существует классификация высокоуровневых языков программирования по разным основаниям, наиболее распространенной является следующая:
- процедурно-ориентированные, задействуемые в качестве инструмента при обработке информации;
- проблемно-ориентированные, используемые для решения отраслевых и прикладных задач;
- объектно-ориентированные, являющиеся частным случаем языков первых двух видов, однако, адаптируемых к пользованию широким кругом разработчиков с различным уровнем подготовки. [16]
Рассмотрим некоторые исторические и современные ЯПВУ, входящие в каждую категорию данной классификации.
Процедурно-ориентированные языки
К таким можно отнести Фортран, считающийся первым ЯПВУ, созданным для широкого применения и характеризующимся простой структурой. К этому классу языков также относится Бейсик, один из наиболее часто используемых при обучении программированию. Пример другого языка этого класса — СИ, изначально созданный для ОС UNIX. На его основе впоследствии был создан язык C++, дополненный инструментами объектно-ориентированного программирования. Еще одним языком, относящимся к рассматриваемой категории является Паскаль, также часто используемым для обучения программированию, возможности которого позволяют его использование как очень мощного инструмента разработки профессиональных видов ПО. [16]
Проблемно-ориентированные языки
К таким относятся Лисп, Пролог. Лисп был разработан в 1962 г. через несколько лет после создания Фортрана и считается вторым в истории. Активно использовался как инструмент работы программистов со строками символов, на практике - в экспертных системах, а также для аналитических вычислений. Пролог широко применялся в области логического программирования, на практике чаще всего используется в алгоритмах искусственного интеллекта в соответствующих системах. [14]
Объектно-ориентированные языки
Изучим теперь примеры ЯПВУ, относящихся к объектно-ориентированным. К таковым относятся Visual Basic, Delphi, Visual Fortran, упомянутый выше C++, а также Prolog ++. Фактически все они основаны на процедурно-ориентированных языках. Однако необходимо существенно их дополнить визуальными элементами управления для последующего освоения необходимых алгоритмов разработчиками. Так, язык Фортран могут в оперативные сроки изучить IT-специалисты с помощью возможностей Visual Fortran. Аналогично возможно быстрое освоение Бейсика или Пролога. [20]
Универсальные высокоуровневые языки
Так, современными экспертами выделяются универсальные высокоуровневые языки, к которым относятся, в частности, разработанные в 60-е годы. Ключевые их характеристики заключаются в: - ориентации на широкий спектр задач (прежде всего, вычислительных); - большом количестве языковых конструкций и алгоритмов; - значимости для современного этапа развития компьютерной техники; - поддержке в соответствующих языках императивной методологии. [20]
Универсальные языки являются основополагающими в соответствующей отрасли IT-разработки. Отметим, что до сих пор у них нет прямых аналогов по внутренней структуре. Собственно, этим во многом объясняется актуальность задействования соответствующих языков в современных объектно-ориентированных интерфейсах. Также общим в отмеченных языках является тип данных. Этим фактором в значительной степени предопределяется их универсальность. Одно из наиболее примечательных свойств языков, относящихся к универсальным — в преемственности - исторически более поздние языки основаны на концепциях предшественников. [16]
Уникальные языки
Некоторыми IT-экспертами выделяются в самостоятельную категорию «уникальные языки», к которым относятся: APL, Cobol, Forth, SETL, а также CLU. Важнейшим аспектом APL является задействование массивов (векторов и матриц) как ключевого структурного типа. Спецификой языка Cobol является ориентированность на коммерческую сферу. Так, целесообразно его задействование для решения задач, связанных со стандартизированным форматом представления результатов.
Особенность языка Forth - использование постфиксной записи программ, а также задействование стековой нотации. В языке SETL одним из ключевых типов данных являются совокупности значений. ЯПВУ является также язык CLU, основной особенностью которого является работа с абстрактными типами данных. Многими IT-специалистами ожидаются появления новых решений, основанных на уникальных языках — таких как, к примеру, Object-Oriented Cobol. [19]
Средства параллельного программирования
Эта категория может состоять из огромного количества решений, которые могут классифицироваться по большому количеству оснований. К примеру, по методу организации процессов предполагается классификация средств параллельного программирования по наличию в них: сопрограмм; разветвлений; объединений; параллельных скобок; алгоритмов работы с процессами.
Другим основанием для классификации языков параллельного программирования являются методы синхронизации процессов. Соответствующие решения могут, таким образом, состоять из: семафоров; мониторов; «рандеву»; критических участков; дистанционного вызова процедур; транзакций, относящихся к категории атомарных. К языкам данного типа относятся Modula-2, BLISS, Concurrent Pascal, DP, Argus. [16]