Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Калькулятор, Не могу понять ошибку 
:(
    Опции темы
Гость_TwisT_X
  Дата 6.6.2005, 13:34 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Помогите найати ошибку вданном приложении :

Код

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.


Ошибка где-то в коде возведения в произвольную степень ... smile
  Вверх
Alexandr87
Дата 6.6.2005, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: 1
Всего: 39



Я конечно Дельфи не знаю, но на мой взгляд операция x^y, ни есть операция возведения x в степень y.
PM Jabber   Вверх
Pakshin A. S.
Дата 6.6.2005, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 5
Всего: 61



Верно... В разделе с паскалем была функция для человеческого возведения числа в степень...
Добавлено @ 18:02
Вот... http://forum.vingrad.ru/index.php?showtopi...ad=1&hl=степень
PM   Вверх
TwisT_X
Дата 8.6.2005, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


It's works!
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.2.2005
Где: Earth

Репутация: 1
Всего: 4



Да я уже сам разобрался
Там короче не ^ a Num1 Power Num2..
всеравно спосибо


--------------------
Если ты упадешь я буду рядом. (с) Асфальт
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0687 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.