Выбор, размещение и задание свойств  компонентов.



МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ

РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ

БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

 

«ВЯТСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»

В.В. ЧУРКИН

 

ЛАБОРАТОРНЫЕ   РАБОТЫ   ПО   ПРОГРАММИРОВАНИЮ

В   СРЕДЕ  C++ BUILDER

Учебно-методическое пособие

 

Киров

2013

 

 

УДК 004.42(07)

           

Рекомендовано к изданию методическим советом

факультета автоматики и вычислительной техники

ФГБОУ ВПО «ВятГУ»

Допущено редакционно-издательской комиссией методического совета ФГБОУ ВПО«ВятГУ» в качестве учебно-методического пособия по дисциплине «Технологии программирования» для студентов направления подготовки 230400 «Информационные системы и технологии», профиль «Информационные системы и технологии» всех форм обучения

 

Рецензент:

кандидат технических наук, доцент кафедры ЭВМ М. Н. Томчук

 

Чуркин В.В.

Лабораторные работы по программированию в среде C++Builder: учебно-методическое пособие для студентов направления 230400 «Информационные системы и технологии», профиль «Информационные системы и технологии», всех форм обучения / В. В. Чуркин. – Киров: ПРИП ФГБОУ ВПО «ВятГУ», 2013. – 247 с.

 

В издании излагается методика выполнения лабораторных работ по дисциплине «Технологии программирования». В учебно-методическом пособии приведены примеры выполнения лабораторных работ, в которых изучение технологий программирования и структур данных сочетается с изучением интегрированной среды разработки приложений C++Builder.

 

УДК 004.42(07)

 

© ПРИП ФГБОУ ВПО «ВятГУ», 2012

 

ISBN ______________________


 

СОДЕРЖАНИЕ

Введение................................................................................................................4

Ознакомление с Интегрированной Средой Разработки (ИСР)

C++Builder6.........................................................................................................6

Лабораторная работа 1. Формирование и обработка динамических массивов……………………………………………………………………….16

    Контрольные вопросы…………………………………………………31

    Задания………………………………………………………………….33

Лабораторная работа 2. Текстовые файлы, символы, строки….…….......35

Контрольные вопросы…………………………………………………45

    Задания………………………………………………………………….46

Лабораторная работа 3. Сортировки числовых массивов.

Рекурсивные функции….…………………………………….………………49

Контрольные вопросы………………………………………………....72

    Задания………………………………………………………………….73

Лабораторная работа 4. Способы шифрования и дешифрования

текста…………………………………………………………………………..76

Контрольные вопросы………………………………………………..105

Лабораторная работа 5. Преобразование и вычисление

 арифметических выражений с помощью стека…………………………...106

Контрольные вопросы………………………………………………..128

Лабораторная работа 6. Очередь приоритетов…….………………........129

Контрольные вопросы………………………………………………..150

    Задания (стеки, очереди)……………………………………………..151

Лабораторная работа 7. Двунаправленный неоднородный список

с однородными подсписками…… …………………………………………156

Контрольные вопросы………………………………………………..191

    Задания………………………………………………………………...192

Лабораторная работа 8. Бинарное упорядоченное дерево …………….197

Контрольные вопросы………………………………………………..222

    Задания………………………………………………………………...222

Лабораторная работа 9. Иерархия: точка, круг, цилиндр ………….….226

Контрольные вопросы………………………………………………..245

    Задания………………………………………………………………...246

Библиографический cписок………………………………………………….247


Введение

    При составлении  данного учебно-методического пособия была поставлена задача – совместить изучение технологий программирования на языке  C/C++ – структурного, модульного и объектно-ориентированного с изучением и получением навыков работы в интегрированной среде разработки (ИСР) приложений C++ Builder.

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

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

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

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

    Лабораторная работа «Способы шифрования и дешифрования текста» предназначена для изучения алгоритмов и приложения, позволяющего шифровать и дешифровать тексты по треугольнику Паскаля, методом Гронсфельда и по матрице. Приложение содержит класс шифрования/дешифрования текста. В проекте использован модуль, не связанный с формой; объявление класса находится в заголовочном файле, а реализация класса – в файле реализации данного модуля. Результаты шифрования и информация о способе шифрования сохраняются в бинарных файлах. Для представления информации о программе и её разработчике в проект включена дополнительная форма. В приложении впервые использована инструментальная панель на основе простой панели с расположенными на ней кнопками с фиксацией и пиктограммами. Показано использование Исследователя классов.

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

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

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

 В лабораторной работе «Бинарное упорядоченное дерево» изучается нелинейная динамическая структура данных – бинарное упорядоченное дерево поиска. В проекте использованы два класса: для узла дерева и для бинарного дерева, причем последний объявлен дружественным первому. Даны основные функции работы с деревом и продемонстрировано их использование. Интерфейс подобен интерфейсу в предыдущей работе.

В лабораторной работе «Иерархия : точка, круг, цилиндр» изучается пример иерархии с прямым открытым наследованием. Для демонстрации возможностей полиморфизма в лабораторной работе рассмотрено два варианта иерархии. Виртуальные функции находятся во втором варианте. В первом варианте для отображения объектов использовано приведение типов указателей базовых классов к указателям производных классов, во втором – полиморфизм, реализованный при помощи виртуальных функций-элементов.

 

 

Ознакомление с Интегрированной Средой Разработки (ИСР) C++Builder 6

        

Интегрированная Среда Разработки (Integrated Development Environment – IDE, или ИСР) – это среда, в которой есть все необходимое для быстрой разработки (проектирования) сложных прикладных программ (приложений). ИСР интегрирует в себе редактор кодов, отладчик, инструментальные панели, редактор изображений, инструментарий баз данных, что позволяет проектировать, запускать и тестировать приложения.

Проекты C++Builder

    Проект C++Builder состоит из форм, модулей с их заголовочными файлами и файлами реализации, установок параметров проекта, ресурсов и т.д. Вся эта информация размещается в файлах. Многие из этих файлов автоматически создаются C++Builder в процессе построения приложения:

 

Головной файл проекта (.cpp) C++Builder создает файл .cpp для головной функции WinMain, инициирующей приложениеи запускающей его на выполнение
Файл опций проекта (.bpr) Этот текстовый файл содержит установки опций проекта и указания на то, какие файлы должны компилироваться и компоноваться в проект. Файл сохраняется в формате XML
Файл ресурсов проекта (.res) Двоичный файл, содержащий ресурсы проекта: пикто-граммы, курсоры и т.п. По умолчанию содержит только пиктограмму проекта. Может дополняться с помощью Редактора Изображений
Файл реализации модуля (.cpp) Каждой создаваемой пользователем форме соответствует текстовый файл реализации модуля, используемый для хранения кода. Пользователь может создавать модули, не связанные с формами
Заголовочный файл модуля (.h) Каждой создаваемой пользователем форме соответствует не только файл реализации модуля, но и его заголовочный файл с описанием класса формы. Пользователь может и сам создавать необходимые заголовочные файлы
Файл формы (.dfm) Это двоичный или текстовый файл, который C++Builder создает для хранения информации о фор-мах пользователя. Пользователь может смотреть этот файл в текстовом виде или в виде формы. Каждому файлу формы соответствует файл модуля (.cpp)
Заголовочный файл компонента (.hpp) Файл создается при создании пользователем нового компонента. Пользователю также часто приходится подключать к проекту эти файлы из библиотеки компонентов C++Builder, расположенные в каталоге Include\VCL
Файл группы проектов (.bpg) Текстовый файл, создаваемый в C++Builder при созда-нии пользователем группы проектов
Файлы пакетов (.bplи .bpk) Эти двоичные файлы используются C++Builder при ра-боте с пакетами: .bpl– файл самого пакета, .bpk– файл, определяющий компиляцию и компоновку пакета
Файл рабочего стола проекта (.dsk) В этом текстовом файле C++Builder хранит информа-цию о последнем сеансе работы с проектом: открытых окнах, их размерах и положении. Благодаря этому файлу в новом сеансе работы пользователь сразу видит тот же экран, который был в предыдущем сеансе. Файл создается только при включении опции Опции автосохранения |Рабочий стол проекта ( на странице Предпочтения–многостраничного окна Опции среды общих настроек среды, вызываемого командой Инструменты|Опции среды)
Файлы резервных копий (.~bp, .~df, .~cp, .~h) Это соответственно файлы резервных копий для файлов проекта, формы, реализации модуля и заголовочного. Если пользователь что-то безнадежно испортит в своем проекте, он может соответственно изменить расширения этих файлов и таким образом вернуться к предыдущему не испорченному варианту

 

 

        

Следующая группа файлов создается компилятором:

Исполняемый  файл (.exe) Это исполняемый файл проектируемого приложения. Он является автономным исполняемым файлом, для которого больше ничего не требуется, если только пользователь не использует библиотеки, содержащиеся в пакетах, DLL, OCX и т.д.
Объектный файл модуля (.obj) Это откомпилированный файл модуля (.cpp), который компонуется в окончательный исполняемый файл
Динамически присоединяемая библиотека (.dll) Этот файл создается в случае, если пользователь проектирует свою собственную DLL
Файл таблицы символов (.tds) Двоичный файл, используемый отладчиком в процессе отладки приложения
Файлы выбороч-ной компоновки (.il?) Файлы с расширением, начинающемся с il(.ilc, .ild, .ilf, .ils), позволяют повторно компоновать только те файлы, которые были изменены после последнего сеанса

        

C++Builder может использовать файлы Windows:

Файлы справки (.hlp) Это стандартные файлы справки Windows, которые мо-гут быть использованы приложением C++Builder
Файлы изображе-ний или графи-ческие файлы (.wmf, .bmp, .ico) Эти файлы обычно используются в приложениях Win-dows для создания привлекательного и дружественного пользовательского интерфейса

        

Из всех перечисленных файлов (а могут использоваться еще и другие) важнейшими являются файлы .cpp, .h, .dfm, .bpr, .res. Это файлы, которые необходимо перенести на другой компьютер, чтобы продолжить на нем работу над проектом. Все остальные файлы C++Builder создаст автоматически в процессе компиляции проекта и его отладки.

    Главной частью приложения является головной файл .cpp(файл проекта, исходный файл проекта) с функцией WinMain, с которой начинается выполнение программы и которая обеспечивает инициализацию других модулей. Она создается и модифицируется C++Builder автоматически в процессе разработки приложения. Имя, которое дает пользователь файлу проекта, когда сохраняет его, становится именем исполняемого файла.

    Все изменения файла проекта при добавлении новых форм, изменении имен форм и т.п. поддерживаются C++Builder автоматически. Для просмотра исходного файла проекта надо выполнить команду Проект|Вид источника. Но обычно просмотр не требуется.

    Информация о формах C++Builder хранится в трех файлах: .dfm, .cpp, и .h. Информация о внешнем виде формы, ее размерах, местоположении на экране и т.д. хранится в файле с расширением .dfm, который по умолчанию имеет текстовый вид. Для хранения файла формы в двоичном виде нужно щелкнуть на форме правой кнопкой мыши, и во всплывшем меню выключить индикатор Текст DFM.

    Основной файл, с которым работает пользователь, – это файл реализации модуля .cpp, в котором хранится код, соответствующий данной форме. В текстовом заголовочном файле с расширением .hхранится объявление класса используемой формы. Весь основной текст этого файла C++Builder формирует автоматически по мере проектирования пользователем формы. Но иногда требуется вручную вводить в этот файл объявления каких-то функций, типов, переменных. В C++Builder заголовочный файл загружается в окно Редактора Кода автоматически.

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

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

    Чтобы создать в проекте новый модуль, не связанный с какой-либо формой, надо выполнить команду Файл|Новый|Другое и в открывшемся многостраничном окне Новые элементы дважды щелкнуть на пиктограмме Модуль страницы Новый.

    По окончании работы над проектом следует удалить вспомогательные файлы – .obj, .res,.tds,.il?, ~*. Объем файлов .tds может быть очень большим (мегабайты).

 

Основное окно ИСР

    Основное окно появляется на экране после запуска C++ Builder 6.

    В верхней части окна ИСР находится полоса главного меню. Главное меню имеет следующие разделы (меню).

 

Файл – позволяет создать новый проект, новую форму, открыть ранее созданный проект или форму, сохранить проекты или формы в файлах с заданными именами.

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

 

Поиск – позволяет осуществлять поиск и контекстные замены в коде приложения.

 

Вид – позволяет вызывать на экран различные окна, необходимые для проектирования.

 

Проект – позволяет добавлять и убирать из проекта формы, задавать опции проекта, компилировать проект без его выполнения и т.д.

 

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

 

Компонент – позволяет создавать и устанавливать новые компоненты, конфигурировать палитру компонентов, работать с пакетами.

 

База данных – позволяет использовать инструментарий для работы с базами данных.

 

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

 

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

 

Помощь – содержит разделы, помогающие работать со встроенной в C++Builder справочной системой.

 

    Помимо главного меню в C++Builder имеется система контекстных всплывающих меню, которые появляются, если пользователь поместил курсор мыши в каком-то окне или на каком-то компоненте и щелкнул правой кнопкой мыши. Большинство разделов контекстных меню дублирует основные разделы главного меню. Но есть и разделы, отсутствующие в главном меню и позволяющие ускорить программирование.

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

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

    В основном поле окна слева видны два окна: сверху – Дерева Объектов, под ним – Инспектора Объектов (Инспектора проекта). Окно Дерева Объектов будет отображать иерархическую связь визуальных и невизуальных компонентов и объектов проектируемого приложения. А Инспектор Объектов – это основной инструмент, с помощью которого пользователь задает свойства компонентов и обработчики событий. Правее этих окон видно окно пустой формы, готовой для переноса на нее компонентов. Под ним расположено окно Редактора Кода. Чтобы увидеть его, окно формы необходимо сдвинуть.

 

Проектирование приложения – расчет по формуле z=f(x,y)

1.Создайте для проекта приложения каталог (папку Windows) с именем ТЕХН_ПРОГР  и запустите C++Builder 6.

2.Создайте новый проект командой Файл|Новый|Приложение.

3.Сохраните файл модуля и проект командой Файл|Сохранить все. Во время работы над проектом удобно использовать соответствующую быструю кнопку. При первом сохранении C++Builder спросит сначала имя файла сохраняемого модуля, а затем – имя головного файла проекта. Файл модуля и головной файл проекта имеют одинаковое расширение .cpp и поэтому они должны различаться именами, чтобы не затереть на диске друг друга. Итак, файлу модуля дайте имя Formula, а файлу проекта – PR_Formula.В последующих сеансах работы можно открыть сохраненный проект командой Файл|Открыть проект ( или Повторно открыть).

4.Перейдите в Инспектор Объектов, щелкнув левой кнопкой мыши на свойстве Caption (надпись). Данное по умолчанию значение Form1 свойства Caption замените на значение РАСЧЕТ ПО ФОРМУЛЕ. Перейдите в форму, щелкнув на ней левой кнопкой.

5.В процессе первого проектирования приложения полезно иметь в качестве справки результат проектирования, представленный на рис.1.

 

                       

Рис.1 – результат проектирования

 

6.Перенесите па пустую форму кнопку Button со страницы Стандарт палитры компонентов. Для этого выделите пиктограмму кнопки (она седьмая слева). При этом первая слева кнопка-указатель приобретет вид ненажатой кнопки. Это означает намерение поместить компонент (в данном случае кнопку) на форму. Если нажать кнопку-указатель, то это будет означать отказ от размещения выбранного компонента. Итак, выделив пиктограмму кнопки, щелкните курсором мыши в нижней части формы, посредине. На форме появится кнопка, которой C++Builder присвоит имя по умолчанию – Button1. Теперь свойствам перенесенного на форму компонента – кнопке присваивают нужные значения. (Во время присваивания компонент должен оставаться выделенным, т.е. окруженным рамкой с маркерами. Для выделения компонента достаточно щелкнуть на нем левой кнопкой мыши. Для удаления ошибочно перенесенного на форму компонента нужно выделить его и нажать клавишу Delete.) Перейдите в Инспектор Объектов и измените ее свойство Caption (надпись), которое по умолчанию равно Button1, на РАСЧЕТ. Установите свойство кнопки Height(высота) равным 30. Раскройте двойным щелчком свойство Font (шрифт), установите свойство шрифта Height(высота) равным 10, затем также двойным щелчком раскройте подсвойство Style (стиль) и установите в trueсвойство fsBold(жирный). Затем перейдите в форму, щелкнув на ней курсором мыши. Выделение с кнопки будет снято.

7.Над кнопкой РАСЧЕТ поместите на форме панель Panel1. На странице Стандарт палитры компонентов пиктограмма панели – вторая справа. Результат расчета по формуле будем выводить в панель, и поэтому, перейдя в Инспектор Объектов, очистите свойство Caption у панели. Высоту шрифта установите равной 20. Поварьируйте такими свойствами панели, как BevelInnerи BevelOuter, которые определяют вид (утопленный – bvLoweredили выпуклый – bvRaised)основного поля и рамки панели. Установите BevelInner= bvLoweredи BevelOuter= bvRaised.

8.Над панелью поместите метку Label1 (на странице Стандарт – четвертая слева). Укажите на метке надпись РЕЗУЛЬТАТ жирным шрифтом, высотой 20.

9.Перенесите в верхнюю часть формы со страницы Дополнительно два окна редактирования с присоединенными к ним метками LabeledEdit, расположив их на одной горизонтали. Измените надписи в метках компонентов LabeledEditна ЗНАЧЕНИЕ X и ЗНАЧЕНИЕ Y соответственно. Для этого щелкните на символе ‘+’ в свойстве EditLabelэтих компонентов и измените надпись в свойстве Caption раскрывшихся списков свойств меток на ЗНАЧЕНИЕ X и ЗНАЧЕНИЕ Y соответственно. Задайте для меток жирный шрифт высотой 10. Закройте свойствоEditLabel,щелкнув на символе ‘-’ перед этим свойством. Затем высоте шрифта присвойте значение 10, а свойству Text компонентов - значения 1,3 и 5,6 соответственно.

10. Выше окон редактирования с метками, на одной вертикали с кнопкой, панелью и меткой, перенесите на форму еще одну метку Label2, в свойстве Captionкоторой запишите программируемую формулу так, чтобы она легко читалась на экране.

11.  Выделите кнопку РАСЧЕТ на форме, щелкнув на ней курсором мыши. Перейдите в Инспектор Объектов, откройте в нем страницу событий (События), найдите (второе сверху) событие кнопки OnClick (щелчок) и сделайте двойной щелчок в окне справа от имени этого события. Это стандартный способ задания обработчиков любых событий. Но перейти в обработчик события OnClick(только этого события) можно и иначе: достаточно сделать двойной щелчок на кнопке. В обоих случаях окажетесь в окне Редактора Кода и увидите там функцию с заголовком, который складывается из имени класса формы (TForm1), имени компонента (Button1) и имени события без префикса On (Click). Курсор находится в позиции, с которой вписывается обработчик события. Например, в случае формулы

                                

 

он может выглядеть так (курсив):

void __fastcall TForm1::Button1Click(TObject *Sender)

{

double x,y,z;

x=StrToFloat(LabeledEdit1->Text);

y=StrToFloat(LabeledEdit2->Text);

z=(exp(x*x+2.37)-pow(x,1.5))/sqrt(fabs(y*y*y+atan2(y,x)));

Panel1->Caption="z="+FloatToStr(z);

}

12. Перейдите в этом файле выше и после директивы #include”Formula.h” добавьте директиву #include <math.h>.

13. Сохраните проект быстрой кнопкой Сохранить все и запустите приложение на выполнение командой Запуск|Запустить или нажмите соответствующую быструю кнопку, или нажмите «горячую» клавишу F9. После недолгой компиляции, сопровождающейся временным появлением на экране окна компилятора, появится окно приложения. Щелкнув на кнопке РАСЧЕТ, в панели получите результат выполнения приложения (Рис.2). Очевидно, нужен форматированный вывод результата. Для перехода в окно Редактора Кода закройте окно с результатом щелчком на крестике в правом верхнем углу формы.

14. Введите форматированный вывод в строку в обработчике. Для этого используется функция FloatToStrF с синтаксисом:       

 System::AnsiString FloatToStrF(Extended Value,

                          TFloatFormat Format, int Precision, int Digits).

    Число Value функция преобразует в строку с помощью формата типа TFloatFormat с синтаксисом: enum TFloatFormat{ffGeneral, ffExponent, ffFixed, ffNumber, ffCurrency};

 

                                  

Рис.2 – результат выполнения без форматирования

 

        Возможные значения формата определяют следующие правила форматирования:

ffGeneral Основной числовой формат. Число преобразуется по формату с фиксированной точкой или научному в зависимости от того, какой из них оказывается короче. Начальные нули удаляются, десятичная точка ставится только при необходимости. Фиксированный формат используется, если число разрядов слева от точки не больше указанной точности Precisionи если значение не меньше 0.00001. В противном случае используется научный формат, в котором параметр Digitsопределяет число разрядов степени – от 0 до 4
ffExponent Научный формат. Число преобразуется в строку вида “–d.ddd…E+dddd”. Общее число цифр, включая одну перед десятичной точкой, задается параметром Precision. После символа “E” всегда следует знак “+” или “–“ и до четырех цифр. Параметр Digits определяет минимальное число разрядов степени – от 0 до 4
ffFixed Формат с фиксированной точкой. Число преобразуется в строку “–ddd.ddd…”. По крайней мере одна цифра всегда предшествует десятичной точке. Число цифр после десятичной точки задается параметром Digits, который может лежать в пределах от 0 до 18. Если число разрядов слева от десятичной точки больше указанного параметром Precision, то используется научный формат

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

    Panel1->Caption=”z=”+FloatToStrF(z,ffExponent,5,2);

    После ввода команды Сохранить все запустите приложение на выполнение (Рис.3).

 

                         

Рис.3 – результат выполнения с форматированием

 

    Теперь в окна редактирования можно вводить значения  и (между целой и дробной частью числа ставьте запятую!) и получать результат , нажимая на кнопку РАСЧЕТПоэкспериментируйтесформатами ffGeneral и ffFixed.

15. Выйдите из среды C++Builder, щелкнув на крестике в правом верхнем углу формы.

ЛАБОРАТОРНАЯ  РАБОТА  1

ФОРМИРОВАНИЕ И ОБРАБОТКА ДИНАМИЧЕСКИХ МАССИВОВ

 

ОДНОМЕРНЫЕ МАССИВЫ

    Формирование динамического массива осуществляется в два этапа: на первом – выделяют под массив динамическую память, на втором – инициализируют (заполняют данными) выделенную память. После обработки массива и получения результатов использованную память необходимо освобождать. Выделение и освобождение динамической памяти под массив производится по указателю при помощи операций new и delete соответственно. Контроль за правильностью выполнения операции выделения динамической памяти осуществляется с помощью макроса assert, определенного в файле <assert.h>. Например,

                                          int n, *iptr; // n – размер массива

------------ инициализация n -------------

                                          iptr = new int[n];

                                          assert(iptr!=0);

           //  инициализация элементов массива случайными числами

           // в диапазоне значений от -9 до 9

             for(int i=0: i<n; i++)

iptr[i]= (rand()-16383)%10; }

              --------- обработка динамического массива --------

                                          delete[]iptr;

                                          iptr=0;

    Операция newвыделяет непрерывный участок динамической памяти под массив длиной n, для целых чисел, и возвращает адрес этого участка, т.е. адрес элемента массива с индексом 0 – iptr[0]. Если память не выделена, то значение указателя iptr окажется равным нулю, а значение выражения iptr!=0 – ложным (нулевым). Тогда макрос assert прерывает выполнение программы. При завершении работы выводится сообщение об ошибке вида: Assertion failed: expression, file <имя файла>, line <номер строки>. После того, как отладка программы будет закончена и макросы assert будут больше не нужны, в начале программы достаточно добавить строку #define NDEBUG вместо того, чтобы удалять в программе каждый макрос assert вручную. Операция delete объявляет участок памяти под массивом свободным. После применения операции deleteуказатель рекомендуется обнулять, с целью защиты программного продукта.

ДВУМЕРНЫЕ МАССИВЫ (МАТРИЦЫ)

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

              int n, m, **iptr; // n – число строк, m – число столбцов матрицы

------------ инициализация n, m -------------

              // выделение памяти под массив указателей на строки

              iptr=new int*[n];

              assert(iptr!=0);        

                   for(int i=0; i<n; i++) {

                       // выделение памяти под  i – ю строку

                       iptr[i]=new int[m];

assert(iptr[i]!=0);

for(int j=0; j<m; j++)

// инициализация строк матрицы случайными

// числами в диапазоне значений от -99 до 99

iptr[i][j] = (rand()-16383)%100;}

------------- обработка динамической матрицы ------------

              for(int i=0: i<n; i++)

                       // освобождение памяти под i – й строкой

                       delete[]iptr[i];

              // освобождение памяти под массивом указателей на строки

              delete[]iptr;

              iptr=0;

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

              int n, m, **iptr; // n – число строк, m – число столбцов матрицы

------------ инициализация n, m -------------

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

              iptr=new int*[m];

              assert(iptr!=0);        

                   for(int j=0; j< m; j++) {

                       // выделение памяти под j – й столбец

                       iptr[j]=new int[n]

assert(iptr[j]!=0);

for(int i=0: i<n; i++)

// инициализация столбцов матрицы случайными

// числами в диапазоне значений от -99 до 99

iptr[j][i]= (rand()-16383)%100; }

------------- обработка динамической матрицы ------------

for(int j=0; j<m; j++)

                       // освобождение памяти под j– м столбцом

                       delete[]iptr[j];

              // освобождение памяти под массивом указателей на столбцы

              delete[]iptr;

              iptr=0;

Задания

1.В одномерном массиве нулевые элементы удалить, положительные элементы расставить по убыванию, отрицательные - по возрастанию. Получить зависимость затрат машинного времени от размера массива.

2.В матрице удалить строки с последними отрицательными элементами, а затем добавить строку из сумм элементов по столбцам.

Проектирование приложения.

Выбор, размещение и задание свойств  компонентов.


Дата добавления: 2018-05-13; просмотров: 480; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!