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

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

Содержание:

Введение

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

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

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

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

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

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

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

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

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

3.) Реализовать программу «Бортовой компьютер»;

4.) Составить вывод о проделанной работе.

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

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

1.1 Машинно – ориентированные языки

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

  • высокое качество создаваемых программ (компактность и скорость выполнения);
  • возможность использования конкретных аппаратных ресурсов;
  • предсказуемость объектного кода и заказов памяти;
  • для составления эффективных программ необходимо знать систему команд и особенности функционирования данной ЭВМ;
  • трудоемкость процесса составления программ ( особенно на машинных языках и ЯСК), плохо защищенного от появления ошибок;
  • низкая скорость программирования;
  • невозможность непосредственного использования программ, составленных на этих языках, на ЭВМ других типов.

Машинно-ориентированные языки по степени автоматического программирования подразделяются на классы.

1.1.1 Машинный язык

Отдельный компьютер имеет свой определенный Машинный язык (далее по тексту МЯ), ему предписывают выполнение указываемых операций над определяемыми ими операндами, поэтому МЯ является командным. Однако, некоторые семейства ЭВМ (например, ЕС ЭВМ, IBM/370/ и др.) имеют единый МЯ для ЭВМ разной мощности. В команде любого из них сообщается информация о местонахождении операндов и типе выполняемой операции.

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

1.1.2 Языки Символического Кодирования

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

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

1.1.3 Автокоды

Есть также языки, включающие в себя все возможности ЯСК, посредством расширенного введения макрокоманд - они называются Автокоды.

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

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

Обе указанных системы используют трансляторы с ЯСК и набор макрокоманд, которые также являются операторами автокода.

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

1.1.4 Макрос

Язык, являющийся средством для замены последовательности символов описывающих выполнение требуемых действий ЭВМ на более сжатую форму - называется Макрос (средство замены).

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

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

Макрос одинаково может работать, как с программами, так и с данными.

1.2 Машинно – независимые языки

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

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

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

1.2.1 Проблемно – ориентированные языки

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

Проблемных языков очень много, например:

  • Фортран, Алгол – языки, созданные для решения математических задач;
  • Simula, Слэнг - для моделирования;
  • Лисп, Снобол – для работы со списочными структурами.

1.2.2 Универсальные языки

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

Программы в Пл/1 компилируются с помощью автоматических процедур. Язык использует многие свойства Фортрана, Алгола, Кобола. Однако он допускает не только динамическое, но и управляемое и статистическое распределения памяти.

1.2.3 Диалоговые языки

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

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

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

Одним из примеров диалоговых языков является Бэйсик.

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

1.2.4 Непроцедурные языки

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

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

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

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

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

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

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

  • процедурно-ориентированные;
  • проблемно-ориентированные;
  • объектно-ориентированные.

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

2.1 Ассемблер

Язык Ассемблера – это символическое представление машинного языка. Он облегчает процесс программирования по сравнению с программированием в машинных кодах.

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

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

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

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

2.2 Лисп

Один из самых старых языков программирования Фортран был создан в 50-х гг. нашего века. Фортран и подобные ему языки программирования (Алгол, ПЛ/1) предназначались для решения вычислительных задач, возникающих в математике, физике, инженерных расчетах, экономике и т.п. Эти языки в основном работают с числами.

Второй старейший язык программирования Лисп (List Information Symbol Processing), Дж. Маккарти в 1962 г. скорее для работы со строками символов, нежели для работы с числами. Это особое предназначение Лиспа открыло для программистов новую область деятельности, известную ныне, как «искусственный интеллект». В настоящее время Лисп успешно применяется в экспертных системах, системах аналитических вычислений и т.п.

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

Существование множества различных диалектов Лиспа привело к созданию в начале 80-х гг. Common LISP Комитета, который должен был выбрать наиболее подходящий диалект Лиспа и предложить его в качестве основного. Этот диалект, выбранный Комитетом в 1985г., получил название Common LISP . В дальнейшем он был принят в университетах США, а также многими разработчиками систем искусственного интеллекта, в качестве основного диалекта языка Лисп.

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

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

Профессор Массачусетского технологического института Дж. Самман заметил, что математическая ясность и предельная четкость Лиспа – это еще не все. Главное – Лисп позволяет сформулировать и запомнить «идиомы», столь характерные для проектов по искусственному интеллекту.

2.3 Фортран

Одним из первых и наиболее удачных компиляторов стал язык Фортран, разработанный фирмой IBM. Профессор Дж. Букс и группа американских специалистов в области программирования в 1954 году опубликовало первое сообщение о языке. Дословно, название языка FORmulae TRANslation –преобразование формул.

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

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

Модификация языка Фортран, появившиеся в 1958 году, получила название Фортран II и содержала понятие подпрограммы и общих переменных для обеспечения связи между сегментами.

К 1962 году относится появление языка, известного под именем Фортран IV и ставшего наиболее употребительным в настоящее время. К этому же времени относится и начало деятельности комиссии при Американской Ассоциации Стандартов (ASA), которая выработала к 1966 году два стандарта – языки Фортран и базисный (основной) Фортран (Basic FORTRAN). Эти языки приблизительно соответствуют модификациям IV и II, однако базисный Фортран является подмножеством Фортрана, в то время, как Фортран II таковым для Фортрана IV не является. Язык Фортран до сих пор продолжает развиваться и совершенствоваться, оказывая влияние на создание и развитие других языков. Например, Фортран заложен в основу Basic – диалогового языка, очень популярного для решения небольших задач, превосходного языка для обучения навыкам использования алгоритмических языков в практике программирования. Разработан этот язык – Beginner’s All –purpose Symbolic Instruction Code – группой сотрудников Вычислительного центра Дармутского колледжа, штат Нью-Хемпшир созданный в 19…. . Но это уже следующий язык.

2.4 Бейсик

Как знаменитые гамбургеры, бейсбол и баскетбол, Бейсик - это продукт Новой Англии. Как я говорил, созданный в 1964г., как язык обучения программированию. Бейсик является общепринятым акронимом от"Beginner's All-purpose Symbolic Insruction Code" (BASIC) - Многоцелевой Символический Обучающий Код для Начинающих".

Вскоре как обучаемые, так и авторы программ обнаружили, что Бейсик может делать практически все то, что делает скучный неуклюжий Фортран. А так как Бейсику было легко обучиться и легко с ним работать, программы на нем писались обычно быстрее, чем на Фортране. Бейсик был также доступен на персональных компьютерах, обычно он встроен в ПЗУ. Так Бейсик завоевал популярность. Интересно, что спустя 20 лет после изобретения Бейсика, он и сегодня самый простой для освоения из десятков языков общецелевого программирования, имеющихся в распоряжении любителей программирования. Более того, он прекрасно справляется с работой.

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

Несмотря на отдельные недостатки Бейсика, никто не будет отрицать, что Кемени и Куртс достигли основной цели: сделать программирование доступнее для большего числа людей.

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

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

2.5 Рефал

Несомненно, надо рассказать и о некоторых языках программирования созданных у нас на родине. Один из таких языков является Рефал, разработанный у нас в России (СССР), в 1966г. ИПМ АН СССР. Этот язык прост и удобен для описания манипуляций над произвольными текстовыми объектами.

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

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

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

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

2.6 Пролог и Пролог ++

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

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

Все свойства языка по-прежнему доступны программистам. Следовательно, Пролог ++ можно отнести к группе гибридных языков, представителями которой считаются Object Pascal и C++. Расширение Пролог ++ поддерживает все свойства, присущие обычно объектно-ориентированным языкам: концепции объектов и классов, единичное и многократное наследование, разбиение на подклассы и передачу сообщений. Поддерживаются также некоторые усовершенствованные свойства, существующие в таких языках, как C++ и Smalltalk, включая общие и частные методы.

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

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

Сам язык основан на концепции передачи сообщений. Программа на Прологе ++ строится вокруг множества объектов Пролога ++, которые обмениваются сообщениями. В этом смысле Пролог ++ ближе к чистому объектно-ориентированному языку, такому, как Smalltalk, чем C++ или Object Pascal. Определения объектов строятся исходя из вызовов

Open_Object [имя_объекта] и Close_Object [имя_объекта], а методы определяются практически так же, как в других объектно-ориентированных языках. Для задания наследования можно явным образом указать, какой метод какого объекта должен наследоваться, что является необходимым для многократного наследования.

2.7 Лекс

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

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

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

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

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

2.8 Cи

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

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

2.9 Си++

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

Название Си++ - изобретение лета 1983-его. Более ранние версии языка использовались начиная с 1980-ого и были известны как "Cи с Классами". Первоначально язык был придуман потому, что автор хотел написать событийно управляемые модели для чего был бы идеален Simula67, если не принимать во внимание эффективность. "Cи с Классами" использовался для крупных проектов моделирования, в которых строго тестировались возможности написания программ, требующих (только) минимального пространства памяти и времени на выполнение. В "Cи с Классами" не хватало перегрузки операций, ссылок, виртуальных функций и многих деталей. Си++ был впервые введен за пределами исследовательской группы автора в июле 1983-го. Однако тогда многие особенности Си++ были еще не придуманы.

Название Си++ выдумал Рик Масситти. Название указывает на эволюционную природу перехода к нему от Cи. "++" - это операция приращения в Cи. Чуть более короткое имя Cи+ является синтаксической ошибкой, кроме того, оно уже было использовано как имя совсем другого языка. Знатоки семантики Cи находят, что Си++ хуже, чем Cи ++. Названия D язык не получил, поскольку он является расширением Cи и в нем не делается попыток исцелиться от проблем путем выбрасывания различных особенностей.

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

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

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

• многоцелевой, лаконичный и относительно низкого уровня:

• отвечает большинству задач системного программирования:

• идет везде и на всем:

• пригоден в среде программирования UNIX.

Си++ стал использоваться шире, и по мере того, как возможности, предоставляемые им помимо возможностей Cи, становились все более существенными, вновь и вновь поднимался вопрос о том, сохранять ли совместимость с Cи. Ясно, что отказавшись от определенной части наследия Cи можно было бы избежать ряда проблем. Это не было сделано, потому что:

• есть миллионы строк на Cи, которые могли бы принести пользу в Си++ при условии, что их не нужно было бы полностью переписывать с Cи на Си++;

• есть сотни тысяч строк библиотечных функций и сервисных программ, написанных на Cи которые можно было бы использовать из или на Си++ при условии, что Си++ полностью совместим с Cи по загрузке и синтаксически очень похож на Cи;

• есть десятки тысяч программистов, которые знают Cи, и которым, поэтому, нужно только научиться использовать новые особенности Си++, а не заново изучать его основы;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

uses Crt,dos; {подключаем модули, их назначение описано в теоретической части курсовой работы}

const {определяем константы, необходимые для реализации пользовательского меню}

NORM=$17; { цвет невыделенного пункта }

SEL=$70; { цвет выделенного пункта } N=4;

var menu:array[1..N] of string[50];{ названия пунктов меню } punkt:integer; { номер выделенного пункта }

ch:char; { введенный символ }

i,j,x,y,col:integer; {координаты первой строки меню }

tin,tf,ss:integer; {описываем глобальные переменные, здесь tin - интервал вывода сообщений на экран, tf - желаемое время финиша, ss - расстояние до финиша,

f,f1,f2:boolean; {логические переменные, необходимые для контроля правильности ввода данных пользователем}

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

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

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

begin

ClrScr; { очистка экрана}

WRITELN;

writeln(' ГЛАВНОЕ МЕНЮ');

WRITELN;

WRITELN;

for i:=1 to N do {перебираем все пункты меню в цикле}

begin

GoToXY(x,y+i-1); {перевод курсора в нужную позицию}

write(menu[i]); {вывод пункта меню, содержащегося в массиве констант}

end;

TextAttr:=SEL; {изменение атрибутов текста - выделенный}

GoToXY(x,y+punkt-1);

write(menu[punkt]);{ выделим строку меню }

TextAttr:=NORM; {изменение атрибутов текста - невыделенный}

end;

Следующая описываемая нами процедура отвечает за ввод данных пользователем.

procedure punkt1; {процедура ввода данных – соответствует первому пункту меню}

begin

CLRSCR;

f:=false;f1:=false;f2:=false; {признак того, что данные еще не введены}

textcolor(13); {изменяем цвет текста}

writeln;

WRITELN(' ВВЕДИТЕ ИСХОДНЫЕ ДАННЫЕ ');

writeln;

textcolor(14);

writeln;

repeat {заголовок цикла ввода значений }

if f=false {если первый параметр еще не введен}

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

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

ReadLn(ss);

{$I+}{директива, которая включает автоматическую генерацию объектного кода }

if (ioresult<>0) { если возникла ошибка – в данном случае, введено некорректное значение}

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

begin

textcolor(4);

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

textcolor(14);

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

end

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

end;

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

if f1=false then

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

{$I-}

ReadLn(tf);

{$I+}

if (ioresult<>0) or (tf<=0) then begin

textcolor(4);

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

textcolor(14);

continue; end

else f1:=true;

end;

if f2=false then begin

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

{$I-}ReadLn(tin);

{$I+}

if (ioresult<>0) or (tin<=0) or (tin>=tf) then begin

textcolor(4);

writeln('Ошибка! Интервал вывода сообщений введен неверно!');

textcolor(14);

continue;

end

else f2:=true;

end;

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

Writeln('Press any key ...');

ch:=readkey; { ожидание нажатия любой клавиши}

ch:=#0;

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

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

Procedure punkt2; { процедура, соответствующая пункту 2 меню}

var vnp,tvr,h,min,s,ds,t:word; {описываем локальные переменные, применяемые в данной процедуре}

vr:integer;

rs,vs,vsz,vszs,sp,v,vsr,vrk:real;

begin

ClrScr;

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

textcolor(13); writeln; writeln;

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

readkey; textcolor(14);

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

end;

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

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

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

TextColor(12); {Установка цвета "времени"}

GoToXY(40,1);

Write('Время старта ->:');

Write(h,' час ',min,' мин ',s,' сек'); {выводим на экран время старта}

textcolor(13);

writeln(' ':15,'Условные обозначения');

textcolor(14);

writeln('Время с момента старта ->TPR');

writeln ('Пройденный к данному моменту времени путь->PRS');

writeln ('Средняя скорость на отрезке ->VS');

writeln ('Средняя скорость к данному моменту времени ->VSZ');

writeln('Время, оставшееся до момента финиша ->TOST');

writeln('Рекомендуемая скорость в начале пути->',ss/tf:4:4);

writeln;

textcolor(13);

writeln(' ':15,'Поехали!');

textcolor(14); t:=0;

randomize; {инициализация генератора случайных чисел}

i:=0; vs:=0; j:=0; {обнуляем переменные}

vr:=round(ss/tf); {рекомендуемая средняя скорость}

repeat {начало прогона}

GetTime(h,min,s,ds);

tvr:=s+(min*60)+(h*3600);

if (vs=0) then for i:=1 to 10 do

begin

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

v:=(random(2*100)+100*(vr-1))/100;

vs:=vs+v;

end;

if (tvr>vnp) and ((tvr-vnp) mod tin =0) and ((tvr-vnp)>t) and ((tf-t)>tin) then begin

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

write('TPR ->',t,' ¦ ');

vsz:=vsz+vs; {средняя скорость, рекомендуемая к данному моменту времени}

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

vszs:=vsz/j;

vs:=vs/10; { средняя скорость на отрезке}

rs:=rs+vs*tin; {пройденный к данному моменту времени путь}

write ('PRS->',rs:3:3,' ¦ ');

write ('VS ->',vs:3:3,' ¦ ');

vs:=0;

write ('VSZ->',vszs:3:3,' ¦ ');

writeln('TOST->',tf-t,' ¦ ');

vrk:=(ss-rs)/(tf-t);

writeln('Рекомендуемая скорость->',vrk:4:4);

writeln;

end;

until (tvr-vnp)>=tf; {конец цикла – время истекло}

vs:=vs/10;

rs:=rs+vs*(tf-t);

t:=tvr-vnp;

write('TPR ->',t,' ¦ ');

if (tf-t)<tin then vs:=vrk*10;

vsz:=vsz+vs;

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

vszs:=vsz/j;

write ('PRS->',rs:3:3,' ¦ ');

write ('VS ->',vs/10:3:3,' ¦ ');

write ('VSZ->',vszs:3:3,' ¦ '); writeln('TOST->',tf-t,' ¦ ');

sound(2000); delay(7000); nosound; textcolor(13); {звуковой сигнал – время истекло}

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

then writeln(' ':15,'Успели!') else writeln(' ':15,'Не успели!');

GetTime(h,min,s,ds);

TextColor(12); {Установка цвета "времени"}

GoToXY(40,25);

Write('Время финиша ->:');

Write(h,' час ',min,' мин ',s,' сек');

textcolor(14);

readkey

end; {конец процедуры}

Далее рассмотрим процедуру, при помощи которой осуществляется вывод на экран текстового файла справки.

procedure punkt3; {процедура, соответствующая 3-му пункту меню}

var txt:char; {объявляем локальные переменные процедуры}

help:text; {переменная – текстовый файл}

begin

clrscr;

assign(help,'hlp.txt'); {ассоциируем файловую переменную с именем файла}

writeln;

textcolor(13);

writeln;

textcolor(14);

{$I-}

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

{$I+}

if IOresult<>0 then {если ошибка возникла – файл не найден}

begin

textcolor(4);

writeln('Ошибка! Файл помощи отствует'); readkey;

textcolor(14);

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

end else {если файл найден}

While not EOF(help) do {пока не будет достигнут конец файла}

begin

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

Read(help,txt); Write(txt);

end;

writeln;

writeln;

Writeln('Press any key ...');

writeln;

readkey;

end; {конец процедуры}

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

begin

ch:=#0; {переменная, в которой будет храниться код нажатой клавиши}

menu[1]:='1. Ввод начальных данных ';

menu[2]:='2. Работа программы ';

menu[3]:='3. Справка ';

menu[4]:='4. Exit ';

punkt:=1; {изначально выбран 1-й пункт меню}

x:=5; {координаты курсора}

y:=5;

TextAttr:=NORM;

MenuToScr; {вызов процедуры вывода меню на экран}

repeat {начала цикла, в котором на экран выводятся пункты меню}

ch:=ReadKey; {считываем код нажатой клавиши}

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

case ch of {в зависимости от того, какую клавишу нажал пользователь}

chr(80):{ стрелка вниз }

if punkt<N then begin

GoToXY(x,y+punkt-1); write(menu[punkt]);

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

TextAttr:=SEl;

GoToXY(x,y+punkt-1);

write(menu[punkt]); TextAttr:=NORM;

end;

chr(72):{ стрелка вверх }

if punkt>1 then begin

GoToXY(x,y+punkt-1); write(menu[punkt]);

punkt:=punkt-1;

TextAttr:=SEl;

GoToXY(x,y+punkt-1);

write(menu[punkt]);

TextAttr:=NORM;

end;

end;

end

else

if ch=chr(13) then begin { нажата клавиша <Enter> }

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

1:punkt1;

2:punkt2;

3:punkt3;

4:ch:=chr(27);{ выход – нажата клавиша Esc}

end;

MenuToScr; {вызов процедуры вывода меню на экран}

end;

until ch=chr(27);{ условие выхода из цикла, 27 - код <Esc> }

end. {конец программы}

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

Заключение

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

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

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

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

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

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

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

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

  1. Абрамов В.Г., Трифонов Н.П., Трифонова Г.Н. Введение в язык Паскаль. — М.: Наука, 2013.
  2. Абрамов С.А., Гнездилова Г.Г., Капустина Е.Н., Селюн М.И. Задачи по программированию. М.: “Наука”, 2013.
  3. Вирт Н. Алгоритмы и структуры данных. — М.: Мир, 2015.
  4. Дагене В.А., Григас Г. К., Аугутис К.Ф. 100 задач по программированию. — М.: Просвещение, 2014.
  5. Епашников A.M., Епашников В.А. Программирование в среде Турбо Паскаль 7.0. — М.: МИФИ, 2014.
  6. В.Ю. Демьяненко. “Программные средства создания и ведения баз данных”. – М.: Финансы и статистика, 2014.
  7. В.А. Мясников, С.А. Майоров, Г.И. Новиков. ЭВМ для всех. - М.: Знание, 2015.
  8. А.Г. Гейн. “Основы информатики и вычислительной техники”. - М.: Просвещение, 2011.
  9. В.Ф. Ляхович. “Основы информатики”.- Ростов-на-Дону: Феникс,2016.
  10. Вычислительная техника и программирование”/Под ред. А.В. Петрова-М.: Высш. Шк.,2011.
  11. Информационные технологии управления”: Инфоматика-М.Ф. Меняев: Омега-л, 2013.
  12. Компьютерные системы и сети”/Под ред. В.П. Косарёва и Л.В. Ерёмина-М.: Финансы и статистика,2013.
  13. Экономическая информатика”: Под ред. В.П. Косарёва и Л.В. Ерёмина-М.: Финансы статистика, 2011.
  14. Информатика”: Под ред. Н.В. Макаровой: Фис., 2014.
  15. “Информатика”, базовый курс , 2-е издание./ Под ред. С.В. Симоновича-СПб. Питер, 2014.
  16. Леонтьев: “ Новейшая энциклопедия программного компьютера”: Пресс,2013.
  17. Савинков В.М.”Толковый словарь по информатике”- 2-е издание,-М.: Финансы и статистика, 2015.
  18. “Вычислительные машины, системы и сети”/ Под ред. А.П. Пятибратова.-М.: Финансы и статистика, 2015.
  19. Якубайтис Э.А. Информационные сети и системы”. Справочная книга. - М.: Финансы и статистика, 2016.
  20. “Экономическая информатика и вычислительная техника”: Г.А. Титоренко, Н.Г. Черняк и др.; Под ред. В.П.Косарёва, А.Ю.Королёва.- 2-е издание, перераб. и доп.-М.: Финансы и статистика, 2015.
  21. Якубайтис Э.А.” Информатика Электроника – Сети”. - М.: Финансы и статистика, 2014.
  22. “Персональный компьютер для всех”/ Под ред.А.Я. Савельева. - М.: Высшая школа, 2011.
  23. “Информатика”. Энциклопедический словарь для начинающих. - М.: Пресс, 2014.
  24. Острейковский В.А. Информатика”. - М.: Высшая школа,2012.
  25. Малютин Э.А., Малютина Л.В. Языки программирования, 2012.
  26. Ваулин А.С. Языки программирования.— кн.5, 2013.

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

Приложение 2. Ввод исходных данных

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

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