Программирование на языке высокого уровня
Характеристика функций и процедур языков высокого уровня, анализ методики создания пользовательского меню. Изучение принципов модульного программирования. Описание интерфейса среды разработки C++ Builder. Изучение функций пользователя в C++ Builder.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 14.12.2017 |
Размер файла | 184,1 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
ОГЛАВЛЕНИЕ
- Введение
- 1.Основные понятия о языках программирования
- 1.1 Языки программирования и их классификация
- 1.2 Язык программирования С++. Интегрированная среда разработки C++ Builder
- 2. Использование принципов модульного программирования. Пользовательские меню
- 2.1 Основные понятия модульного программирования в C++ Builder
- 2.2 Принципы разработки пользовательского меню
- 3. Практическое использование функций пользователя. Создание меню пользователя средствами С++ Builder
- 3.1 Функции пользователя в C++ Builder
- 3.2 Создание меню пользователя в С++ Builder
- Заключение
- Список использованных источников
ВВЕДЕНИЕ
программирование модульный builder
С развитием компьютерной техники появился машинный язык, с помощью которого программист мог задавать команды, оперируя с ячейками памяти, полностью используя возможности машины.
Однако использование большинства компьютеров на уровне машинного языка затруднительно, особенно это касается ввода-вывода. Поэтому от его использования пришлось отказаться.
На современном этапе появилось множество языков, которые позволяют выполнять самые различные по свой структуре и возможностям функции.
В дальнейшем, с развитием языков программирования, появилась возможность адаптировать обработку данных с помощью созданных программных продуктов, что являлось очень удобным, поскольку программисты могут написать программу для конкретной предметной области.
Вместе с этим начали создаваться программы с графической оболочкой. Эффективность и необходимость создания таких программ является актуальными в наше время, поскольку основой для удобного пользования программой является дружественный графический интерфейс пользователя.
Целью работы является рассмотрения функций и процедур языков высокого уровня, а также создание пользовательского меню.
Исходя из поставленной цели в работу необходимо решить следующие основные задачи:
- рассмотреть основные определения и классификацию языков программирования;
- раскрыть основные понятия для языков С++, среды разработки C++ Builder;
- охарактеризовать основные определения и понятия о модульном программировании;
- рассмотреть понятие пользовательского меню;
- рассмотреть технологию создания графических программ с использованием пользовательского меню в среде разработки C++ Builder.
Объект исследования - языки программирования высокого уровня.
Предмет исследования - функции, процедуры, пользовательские меню.
По мере развития вычислительной техники возникали разные методики программирования. На каждом этапе создавался новый подход, который помогал программистам с растущим усложнением программ. Рассмотрим далее вопрос о создании программ с пользовательским меню в среде C++ Builder.
1.ОСНОВНЫЕ ПОНЯТИЯ О ЯЗЫКАХ ПРОГРАММИРОВАНИЯ
1.1 Языки программирования и их классификация
Физические принципы работы электронных устройств ЭВМ таковы, что компьютер может воспринимать команды, состоящие только из единиц и нулей, т. е. машинный код. На начальной стадии развития ЭВМ человеку было необходимо составлять программы на языке, понятном компьютеру, в машинных кодах. Каждая команда состояла из кода операций и адресов операндов, выраженных в виде различных сочетаний единиц и нулей.
Это привело к необходимости найти такое средство, которое позволит более просто наладить общение человека и компьютера. И такое средство было найдено: различные символические языки и соответствующие им трансляторы (системы программирования).
Язык программирования - это специальный язык, на котором пишут команды для управления компьютером. Языки программирования созданы для того, чтобы людям было проще читать и писать для компьютера, но они затем должны транслироваться (транслятором или интерпретатором) в машинный код, который только и может исполняться компьютером. Языки программирования можно разделить на языки высокого уровня и языки низкого уровня.
Язык низкого уровня - это язык программирования предназначенный для определенного типа компьютера и отражающий его внутренний машинный код; языки низкого уровня часто называют машинно-ориентированными языками. Их сложно конвертировать для использования на компьютерах с разными центральными процессорами, а также довольно сложно изучать, поскольку для этого требуется хорошо знать принципы внутренней работы компьютера.[3]
Язык высокого уровня - это язык программирования, предназначенный для удовлетворения требований программиста; он не зависит от внутренних машинных кодов компьютера любого типа. Языки высокого уровня используют для решения проблем и поэтому их часто называют проблемно-ориентированными языками. Каждая команда языка высокого уровня эквивалентна нескольким командам в машинных кодах, поэтому программы, написанные на языках высокого уровня, более компактны, чем аналогичные программы в машинных кодах.[4]
Процесс работы персонального компьютера заключается в выполнении инструкций, то есть набора определённых команд в определённом порядке. Машинный вид данных команд, который состоит из единиц и нулей, указывает, какое действие должен выполнять центральный процессор.
Чтоб задать компьютеру перечень действий, которые он может выполнить, необходимо задать последовательность из двоичного кода соответствующих команд. [5]
Программы, изображенные в машинных кодах, состоят из многих тысяч команд. Их написание - занятие утомительное и сложное. Программист должен помнить все комбинации единиц и нулей двоичного кода для каждой команды, а также и двоичные коды адресов данных, которые используются при её выполнении. Но проще написать программу на языке, более близком к человеческому естественному языку, а работу по переводу данной программы в машинный код поручить персональному компьютеру. Так произошли языки, предназначенные для написания программных продуктов. [1]
Язык программирования - это формальная знаковая система, которая предназначена для записи программ. Языком программирования определяется набор лексических, семантических и синтаксических правил, которые задают внешний вид программ и действия для выполнения исполнителем (компьютером) под ее управлением.
Все создатели языков по-своему толкуют понятие языка программирования. К наиболее популярным утверждениям, признаваемым большинством программистов, относятся такие:[6]
- Функция: язык программирования предназначается для написания программ, которые применимы для передачи компьютеру определенных инструкций по выполнению некоторого вычислительного процесса.
- Задача: языки программирования отличаются от естественных языков тем, что предназначены для передачи данных и команд от человека к компьютеру. Можно несколько обобщить определение «языков программирования» - способ передачи приказов, команд, четкого руководства к действию, тогда как человеческие языки предназначены только для обмена данными и информацией.[10]
- Исполнение: языки программирования могут использовать конструкции для манипуляции и определения структурами данных и процессом вычислений.
Язык программирования чаще всего представляется в виде набора указаний, определяющих его семантику и синтаксис. Для многих языков программирования применяются международные стандарты. Для этого специальные организации проводят периодическое обновление спецификаций и определений соответствующего языка, продолжают модернизацию и разработку языков программирования.[11]
После создания первых программируемых вычислительных машин разработчики придумали более двух тысяч языков программирования и с каждым годом их число увеличивается. Некоторыми языками пользуются небольшое число разработчиков, другие становятся популярными для миллионов людей. Профессиональные программисты применяют в своей работе не менее десятка различных языков программирования.
Нет такого программиста, который не мечтал бы создать свой язык программирования: самый надежный и быстрый, самый простой и удобный. Именно поэтому за всю компьютерную историю человек придумал много самых разных языков. [13]
Но тщеславие программистов не является единственной причиной возникновения языков программирования.
В нынешнее время перед программистами ставится задача по созданию систем хранения и обработки информации, которые ещё 20 лет назад казались вовсе невозможными. Появляются технологии и устройства, требующие новых подходов к программированию, а развитие Интернета предоставляет все новые до конца не освоенные методы по созданию сетевых технологий.[12]
Всё это служит почвой для создания все новых языков программирования, которые отвечают всем современным задачам и используют новые принципы программирования, которые позволяют решать актуальные проблемы современности.[7]
Но не смотря на большое количество языков программирования, только некоторые из них получили признание программистов и известность. Для определения самых популярных языков программирования воспользуемся данными компании «TIOBE Software», которая известна своим регулярно рассчитываемым рейтингом языков программирования.
По информации от компании «TIOBE Software» самые популярные языки программирования на декабрь 2016 года представлены в табл. 1.
Таблица 1 - Рейтинг языков программирования
№ |
Язык программирования |
Рейтинг |
Последний релиз |
|
1 |
Java |
17.949% |
12.11.2014 |
|
2 |
C++ |
16.066% |
16.12.2010 |
|
3 |
C |
9.013% |
22.07.2015 |
|
4 |
PHP |
7.516% |
22.06.2013 |
|
5 |
C# |
6.683% |
12.04.2014 |
|
6 |
Python |
6.485% |
04.07.2013 |
|
7 |
Visual Basic |
5.112% |
12.04.2014 |
|
8 |
Objective C |
3.227% |
28.08.2003 |
|
9 |
Perl |
2.336% |
12.04.2014 |
|
10 |
Delphi |
2.176% |
04.08.2011 |
Все эти языки очень разные, каждый имеет своё назначение, уникальную среду разработки, и свои семантику и синтаксис. [5]
Сравнительный анализ языков программирования по возможностям, по способам реализации или сложности освоения является задачей очень сложной. Оценить удобство семантических конструкций можно только на примерах и для всех языков программирования можно указать задачу, для которой ими пользоваться лучше, чем остальными. Подобные сравнения переходят иногда в настоящие «войну» между программистами. Каждая из сторон яростно защищает «свой» язык и не принимает доводы другой. [15]
Как уже было написано, программы для первых ПК складывались на машинном языке, которые очень далекий от понятий оперируемые человеком.
Первым шагом для создания языков, которые содержащих понятия, близкие человеку, стали языки, которые переводят символические обозначения в машинные коды (например, Ассемблер).
К языкам низкого уровня принадлежат языки ассемблера - это машинно-зависимые языки, которые описывают действия и команды в терминах и понятиях процессора. [14]
Для каждого типа процессоров существует свой определенный язык ассемблера, поэтому для портативности программ на ассемблере на другую платформу ее нужно полностью переписать.
Позже были созданы специальные программы для трансляции арифметических выражений (Автокод), и в 1958 году был запущен транслятор для Фортрана - первого языка высокого уровня.
Языки программирования высокого уровня являются приближенными к естественным понятиям. Они являются машинно-независимыми. С распространением и развитием персональных компьютеров наметился процесс: появление специальных и универсальных языков программирования. [13]
Рассмотрим понятия «процедурные и непроцедурные языки программирования». Программа, которая написана с помощью процедурного языка, описывается, используя такие понятия, как ветвление, следование, цикл. [9]
Программа, которая написана на непроцедурном языке, описывается, используя следующие понятия: ветвление, подстановка, рекурсия.
Также для удобства создания программных продуктов создаются специальные интегрированные среды программирования - это системы, которые объединяют транслятор, редактор текстов программ, отладчик (например, Turbo С).
Также получили распространение системы для визуального программирования - это средства, с помощью которых можно создавать программы путем визуального проектирования в графическом виде (например, Visual С, С++ Builder).
1.2 Язык программирования С++. Интегрированная среда разработки C++ Builder
Язык программирования С++ в нынешнее время считается одним из основных языков, используемых для разработки программных продуктов. В последние годы господство слегка поколебалось, поскольку широкое развитие получили языки Java и C#, но маятник мнения программистов качнулся в обратную сторону, и большинство программистов, которые бросили С++, поспешили вернуться к прежней привязанности.
С++ - это язык программирования общего назначения, наиболее часто применяется в системном программировании, понимаемом в широком смысле слова. Кроме того, в С++ успешно используется для написания приложений, далеко выходящих за рамки системного программирования. Реализации С++ есть на всех машинах, начиная с самых скромных - до самых больших супер-ПК.
Бьерн Страуструп является разработчиком языка С++ и создателем его первого транслятора. Он является сотрудником научно-исследовательского вычислительного центра AT&T в Нью-Джерси (США). Он получил звание магистра вычислительной техники и математики в университете г.Аарус (Дания), а докторское звание в Кэмбриджском университете. Он специализируется в секторе операционных систем, распределенных систем, программирования и моделирования. Он также является автором полного руководства по С++.[8]
Безусловно язык С++ многим обязан языку программирования Си[8], который сохраняется в виде его подмножества. Сохранены также и все свойственные Си средства низкого уровня, которые предназначены для решения насущных задач системного программирования. [7]
Название С++, было придумано Р. Маскитти летом 1982 г. Это название показывает эволюционный характер преобразования языка Си. А обозначение ++ относится к инкрементной операции наращивания.
Знатоки семантики языка Си находят, что С++ несколько хуже, чем ++С.
Изначально С++ был спроектирован для того, чтобы Страуструпу и его коллегам не надо было писать программы на ассемблере, Си или других языках высокого уровня. Основным его предназначением было сделать более приятным процесс программирования и упростить его для отдельного программиста.
До некоторого времени не было определенного плана разработки языка С++ на бумаге. Реализация и документирование его средств шли параллельно. Поэтому данный язык продолжает развиваться так, чтоб преодолеть все проблемы, которые возникли у пользователей.
Примерно в 1986г. стало очевидно, что работы по стандартизации С++ неизбежны и следует незамедлительно приступать к созданию основ для нее.
Фирма AT&T внесла основной вклад в данную работу. Больше ста представителей изучали и комментировали все аспекты языка, которые стали современной версией руководства и материалами по стандартизации С++.
При разработке С++ важнейшим критерием была простота. При возникновении вопроса, что упростить: руководство и другую документацию по языку или транслятор, то выбирали первое. Также огромное значение придавали совместимости с языком Си, что и помешало удалить весь его синтаксис.[10]
В языке программирования С++ нет некоторых типов данных и операций высокого уровня. Для примера, не существует типа «матрица» с операцией обращения, или же типа «строка» с операцией конкатенации.
Но если пользователю понадобится подобный тип, он может определить его в самом языке. Программирование на С++ сводится к определению зависящих от области написания приложения типов.
Язык С++ создавался для использования в традиционной среде - в системе программирования Си операционной системы Linux. Но есть обоснованные доводы в пользу применения С++ в богатой программной среде. Например, развитые системы трансляции, динамическая загрузка и базы данных, можно успешно применять без ущерба для самого языка.
Ключевое понятие С++ - это класс. Классом является определяемый пользователем тип. Он обеспечивает упрятывание данных, неявное преобразование, их инициализацию, динамическое задание типов, которое контролируется пользователем, управление памятью, а также средства для перегрузки функций и операций.
В С++ концепция модульного построения программ и контроля типов реализованы полнее, нежели в Си. Также, С++ содержит некоторые усовершенствования, стандартные значения параметров функций, функции-подстановки, операции управления памятью, перегрузка имен функций, ссылочный тип. В С++ сохранены возможности Си эффективной работы с объектами, которые отражают аппаратную "реальность" (байты, слова, разряды, адреса).
Язык С++ проектировался для объектно-ориентированного программирования и поддержки абстракции данных в добавление к традиционному стилю Си.
C++ Builder - выпущенное компанией Borland средство разработки приложений, которое позволяет создавать оконные приложения с помощью языка C++, используя при этом библиотеку компонентов и среду разработки Delphi. [6]
C++ Builder является SDI-приложением, главное окно которого имеет настраиваемую инструментальную панель и палитру компонентов (рисунок 2). Помимо этого, при запуске C++ Builder показаны окно инспектора объектов (Object Inspector) и форма нового приложения (Form1). Ниже, под окном формы находится окно редактора кода.
Рисунок 2 - Интерфейс среды разработки C++ Builder
Формы - это основа приложений C++ Builder. Для создания пользовательского интерфейса приложения необходимо добавить в окно формы элементы объектов C++ Builder, которые называются компонентами. Компоненты располагаются на палитре, которая выполнена в виде панели с вкладками. Важной особенностью C++ Builder является то, что он позволяет проектировать собственные компоненты и при этом настраивать палитру. Также есть возможность создавать различные версии палитры для разных проектов.[4]
Компоненты разделяются на визуальные (видимые) и невизуальные (невидимые). Визуальные появляются под час выполнения (например, кнопки, редактируемые поля). Невизуальные - отображаются только во время проектирования, но их не видно во время выполнения программы, хотя они обладают определенной функциональностью (например, запуск таймера, открытие диалогового окна) (рисунок 3).
Рисунок 3 - Пример использования компонентов
Каждый компонент в C++ Builder имеет три характеристики: события, свойства и методы.[5]
Если выбрать компонент на палитре и добавить его на форму, то инспектор объектов автоматически отобразит события и свойства, которые могут использоваться с тем компонентом (рисунок 4).
Рисунок 4 - Инспектор объектов
Свойства компонентов являются атрибутами, определяющими его поведение и внешний вид. Различные свойства компонентов в колонке свойств принимают значение, которые устанавливаются по умолчанию (высота кнопки). Свойства определенного компонента отображаются на вкладке свойств (Properties). В то же время инспектор объектов отображает опубликованные свойства компонентов.
Помимо таких свойств, компоненты могут иметь и общие (public) свойства, которые являются доступными только во время выполнения программы. Инспектор объектов также используется для установки некоторых свойств во время проектирования приложения.
При определении свойства компонент во время проектирования необходимо выбрать нужный компонент на форме и открыть страницу свойств, где выбрать определяемое свойство для изменения.[7]
Страница событий (Events) в инспекторе объектов показывает события, распознаваемые компонентами. Каждый компонент имеет собственный перечень обработчиков событий. Так же в C++ Builder можно писать функции, которые называются обработчиками событий, и связываются события с данными функциями. Создавая обработчик для события, программе поручается выполнить написанную функцию в случае, если событие произойдет.
Метод является функцией для связи с компонентом. Она объявляется как часть компонента (объекта). Создавая обработчики событий, методы вызываются, используя нотацию «->», например: Label1->Show(). [16]
При создании формы пользователя связанные с ней заголовочный файл и модуль с расширением *.h обязательно генерируются, поскольку при создании нового модуля он не всегда должен быть связан с формой. Имена модуля и формы можно изменить, но желательно это сделать сразу после создания, пока не появилось на них много ссылок в других модулях и формах.
2. ИСПОЛЬЗОВАНИЕ ПРИНЦИПОВ МОДУЛЬНОГО ПРОГРАММИРОВАНИЯ. ПОЛЬЗОВАТЕЛЬСКИЕ МЕНЮ
2.1 Основные понятия модульного программирования в C++ Builder
Когда программа становится большой по объему и сложной для восприятия, есть смысл разделить ее по содержанию на небольшие логические части, называемые функциями, каждая из которых будет выполнять определенную задачу.
В результате программа станет более легкой для понимания при создании, и для процесса отладки. Кроме того, при создании функции не потребуется создания двух, а то и большего количества почти одинаковых фрагментов программного кода.
Распределение программы на функции является базовым принципом структурного программирования. Функция - это независимая именуемая часть программы, которая может многократно вызываться из других частей программы, манипулировать данными и возвращать результаты. Каждая функция имеет собственное имя, по которому осуществляют ее вызов.
Различают две основные разновидности функций:
1) стандартные встроенные функции, которые являются составной частью языка программирования, например sin(), pow () и т.д.
2) функции, которые создаются непосредственно пользователем для собственных нужд. [19]
Создаваемая в программе функция должна быть объявленной и определенной. Объявление функции должно быть написанным в программе раньше за ее использование. Определение может находиться в любом месте программы, за исключением тела (середины) других функций. Объявление функции состоит из прототипа (или заголовка) и имеет форму
[класс] <тип результата> <имя функции> (<список формальных аргументов с указанием типа>)
Например объявления функции вычисления среднеарифметического двух целых чисел может иметь вид
float sred (int a, int b);
где sred - имя функции; a и b - формальные входные аргументы (параметры), которые по вызову принимают значения фактических параметров; float - тип функции, который непосредственно является типом результата выполнения операторов функции.
Результат возвращается оператором return. Прототип функции может находиться как непосредственно в программе, так и в заголовочном файле.
Кроме объявления, каждая функция должна иметь определение (реализацию). Определение функции, кроме заголовка, содержит тело функции (команды, которые выполняет функция) и команду возврата результата return [20]
<тип функции> <имя функции> (<список аргументов>)
{
<тело функции>
return <результат вычислений>
}
Например, определение функции sred может быть таким:
float sred (int a, int b)
{
float sr;
sr = (a + b)/2.0;
return sr;
}
Приведенная функция вычисляет среднеарифметическое двух целых чисел a и b и возвращает его значение в точку вызова.
В случае, когда определение функции размещенj в программе раньше точки вызова, писать отдельно объявления и отдельно реализацию этой функции нет необходимости и объявление функции можно избежать. [19]
Если функции выполняют определенные вычисления и действия, которые не требуют возвращения результатов, по их тип указывают тип void (т.е. пустой, без типа). В таких функциях оператор return может отсутствовать или записываться без значения, которое возвращается. Ярким примером таких функций является отзывы событий в C++ Builder, например:
void __fastcall TForm1 :: Button1Click (TObject * Sender)
{
}
В представленном ниже примере создание собственной консольной функции max3() все вычисления для поиска максимального из трех действительных чисел x, y и z, а также действия в отношении вывода результатов вычислений происходят в функции и нет нужды возвращать их через return:
void max3(float x, float y, float z)
{
if (x> y && x> z)
cout << x;
else
if (y> x && y> z)
cout << y; else cout << z;
}
Выполнение функции начинается, когда в тексте программы встречается оператор вызова, то есть имя функции с фактическими параметрами в скобках. При этом формальные параметры последовательно принимают значения фактических: значение первого фактического аргумента копируется в первый формальный аргумент, второй - во второй и т. д.
Поэтому очень важными факторами являются количество, порядок записи и соответствие типов всех аргументов, иначе это может привести к серии ошибок. Если функция объявлена с любым типом, кроме типа void, то есть она возвращает определенный результат, при вызове такой функции ее следует присвоить переменной того же типа, что и сама функция, то вывести на экран с помощью оператора вывода. [18]
Например, функцию sred() может быть вызван в один из способов:
int a = 5, x = 2, y = 3, z, s1, s2;
1) z = sred (5, 4); // Z = 4.5
2) s1 = sred (a, 11); // S1 = 8
3) s2 = sred (x, y) // S2 = -0.5
Рекурсивной называется функция, которая вызывает сама себя. Такая рекурсия называется прямой. Существует еще косвенная рекурсия, когда две или более функций вызывают друг друга.
Общеизвестный пример рекурсивного изображения - предмет между двумя зеркалами - в каждом из них видно бесконечный ряд отражений.
Кроме того, понятие рекурсии хорошо иллюстрируется матрешками. Это означает, что рекурсия позволяет свести сложную задачу к решению его уменьшенных копий. Последовательно уменьшая размер этих задач, процесс рекурсии в конце концов приведет к известному решению, используя который можно легко получить решение исходной задачи.
Более серьезные примеры рекурсии можно найти в математике: рекуррентные соотношения определяют определенный элемент последовательности через один или несколько предыдущих. Например, числа Фибоначчи:
F (n) = F (n-1) + F (n-2), где F (0) = 1, F (1) = 1.
Если рассматривать эту последовательность, начиная от младших членов к старшим, способ ее построения задается циклическим алгоритмом, а если, наоборот, - от заданного n = n0, то способ определения этого элемента через предыдущие будет рекурсивным.
Очевидно, что рекурсия не может быть безусловной, поскольку в таком случае она становится бесконечной. Рекурсия должна иметь внутри себя условие завершения, по которому следующий шаг рекурсии уже не будет выполняться.
Рекурсивные функции только на первый взгляд похожи на обычные фрагменты программ. Чтобы почувствовать специфику рекурсивной функции, стоит проследить по тексту программы течение ее выполнение. В обычной программе будем идти цепочкой вызовов функций, но ни разу повторно не войдем в тот же фрагмента, пока из него не вышли.
Можно утверждать, что ход выполнение программы "ложится" однозначно в текст программы. Другое дело - рекурсия. Если попытаться отследить по тексту программы течение ее выполнение, то доберемся такой ситуации: войдя в рекурсивной функции, "движемся" ее текстом до тех пор, пока не встретим ее вызов (возможно, с другими параметрами), после чего снова начнем выполнять ту же функцию сначала. При этом следует отметить важнейшее свойство рекурсивной функции: ее первый вызов еще не завершился.
Чисто внешне создается впечатление, что текст функции воспроизводится (копируется) каждый раз, когда функция сама себя вызывает. На самом деле этот эффект воспроизводится в компьютере. Однако копируется при этом не весь текст функции (не вся функция), а только ее части, связанные с локальными данными (формальные, фактические параметры, локальные переменные и точка поворота). Алгоритмическая часть (операторы, выражения) рекурсивной функции и глобальные переменные не изменяются, поэтому они присутствуют в памяти компьютера в единственном экземпляре.
Каждый рекурсивный вызов порождает новый "экземпляр" формальных параметров и локальных переменных, причем старый "экземпляр" не уничтожается, а сохраняется в стеке на принципе вложенности как "матрешки". Здесь имеет место единственный случай, когда одному имени переменной в ходе работы программы соответствуют несколько ее экземпляров. Происходит это в такой последовательности:
- В стеке резервируется место для формальных параметров, куда записываются значения фактических параметров. Обычно это выполняется в порядке, обратном их места в списке;
- При вызове функции в стека записывается точка поворота - адрес той части программы, где содержится вызов функции;
- В начале тела функции в стеке резервируется место для локальных (автоматических) переменных.
Указанные переменные создают группу (фрейм стека). Стек "помнит историю" рекурсивных вызовов в виде последовательности (цепочки) таких фреймов. Программа в каждый конкретный момент работает с последним вызовом и с последним фреймом. По завершении рекурсии программа возвращается к предыдущей версии рекурсивной функции и к предыдущему фрейма в стеке.
Классическим примером рекурсивной функции является вычисление факториала.
Для того чтобы определить факториал числа n, следует умножить n на факториал числа (n-1):
n! = n * (n-1)! // Это так называемое рекуррентное соотношение.
Известно также, что 0! = 1 и 1! = 1, то есть условием остановки рекурсии будет: якщo n = 0 или n = 1, то факториал равен 1.
Дадим полное рекурсивное определение факториала:
Итак, рекурсивная функция вычисления факториала числа n выглядеть так:
long fact (long n)
{
if (n == 0 || n == 1)
return 1;
return (n * fact (n-1))
}
Если в функции main() встретится вызов функции fact(3), при выполнение этой функции будет вызвана функция fact(2), которая в свою очередь вызовет fact(1). Для последней сработает условие остановки рекурсии (n == 1) и в функцию fact (2) будет возвращено значение 1 и вычислено значение 2(2! = 2), которое в свою очередь будет возвращен к функции fact(3) и будет использовано для вычисления 3!.
2.2 Принципы разработки пользовательского меню
Создание качественного интерфейса требует значительно большего, чем просто соблюдение некоторых инструкций. Оно предполагает реализацию принципа «интересы пользователя превыше всего» и соответствующую методологию разработки всего программного продукта.
Основное достоинство хорошего интерфейса пользователя заключается в том, что пользователь всегда чувствует, что он управляет программным обеспечением, а не программное обеспечение управляет им.
Для создания у пользователя такого ощущения «внутренней свободы» интерфейс должен обладать целым рядом свойств, рассмотренных ниже.
Естественный интерфейс - такой, который не вынуждает пользователя существенно изменять привычные для него способы решения задачи. Это, в частности, означает, что сообщения и результаты, выдаваемые приложением, не должны требовать дополнительных пояснений.
Согласованность интерфейса позволяет пользователям переносить имеющиеся знания на новые задания, осваивать новые аспекты быстрее, и благодаря этому фокусировать внимание на решаемой задаче, а не тратить время на уяснение различий в использовании тех или иных элементов управления, команд и т.д.
Дружественность интерфейса. Пользователи обычно изучают особенности работы с новым программным продуктом методом проб и ошибок. Эффективный интерфейс должен принимать во внимание такой подход. На каждом этапе работы он должен разрешать только соответствующий набор действий и предупреждать пользователей о тех ситуациях, где они могут повредить системе или данным; еще лучше, если у пользователя существует возможность отменить или исправить выполненные действия.
Эстетическая привлекательность интерфейса. Проектирование визуальных компонентов является важнейшей составной частью разработки программного интерфейса. Корректное визуальное представление используемых объектов обеспечивает передачу весьма важной дополнительной информации о поведении и взаимодействии различных объектов. В то же время следует помнить, что каждый визуальный элемент, который появляется на экране, потенциально требует внимания пользователя, которое, как известно, не безгранично.
Меню является, пожалуй, наиболее популярным вариантом организации запросов на ввод данных во время диалога, управляемого компьютером.
Существует несколько основных форматов представления меню на экране:
o список объектов, выбираемых прямым указанием, либо указанием номера (или мнемонического кода);
o меню в виде блока данных;
o меню в виде строки данных;
o меню в виде пиктограмм.
Меню в виде строки данных может появляться вверху или внизу экрана и часто остается в этой позиции на протяжении всего диалога. Таким образом, посредством меню удобно отображать возможные варианты данных для ввода, доступных в любое время работы с системой.
Пользователь диалогового меню может выбрать нужный пункт, вводя текстовую строку, которая идентифицирует этот пункт, указывая на него непосредственно или просматривая список и выбирая из него. Система может выводить пункты меню последовательно, при этом пользователь выбирает нужный ему пункт нажатием клавиши.
Меню можно с равным успехом применять для ввода как управляют их сообщений, так и данных. Приемлемая структура меню зависит от его размера и организации, от способа выбора пунктов меню и реальной потребности пользователя в поддержке со стороны меню.
3. ПРАКТИЧЕСКОЕ ИСПОЛЬЗОВАНИЕ ФУНКЦИЙ ПОЛЬЗОВАТЕЛЯ. СОЗДАНИЕ МЕНЮ ПОЛЬЗОВАТЕЛЯ СРЕДСТВАМИ С++ BUILDER
3.1 Функции пользователя в C++ Builder
Рассмотрим применение функций пользователя на примере написания программы для демонстрации движения касательной вдоль графика функций. Рассмотрим интерфейс программы (рис.5):
Рисунок 5 - Интерфейс программы
На форма размещены следующие компоненты:
- BitBtn1 - Кнопка «Нарисовать»;
- BitBtn2 - Кнопка «Касательная»;
- BitBtn3 - Кнопка «Очистить»;
- BitBtn4 - Кнопка «Выход»;
- ComboBox1 - выпадающий список с названиями функций;
- Chart1 - компонент для построения диаграммы;
- Label1 - надпись о точке соприкосновения с касательной;
- Timer1 - таймер;
- MainMenu1 - главное меню.
Для функционирования программы, кроме функций обработчика событий, созданы следующие подпрограммы:
- функция для очистки полей формы:
void clear() //название функции
{
//остановка таймера
Form1->Timer1->Enabled=false;
on_of=false;
//очистка графика
Form1->Series1->Clear();
Form1->Series2->Clear();
Form1->Series3->Clear();
//очистка поля со списком
Form1->ComboBox1->ItemIndex=-1;
//инициализация поля сос писком
Form1->ComboBox1->Text="Виберите кривую";
//инициализация параметров диаграммы
Form1->Chart1->Title->Text->Clear();
Form1->Chart1->Title->Text->Add("График функции");
//индикатор положения касательной
Form1->Label1->Caption="Касательная находится в точке (X;Y)";
}
- функция для установки высоты и ширины области диаграммы
float Size(float a,float c,float d,float e)
{
//установка минимума и максимума по осях
Form1->Chart1->LeftAxis->Maximum=a;
Form1->Chart1->LeftAxis->Minimum=c;
Form1->Chart1->BottomAxis->Maximum=d;
Form1->Chart1->BottomAxis->Minimum=e;
return a,c,d,e;
}
Также для примера рассмотрим функцию, с помощью которой будет нарисован график выбранной функции.
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
//начальная очистка полей и серий
Chart1->Title->Text->Clear();
Series1->Clear();
Series2->Clear();
Series3->Clear();
//остановка таймера
Timer1->Enabled=false;
//индикатор выбора функции в ComboBox
if(ComboBox1->ItemIndex==-1)
on_of=false;
else
on_of=true;
//рисование синусоиды
if(ComboBox1->ItemIndex==0)
{Chart1->Title->Text->Add("График синусоиды");
for(x=-7;x<=7;x+=0.1)
{y=sin(x);
Series1->AddXY(x,y,"",clRed);}
Size(1.5,-1.5,8,-8);
x1=-7;}
else
//рисование косинусоиды
if(ComboBox1->ItemIndex==1)
{Chart1->Title->Text->Add("График косинусоиды");
for(x=-7;x<=7;x+=0.1)
{y=cos(x);
Series1->AddXY(x,y,"",clRed);}
Size(1.5,-1.5,8,-8);
x1=-7;}
else
//рисование экспоненты
if(ComboBox1->ItemIndex==2)
{for(x=-5;x<=2;x+=0.1)
{y=exp(x);
Series1->AddXY(x,y,"",clRed);}
Chart1->Title->Text->Add("Экспонента");
Size(8,-1,3,-6);
x1=-5;}
else
//рисование параболы
if(ComboBox1->ItemIndex==3)
{for(x=-10;x<=10;x++)
{y=x*x;
Series1->AddXY(x,y,"",clRed);}
Chart1->Title->Text->Add("Парабола");
Size(120,-10,12,-12);
x1=-11;}
else
//в случае, если пользователь не выбрал название функции
if(ComboBox1->ItemIndex==-1)
ShowMessage("Выберите функцию из предложенного списка");
3.2 Создание меню пользователя в С++ Builder
Рассмотрим создание меню пользователя на примере проектирования главного меню программы.
Для создания главного меню необходимо добавить на форму невизуальный компонент MainMenu1.
Основное свойство компонента - Items. Его заполнение производится с помощью Конструктора Меню, которое вызывается двойным нажатием на компоненте MainMenu или нажатием кнопки с многоточием рядом со свойством Items в окне Инспекторе Объектов. В этом окне можно спроектировать все меню. При работе в конструкторе меню новые разделы можно вводить, помещая курсор в рамку из точек, обозначающее место расположения нового.
Свойство Caption обозначает надпись раздела. Заполнение этого свойства аналогичное тем же правилам, что и заполнения аналогичной свойства в кнопках, включая использование символа амперсанда для обозначения клавиш быстрого доступа. Если вы как значение Caption очередного раздела введете символ минус "-", то вместо раздела в меню появится разделитель.
Свойство Name задает имя объекта, соответствующего раздела меню.
Свойство Shortcut определяет клавиши быстрого доступа к разделу меню - «горячие» клавиши, с помощью которых пользователь, даже не заходя в меню, может в любой момент вызвать выполнение процедуры, связанной с данным разделом. Чтобы определить клавиши быстрого доступа, надо открыть выпадающий список свойства Shortcut в окне Инспектора Объектов и выбрать из него нужную комбинацию клавиш. Эта комбинация появится в строке меню.
Свойство Default определяет, является ли данный раздел разделом по умолчанию своего подменю, то есть разделом, выполняется при двойном нажатии пользователя на родительском разделе. Подменю может содержать только один раздел по умолчанию, что выделяется жирным шрифтом
В C ++ Builder 6 для разделов меню введено новое свойство - AutoCheck. Если его установить в true, то при каждом выборе пользователем данного раздела маркер автоматически переключаться, указывая то на выбранный состояние, то на отсутствие выбора.
Далее, нажав дважды на компоненте откроется окно редактирования пунктов меню, куда нужно ввести необходимые данные (рис. 6):
Рисунок 6 - Редактор Главного меню программы
В результате получим следующие пункты меню (рис.7):
Рисунок 7 - Пункты главного меню
Продемонстрируем функционирование созданной программы (рис.8):
Рисунок 8 - Движение касательной
ЗАКЛЮЧЕНИЕ
В наше время, когда усиливается связь между миром коммерции и миром разработки программного обеспечения, и корпорации тратят много усилий на планирование бизнеса, ощущается необходимость в соответствии абстрактных бизнес процессов их программным реализациям. К сожалению, большинство языков реально не имеют прямого пути для связи бизнес логики и кода.
Например, сегодня многие программисты комментируют свои программы для объяснения того, какие классы реализуют какой-либо абстрактный бизнес объект. C# позволяет использовать типизированные, расширяемые метаданные, которые могут быть прикреплены к объекту.
Архитектурой проекта могут определяться локальные атрибуты, которые будут связанны с любыми элементами языка - классами, интерфейсами и т.д.
В процессе выполнения работы были получены и закреплены практические навыки разработки программ с использованием модульного программирования в написании программы в среде визуального программирования Borland C++ Builder.
В процессе написания курсовой работы были реализованы следующие задачи:
- рассмотрены основные определения и классификация языков программирования;
- раскрыто основные понятия языков С++, среды разработки C++ Builder;
- охарактеризовано основные определения и понятия о модульном программировании;
- рассмотрено понятие пользовательского меню;
- рассмотрена технологию создания графических программ с использованием пользовательского меню в среде разработки C++ Builder.
В процессе анализа вышеизложенной информации выявлены следующие достоинства программ с пользовательским меню:
- удобность введения и просмотра информации пользователем;
- структурированное отображение данных;
- формирование дружественного интерфейса «пользователь - система».
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Бобровский С. Самоучитель програмирования на языке C++ в среде Borland C++ Builder М.: ИНФРА-М, 2011.-251 c.
2. Бруно Бабэ. Просто и ясно о Borland C++: Пер. с англ. - Москва: БИНОМ, 2014. - 400с.
3. Заварыкин В.М.. Основы информатики и вычислительной техники. - М.: Просвещение, М.: - 2011. 180 с.
4. Задачи по программированию / С. А. Абрамов, Г. Г. Гнездилова, Е. Н. Капустина, М. И. Селюн. - М.: Наука, 2011. - 344 с.
5. Зубов В. С. Программирование на языке С++. - М.: Информационно-издательский дом «Филинъ», 2013. - 452 с.
6. 3yeв Е. А. Практическое программирование на языке С++. - М.: Радио и связь, 2014. - 406 с.
7. Информатика. Задачник-практикум: В 2 т. / Под ред. И. Г. Семакина, Е.К.Хеннера. - М.: Лаборатория Базовых Знаний, 2011. - 182 с.
8. Йенсен К. С++ - руководство для пользователей и описание языка. - М.: Мир, 2012. - 402 с.
9. Касаткин В. Н. Информация. Алгоритмы. ЭВМ. - М.: Просвещение, 2011. - 210 с.
10. Керниган Б. Язык программирования Си: Пер. с англ. - М.: Финансы и статистика, 2011. - 322 c.
11. Культин Н.Б. Визуальное программирование.- СПб.: BHV - Санкт-Петербург, 2013. - 266 c.
12. Культин Н.Б. С++ Buider в задачах и примерах - СПб.:БХВ-Петербург, 2012. - 336с.: ил.
13. Аксёнова Е.А., Соколов А.В. Алгоритмы и структуры данных на С++: Учебное пособие. - Петрозаводск: Изд-во ПетрГУ, 2008.- 81 с.
14. Беляева, И. В. Основы программирования на языке Turbo Pascal: учебное пособие / И. В. Беляева. - Ульяновск: УлГТУ, 2011. - 266 с.
15. Липачев Е.К. Технология программирования. Базовые конструкции C/C++: Учебно-справочное пособие / Е.К. Липачев. - Казань: Казан. ун-т., 2012. - 142 с.
16. Мамонова Т.Е. Информатика. Общая информатика. Основы языка C++: учебное пособие / Т.Е. Мамонова; Томский политехнический университет. - Томск: Изд-во Томского политехнического университета, 2011. - 206 с.
17. Мамонова Т.Е. Информатика. Программирование на C++: учебно-методическое пособие / Т.Е. Мамонова; Томский политехнический университет. - Томск: Изд-во Томского политехнического университета, 2011. - 118 с.
18. Марапулец Ю.В.Программирование на языке высокого уровня: Учебное пособие. - Петропавловск-Камчатский: КамчатГТУ, 2008. - 189 с. ISBN/ISSN:978-5-328-00185-4
19. Объектно-ориентированное программирование на С#: Учебное пособие / А.А. Андрианова, Л.Н. Исмагилов, Т.М. Мухтарова. - Казань: Казанский (Приволжский) федеральный университет, 2012. - 134 с.
20. Шамшев, А.Б. Алгоритмическое мышление при решении задач (на примере языка C#): учебное пособие / А.Б. Шамшев, К.В. Святов. - Ульяновск: УлГТУ, 2011. - 113 с.
Размещено на Allbest.ru
...Подобные документы
Изучение организации диалоговой программы и закрепления основных элементов программирования на языке Паскаль и Си (Delphi, C++ Builder). Описание представления информации в программах на языках высокого уровня. Сравнительная характеристика Delphi и C++.
курсовая работа [3,1 M], добавлен 27.02.2015Характеристика базовых конструкций языков программирования. Изучение истории их развития и классификации. Определение основных понятий языков программирования. Описание основных операторов, которые используются в языках программирования высокого уровня.
курсовая работа [400,6 K], добавлен 10.11.2016Особенности вывода на экран содержимого файла BAZA.txt. Анализ функций вывода информации о количестве каждой марки машин. Рассмотрение способов проектирования тестов программы методами черного ящика. Проблемы программирования на языке высокого уровня.
контрольная работа [1,6 M], добавлен 04.01.2015Сравнительный анализ наиболее распространенных языков, их классификация, описание достоинств и недостатков. Использование процедур, функции и подпрограмм в языках программирования высокого уровня. Разработка и реализация программы "Бортовой компьютер".
курсовая работа [329,8 K], добавлен 22.06.2014Методы численного интегрирования. Характеристика основных составляющих структурного программирования. Решение задания на языке высокого уровня Паскаль. Построение графического решения задачи в пакете Matlab. Решение задания на языке высокого уровня C.
курсовая работа [381,7 K], добавлен 10.05.2018Классификация языков программирования. Использование циклических конструкций и выполнение итерационных процессов. Алгоритмические структуры циклов языков C, C++, Java, C#. Особенности современных языков программирования высокого уровня и их применение.
курсовая работа [345,6 K], добавлен 13.11.2009Программная реализация настольного приложения с использованием языка программирования C#. Проектирование и структура пользовательского интерфейса, требования к нему и оценка функциональности. Разработка руководства пользователя и его использование.
курсовая работа [297,6 K], добавлен 10.03.2015Разработка программы создания заметок в любом месте компьютера. Выбор технологии, языка и среды разработки приложения. Описание основных алгоритмов работы программного обеспечения. Проектирование пользовательского интерфейса. Выбор стратегии тестирования.
отчет по практике [700,5 K], добавлен 24.11.2014Характеристика основных разделов программирования, изучаемых в курсе программирования на языке С++. Описание внутренних переменных, входных и выходных данных. Особенности использования компилятора Microsoft Visual Studio 2008. Руководство пользователя.
курсовая работа [18,8 K], добавлен 14.12.2010Создание консольных приложений с использованием графического интерфейса пользователя. Содержание палитры компонентов программы С++ Builder. Использование возможностей объектно-ориентированного программирования, особенности редактора кода и форм в С++.
лекция [27,0 K], добавлен 22.12.2010Исследование классификации компьютерных игр, двигателей прогресса индустрии для персональных компьютеров. Характеристика общей структуры, протокола и текста программы, сценария и процесса игры. Изучение алгоритмизации и программирования на языке Паскаль.
реферат [2,1 M], добавлен 16.09.2011Описание языков программирования высокого уровня. Стандартные структуры данных, обзор принципов структурного программирования. Построение математической модели и выбор структуры данных для решения задачи. Тестирование и отладка программного кода.
курсовая работа [1,3 M], добавлен 05.12.2020Разработка прикладной программы для операций создания и уничтожения объектов в системе визуального объектно-ориентированного программирования C++Builder. Алгоритм работы программы, набор функций и операторов, компонент и модулей, кнопки событий.
дипломная работа [672,5 K], добавлен 16.08.2012Понятия структурного программирования и алгоритма решения задачи. Краткая история развития языков программирования от машинных до языков ассемблера и языков высокого уровня. Процедурное программирование на C#. Методы и программы для моделирования.
учебное пособие [1,7 M], добавлен 26.10.2010Разработка приложения "Ведомость начисления заработной платы" в среде программирования C++Builder. Алгоритм и сценарий работы программы. Проектирование интерфейса пользователя. Написание программных модулей и результаты тестирования данной программы.
курсовая работа [597,4 K], добавлен 31.01.2016Теоретические и практические аспекты решения прикладных задач с применением функций и процедур структурного (модульного) программирования. Особенности разработки схемы алгоритма и программы для вычисления массива z на языке Turbo Pascal 7.0, их описание.
курсовая работа [241,7 K], добавлен 11.12.2009Изучение средств распараллеливания, предоставляемых технологиями OpenMP. Исследование синтаксиса и семантики функций технологии OpenMP на языке программирования Visual C++). Проектирование интерфейса пользователя для взаимодействия с программой.
контрольная работа [773,9 K], добавлен 12.07.2015Алгоритмы обработки данных на языке программирования СИ. Приемы работы с интегрированной средой разработки, Использование разнообразных трансляторов и интерпретаторов, обеспечивающих связь программ с различными операционными системами и оборудованием.
учебное пособие [1,3 M], добавлен 02.12.2011Формирование на экране меню для выбора функций. Элементы пользовательского интерфейса. Описание внутренних переменных, входных и выходных данных языка программирования Си. Выбор пользователем функции. Создание программы "Список коммерческих банков".
курсовая работа [491,9 K], добавлен 17.03.2015Изучение функций и возможностей среды разработки языка программирования Pascal. Рассмотрение работы с одномерными и двумерными массивами, со строками и числами. Математическая формулировка задач. Разработка алгоритмов, описание структуры программ.
курсовая работа [879,8 K], добавлен 11.02.2016