Помогите найати ошибку вданном приложении :
| Код | unit UCalc;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Edit1: TEdit; Button0: TButton; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Button6: TButton; Button7: TButton; Button8: TButton; Button9: TButton; BClear: TButton; BPoint: TButton; BSing: TButton; BAbs: TButton; BCos: TButton; BExp: TButton; BLn: TButton; BLog: TButton; BSin: TButton; BSqrt: TButton; BPi: TButton; BMC: TButton; BMS: TButton; BMR: TButton; BMplus: TButton; Label1: TLabel; Label2: TLabel; BPlus: TButton; BMinus: TButton; BMultiply: TButton; BDivide: TButton; BEq: TButton; BPower: TButton; BFactor: TButton; procedure BClearClick(Sender: TObject); procedure Button1Click(Sender: TObject); procedure BSingClick(Sender: TObject); procedure BAbsClick(Sender: TObject); procedure BPiClick(Sender: TObject); procedure BMCClick(Sender: TObject); procedure BMSClick(Sender: TObject); procedure BMplusClick(Sender: TObject); procedure BMRClick(Sender: TObject); procedure BCosClick(Sender: TObject); procedure BExpClick(Sender: TObject); procedure BLnClick(Sender: TObject); procedure BLogClick(Sender: TObject); procedure BSinClick(Sender: TObject); procedure BSqrtClick(Sender: TObject); procedure BPlusClick(Sender: TObject); procedure BEqClick(Sender: TObject); procedure BMinusClick(Sender: TObject); procedure BMultiplyClick(Sender: TObject); procedure BDivideClick(Sender: TObject); procedure Edit1KeyPress(Sender: TObject; var Key: Char); procedure BFactorClick(Sender: TObject); procedure BPowerClick(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm} uses Math; var M: real = 0.; LBegin: Boolean = true; // фиксация начала ввода LPoint: Boolean = false; // фиксация ввода запятой LOp: Boolean = false; // фиксация щелчка на кнопке операции Num1, Num2: real; // первый и второй операнды Op: char = '0'; const Serr = 'Вы ошиблись, исправьте исходные данные!';
function factor(n: integer): Int64; var i: integer; begin Result := 1; for i := 2 to n do Result := Result * i; end;
procedure TForm1.BClearClick(Sender: TObject); //очистка строки begin Edit1.Clear; LBegin := true; Op := ' '; LOp := false; end;
procedure TForm1.Button1Click(Sender: TObject); // щелчок на кнопках с цифрами и кнопке с запятой begin // Если ввод не начат, LPoint = false if LBegin then LPoint := false; {Если нажата кнопка с символом "0" (Botton0) и в окне Edit1 только символ "0", или нажата кнопка с запятой (BPoint), и запятая уже вводилась (LPoint = true), то заносить символ в Edit1 не надо. Так что при этих условиях оператор структуры if не выполняется} if not (((Sender = Button0) and (Edit1.Text = '0')) or ((Sender = BPoint) and LPoint)) then begin if (Sender = Bpoint) then begin LPoint := true; if LBegin then Edit1.Text := '0,' else Edit1.Text := Edit1.Text + ','; end // Sender = BPoint else // Sender <> BPoint if (not LBegin) and (Edit1.Text <> '0') then Edit1.Text := Edit1.Text + (Sender as TButton).Caption else Edit1.Text := (Sender as TButton).Caption; LBegin := false; end; end;
procedure TForm1.BSingClick(Sender: TObject); // операция " +/- " begin try Edit1.Text := FloatToStr(-(StrToFloat(Edit1.Text))); except ShowMessage(Serr); end; end;
procedure TForm1.BAbsClick(Sender: TObject); // абсолютное число begin try Edit1.Text := FloatToStr(Abs(StrToFloat(Edit1.Text))); LBegin := true; except ShowMessage(Serr); end; end;
procedure TForm1.BPiClick(Sender: TObject); // число Пи begin Edit1.Text := FloatToStr(Pi); LBegin := true; end;
procedure TForm1.BMCClick(Sender: TObject); // очистка памяти begin M := 0.; Label1.Caption := ' '; end;
procedure TForm1.BMSClick(Sender: TObject); // сохранение памяти begin try Label1.Caption := 'M'; M := StrToFloat(Edit1.Text); LBegin := true; except ShowMessage(Serr); end; end;
procedure TForm1.BMplusClick(Sender: TObject); // добавление в память begin try Label1.Caption := 'M'; M := M + StrToFloat(Edit1.Text); if M = 0 then Label1.Caption := ' '; Lbegin := true; except ShowMessage(Serr); end; end;
procedure TForm1.BMRClick(Sender: TObject); // загрузка памяти begin try Edit1.Text := FloatToStr(M); LBegin := true; except ShowMessage(Serr); end; end;
procedure TForm1.BCosClick(Sender: TObject); // косинус begin try Edit1.Text := FloatToStr(Cos(StrToFloat(Edit1.Text))); LBegin := true; except ShowMessage(Serr); end; end;
procedure TForm1.BExpClick(Sender: TObject); // експонента begin try Edit1.Text := FloatToStr(Exp(StrToFloat(Edit1.Text))); LBegin := true; except ShowMessage(Serr); end; end;
procedure TForm1.BLnClick(Sender: TObject); // натуральный логарифм begin try Edit1.Text := FloatToStr(Ln(Strtofloat(edit1.text))); LBegin := true; except ShowMessage(Serr); end; end;
procedure TForm1.BLogClick(Sender: TObject); // логарифм по основанию два begin try Edit1.Text := FloatToStr(Log2(StrToFloat(Edit1.Text))); LBegin := true; except ShowMessage(Serr); end; end;
procedure TForm1.BSinClick(Sender: TObject); // синус begin try Edit1.Text := FloatToStr(Sin(StrToFloat(Edit1.Text))); LBegin := true; except ShowMessage(Serr); end; end;
procedure TForm1.BSqrtClick(Sender: TObject); // квадратный корень begin try Edit1.Text := FloatToStr(Sqrt(StrToFloat(Edit1.Text))); LBegin := true; except ShowMessage(Serr); end; end;
procedure TForm1.BPlusClick(Sender: TObject); // сложение begin try Num1 := StrToFloat(Edit1.Text); Op := (Sender as TButton).Caption[1]; LBegin := true; LOp := true except ShowMessage(Serr); end; end;
procedure TForm1.BEqClick(Sender: TObject); // равно begin try if LOp then Num2 := StrToFloat(Edit1.Text); case Op of '+': Edit1.Text := FloatToStr(Num1 + Num2); '-': Edit1.Text := FloatToStr(Num1 - Num2); '*': Edit1.Text := FloatToStr(Num1 * Num2); '/': Edit1.Text := FloatToStr(Num1 / Num2); 'x^y': Edit1.Text := FloatToStr(Num1 ^ Num2); end; Num1 := StrToFloat(Edit1.Text); LBegin := true; LOp := false; except ShowMessage(Serr); end; end; procedure TForm1.BMinusClick(Sender: TObject); // вычитание begin try Num1 := StrToFloat(Edit1.Text); Op := (Sender as TButton).Caption[1]; LBegin := true; LOp := true except ShowMessage(Serr); end; end;
procedure TForm1.BMultiplyClick(Sender: TObject); // умножение begin try Num1 := StrToFloat(Edit1.Text); Op := (Sender as TButton).Caption[1]; LBegin := true; LOp := true except ShowMessage(Serr); end; end;
procedure TForm1.BDivideClick(Sender: TObject); // деление begin try Num1 := StrToFloat(Edit1.Text); Op := (Sender as TButton).Caption[1]; LBegin := true; LOp := true except ShowMessage(Serr); end; end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); // кнопки begin case Key of '0'..'9', ',', #8: ; else Key := #0; end; end;
procedure TForm1.BFactorClick(Sender: TObject); begin Edit1.Text := IntToStr(factor(StrToInt(Edit1.Text))); end;
procedure TForm1.BPowerClick(Sender: TObject); begin try Num1 := StrToFloat(Edit1.Text); Op := (Sender as TButton).Caption[1]; LBegin := true; LOp := true except ShowMessage(Serr); end; end;
end.
|
Ошибка где-то в коде возведения в произвольную степень ... |