Разработка программы создания и уничтожения объектов в среде 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
  • Свойство

    Описание

    ActivePage

    Задает активную страницу

    Align

    Способ выравнивания многостраничного компонента в пределах владельца.

    MultiLine

    Если равно true, то закладки располагаются в несколько рядов

    Pages

    Массив страниц. Свойство Pages доступно только из программы.

    PageCount

    Общее количество страниц. Доступно только из программы

    TabWidth, TabHeight

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

    • 2. Label - метка
    • Таблица №2
    • Свойство

      Объявление / Описание

      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;


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.