Разработка программы создания и уничтожения объектов в среде C++Builder
Разработка прикладной программы для операций создания и уничтожения объектов в системе визуального объектно-ориентированного программирования C++Builder. Алгоритм работы программы, набор функций и операторов, компонент и модулей, кнопки событий.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 16.08.2012 |
Размер файла | 672,5 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Содержание
- Введение
- 1. Постановка задачи
- 2. Алгоритм работы программы
- 3. Средства разработки
- 4. Пошаговое описание разработки приложения
- Шаг 1
- Шаг 2
- Шаг 3
- Шаг 4
- Шаг 5
- Шаг 6
- Шаг 7
- Шаг 8
- 5. Код программы
- Листинг 1. Код основного модуля Unit1.cpp
- Листинг 2. Код header-файла основного модуля программы Unit1.h
- Листинг 3. Код модуля обработки обычных/десятичных дробей
- Введение
- Система визуального объектно-ориентированного программирования C++Builder была выбрана для реализации проекта, потому что она позволяет создавать прикладные программы, основанные на принципах взаимодействия объектов. Известно, что совокупность объектов в качестве кнопок, разделов меню, окон редактирования, списков ждут обработчиков событий. При выполнении событий объекты получают сообщения и реагируют на них: выполняют некоторые вычисления, разворачивают список, заносят символы в окно редактирования. Определим объект как некую совокупность данных и способов работы с ними. Важнейшее значение имеют принципы скрытия данных, заключающиеся в том, что внешним объектам и пользователю прямой доступ к данным, как правило, запрещен. Во-первых, для надежного функционирования объекта надо поддерживать целостность и непротиворечивость данных. Во-вторых, необходимо изолировать внешние объекты от особенностей внутренней реализации данных. Чтобы выдержать принцип скрытия данных, в объекте обычно определяются процедуры и функции (методы), обеспечивающие все необходимые операции с данными: их чтение, преобразование, запись. Совокупность данных и методов называется свойством. Свойства можно устанавливать в процессе проектирования, их можно изменять программно во время выполнения прикладной программы. Помимо методов, работающих с отдельными данными, в объекте имеются методы, работающие со всей их совокупностью, меняющие их структуру. Таким образом, объект является совокупностью свойств и методов. Средой взаимодействия объектов являются сообщения, генерируемые в результате различными событиями, которые могут наступать вследствие работы самих объектов. В каждом объекте определено множество событий, на которые он может реагировать. Внешнее управление объектом осуществляется через обработчики событий. Эти обработчики обращаются к методам и свойствам объекта. Начальные значения данных объекта могут задаваться также в процессе проектирования установкой различных свойств.
- Представление о программе как о некоторой фиксированной совокупности объектов не является полным. Программа -- это не просто какая-то предопределенная совокупность объектов. В процессе работы объекты могут создаваться и уничтожаться. Структура программы является динамическим образованием, меняющимся в процессе выполнения. Основная цель создания и уничтожения объектов -- экономия ресурсов компьютера и, прежде всего, памяти.
- 1. Постановка задачи
- Написать программу, выполняющую функции инженерного калькулятора. Программа также может выполнять некоторые иные функции.
- Заявленные функции:
- Выполнение простых арифметических операций
- Выполнение прямых и обратных тригонометрических операций, в системах Degree/Radian/Grad
- Выполнение операций "единица на число"
- Выполнение операций возведения в степень
- Выполнение операций с плавающей точкой
- Работа с ячейками памяти (запись/чтение)
- Перевод чисел из одной системы счисления в другую
- Работа с дробями: перевод из обыкновенной дроби в десятичную и наоборот
- В данную версию программы по причине нехватки времени не вошли следующие из задуманных функций: конвертор величин, модуль отрисовки графиков простых функций, статистические операции, некоторые специфические инженерные расчеты (электрические)
- 2. Алгоритм работы программы
- Все операции производятся над числами, записанными в текстовой строке поля Edit4. Для ввода значения в поле при нажатии кнопки происходит прибавление символа к уже существующей строке. Также для реализации многих функций, таких, как перевод величин из одной системы счисления в другую, расчет тригонометрических функций в Degree/Radian/Grad, включение вторичных (инверсных) функций, операции с плавающей точкой предусмотрены переменные, определяющие текущее состояние приложения:
- SecondState - состояние, определяющее, включен ли режим инверсных функций
- EEState - состояние, определяющее, включен ли режим ввода множителя
- PMState - состояние, определяющее отрицательная ли степень числа или нет
- DotState - состояние, определяющее, содержится ли в текущем числе разделитель целой и дробной части
- OState - состояние, определяющее, включена ли какая-либо операция, или нет. Необходим для операций, в которых фигурируют два числа (простые арифметические, возведение числа в степень)
- DRGState - состояние, определяющее положение системы Degree/Radian/Grad
- SSState - состояние, определяющее текущую систему счисления
- OpCod - состояние, определяющее код операции. Дело в том, что для операций над двумя числами при нажатии кнопки со знаком операции передается этой переменной свой код, а сами операции производятся при нажатии клавиши "="
- Особенность: при переводе из одной системы счисления в другую, число в текущей файловой системе переводится сначала в десятичную систему, а после уже в требуемую. Это сделано для облегчения операций над этими числами, так как все операции производятся над числами в десятичной системе счисления. Также при конвертации учитывается только целая часть числа, дробная же никак не фигурирует. Надеюсь, в следующих версиях программы удасться изменить это в лучшую сторону.
- Общий принцип работы с дробными числами состоит в нахождении наибольшего общего делителя числителя и знаменателя, и последующего деления их на НОД. Таким образом мы приводим систему к неприводимому состоянию. Перевод десятичных дробей осуществляется путем взятия дробной части, нахождения НОД ее и множителя 10n, где n - число знаков в дробной части, и последующего деления на НОД. Также в редакторе реализованы простые арифметические операции над дробями, перевод числа из основного окна, а также результатов в основное окно.
- 3. Средства разработки
- 1. PageControl - многостраничный компонент
- Таблица №1
- 2. Label - метка
- Таблица №2
Свойство |
Описание |
|
ActivePage |
Задает активную страницу |
|
Align |
Способ выравнивания многостраничного компонента в пределах владельца. |
|
MultiLine |
Если равно true, то закладки располагаются в несколько рядов |
|
Pages |
Массив страниц. Свойство Pages доступно только из программы. |
|
PageCount |
Общее количество страниц. Доступно только из программы |
|
TabWidth, TabHeight |
Ширина и высота закладки. Если эти свойства равны нулю, то ширина и высота каждой закладки подбираются автоматически по ширине и высоте содержащегося на ней текста |
Свойство |
Объявление / Описание |
|
AutoSize |
Если это свойство установлено в true, то вертикальный и горизонтальный размеры компонента определяются размером надписи. Если же AutoSize равно false, то выравнивание текста внутри компонента определяется свойством Alignment |
|
Caption |
AnsiStrmeCaption |
|
Строка текста, отображаемая меткой. Может содержать символ ускоренного доступа к элементу, указанному свойством Focus-Control |
||
Color |
Определяет цвет фона метки |
|
FocusControl |
Определяет оконный компонент, получающий фокус при нажатии пользователем клавиши быстрого доступа метки (см. пояснения выше в описании Label) |
|
Font |
Graphics: :TFont* Font Определяет атрибуты шрифта |
|
Layout |
TTextLayout Layout Определяет выравнивание текста в поле метки по вертикали |
|
ParentColor |
bool ParentColor Определяет (при значении true), что для фона метки будет заимствован цвет родительского компонента. В этом случае фон метки не заметен и видна только ее надпись - Caption |
|
ShowAccelChar |
bool ShowAccelChar Определяет, как амперсанд отображается в тексте метки (см. пояснения выше в описании Label) |
|
Wordwrap |
Указывает, переносится ли текст на новую строку, если он превышает ширину метки, а высота метки позволяет разместить в ней несколько строк |
3. Button - кнопка
Таблица №3
Свойство |
Объявление / Описание |
|
Action |
Определяет действие, связанное с данной кнопкой |
|
Cancel |
Определяет, будет ли обрабатываться событие кнопки OnClick при нажатии клавиши Esc |
|
Caption |
Надпись на кнопке |
|
Default |
Определяет, что нажатие пользователем клавиши ввода Enter будет эквивалентно нажатию на данную кнопку, даже если данная кнопка в этот момент не находится в фокусе |
|
ModalResult |
Определяет значение свойства модальной формы ModalResult, задаваемое автоматически при щелчке на данной кнопке |
|
TabStop |
Определяет возможность доступа пользователя к кнопке с помощью клавиши Tab |
Таблица №4
Событие |
Описание |
|
OnClick |
Соответствует щелчку мыши на кнопке или нажатию клавиш быстрого доступа |
4. MainMenu - главное меню
Таблица №5
Свойство |
Объявление / Описание |
|
AutoHotKeys |
Определяет, могут ли «горячие» клавиши элементов меню устанавливаться автоматически |
|
AutoLine Reduction |
Указывает, проверяет ли и исправляет ли C++Builder появление в начале или конце подменю разделителей или двух разделителей подряд |
|
AutoMerge |
Определяет, объединятся ли главные меню вспомогательных форм с главным меню основной формы |
|
Images |
Определяет список изображений, которые могут отображаться в разделах меню слева от надписи. Изображения конкретных разделов указываются свойством Imagelndex (индексом массива Images) разделов меню Items типа TMenuItem |
|
Items |
Список элементов (разделов) меню типа TMenuItem |
5. Memo - многострочное окно редактирования
Таблица №6
Свойство |
Объявление / Описание |
|
Align |
Определяет способ выравнивания компонента в контейнере (родительском компоненте) |
|
Alignment |
Управляет выравниванием текста: taLeftJustify - влево, ta-RightJustify - вправо, taCenter - по центру. Значение по умолчанию - влево |
|
Anchors |
Определяет привязку данного компонента к родительскому при изменении размеров последнего |
|
CanUndo |
Указывает, содержит ли компонент изменения, которые можно отменить. Доступ только для чтения |
|
Font |
Graphics: :TFont* Font Определяет атрибуты шрифта |
|
Lines |
Строки текста - объект типа TStrines |
|
MaxLength |
Указывает максимальное количество символов, которое пользователь может вводить в компонент. При значении 0 длина текста неограничена |
|
Modified |
Указывает, редактировался ли пользователем текст в компоненте |
|
PopupMenu |
Определяет всплывающее меню, связанное с данным компонентом |
|
Readonly |
Указывает, может ли пользователь изменять текст в компоненте |
|
SelLength |
Определяет количество выделенных символов в тексте |
|
SelStart |
Указывает позицию первого выделенного символа в тексте или, если выделения нет, то позицию курсора |
|
Text |
Текст окна в виде одной строки |
|
WantReturns |
Указывает, можно ли вставить в текст символы возврата каретки |
|
WantTabs |
Указывает, можно ли вставить в текст символы табуляции |
|
Wordwrap |
Указывает, переносится ли текст на новую строку, если он превышает ширину компонента |
Основные события
Таблица №7
Событие |
Описание |
|
OnChange |
Наступает, когда текст в окне может быть изменился. Свойство Modified показывает, действительно ли произошло изменение |
|
OnKeyDown |
Событие наступает при нажатии пользователем любой клавиши. В обработчике можно распознать нажатую клавишу |
|
OnKevPress |
Событие наступает при нажатии пользователем клавиши символа. В обработчике можно распознать вводимый символ и при необходимости изменить его или запретить его ввод |
6. Image - контейнер графического изображения
Таблица №8
Свойство |
Объявление / Описание |
|
AutoSize |
Указывает, изменяется ли автоматически размер компонента, подстраиваясь под размер изображения. По умолчанию false -- не подстраивается |
|
Canvas |
Определяет поверхность (холст, канву) для рисования пером Реп и кистью Brush, для наложения друг на друга нескольких изображений. Доступ только для чтения. |
|
Center |
Указывает, должно ли изображение центрироваться в поле компонента, если его размеры меньше размеров поля. При значении false изображение располагается в верхнем левом углу поля. Свойство не действует, если AutoSize установлено в true или если Stretch установлено в true и Picture содержит не пиктограмму |
|
Incremental Display |
Указывает, должно ли изображение частично рисоваться во время медленных операций с большими изображениями. Вместо такого рисования часто можно использовать индикацию процесса обработкой событий OnProgress |
|
Picture |
Определяет отображаемый графический объект типа TPicture. Может загружаться программно или во время проектирования с помощью Picture Editor |
|
Stretch |
Указывает, должны ли изменяться размеры изображения, подго-няясь под размеры компонента. Учтите, что изменение размеров изображения приведет к его искажению, если соотношение сторон графического объекта и компонента Image не одинаково |
7. Edit - Во всех рассматриваемых окнах вводимый и выводимый текст содержится в свойстве Text типа AnsiString. Это свойство можно устанавливать в процессе проектирования или задавать программно. Выравнивание текста, как это имело место в метках и панелях, невозможно. Перенос строк тоже невозможен. Текст, не помещающийся по длине в окно, просто сдвигается и пользователь может перемещаться по нему с помощью курсора. Свойство AutoSize в окнах редактирования имеет смысл, отличный от смысла аналогичного свойства меток: автоматически подстраивается под размер текста только высота, но не ширина окна.
8. PopupMenu - контекстное всплывающее меню
Таблица №9
Свойства |
Описание |
|
Alignment |
Определяет место, в котором появляется меню относительно курсора мыши paLeft - левый верхний угол меню совпадает с позицией кypcopa мыши paCenler - середина верхнего края совпадает с позицией курсора мыши paRight - правый угол меню совпадает с позицией курсора мыши. |
|
AutoPopup |
Если равно true то меню всплывает автоматически после щелчка правой кнопкой мыши. Если равно false то за отображение меню отвечает программист |
|
Items |
Обеспечивает доступ к пунктам меню |
5. Пошаговое описание разработки приложения
Шаг 1.
Приступим к реализации проекта. Выбрав в меню File опцию NewApplication, начнем новый проект: Form1 переименуем в «Расчет генераторов на операционных усилителях», размеры Form1 скорректируем.
Рис. 1 Порядок реализации проекта
Шаг 2.
Расставляем на форме необходимые элементы: элементы Edit - для полей ввода, BitBtn - для реализации функций, Label - для индикации состояний калькулятора, MainMenu - для реализации функций главного меню в приложении
Рис. 2 Форма с расположенными на ней элементами
прикладная программа объект визуальный программирование
На форме присутствует меню со следующими пунктами:
Рис. 3 Элементы меню
Шаг 3.
Переименуем компоненты в соответствии с их функцией, для облегчения ориентирования при написании кода: - Btn2nd
- BtnC
- BtnNazad
- BtnDRG
- BtnLOG
- BtnLN
- BtnHYP
- BtnSIN
- BtnCOS
- BtnTAN
- BtnPi
- Btn1toX
- BtnX2
- BtnX3
- BtnYinX
- BtnDEC
- BtnBIN
- BtnOCT
- BtnHEX
- BtnEE
- BtnLS
- BtnPS
- BtnDel
- Btn0
- BtnDot
- BtnPM
- Btn1
- Btn2
- Btn3
- Btn4
- Btn5
- Btn6
- Btn7
- Btn8
- Btn9
- Btn_A
- Btn_B
- Btn_C
- Btn_D
- Btn_E
- Btn_F
- BtnUmnoj
- BtnMinus
- BtnPlus
- BtnRavno
- L2nd
- LDEG
- LRAD
- LGRAD
- LDEC
- LBIN
- LOCT
- LHEX
Рис. 4 Имена кнопок на форме
Рис. 5 Label1, EditM1, ButtonM1, ButtonMR1, Label2, EditM2, ButtonM2, ButtonMR2, Label3, EditM3, ButtonM3, ButtonMR3
Рис. 6 Edit4
Шаг 4.
Реализуем переключение функций в приложении (кнопка Btn2nd)
Для этого обработаем событие OnClick кнопки Btn2nd (смотри листинг программы)
Рис.7 Окно программы с включенным выбором вторичных функций
Шаг 5.
Определим действия для каждой кнопки (смотреть листинг программы)
Далее следует несколько примеров работы функций:
Рис. 8 Реализация операции сложения
Рис. 9 Реализация операции синус
Рис. 10 Реализация перевода чисел в различные системы счисления
Шаг 6.
Создадим новую форму Form2, в которую поместим элементы для отображения окна "О программе". Сюда входят компоненты TImage и компоненты Label
Рис. 11 Форма окна "О программе"
Для вызова этого окна в пункте меню "Справка -> О программе" создадим обработчик вызова формы:
void __fastcall TForm1::N8Click(TObject *Sender)
{
Form2->Visible=true;
}
Шаг 7.
Аналогичным образом создадим новую форму Form3, куда поместим элементы, необходимые для реализации перевода обыкновенных дробей в десятичные и обратно
Рис. 12 Форма окна редактора дробных чисел
На данной форме присутствуют 8 элементов TEdit, 20 элементов TButton, 4 элемента TGroupBox
Элементы имеют следующие имена:
Элементы группы "Число1. Правильная дробь":
Edit1, Edit2, Edit3
"В правильную дробь" - Button1
"В десятичную дробь" - Button2
"В основное окно" - Button3
Элементы группы "Число2. Правильная дробь":
Edit5, Edit6, Edit7
"В правильную дробь" - Button9
"В десятичную дробь" - Button10
"В основное окно" - Button11
Элементы группы "Число1. Десятичная дробь":
Edit4
"В правильную дробь" - Button4
"В десятичную дробь" - Button5
"В основное окно" - Button6
"Из основного окна" - Button7
"Сброс" - Button9
Элементы группы "Число2. Десятичная дробь":
Edit8
"В правильную дробь" - Button12
"В десятичную дробь" - Button13
"В основное окно" - Button14
"Из основного окна" - Button15
"Сброс" - Button16
"+" - Button17
"-" - Button19
"*" - Button20
"/" - Button21
Для вызова этого окна из пункта меню "Дополнительно -> Работа с дробями" создадим обработчик вызова формы:
void __fastcall TForm1::N6Click(TObject *Sender)
{
Form3->Visible=true;
}
Шаг 8.
Назначим кнопкам формы действия, соответствующие необходимым функциям. Общий принцип работы с дробными числами состоит в нахождении наибольшего общего делителя числителя и знаменателя, и последующего деления их на НОД. Таким образом мы приводим систему к неприводимому состоянию. Перевод десятичных дробей осуществляется путем взятия дробной части, нахождения НОД ее и множителя 10n, где n - число знаков в дробной части, и последующего деления на НОД. Также в редакторе реализованы простые арифметические операции над дробями, перевод числа из основного окна, а также результатов в основное окно.
С детальной реализацией алгоритма можно ознакомиться в листинге программы.
Рис. 13 Пример работы обработчика дробных чисел
5. Код программы
Листинг 1. Код основного модуля Unit1.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#include <math>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "XPManifest"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
unsigned int ConvOp;
div_t Result;
void __fastcall TForm1::Btn1Click(TObject *Sender)
{
AnsiString Data;
if(OState==1)
{Edit4->Text="1";
OState=0;
}
else
{
if(EEState==1)
{
Data=Edit4->Text;
Data[Data.Length()-1]=Data[Data.Length()];
Data[Data.Length()]='1';
Edit4->Text=Data;
}
else
{if(Edit4->Text=="0")
Edit4->Text="1";
else
Edit4->Text=Edit4->Text+"1";
}
}
SecondFClear();
StateAnalis();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BtnEEClick(TObject *Sender)
{
if(EEState==1)
EEState=0;
else
{EEState=1;
Edit4->Text=Edit4->Text+"e+00";
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N8Click(TObject *Sender)
{
Form2->Visible=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn2ndClick(TObject *Sender)
{
if(SecondState==0)
SecondState=1;
else SecondState=0;
StateAnalis();
if(SecondState==0)
{BtnDRG->Caption="DRG";
BtnLOG->Caption="LOG";
BtnLN->Caption="LN";
BtnNazad->Caption="<---";
BtnHYP->Caption="HYP";
BtnSIN->Caption="SIN";
BtnCOS->Caption="COS";
BtnTAN->Caption="TAN";
BtnC->Caption="C";
BtnPi->Caption="Pi";
Btn1toX->Caption="1/x";
BtnX2->Caption="x^2";
BtnX3->Caption="x^3";
BtnYinX->Caption="x^y";
BtnDEC->Caption="DEC";
BtnEE->Caption="EE";
BtnLS->Caption="(";
BtnPS->Caption=")";
BtnDel->Caption="/";
BtnBIN->Caption="BIN";
Btn7->Caption="7";
Btn8->Caption="8";
Btn9->Caption="9";
BtnUmnoj->Caption="*";
BtnHEX->Caption="HEX";
Btn4->Caption="4";
Btn5->Caption="5";
Btn6->Caption="6";
BtnMinus->Caption="-";
BtnOCT->Caption="OCT";
Btn1->Caption="1";
Btn2->Caption="2";
Btn3->Caption="3";
BtnPlus->Caption="+";
Btn0->Caption="0";
BtnDot->Caption=".";
BtnPM->Caption="±";
BtnRavno->Caption="=";
}
else
{BtnDRG->Caption="DRG>";
BtnLOG->Caption="10^x";
BtnLN->Caption="e^x";
BtnNazad->Caption="";
BtnHYP->Caption="";
BtnSIN->Caption="SIN^-1";
BtnCOS->Caption="COS^-1";
BtnTAN->Caption="TAN^-1";
BtnC->Caption="CE";
BtnPi->Caption="";
Btn1toX->Caption="";
BtnX2->Caption="sqr(x)";
BtnX3->Caption="qr(x)";
BtnYinX->Caption="x ro y";
BtnDEC->Caption="FLO";
BtnEE->Caption="";
BtnLS->Caption="";
BtnPS->Caption="";
BtnDel->Caption="p>r";
BtnBIN->Caption="SCI";
Btn7->Caption="7";
Btn8->Caption="8";
Btn9->Caption="9";
BtnUmnoj->Caption="r>p";
BtnHEX->Caption="ENG";
Btn4->Caption="4";
Btn5->Caption="5";
Btn6->Caption="6";
BtnMinus->Caption="";
BtnOCT->Caption="%";
Btn1->Caption="1";
Btn2->Caption="2";
Btn3->Caption="3";
BtnPlus->Caption="";
Btn0->Caption="0";
BtnDot->Caption=".";
BtnPM->Caption="±";
BtnRavno->Caption="=";
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BtnDRGClick(TObject *Sender)
{
if(DRGState!=2)
DRGState++;
else DRGState=0;
StateAnalis();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
StateAnalis();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BtnDECClick(TObject *Sender)
{
Btn0->Enabled=1;
Btn1->Enabled=1;
Btn2->Enabled=1;
Btn3->Enabled=1;
Btn4->Enabled=1;
Btn5->Enabled=1;
Btn6->Enabled=1;
Btn7->Enabled=1;
Btn8->Enabled=1;
Btn9->Enabled=1;
Btn_A->Enabled=0;
Btn_B->Enabled=0;
Btn_C->Enabled=0;
Btn_D->Enabled=0;
Btn_E->Enabled=0;
Btn_F->Enabled=0;
BtnDot->Enabled=1;
BtnPM->Enabled=1;
Edit4->Text=SSConvToDec(Edit4->Text, SSState);
SSState=0;
StateAnalis();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BtnBINClick(TObject *Sender)
{
Btn0->Enabled=1;
Btn1->Enabled=1;
Btn2->Enabled=0;
Btn3->Enabled=0;
Btn4->Enabled=0;
Btn5->Enabled=0;
Btn6->Enabled=0;
Btn7->Enabled=0;
Btn8->Enabled=0;
Btn9->Enabled=0;
Btn_A->Enabled=0;
Btn_B->Enabled=0;
Btn_C->Enabled=0;
Btn_D->Enabled=0;
Btn_E->Enabled=0;
Btn_F->Enabled=0;
BtnDot->Enabled=0;
BtnPM->Enabled=0;
Edit4->Text=SSConvToNeeded(Edit4->Text, SSState,1);
SSState=1;
StateAnalis();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BtnHEXClick(TObject *Sender)
{
Btn0->Enabled=1;
Btn1->Enabled=1;
Btn2->Enabled=1;
Btn3->Enabled=1;
Btn4->Enabled=1;
Btn5->Enabled=1;
Btn6->Enabled=1;
Btn7->Enabled=1;
Btn8->Enabled=1;
Btn9->Enabled=1;
Btn_A->Enabled=1;
Btn_B->Enabled=1;
Btn_C->Enabled=1;
Btn_D->Enabled=1;
Btn_E->Enabled=1;
Btn_F->Enabled=1;
BtnDot->Enabled=0;
BtnPM->Enabled=0;
Edit4->Text=SSConvToNeeded(Edit4->Text, SSState,2);
SSState=2;
StateAnalis();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn210Click(TObject *Sender)
{
SSState=4;
StateAnalis();
Btn0->Enabled=1;
Btn1->Enabled=1;
Btn2->Enabled=0;
Btn3->Enabled=0;
Btn4->Enabled=0;
Btn5->Enabled=0;
Btn6->Enabled=0;
Btn7->Enabled=0;
Btn8->Enabled=0;
Btn9->Enabled=0;
Btn_A->Enabled=0;
Btn_B->Enabled=0;
Btn_C->Enabled=0;
Btn_D->Enabled=0;
Btn_E->Enabled=0;
Btn_F->Enabled=0;
BtnDot->Enabled=0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BtnOCTClick(TObject *Sender)
{
Btn0->Enabled=1;
Btn1->Enabled=1;
Btn2->Enabled=1;
Btn3->Enabled=1;
Btn4->Enabled=1;
Btn5->Enabled=1;
Btn6->Enabled=1;
Btn7->Enabled=1;
Btn8->Enabled=0;
Btn9->Enabled=0;
Btn_A->Enabled=0;
Btn_B->Enabled=0;
Btn_C->Enabled=0;
Btn_D->Enabled=0;
Btn_E->Enabled=0;
Btn_F->Enabled=0;
BtnDot->Enabled=0;
BtnPM->Enabled=0;
Edit4->Text=SSConvToNeeded(Edit4->Text, SSState,3);
SSState=3;
StateAnalis();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn2Click(TObject *Sender)
{
AnsiString Data;
if(OState==1)
{Edit4->Text="2";
OState=0;
}
else
{
if(EEState==1)
{
Data=Edit4->Text;
Data[Data.Length()-1]=Data[Data.Length()];
Data[Data.Length()]=50;
Edit4->Text=Data;
}
else
{if(Edit4->Text=="0")
Edit4->Text="2";
else
Edit4->Text=Edit4->Text+"2";
}
}
SecondFClear();
StateAnalis();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn3Click(TObject *Sender)
{
AnsiString Data;
if(OState==1)
{Edit4->Text="3";
OState=0;
}
else
{
if(EEState==1)
{
Data=Edit4->Text;
Data[Data.Length()-1]=Data[Data.Length()];
Data[Data.Length()]=51;
Edit4->Text=Data;
}
else
{if(Edit4->Text=="0")
Edit4->Text="3";
else
Edit4->Text=Edit4->Text+"3";
}
}
SecondFClear();
StateAnalis();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn4Click(TObject *Sender)
{
AnsiString Data;
if(OState==1)
{Edit4->Text="4";
OState=0;
}
else
{
if(EEState==1)
{
Data=Edit4->Text;
Data[Data.Length()-1]=Data[Data.Length()];
Data[Data.Length()]=52;
Edit4->Text=Data;
}
else
{if(Edit4->Text=="0")
Edit4->Text="4";
else
Edit4->Text=Edit4->Text+"4";
}
}
SecondFClear();
StateAnalis();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn5Click(TObject *Sender)
{
AnsiString Data;
if(OState==1)
{Edit4->Text="5";
OState=0;
}
else
{
if(EEState==1)
{
Data=Edit4->Text;
Data[Data.Length()-1]=Data[Data.Length()];
Data[Data.Length()]=53;
Edit4->Text=Data;
}
else
{if(Edit4->Text=="0")
Edit4->Text="5";
else
Edit4->Text=Edit4->Text+"5";
}
}
SecondFClear();
StateAnalis();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn6Click(TObject *Sender)
{
AnsiString Data;
if(OState==1)
{Edit4->Text="6";
OState=0;
}
else
{
if(EEState==1)
{
Data=Edit4->Text;
Data[Data.Length()-1]=Data[Data.Length()];
Data[Data.Length()]=54;
Edit4->Text=Data;
}
else
{if(Edit4->Text=="0")
Edit4->Text="6";
else
Edit4->Text=Edit4->Text+"6";
}
}
SecondFClear();
StateAnalis();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn7Click(TObject *Sender)
{
AnsiString Data;
if(OState==1)
{Edit4->Text="7";
OState=0;
}
else
{
if(EEState==1)
{
Data=Edit4->Text;
Data[Data.Length()-1]=Data[Data.Length()];
Data[Data.Length()]=55;
Edit4->Text=Data;
}
else
{if(Edit4->Text=="0")
Edit4->Text="7";
else
Edit4->Text=Edit4->Text+"7";
}
}
SecondFClear();
StateAnalis();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn8Click(TObject *Sender)
{
AnsiString Data;
if(OState==1)
{Edit4->Text="8";
OState=0;
}
else
{
if(EEState==1)
{
Data=Edit4->Text;
Data[Data.Length()-1]=Data[Data.Length()];
Data[Data.Length()]=56;
Edit4->Text=Data;
}
else
{if(Edit4->Text=="0")
Edit4->Text="8";
else
Edit4->Text=Edit4->Text+"8";
}
}
SecondFClear();
StateAnalis();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn9Click(TObject *Sender)
{
AnsiString Data;
if(OState==1)
{Edit4->Text="9";
OState=0;
}
else
{
if(EEState==1)
{
Data=Edit4->Text;
Data[Data.Length()-1]=Data[Data.Length()];
Data[Data.Length()]=57;
Edit4->Text=Data;
}
else
{if(Edit4->Text=="0")
Edit4->Text="9";
else
Edit4->Text=Edit4->Text+"9";
}
}
SecondFClear();
StateAnalis();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BtnPMClick(TObject *Sender)
{
double a;
a=StrToFloat(Edit4->Text);
a=0-a;
Edit4->Text=FloatToStr(a);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BtnCClick(TObject *Sender)
{
Btn0->Enabled=1;
Btn1->Enabled=1;
Btn2->Enabled=1;
Btn3->Enabled=1;
Btn4->Enabled=1;
Btn5->Enabled=1;
Btn6->Enabled=1;
Btn7->Enabled=1;
Btn8->Enabled=1;
Btn9->Enabled=1;
Btn_A->Enabled=0;
Btn_B->Enabled=0;
Btn_C->Enabled=0;
Btn_D->Enabled=0;
Btn_E->Enabled=0;
Btn_F->Enabled=0;
BtnDot->Enabled=1;
BtnPM->Enabled=1;
Edit4->Text="0";
SecondFClear();
OpBuffer1=0;
OpBuffer2=0;
DRGState=0;
SSState=0;
StateAnalis();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BtnDotClick(TObject *Sender)
{
if(DotState==0)
Edit4->Text=Edit4->Text+",";
else;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn0Click(TObject *Sender)
{
if(Edit4->Text!="0"||SSState==4)
Edit4->Text=Edit4->Text+"0";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BtnPlusClick(TObject *Sender)
{
OState=1;
OpBuffer2=OpBuffer1;
OpBuffer1=StrToFloat(Edit4->Text);
OpCod=1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BtnRavnoClick(TObject *Sender)
{
float a;
switch(OpCod)
{
case 0:
{
a=StrToFloat(Edit4->Text);
Edit4->Text=a;
OState=-1;
OpCod=0;
}
break;
case 1:
{
OpBuffer2=OpBuffer1;
OpBuffer1=StrToFloat(Edit4->Text);
OpBuffer1=OpBuffer1+OpBuffer2;
Edit4->Text=FloatToStr(OpBuffer1);
OState=-1;
OpCod=0;
}
break;
case 2:
{
OpBuffer2=OpBuffer1;
OpBuffer1=StrToFloat(Edit4->Text);
OpBuffer1=OpBuffer2-OpBuffer1;
Edit4->Text=FloatToStr(OpBuffer1);
OState=-1;
OpCod=0;
}
break;
case 3:
{
OpBuffer2=OpBuffer1;
OpBuffer1=StrToFloat(Edit4->Text);
OpBuffer1=OpBuffer2*OpBuffer1;
Edit4->Text=FloatToStr(OpBuffer1);
OState=-1;
OpCod=0;
}
break;
case 4:
{
OpBuffer2=OpBuffer1;
OpBuffer1=StrToFloat(Edit4->Text);
OpBuffer1=OpBuffer2/OpBuffer1;
Edit4->Text=FloatToStr(OpBuffer1);
OState=-1;
OpCod=0;
}
break;
case 5:
{
OpBuffer2=OpBuffer1;
OpBuffer1=StrToFloat(Edit4->Text);
OpBuffer1=pow(OpBuffer2,OpBuffer1);
Edit4->Text=FloatToStr(OpBuffer1);
OState=-1;
OpCod=0;
}
break;
}
EEState=0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BtnMinusClick(TObject *Sender)
{
OState=1;
OpBuffer2=OpBuffer1;
OpBuffer1=StrToFloat(Edit4->Text);
OpCod=2;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BtnUmnojClick(TObject *Sender)
{
OState=1;
OpBuffer2=OpBuffer1;
OpBuffer1=StrToFloat(Edit4->Text);
OpCod=3;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BtnDelClick(TObject *Sender)
{
OState=1;
OpBuffer2=OpBuffer1;
OpBuffer1=StrToFloat(Edit4->Text);
OpCod=4;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BtnSINClick(TObject *Sender)
{
if(SecondState==0)
{switch(DRGState)
{
case 0:
{
OpBuffer1=StrToFloat(Edit4->Text);
OpBuffer1=sin(Pi*OpBuffer1/180);
Edit4->Text=FloatToStr(OpBuffer1);
}
break;
case 1:
{
OpBuffer1=StrToFloat(Edit4->Text);
OpBuffer1=sin(OpBuffer1);
Edit4->Text=FloatToStr(OpBuffer1);
}
break;
case 2:
{
OpBuffer1=StrToFloat(Edit4->Text);
OpBuffer1=sin(Pi*OpBuffer1/200);
Edit4->Text=FloatToStr(OpBuffer1);
}
break;
}
}
else
switch(DRGState)
{
case 0:
{
OpBuffer1=StrToFloat(Edit4->Text);
OpBuffer1=180*asin(OpBuffer1)/Pi;
Edit4->Text=FloatToStr(OpBuffer1);
}
break;
case 1:
{
OpBuffer1=StrToFloat(Edit4->Text);
OpBuffer1=asin(OpBuffer1);
Edit4->Text=FloatToStr(OpBuffer1);
}
break;
case 2:
{
OpBuffer1=StrToFloat(Edit4->Text);
OpBuffer1=200*asin(OpBuffer1)/Pi;
Edit4->Text=FloatToStr(OpBuffer1);
}
break;
}
SecondFClear();
StateAnalis();
OState=-1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BtnCOSClick(TObject *Sender)
{
if(SecondState==0)
{switch(DRGState)
{
case 0:
{
OpBuffer1=StrToFloat(Edit4->Text);
OpBuffer1=cos(Pi*OpBuffer1/180);
Edit4->Text=OpBuffer1;
}
break;
case 1:
{
OpBuffer1=StrToFloat(Edit4->Text);
OpBuffer1=cos(OpBuffer1);
Edit4->Text=OpBuffer1;
}
break;
case 2:
{
OpBuffer1=StrToFloat(Edit4->Text);
OpBuffer1=cos(Pi*OpBuffer1/200);
Edit4->Text=OpBuffer1;
}
break;
}
}
else
switch(DRGState)
{
case 0:
{
OpBuffer1=StrToFloat(Edit4->Text);
OpBuffer1=180*acos(OpBuffer1)/Pi;
Edit4->Text=OpBuffer1;
}
break;
case 1:
{
OpBuffer1=StrToFloat(Edit4->Text);
OpBuffer1=acos(OpBuffer1);
Edit4->Text=OpBuffer1;
}
break;
case 2:
{
OpBuffer1=StrToFloat(Edit4->Text);
OpBuffer1=200*acos(OpBuffer1)/Pi;
Edit4->Text=OpBuffer1;
}
break;
}
SecondFClear();
StateAnalis();
OState=-1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BtnTANClick(TObject *Sender)
{
if(SecondState==0)
{switch(DRGState)
{
case 0:
{
OpBuffer1=StrToFloat(Edit4->Text);
OpBuffer1=tan(Pi*OpBuffer1/180);
Edit4->Text=OpBuffer1;
}
break;
case 1:
{
OpBuffer1=StrToFloat(Edit4->Text);
OpBuffer1=tan(OpBuffer1);
Edit4->Text=OpBuffer1;
}
break;
case 2:
{
OpBuffer1=StrToFloat(Edit4->Text);
OpBuffer1=tan(Pi*OpBuffer1/200);
Edit4->Text=OpBuffer1;
}
break;
}
}
else
switch(DRGState)
{
case 0:
{
OpBuffer1=StrToFloat(Edit4->Text);
OpBuffer1=180*atan(OpBuffer1)/Pi;
Edit4->Text=OpBuffer1;
}
break;
case 1:
{
OpBuffer1=StrToFloat(Edit4->Text);
OpBuffer1=atan(OpBuffer1);
Edit4->Text=OpBuffer1;
}
break;
case 2:
{
OpBuffer1=StrToFloat(Edit4->Text);
OpBuffer1=200*atan(OpBuffer1)/Pi;
Edit4->Text=OpBuffer1;
}
break;
}
SecondFClear();
StateAnalis();
OState=-1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn1toXClick(TObject *Sender)
{
if(SecondState==0&&Edit4->Text!="0")
{
OpBuffer1=StrToFloat(Edit4->Text);
OpBuffer1=1/OpBuffer1;
Edit4->Text=OpBuffer1;
}
else
{
//Операции, которые, быть может, будут назначены
//этой кнопке в качестве второй функции:)
}
SecondFClear();
StateAnalis();
OState=-1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BtnX2Click(TObject *Sender)
{
if(SecondState==0)
{
OpBuffer1=StrToFloat(Edit4->Text);
OpBuffer1=pow(OpBuffer1,2);
Edit4->Text=OpBuffer1;
}
else
{
OpBuffer1=StrToFloat(Edit4->Text);
OpBuffer1=pow(OpBuffer1,0.5);
Edit4->Text=OpBuffer1;
}
SecondFClear();
StateAnalis();
OState=-1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BtnX3Click(TObject *Sender)
{
double a=1,b=3;
a=a/b;
if(SecondState==0)
{
OpBuffer1=StrToFloat(Edit4->Text);
OpBuffer1=pow(OpBuffer1,3);
Edit4->Text=OpBuffer1;
}
else
{
OpBuffer1=StrToFloat(Edit4->Text);
OpBuffer1=pow(OpBuffer1,a);
Edit4->Text=OpBuffer1;
}
SecondFClear();
StateAnalis();
OState=-1;
}
void __fastcall TForm1::BtnYinXClick(TObject *Sender)
{
OState=1;
OpBuffer2=OpBuffer1;
OpBuffer1=StrToFloat(Edit4->Text);
OpCod=5;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BtnPiClick(TObject *Sender)
{
Edit4->Text=Pi;
OState=-1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BtnNazadClick(TObject *Sender)
{
if(Edit4->Text.Length()==1)
Edit4->Text=0;
else
Edit4->Text=Edit4->Text.Delete(Edit4->Text.Length(),1);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonM1Click(TObject *Sender)
{
EditM1->Text=Edit4->Text;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonMR1Click(TObject *Sender)
{
Edit4->Text=EditM1->Text;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
EditM2->Text=Edit4->Text;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit4->Text=EditM2->Text;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
EditM3->Text=Edit4->Text;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
Edit4->Text=EditM3->Text;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn_AClick(TObject *Sender)
{
AnsiString Data;
if(OState==1)
{Edit4->Text="A";
OState=0;
}
else
{
if(EEState==1)
{
Data=Edit4->Text;
Data[Data.Length()-1]=Data[Data.Length()];
Data[Data.Length()]='A';
Edit4->Text=Data;
}
else
{if(Edit4->Text=="0")
Edit4->Text="A";
else
Edit4->Text=Edit4->Text+"A";
}
}
SecondFClear();
StateAnalis();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn_BClick(TObject *Sender)
{
AnsiString Data;
if(OState==1)
{Edit4->Text="B";
OState=0;
}
else
{
if(EEState==1)
{
Data=Edit4->Text;
Data[Data.Length()-1]=Data[Data.Length()];
Data[Data.Length()]='B';
Edit4->Text=Data;
}
else
{if(Edit4->Text=="0")
Edit4->Text="B";
else
Edit4->Text=Edit4->Text+"B";
}
}
SecondFClear();
StateAnalis();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn_CClick(TObject *Sender)
{
AnsiString Data;
if(OState==1)
{Edit4->Text="C";
OState=0;
}
else
{
if(EEState==1)
{
Data=Edit4->Text;
Data[Data.Length()-1]=Data[Data.Length()];
Data[Data.Length()]='C';
Edit4->Text=Data;
}
else
{if(Edit4->Text=="0")
Edit4->Text="C";
else
Edit4->Text=Edit4->Text+"C";
}
}
SecondFClear();
StateAnalis();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn_DClick(TObject *Sender)
{
AnsiString Data;
if(OState==1)
{Edit4->Text="D";
OState=0;
}
else
{
if(EEState==1)
{
Data=Edit4->Text;
Data[Data.Length()-1]=Data[Data.Length()];
Data[Data.Length()]='D';
Edit4->Text=Data;
}
else
{if(Edit4->Text=="0")
Edit4->Text="D";
else
Edit4->Text=Edit4->Text+"D";
}
}
SecondFClear();
StateAnalis();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn_EClick(TObject *Sender)
{
AnsiString Data;
if(OState==1)
{Edit4->Text="E";
OState=0;
}
else
{
if(EEState==1)
{
Data=Edit4->Text;
Data[Data.Length()-1]=Data[Data.Length()];
Data[Data.Length()]='E';
Edit4->Text=Data;
}
else
{if(Edit4->Text=="0")
Edit4->Text="E";
else
Edit4->Text=Edit4->Text+"E";
}
}
SecondFClear();
StateAnalis();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn_FClick(TObject *Sender)
{
AnsiString Data;
if(OState==1)
{Edit4->Text="F";
OState=0;
}
else
{
if(EEState==1)
{
Data=Edit4->Text;
Data[Data.Length()-1]=Data[Data.Length()];
Data[Data.Length()]='F';
Edit4->Text=Data;
}
else
{if(Edit4->Text=="0")
Edit4->Text="F";
else
Edit4->Text=Edit4->Text+"F";
}
}
SecondFClear();
StateAnalis();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N6Click(TObject *Sender)
{
Form3->Visible=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BtnHYPClick(TObject *Sender)
{
OState=-1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BtnLOGClick(TObject *Sender)
{
OState=-1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BtnLNClick(TObject *Sender)
{
OState=-1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N4Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
Листинг 2. Код header-файла основного модуля программы Unit1.h
в котором описаны такие функции, как функция сброса приложения в исходное состояние, функция анализа состояний приложения, функция перевода в десятичную систему счисления, функция перевода из одной системы счисления в другую, а также описаны некоторые глобальные переменные:
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Menus.hpp>
#include <ExtCtrls.hpp>
#include <Buttons.hpp>
#include "XPManifest.h"
#include <string>
#include <math>
//---------------------------------------------------------------------------
bool SecondState=0,
EEState=0,
PMState=0,
DotState=0,
OState=0;
int DRGState=0,
SSState=0,
OpCod=0;
double
OpBuffer1=0,
OpBuffer2=0,
Pi=3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582231725359408128481117450284102701938521105559644622948954930381964428810975665933446128475648233786783165271201909145648566923460348610454326648213393607260249141273724587006606315588174881520920962829254091715364367892590360011330530548820466521384146951941511609433057270365759591953092186117381932611793105118548074462379962749567351885752724891227938183011949129833673362
;
AnsiString SSOpBuf;
lass TForm1 : public TForm
{
__published: // IDE-managed Components
TMainMenu *MainMenu1;
TMenuItem *N1;
TMenuItem *N2;
TMenuItem *N3;
TMenuItem *N6;
TPanel *Panel1;
TBitBtn *Btn2nd;
TBitBtn *BtnDRG;
TBitBtn *BtnLOG;
TBitBtn *BtnLN;
TBitBtn *BtnHYP;
TBitBtn *BtnSIN;
TBitBtn *BtnCOS;
TBitBtn *BtnTAN;
TBitBtn *BtnYinX;
TBitBtn *BtnPi;
TBitBtn *Btn1toX;
TBitBtn *BtnX2;
TBitBtn *BtnX3;
TBitBtn *BtnDel;
TBitBtn *BtnC;
TBitBtn *BtnEE;
TBitBtn *BtnLS;
TBitBtn *BtnPS;
TBitBtn *BtnNazad;
TBitBtn *Btn7;
TBitBtn *Btn8;
TBitBtn *Btn9;
TBitBtn *Btn4;
TBitBtn *Btn5;
TBitBtn *Btn6;
TBitBtn *Btn1;
TBitBtn *Btn2;
TBitBtn *Btn3;
TBitBtn *Btn0;
TBitBtn *BtnDot;
TBitBtn *BtnPM;
TBitBtn *BtnRavno;
TBitBtn *BtnPlus;
TBitBtn *BtnMinus;
TBitBtn *BtnUmnoj;
TEdit *EditM1;
TLabel *Label1;
TEdit *EditM2;
TLabel *Label2;
TEdit *EditM3;
TLabel *Label3;
TEdit *Edit4;
TMenuItem *N8;
TBitBtn *BtnOCT;
TBitBtn *BtnDEC;
TBitBtn *BtnBIN;
TBitBtn *BtnHEX;
TPanel *Panel2;
TLabel *L2nd;
TLabel *LDEG;
TLabel *LRAD;
TLabel *LGRAD;
TLabel *LOCT;
TLabel *LHEX;
TLabel *LBIN;
TLabel *LDEC;
TBitBtn *ButtonM1;
TBitBtn *ButtonMR1;
TBitBtn *Btn_A;
TBitBtn *Btn_B;
TBitBtn *Btn_C;
TBitBtn *Btn_D;
TBitBtn *Btn_E;
TBitBtn *Btn_F;
TXPManifest *XPManifest1;
TMenuItem *N4;
void __fastcall Btn1Click(TObject *Sender);
void __fastcall BtnEEClick(TObject *Sender);
void __fastcall N8Click(TObject *Sender);
void __fastcall Btn2ndClick(TObject *Sender);
void __fastcall BtnDRGClick(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
void __fastcall BtnDECClick(TObject *Sender);
void __fastcall BtnBINClick(TObject *Sender);
void __fastcall BtnHEXClick(TObject *Sender);
void __fastcall Btn210Click(TObject *Sender);
void __fastcall BtnOCTClick(TObject *Sender);
void __fastcall Btn2Click(TObject *Sender);
void __fastcall Btn3Click(TObject *Sender);
void __fastcall Btn4Click(TObject *Sender);
void __fastcall Btn5Click(TObject *Sender);
void __fastcall Btn6Click(TObject *Sender);
void __fastcall Btn7Click(TObject *Sender);
void __fastcall Btn8Click(TObject *Sender);
void __fastcall Btn9Click(TObject *Sender);
void __fastcall BtnPMClick(TObject *Sender);
void __fastcall BtnCClick(TObject *Sender);
void __fastcall BtnDotClick(TObject *Sender);
void __fastcall Btn0Click(TObject *Sender);
void __fastcall BtnPlusClick(TObject *Sender);
void __fastcall BtnRavnoClick(TObject *Sender);
void __fastcall BtnMinusClick(TObject *Sender);
void __fastcall BtnUmnojClick(TObject *Sender);
void __fastcall BtnDelClick(TObject *Sender);
void __fastcall BtnSINClick(TObject *Sender);
void __fastcall BtnCOSClick(TObject *Sender);
void __fastcall BtnTANClick(TObject *Sender);
void __fastcall Btn1toXClick(TObject *Sender);
void __fastcall BtnX2Click(TObject *Sender);
void __fastcall BtnX3Click(TObject *Sender);
void __fastcall BtnYinXClick(TObject *Sender);
void __fastcall BtnPiClick(TObject *Sender);
void __fastcall BtnNazadClick(TObject *Sender);
void __fastcall ButtonM1Click(TObject *Sender);
void __fastcall ButtonMR1Click(TObject *Sender);
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
void __fastcall Button3Click(TObject *Sender);
void __fastcall Button4Click(TObject *Sender);
void __fastcall Btn_AClick(TObject *Sender);
void __fastcall Btn_BClick(TObject *Sender);
void __fastcall Btn_CClick(TObject *Sender);
void __fastcall Btn_DClick(TObject *Sender);
void __fastcall Btn_EClick(TObject *Sender);
void __fastcall Btn_FClick(TObject *Sender);
void __fastcall N6Click(TObject *Sender);
void __fastcall BtnHYPClick(TObject *Sender);
void __fastcall BtnLOGClick(TObject *Sender);
void __fastcall BtnLNClick(TObject *Sender);
void __fastcall N4Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
//---------------------------------------------------------------------------
// Функция анализа состояний кнопки переключений вторичных функций.
// состояния переключателя Degree/Radian/Grad, а также состояния
// текущей системы счисления
void StateAnalis()
{
if(SecondState==1)
L2nd->Font->Color=clBlack;
else L2nd->Font->Color=clSilver;
switch(DRGState)
{
case 0:
{LDEG->Font->Color=clBlack;
LRAD->Font->Color=clSilver;
LGRAD->Font->Color=clSilver;
}
break;
case 1:
{LRAD->Font->Color=clBlack;
LGRAD->Font->Color=clSilver;
LDEG->Font->Color=clSilver;
}
break;
case 2:
{LDEG->Font->Color=clSilver;
LRAD->Font->Color=clSilver;
LGRAD->Font->Color=clBlack;
}
break;
}
switch(SSState)
{
case 0:
{LDEC->Font->Color=clBlack;
LBIN->Font->Color=clSilver;
LHEX->Font->Color=clSilver;
LOCT->Font->Color=clSilver;
}
break;
case 1:
{LDEC->Font->Color=clSilver;
LBIN->Font->Color=clBlack;
LHEX->Font->Color=clSilver;
LOCT->Font->Color=clSilver;
}
break;
case 2:
{LDEC->Font->Color=clSilver;
LBIN->Font->Color=clSilver;
LHEX->Font->Color=clBlack;
LOCT->Font->Color=clSilver;
}
break;
case 3:
{LDEC->Font->Color=clSilver;
LBIN->Font->Color=clSilver;
LHEX->Font->Color=clSilver;
LOCT->Font->Color=clBlack;
}
break;
}
};
//---------------------------------------------------------------------------
// Функция сброса приложения в начальное состояние
void SecondFClear()
{SecondState=0;
BtnDRG->Caption="DRG";
BtnLOG->Caption="LOG";
BtnLN->Caption="LN";
BtnNazad->Caption="<---";
BtnHYP->Caption="HYP";
BtnSIN->Caption="SIN";
BtnCOS->Caption="COS";
BtnTAN->Caption="TAN";
BtnC->Caption="C";
BtnPi->Caption="Pi";
Btn1toX->Caption="1/x";
BtnX2->Caption="x^2";
BtnX3->Caption="x^3";
BtnYinX->Caption="x^y";
BtnDEC->Caption="DEC";
BtnEE->Caption="EE";
BtnLS->Caption="(";
BtnPS->Caption=")";
BtnDel->Caption="/";
BtnBIN->Caption="BIN";
Btn7->Caption="7";
Btn8->Caption="8";
Btn9->Caption="9";
BtnUmnoj->Caption="*";
BtnHEX->Caption="HEX";
Btn4->Caption="4";
Btn5->Caption="5";
Btn6->Caption="6";
BtnMinus->Caption="-";
BtnOCT->Caption="OCT";
Btn1->Caption="1";
Btn2->Caption="2";
Btn3->Caption="3";
BtnPlus->Caption="+";
Btn0->Caption="0";
BtnDot->Caption=".";
BtnPM->Caption="±";
BtnRavno->Caption="=";
}
};
//---------------------------------------------------------------------------
AnsiString SSConvToDec(AnsiString StrToConv, int STC)
{
// Функция конвертирования из исходной системы счисления в десятичную
// для использования в последующих расчетах
AnsiString OpBuf=StrToConv, Buf;
int Data=0,
i=0,
k=0,
n=0,
a=0;
char c;
switch(STC)
{
case 0: //Перевод из десятичной системы не требуется
break;
case 1: //Перевод из двоичной системы счисления
{
n=StrToConv.Length();
a=StrToInt(StrToConv);
StrToConv=a;
for(i=n,k=0;i!=0;i--,k++)
{
a=StrToInt(OpBuf[i]);
Data=Data+(a*pow(2,k));
}
StrToConv=Data;
}
break;
case 2: //Перевод из 16-ричной системы счисления
{
n=StrToConv.Length();
for(i=n,k=0;i!=0;i--,k++)
{
c=OpBuf[i];
switch (c)
{
case '0':
Data=Data+(0*pow(16,k));
break;
case '1':
Data=Data+(1*pow(16,k));
break;
case '2':
Data=Data+(2*pow(16,k));
break;
case '3':
Data=Data+(3*pow(16,k));
break;
case '4':
Data=Data+(4*pow(16,k));
break;
case '5':
Data=Data+(5*pow(16,k));
break;
case '6':
Data=Data+(6*pow(16,k));
break;
case '7':
Data=Data+(7*pow(16,k));
break;
case '8':
Data=Data+(8*pow(16,k));
break;
case '9':
Data=Data+(9*pow(16,k));
break;
case 'A':
Data=Data+(10*pow(16,k));
break;
case 'B':
Data=Data+(11*pow(16,k));
break;
case 'C':
Data=Data+(12*pow(16,k));
break;
case 'D':
Data=Data+(13*pow(16,k));
break;
case 'E':
Data=Data+(14*pow(16,k));
break;
case 'F':
Data=Data+(15*pow(16,k));
break;
}
}
StrToConv=Data;
}
break;
case 3: //Перевод из 8-ричной системы счисления
{
n=StrToConv.Length();
for(i=n,k=0;i!=0;i--,k++)
{
a=StrToInt(OpBuf[i]);
Data=Data+(a*pow(8,k));
}
StrToConv=Data;
}
break;
}
return StrToConv;
}
//---------------------------------------------------------------------------
AnsiString SSConvToNeeded(AnsiString StrToConv, int STC, int STCT)
{
// STC - система счисления, из которой производим конвертацию
// STCT система счисления, в которую конвертируем
//
// Для начала конвертируем из исходной системы счисления в десятичную
AnsiString OpBuf="",
StringBuf="",
RevBuf="";
double a;
long int Isx=0,
IntBuf=0,
i=0,
n=0,
k=0;
a=StrToFloat(SSConvToDec(StrToConv,STC));
Isx=a;
switch(STCT)
{
case 0: //Перевод в десятичную систему
break;
case 1: //Перевод в двоичную систему
{
while(Isx!=0)
{
IntBuf=(Isx%2);
Isx=Isx/2;
StringBuf=StringBuf+IntToStr(IntBuf);
}
n=StringBuf.Length();
for(i=n;i>0;i--)
RevBuf=RevBuf+StringBuf[i];
StringBuf=RevBuf;
}
break;
case 2: //Перевод в шестнадцатеричную систему
{
while(Isx!=0)
{
IntBuf=(Isx%16);
Isx=Isx/16;
switch(IntBuf)
{
case 0:
StringBuf=StringBuf+'0';
break;
case 1:
StringBuf=StringBuf+'1';
break;
case 2:
StringBuf=StringBuf+'2';
break;
case 3:
StringBuf=StringBuf+'3';
break;
case 4:
StringBuf=StringBuf+'4';
break;
case 5:
StringBuf=StringBuf+'5';
break;
case 6:
StringBuf=StringBuf+'6';
break;
case 7:
StringBuf=StringBuf+'7';
break;
case 8:
StringBuf=StringBuf+'8';
break;
case 9:
StringBuf=StringBuf+'9';
break;
case 10:
StringBuf=StringBuf+'A';
break;
case 11:
StringBuf=StringBuf+'B';
break;
case 12:
StringBuf=StringBuf+'C';
break;
case 13:
StringBuf=StringBuf+'D';
break;
case 14:
StringBuf=StringBuf+'E';
break;
case 15:
StringBuf=StringBuf+'F';
break;
}
}
n=StringBuf.Length();
for(i=n;i>0;i--)
RevBuf=RevBuf+StringBuf[i];
StringBuf=RevBuf;
}
break;
Подобные документы
Разработка приложения "Ведомость начисления заработной платы" в среде программирования C++Builder. Алгоритм и сценарий работы программы. Проектирование интерфейса пользователя. Написание программных модулей и результаты тестирования данной программы.
курсовая работа [597,4 K], добавлен 31.01.2016Создание и реализация программы в среде визуального программирования С++ Builder. Разработка ее алгоритма. Описание компонентов и их свойств, используемых в структуре приложения. Создание кнопок создания турниров по круговой системе и на выбывание.
курсовая работа [4,6 M], добавлен 12.11.2013Разработка программы для рисования различных правильных многоугольников с помощью объектно-ориентированного языка программирования. Использование для разработки среды C++ Builder 6 и библиотеки VCL. Разработка интерфейса приложения и алгоритма его работы.
курсовая работа [616,4 K], добавлен 18.10.2010Интегрированная среда программирования C++ Builder 6. Методы вычерчивания графических примитивов. Основные свойства инструментов рисования. Разработка рисунка паутины с центром в точке с произвольным числом лучей. Алгоритм программы в виде блок-схемы.
курсовая работа [842,5 K], добавлен 13.10.2017Алгоритм и блок-схема процесса обработки в диалоговой программе, вычисляющей площадь треугольника. Описание объектов, свойств, методов программы в среде визуального программирования С++ Builder. Формы и основные модули текста разработанной программы.
курсовая работа [2,2 M], добавлен 01.06.2014Разработка программы по оформлению заказов на билеты Оренбургского государственного областного драматического театра им. Горького. Использование объектно-ориентированного программирования и реализация проекта в среде визуального программирования Delphi 7.
курсовая работа [6,3 M], добавлен 12.11.2014Основные программы, функционирующие в среде Windows и поддерживающие диалоговые окна и другие возможности. Разработка программы на языке Builder C++ 6.0, осуществляющей выдачу сообщения в заданное время. Описание ее алгоритмов. Общие сведения о IBM PC.
курсовая работа [49,1 K], добавлен 13.11.2009Изучение базовых понятий объектно-ориентированного программирования. Исследование принципов работы с классами и объектами. Построение системы классов для описания плоских геометрических фигур. Анализ методов создания объектов, перемещения на плоскости.
лабораторная работа [212,0 K], добавлен 10.03.2013Математическое описание операций преобразования плоских фигур. Выбор и обоснование языка программирования и среды разработки. Задание базовой фигуры. Разработка алгоритма работы программы. Проверка корректности работы программы в различных режимах.
курсовая работа [567,6 K], добавлен 13.10.2014Разработка программы для сбора и анализа информации об автобусах на парковке. Назначение и область применения. Алгоритм в словесной форме. Состав технических и программных средств. Разработка приложения в среде визуального программирования C++Builder 6.
курсовая работа [1,5 M], добавлен 06.09.2014