Калькулятор в кодиционных СС

Содержание

 

Содержание……………………………………………………2

Введение ………………………………………………………3

О калькуляторе и системе счисления………………………...5

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

Практическая  часть, исходные данные…...………………...11

Список используемой литературы………………………….25 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Язык  формирует наш способ мышления

и определяет, о чем мы можем мыслить.

Б.Л. Ворф

Введение

      Delphi — язык программирования, который используется в одноимённой среде разработки. Сначала язык назывался ObjectPascal.Начиная со среды разработки Delphi 7, в официальных документах Borland стала использовать название Delphi для обозначения языка ObjectPascal.

      Delphi — результат развития языка Турбо Паскаль, который, в свою очередь, развился из языка Паскаль. Паскаль был полностью процедурным языком, Турбо Паскаль, начиная с версии 5.5, добавил в Паскаль объектно-ориентированные свойства, а в ObjectPascal — динамическую идентификацию типа данных с возможностью доступа к метаданным классов (то есть к описанию классов и их членов) в компилируемом коде, также называемом интроспекцией — данная технология получила обозначение RTTI. Так как все классы наследуют функции базового класса TObject, то любой указатель на объект можно преобразовать к нему, после чего воспользоваться методом ClassType и функцией TypeInfo, которые и обеспечат интроспекцию.

      Объектно-ориентированные  особенности языка- парадигма программирования, в которой основными концепциями являются понятия объектов и классов (либо, в менее известном варианте языков с прототипированием, — прототипов).

      Класс — это тип, описывающий устройство объектов. Понятие «класс» подразумевает некоторое поведение и способ представления. Понятие «объект» подразумевает нечто, что обладает определённым поведением и способом представления. Говорят, что объект — это экземпляр класса. Класс можно сравнить с чертежом, согласно которому создаются объекты. Обычно классы разрабатывают таким образом, чтобы их объекты соответствовали объектам предметной области.Класс является описываемой на языке терминологии (пространства имён) исходного кода моделью ещё не существующей сущности, т. н. объекта.

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

      Структура программы- Каждая написанная программа на языке Delphi состоит из заголовка программы (procedureNewApplication;), поля используемых модулей Uses (к примеру, UsesWindows, Messages, SysUtils и т. д.), который может не входить в саму структуру, а также блока описание и исполнения (начинаются составным оператом begin и заканчиваются end;).

      programProject1;                       // Заголовок программы, с её именем «Project1»

      uses

      Forms,

      Unit1 in 'Unit1.pas' {Form1}; // модули, которые подключены к проекту и используются программой

      {$R *.res}

       begin

        Application.Initialize;// Инициализация приложения

      Application.CreateForm(TForm1, Form1);// Создание формы/окна

      Application.Run;                                               // Запуск и исполнение

      end. 

Калькулятор-Латинское слово calculator «счётчик, счетовод» происходит от глагола calculo «считаю, подсчитываю», который в свою очередь происходит от слова calculus «камешек» (камешки использовались для счёта); calculus же является уменьшительным от calx «известь».

  1. Электронное вычислительное устройство для выполнения операций над числами или алгебраическими формулами;
  2. Компьютерная программа, эмулирующая функции калькулятора.
  3. Специализированная программа, автоматически проводящая некоторый вид расчётов (калькулятор вкладов, калькулятор контактных площадок и тому подобное)
  4. Профессия (человек, производящий калькуляцию).

Двоичная  система счисления- это позиционная система счисления с основанием 2. В этой системе счисления числа записываются с помощью двух символов (1 и 0).

Запись  двоичных чисел-Двоичная система счисления является частным случаем сдвоенных двоичных показательных позиционных систем счисления с обоими основаниями (a и b) равными 2. Целые числа записываются в виде:

где:

  • n — число цифр (знаков) в числе x2,2,
  • k — порядковый номер цифры,
  • a = 2 — основание внутриразрядной системы счисления, * ak — цифры числа x2,2 из множества a={0,1},
  • b = 2 — основание показательной функции, основание межразрядной системы счисления.

Целые числа являются частными суммами  степенного ряда:

в котором  коэффициенты an берутся из кольца R=a{0,1}, X=2, n=k, а верхний предел в частных суммах ограничен с до — n-1.

      Из  комбинаторики известно, что число  записываемых кодов не зависит от основания показательной функции  — b, которое определяет диапазон представляемых числами x2,b величин, и равно числу размещений с повторениями:

где a=2 — 2-х элементное множество a={0,1} из которого берутся цифры ak, n — число элементов (цифр) в числе x2,b.Дробные числа записываются в виде:

  • m — число цифр дробной части числа,
  • a = 2 — основание внутри разрядной системы счисления,
  • b = 2 — основание показательной функции, основание меж разрядной системы счисления.

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

Восьмеричная  система счисления- позиционная целочисленная система счисления с основанием 8. Для представления чисел в ней используются цифры 0 до 7. Восьмеричная система часто используется в областях, связанных с цифровыми устройствами. Характеризуется лёгким переводом восьмеричных чисел в двоичные и обратно, путём замены восьмеричных чисел на триплеты двоичных. Ранее широко использовалась в программировании и вообще компьютерной документации, однако в настоящее время почти полностью вытеснена шестнадцатеричной. В восьмеричной системе указываются права доступа для команды chmod в Unix-подобных операционных системах.

Десятичная  система счисления- Десятичная система счисления- позиционная система счисления по целочисленному основанию 10. Одна из наиболее распространённых систем счисления в мире. Для записи чисел наиболее часто используются символы 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, называемые арабскими цифрами. Предполагается, что основание 10 связано с количеством пальцев рук у человека.

Основные  сведения

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

n — число разрядов целой части числа,m — число разрядов дробной части числа, от 0 до бесконечности, при m=0 число целое,k — число от -m до n-1, номер разряда,a=10 — число, основание внутри разрядной системы счисления,ak — числа в разрядах из замкнутого множества (кольца) a={0,1,2,3,4,5,6,7,8,9}, цифры представляемого числа, x10,10,b=10 — число, основание меж разрядной системы счисления, 10k — числа меж разрядной десятичной показательной функции, весовые коэффициенты bk разрядов. Внутри разрядный индекс — a часто опускается, нередко опускается и меж разрядный индекс — b. Из комбинаторики известно, что число записываемых кодов не зависит от основания показательной функции — b, которое определяет диапазон представляемых числами x10,b величин, и равно числу размещений с повторениями:

a=10 — 10-ти элементное множество a={0,1,2,3,4,5,6,7,8,9} из которого берутся цифры ak, n — число элементов (цифр) в числе x10,b. Десятичная система счисления является комбинацией (произведением) двух зависимостей (функций). Внутри каждого разряда зависимость (функция) линейная f(ak)=ak, ak из множества a={0, 1, 2, 3, …, 9}, между разрядами же зависимость нелинейная показательная — f(b, k)=bk=10k, bk из множества bk={1, 10, 100, …}.Цифры внутри разрядов ak могут быть записаны в разных кодах. Например, при их записи в двоичном коде получается двоично-десятичное кодирование, описанное ниже. При их записи в троичном коде, получается троично-десятичное кодирование. При их записи в десятичном коде, получается десятично-десятичное кодирование. Система счисления при этом не изменяется и остаётся прежней.

Двоично-десятичное кодирование

      В двоичных компьютерах применяют  двоично-десятичное кодирование десятичных цифр (Binary-CodedDecimal), при этом для одной двоично-десятичной цифры отводится четыре двоичных разряда (двоичная тетрада). Двоично-десятичные числа требуют большего количества бит для своего хранения. Так, четыре двоичных разряда имеют 16 состояний, и при двоично-десятичном кодировании 6 из 16 состояний двоичной тетрады не используются.

Шестнадцатеричная система счисления- Шестнадцатеричная система счисления (шестнадцатеричные числа) — позиционная система счисления по целочисленному основанию 16. Обычно в качестве шестнадцатеричных цифр используются десятичные цифры от 0 до 9 илатинские буквы от A до F для обозначения цифр от 1010 до 1510, то есть (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F).

Применение

Широко  используется в низкоуровневом программировании и вообще в компьютерной документации, поскольку в современных компьютерах  минимальной единицей памяти является 8-битный байт, значения которого удобно записывать двумя шестнадцатеричными цифрами. Такое использование началось с системы IBM/360, где вся документация использовала шестнадцатеричную систему, в то время как в документации других компьютерных систем того времени (даже с 8-битными символами, как, например, PDP-11 или БЭСМ-6) использовали восьмеричную систему. В стандарте Юникода номер символа принято записывать в шестнадцатеричном виде, используя не менее 4 цифр (при необходимости — с ведущими нулями). Шестнадцатеричный цвет — запись трёх компонент цвета (R, G и B) в шестнадцатеричном виде.

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

Задача  курсовой работы состоит в разработке программы- калькулятора, которая позволяет считать выражения состоящие из чисел, любой системы исчисления, постоянные числа  pi=3,14159265359, функции корней, факториал, квадрат, куб, положительное/ отрицательное значение. Необходимо разработать удобный пользовательский интерфейс для работы с программой, а так же пункт “Help” для ознакомления с программой.

Программу разработать на языке Delphi 7 . 
 

Практическая  часть

     Исходные  данные

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

unit Unit1;

interface

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, Menus, StdCtrls, Buttons, Math;

type

  TForm1 = class(TForm)

    MainMenu1: TMainMenu;

    View1: TMenuItem;

    programmerAlt31: TMenuItem;

    Help1: TMenuItem;

    AboutCalculator1: TMenuItem;

    RadioButton1: TRadioButton;

    RadioButton2: TRadioButton;

    RadioButton3: TRadioButton;

    RadioButton4: TRadioButton;

    BitBtn1: TBitBtn;

    BitBtn2: TBitBtn;

    BitBtn3: TBitBtn;

    BitBtn4: TBitBtn;

    BitBtn5: TBitBtn;

    BitBtn6: TBitBtn;

    BitBtn7: TBitBtn;

    BitBtn8: TBitBtn;

    BitBtn9: TBitBtn;

    BitBtn10: TBitBtn;

    BitBtn11: TBitBtn;

    BitBtn12: TBitBtn;

    BitBtn13: TBitBtn;

    BitBtn14: TBitBtn;

    BitBtn15: TBitBtn;

    BitBtn16: TBitBtn;

    BitBtn17: TBitBtn;

    BitBtn18: TBitBtn;

    BitBtn19: TBitBtn;

    BitBtn20: TBitBtn;

    BitBtn21: TBitBtn;

    BitBtn22: TBitBtn;

    BitBtn24: TBitBtn;

    BitBtn25: TBitBtn;

    Edit1: TEdit;

    BitBtn26: TBitBtn;

    BitBtn27: TBitBtn;

    BitBtn28: TBitBtn;

    BitBtn29: TBitBtn;

    Memo1: TMemo;

    BitBtn31: TBitBtn;

    OpenDialog1: TOpenDialog;

    BitBtn32: TBitBtn;

    SaveDialog1: TSaveDialog;

    BitBtn23: TBitBtn;

    BitBtn30: TBitBtn;

    procedure AboutCalculator1Click(Sender: TObject);

    procedure BitBtn1Click(Sender: TObject);

    procedure BitBtn2Click(Sender: TObject);

    procedure BitBtn3Click(Sender: TObject);

    procedure BitBtn4Click(Sender: TObject);

    procedure BitBtn5Click(Sender: TObject);

    procedure BitBtn6Click(Sender: TObject);

    procedure BitBtn7Click(Sender: TObject);

    procedure BitBtn8Click(Sender: TObject);

    procedure BitBtn9Click(Sender: TObject);

    procedure BitBtn10Click(Sender: TObject);

    procedure BitBtn18Click(Sender: TObject);

    procedure BitBtn19Click(Sender: TObject);

    procedure BitBtn20Click(Sender: TObject);

    procedure BitBtn21Click(Sender: TObject);

    procedure BitBtn17Click(Sender: TObject);

    procedure BitBtn25Click(Sender: TObject);

    procedure BitBtn24Click(Sender: TObject);

    procedure BitBtn22Click(Sender: TObject);

    procedure BitBtn26Click(Sender: TObject);

    procedure BitBtn27Click(Sender: TObject);

    procedure BitBtn28Click(Sender: TObject);

    procedure BitBtn29Click(Sender: TObject);

    procedure BitBtn31Click(Sender: TObject);

    procedure BitBtn32Click(Sender: TObject);

    procedure BitBtn23Click(Sender: TObject);

    procedure BitBtn30Click(Sender: TObject);

    procedure BitBtn11Click(Sender: TObject);

    procedure BitBtn12Click(Sender: TObject);

    procedure BitBtn13Click(Sender: TObject);

    procedure BitBtn14Click(Sender: TObject);

    procedure BitBtn15Click(Sender: TObject);

    procedure BitBtn16Click(Sender: TObject);

    procedure RadioButton4Click(Sender: TObject);

    procedure RadioButton3Click(Sender: TObject);

    procedure RadioButton2Click(Sender: TObject);

    procedure RadioButton1Click(Sender: TObject);

    private

    { Private declarations }

  public

    { Public declarations }

  end; 

var

  Form1: TForm1;

  first,second:real;

  answer:real;

  factor:string;

  Memory:string;

  numeralSystem:string='dec';

Функциибудут :

// from hex to int

function HexToInt(HexNum: string): LongInt;

begin

   Result:=StrToInt('$' + HexNum) ;

end;

//from Bin to int

function BinToInt(bin: string): longint;

var i: integer;

    res: longint;

begin

  res:=0;

  For i:=1 to Length(bin) do begin

    res:=res shl 1;

    if bin[i]='1' then res:=res or 1;

  end;

  BinToInt:=res;

end; 

//from Oct to Int

function OctToInt(OctNum:string):Longint;

var

   Len:integer;

   counter:integer;

   base:integer;

   res:integer;

begin

  Counter:=1;

  res:=0;

  base:=1;

  for Len:=length(OctNum) downto counter do

  Begin

    If not (OctNum[Len] in ['0'..'7']) then

    Begin

      ShowMessage('This is not an Octal number!');

      Halt;

    end

    Else

      Res:=res+StrToInt(OctNum[len])*base;

      base:=base*8;

  end;

  result:=res;

end;

// from Int to Bin

function IntToBin(dec: longint; dig:integer): string;

  var i: integer;

    res: string;

begin

  if dec=0 then begin IntToBin:='0'; Exit; end;

  SetLength(res,32);

  for i:=32 downto 1 do begin

    res[i]:=Chr((dec and 1)+48);

    dec:=dec shr 1;

  end;

  Delete(res,1,Pos('1',res)-1);

  IntToBin:=res;

end;

// from Int to Oct

function IntToOct( value: LongInt; digits: integer ): string;

var dec,bin,i:integer;

    a:array[1..100]of integer;

    s:string;

begin

  s:='';

  dec := value;

  i:=0;

  repeat

    i:=i+1;

    a[i]:=dec mod 8;

    dec:=dec div 8;

  until(dec = 0); 

  for i:=i downto 1 do

  begin

   s:=s+IntToStr(a[i]);

  end;

  result:=s;

end;

// about calculator programming

procedure TForm1.AboutCalculator1Click(Sender: TObject);

begin

ShowmessagePos('Eta proqramma pozvolyaet scitat virajeniya sostoyashie iz chisel,lyuboy sistemi ischisleniya,postoyannie chisla p=3,14159265359,funkcii korney, faktorial, kvadrat, kub, polojitelnoe/otricatelnoe znacenie. ',350,350);

end;

  //code of number 1

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

If Edit1.Text='0'

  Then Begin

   Edit1.Text:='1'

  end

  Else Begin

    Edit1.Text:=Edit1.Text + '1';

end;

end;

// code of adding

procedure TForm1.BitBtn18Click(Sender: TObject);

begin

  Factor:='+';

  if (numeralSystem='dec') then

  First:=StrToFloat(Edit1.Text)

  else if (numeralSystem='hex') then

  First:=HexToInt(edit1.Text)

  else if (numeralSystem='bin') then

  First:=BinToInt(Edit1.Text)

  else if (numeralSystem='oct') then

  First:=OctToInt(Edit1.Text);

  Edit1.Clear;

   Memo1.Text:=Memo1.Text+FloatToStr(first)+factor;

end;

// code of minus

procedure TForm1.BitBtn19Click(Sender: TObject);

begin

  Factor:='-';

  if (numeralSystem='dec') then

  First:=StrToFloat(Edit1.Text)

  else if (numeralSystem='hex') then

  First:=HexToInt(edit1.Text)

  else if (numeralSystem='bin') then

First:=BinToInt(Edit1.Text)

  else if (numeralSystem='oct') then

  First:=OctToInt(Edit1.Text);

  Edit1.Clear;

   Memo1.Text:=Memo1.Text+FloatToStr(first)+factor;

end;

// code of multiply

procedure TForm1.BitBtn20Click(Sender: TObject);

begin

Factor:='*';

  if (numeralSystem='dec') then

  First:=StrToFloat(Edit1.Text)

  else if (numeralSystem='hex') then

  First:=HexToInt(edit1.Text)

  else if (numeralSystem='bin') then

  First:=BinToInt(Edit1.Text)

  else if (numeralSystem='oct') then

  First:=OctToInt(Edit1.Text);

  Edit1.Clear;

   Memo1.Text:=Memo1.Text+FloatToStr(first)+factor;

end;

// code of deviding

procedure TForm1.BitBtn21Click(Sender: TObject);

begin

Factor:='/';

   if (numeralSystem='dec') then

  First:=StrToFloat(Edit1.Text)

  else if (numeralSystem='hex') then

  First:=HexToInt(edit1.Text)

  else if (numeralSystem='bin') then

  First:=BinToInt(Edit1.Text)

  else if (numeralSystem='oct') then

  First:=OctToInt(Edit1.Text);

  Edit1.Clear;

   Memo1.Text:=Memo1.Text+FloatToStr(first)+factor;

end;

  // control of denominator

Function Div0Check (DivNum : Real) : Boolean;

Begin

If DivNum=0

  Then Begin

   Div0Check:=False;

  end

  Else Begin

   Div0Check:=True;

  end;

end;

// calculation of answer

procedure TForm1.BitBtn17Click(Sender: TObject);

Var Check : Boolean;

begin

   if (numeralSystem='dec') then

  Second:=StrToFloat(Edit1.Text);

  else if (numeralSystem='hex') then

  Second:=HexToInt(edit1.Text)

  else if (numeralSystem='bin') then

  Second:=BinToInt(Edit1.Text)

  else if (numeralSystem='oct') then

  Second:=OctToInt(Edit1.Text);

   If Factor='+'

    Then Begin

      Answer:=First + Second;

     end;

      If Factor='-'

        Then Begin

         Answer:=First - Second;

        end;

      If Factor='*'

      Then Begin

      Answer:=First * Second;

      end;

  If Factor='/'

Then Begin

               Check:=Div0Check(Second);

                If Check=True

                 Then Begin

                  Answer:=First / Second;

                 end

                 Else Begin

                  ShowMessage('You cannot divide by 0');

                 end;

                 end;

if (numeralSystem='dec') then

  Edit1.Text:=FloatToStr(Answer)

Калькулятор в кодиционных СС