Показать сообщение отдельно
  #27  
Старый 08.09.2012, 17:07
Аватар для UnrealFire
UnrealFire UnrealFire вне форума
Новичок
 
Регистрация: 28.08.2012
Сообщения: 66
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

1 вопрос. сделал так:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, jpeg, ExtCtrls, Buttons;

type
  TForm1 = class(TForm)
    Logo: TImage;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    SpeedButton3: TSpeedButton;
    SpeedButton5: TSpeedButton;
    SpeedButton6: TSpeedButton;
    SpeedButton7: TSpeedButton;
    SpeedButton8: TSpeedButton;
    SpeedButton9: TSpeedButton;
    SpeedButton10: TSpeedButton;
    SpeedButton11: TSpeedButton;
    SpeedButton12: TSpeedButton;
    SpeedButton13: TSpeedButton;
    SpeedButton14: TSpeedButton;
    SpeedButton15: TSpeedButton;
    SpeedButton17: TSpeedButton;
    SpeedButton18: TSpeedButton;
    SpeedButton19: TSpeedButton;
    SpeedButton4: TSpeedButton;
    Edit2: TEdit;
    SpeedButton16: TSpeedButton;
    SpeedButton20: TSpeedButton;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    SpeedButton21: TSpeedButton;
    Label1: TLabel;
    Label2: TLabel;
    SpeedButton22: TSpeedButton;
    SpeedButton23: TSpeedButton;
    SpeedButton24: TSpeedButton;
    SpeedButton25: TSpeedButton;
    background: TImage;
    SpeedButton26: TSpeedButton;
    procedure SpeedButtonDeystvieClick(Sender: TObject);
    procedure SpeedButton17Click(Sender: TObject);
    procedure SpeedButton20Click(Sender: TObject);
    procedure SpeedButton21Click(Sender: TObject);
    procedure SpeedButton22Click(Sender: TObject);
    procedure SpeedButton23Click(Sender: TObject);
    procedure SpeedButton24Click(Sender: TObject);
    procedure SpeedButton25Click(Sender: TObject);
    procedure SpeedButton26Click(Sender: TObject);
    procedure SpeedButtonNumberClick(Sender: TObject);
    procedure SpeedButtonRavnoClick(Sender: TObject);
    procedure SpeedButtonRazdelitelClick(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  input,input2,output,prozent:real;
  znachenie:string;
  deystvie:boolean=false;
  razdelitel:boolean=false;
  ravno:boolean=false;

implementation

{$R *.dfm}

function ShellExecute (hWnd: HWND; Operation, FileName, Parameters, Directory: PAnsiChar; ShowCmd: Integer): LongWord; stdcall; external 'Shell32.dll' name 'ShellExecuteA';

procedure TForm1.SpeedButtonNumberClick(Sender: TObject);
begin
  if edit2.Text='0' then edit2.Text:='';
  if deystvie=true then
  begin
    edit2.Text:='';
    deystvie:=false;
  end;
  if ravno=true then
  begin
    edit2.Text:='';
    ravno:=false;
  end;
  edit2.Text:=edit2.Text + (Sender as TSpeedButton).Caption;
  {Если стоит ноль, то он удаляется;
  Если действие нажато то удаляется всё поле и действие=фалс;
  Edit2.Text:=Edit2.Text+текст на клавише;
  }
end;

procedure TForm1.SpeedButtonDeystvieClick(Sender: TObject);
begin
  if deystvie=false then
  begin
    input:=strtofloat(edit2.Text);
    znachenie:=(Sender as TSpeedButton).Caption;
    deystvie:=true;
  end
  else
  begin
    input:=strtofloat(edit2.Text);
    znachenie:=(Sender as TSpeedButton).Caption;
  end;
  razdelitel:=false;
  {Если действие=фалс то
  значение=текст на клавише;
  действие=тру;
  Иначе
  инпут=вещ. от edit2.Text;
  значение = текст на клавише;
  }
end;

procedure TForm1.SpeedButtonRavnoClick(Sender: TObject);
begin
  input2:=strtofloat(edit2.Text);

  if znachenie='+' then output:=input+input2;
  if znachenie='-' then output:=input-input2;
  if znachenie='*' then output:=input*input2;
  if znachenie='/' then output:=input/input2;
  if znachenie='%' then output:=input*input2/100;
  if znachenie='^' then
  begin
    input:=output;
    if input2=0 then
    begin
      edit2.Text:='0';
    end;

    while input2>1 do
    begin
      output:=output*input;
      input2:=input2-1;
    end;
    {Возведение в степень}
  end;

  edit2.Text:=floattostr(output);
  ravno:=true;
  {input2:=вещ. от edit2.Text;
  в зависимости от значения присваивается output;
  output выводится в edit2.Text;
  }
end;

procedure TForm1.SpeedButtonRazdelitelClick(Sender: TObject);
begin
  if razdelitel=false then
  begin
    edit2.Text:=edit2.Text+(Sender as TSpeedButton).Caption;
    razdelitel:=true;
  end;
  {Проверка на наличие запятой в цифре}
end;

procedure TForm1.SpeedButton17Click(Sender: TObject);
begin
  input:=strtofloat(edit2.text);
  output:=sqrt(input);
  edit2.Text:=floattostr(output);
  {извлечение квадратного корня}
end;

procedure TForm1.SpeedButton20Click(Sender: TObject);
begin
  Edit2.Text:='0';
  Edit4.Text:='0';
  Edit5.Text:='0';
  Edit6.Text:='0';
  Edit7.Text:='0';
  Edit8.Text:='0';
  {CE}
end;

procedure TForm1.SpeedButton21Click(Sender: TObject);

var
a,b,c,x1,x2,d,p:real;

begin

  a:=strtofloat(edit4.Text);
  b:=strtofloat(edit6.Text);
  c:=strtofloat(edit5.Text);

  if a=0 then
  begin
    ShowMessage('a=0. Неверноное значение a');
  end;

  d:=(b*b)-(4*a*c);

  if d<0 then
  begin
    ShowMessage('Уравнение не имеет корней');
  end;

  p:=sqrt(d);

  x1:=(-b+p)/(2*a);
  x2:=(-b-p)/(2*a);

  edit8.Text:='X1='+floattostr(x1);
  edit7.Text:='X2='+floattostr(x2);
  {Решение кв.уранения}
end;

procedure TForm1.SpeedButton26Click(Sender: TObject);
begin
ShellExecute(0, 'open', 'Calc by UnrealFire.chm','','', sw_show);
end;

{Ниже синус, косинус, тангенс и радианы из угла}
procedure TForm1.SpeedButton22Click(Sender: TObject);

var
g,r,s:real;
s2:string;

begin

  g:=strtofloat(edit2.Text);

  if (g>360) or (g=360) then
  begin
    g:=g-360;
   end;

  r:=PI*g/180;
  s:=sin(r);
  s2:=floattostr(s);

  if (g=0) or (g=180) then
  begin
    s2:='0';
   end;

  if (g=90) or (g=270) then
  begin
    s2:='1';
  end;

  if (g=30) or (g=210) then
  begin
    s2:='1/2';
  end;

  if (g=45) or (g=225) then
  begin
    s2:='(Квадратный корень от 2)/2';
  end;

  if (g=60) or (g=240) then
  begin
    s2:='(Квадратный корень от 3)/2';
  end;

  edit2.Text:=s2;

end;

procedure TForm1.SpeedButton23Click(Sender: TObject);

var
g,r,c:real;
c2:string;

begin

  g:=strtofloat(edit2.Text);

  if (g>360) or (g=360) then
  begin
    g:=g-360;
   end;

  r:=PI*g/180;
  c:=cos(r);
  c2:=floattostr(c);

  if (g=0) or (g=180) then
  begin
    c2:='1';
   end;

  if (g=90) or (g=270) then
  begin
    c2:='0';
  end;

  if (g=30) or (g=210) then
  begin
    c2:='(Квадратный корень от 3)/2';
  end;

  if (g=45) or (g=225) then
  begin
    c2:='(Квадратный корень от 2)/2';
  end;

  if (g=60) or (g=240) then
  begin
    c2:='1/2';
  end;

  edit2.Text:=c2;

end;

procedure TForm1.SpeedButton24Click(Sender: TObject);

var
g,r,t,c,s:real;
t2:string;

begin

  g:=strtofloat(edit2.Text);

  if (g>360) or (g=360) then
  begin
    g:=g-360;
   end;

  r:=PI*g/180;
  c:=Cos(r);  
  s:=Sin(r);
  t:=s/c;
  t2:=floattostr(t);

  if (g=0) or (g=180) then
  begin
    t2:='0';
   end;

  if (g=90) or (g=270) then
  begin
    t2:='Не определён';
  end;

  if (g=30) or (g=210) then
  begin
    t2:='(Квадратный корень от 3)/3';
  end;

  if (g=45) or (g=225) then
  begin
    t2:='1';
  end;

  if (g=60) or (g=240) then
  begin
    t2:='Квадратный корень от 3';
  end;

  edit2.Text:=t2;

end;

procedure TForm1.SpeedButton25Click(Sender: TObject);

var
g,r:real;

begin

  g:=strtofloat(edit2.Text);
  r:=g*PI/180;

  edit2.Text:=floattostr(r);

end;

end.

при нажатии возведении в степень выводится 0. если например сделать вначале любое другое действие, скажем прибавить то всё работает. Где у меня ошибка?

2.И все таки подскажите как в этом случае оформить функцию возведения в степень.

3. При возведении в степень 2 числа 625 выводится floating point overflow.
что это?
Ответить с цитированием