Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2009, 10:27   #1
ulala
Пользователь
 
Аватар для ulala
 
Регистрация: 18.09.2009
Сообщений: 62
Стрелка Delphi 7, создание функционального калькулятора с использованием класса

Здравствуйте. Мне нужно создать в Делфи калькулятор, вычисляющий не только простейшие математические операции, но и сложные: возведение в степень и логарифм. Эти две операции необходимо сделать используя класс. В этом классе аргументы а и х задавать через поля, а вычисление функций реализовать методами. Объяснять как это делать преподаватель не стал (это вам не школа, тут вы всё должны делать сами), учебников по Делфи в нашей шарашке нет. Я поискала в интернете и сделала следующее:

Код:
unit KalkUnFORUM;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
Type
 TCalculator=Class
  private
   FValue1:Real;
   FValue2:Real;
  public
   Constructor Create(AX,AY:Real);
   Function InDegree:Real;    // возведение в степень
   Function Log:Real;         // логарифм соответственно
   //-----------------------------------------------
   // Поля:
   Property X:real read FValue1 write FValue1;  // как самый простой способ реализации свойств
   Property Y:Real read FValue2 write FValue2;
 End;

type
  TForm1 = class(TForm)
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    Button6: TButton;
    Button4: TButton;
    Button5: TButton;
    Button3: TButton;
    Button1: TButton;
    Button2: TButton;
    Button0: TButton;
    ButtonPlus: TButton;
    ButtonMinus: TButton;
    ButtonDel: TButton;
    ButtonUmn: TButton;
    ButtonRez: TButton;
    ButtonC: TButton;
    Edit1: TEdit;
    Button1naX: TButton;
    ButtonSin: TButton;
    ButtonCos: TButton;
    ButtonAvX: TButton;
    ButtonLog: TButton;
    ButtonMod: TButton;
    procedure Button7Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button0Click(Sender: TObject);
    procedure ButtonPlusClick(Sender: TObject);
    procedure ButtonMinusClick(Sender: TObject);
    procedure ButtonUmnClick(Sender: TObject);
    procedure ButtonDelClick(Sender: TObject);
    procedure ButtonCClick(Sender: TObject);
    procedure ButtonRezClick(Sender: TObject);
    procedure Button1naXClick(Sender: TObject);
    procedure ButtonSinClick(Sender: TObject);
    procedure ButtonCosClick(Sender: TObject);
    procedure ButtonLogClick(Sender: TObject);
    procedure ButtonAvXClick(Sender: TObject);
    procedure ButtonModClick(Sender: TObject);
    end;

var
  Form1: TForm1;
  a,f,z: real;
  D,Rv: char;
  Calculator: TCalculator;

implementation

Constructor TCalculator.Create;
Begin
 FValue1:=AX;
 FValue2:=AY;
End;
Function TCalulator.InDegree;
Begin
 Result:=exp(X*ln(Y));   // здесь ваши реализации функции
End;
Function TCalculator.Log;
Begin
 Result:=ln(X)/ln(Y); // здесь ваши реализации функции
End;
{$R *.dfm}
  procedure TForm1.Button0Click(Sender: TObject);
begin
Edit1.Text:=Edit1.Text+(Sender As TButton).caption;
end;

procedure TForm1.ButtonPlusClick(Sender: TObject);
begin
D:='+';
a:=StrToFloat(Edit1.Text);
Edit1.Text:='';
end;

procedure TForm1.ButtonMinusClick(Sender: TObject);
begin
D:='-';
a:=StrToFloat(Edit1.Text);
Edit1.Text:='';
end;

procedure TForm1.ButtonUmnClick(Sender: TObject);
begin
D:='*';
a:=StrToFloat(Edit1.Text);
Edit1.Text:='';
end;

procedure TForm1.ButtonDelClick(Sender: TObject);
begin
D:='/';
a:=StrToFloat(Edit1.Text);
Edit1.Text:='';
end;



procedure TForm1.ButtonRezClick(Sender: TObject);
begin
Rv:='=';
z:=StrToFloat(Edit1.Text);
Case D Of
 '+':f:=x+y;
 '-':f:=x-y;
 '*':f=x*y;
 '/':f:=a/z;
 '\':f:=1/a;
 'S': f:=Sin(a);
 'C':f:=Cos(a);
 '|':f:=abs(a);
 'A': Function InDegree(a);
'L': Function Log(a);

end;

 procedure TForm1.ButtonCClick(Sender: TObject);
begin
a:=StrToFloat(Edit1.Text);
Edit1.Clear;
end;

Var D:Integer;
procedure TForm1.ButtonModClick(Sender: TObject);
begin
D:=(Sender As TButton).Tag;
x:=StrToFloat(Edit1.Text);
Edit1.Text:='';
end;

end.
Но ничего конечно же не работает и подсвечивает красным строку "Function TCalulator.InDegree;"... И я думаю это далеко не единственная строка которую оно мне подсветит...Что же делать?
Ну,как?.. Твоё коллективное сознание уловило Message или ты по-прежнему считаешь себя Избранным?..
ulala вне форума Ответить с цитированием
Старый 01.12.2009, 10:32   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

какие ошибки выдает?
(или можете скинуть весь проект в архиве)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 01.12.2009, 10:34   #3
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

А при этом Делфи должен еще и писать сообщение об ошибке. Может его тоже нам показать?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 01.12.2009, 10:36   #4
ulala
Пользователь
 
Аватар для ulala
 
Регистрация: 18.09.2009
Сообщений: 62
По умолчанию

[Error] KalkUnFORUM.pas(85): Function needs result type
[Error] KalkUnFORUM.pas(87): Undeclared identifier: 'X'
[Error] KalkUnFORUM.pas(134): Undeclared identifier: 'x'
[Error] KalkUnFORUM.pas(136): ':=' expected but '=' found
[Error] KalkUnFORUM.pas(142): Statement expected but 'FUNCTION' found
[Error] KalkUnFORUM.pas(142): Missing parameter type
[Error] KalkUnFORUM.pas(143): Declaration expected but string constant found
[Error] KalkUnFORUM.pas(147): ';' expected but '.' found

и ещё сто штук подобных...
Ну,как?.. Твоё коллективное сознание уловило Message или ты по-прежнему считаешь себя Избранным?..
ulala вне форума Ответить с цитированием
Старый 01.12.2009, 10:44   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
Constructor TCalculator.Create;
Begin
 inherited Create;//или хотите на AV нарватся? забыли как классы правильно оформлять(конструкторы)?
 FValue1:=AX;
 FValue2:=AY;
End;
Function TCalculator.InDegree:Real;
Begin
 Result:=exp(X*ln(Y));   // здесь ваши реализации функции
End;
Function TCalculator.Log:Real;
Begin
 Result:=ln(X)/ln(Y); // здесь ваши реализации функции
End;
и я бы советовал во внутренних функциях класса использовать всетаки поля, а не св-ва
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 01.12.2009, 10:45   #6
ulala
Пользователь
 
Аватар для ulala
 
Регистрация: 18.09.2009
Сообщений: 62
По умолчанию

первый раз в дельфи работаю
Ну,как?.. Твоё коллективное сознание уловило Message или ты по-прежнему считаешь себя Избранным?..
ulala вне форума Ответить с цитированием
Старый 01.12.2009, 10:49   #7
ulala
Пользователь
 
Аватар для ulala
 
Регистрация: 18.09.2009
Сообщений: 62
По умолчанию

Кажется я тут ещё и функцию неверно использовала...
Ну,как?.. Твоё коллективное сознание уловило Message или ты по-прежнему считаешь себя Избранным?..
ulala вне форума Ответить с цитированием
Старый 01.12.2009, 10:53   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

если подумать, то у вас тут много чего...потому Делфи матерится...
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 01.12.2009, 10:54   #9
ulala
Пользователь
 
Аватар для ulala
 
Регистрация: 18.09.2009
Сообщений: 62
По умолчанию

Мдя... первые лабораторные - они трудные самые...
Ну,как?.. Твоё коллективное сознание уловило Message или ты по-прежнему считаешь себя Избранным?..
ulala вне форума Ответить с цитированием
Старый 01.12.2009, 10:58   #10
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Уважаемые, основная ошибка здесь не в том, чтобы в конструкторе калькулятора вызвать inherited (кстати, он здесь не нужен), а в том, что нет кода, в котором создается экземпляр класса TCalculator.
А по мелочи, да, есть описки. Если вместо TCalculator записывать TCalulator, то, понятно, будут ошибки при компиляции. в частности и Function needs result type.
Скандербег вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание своего класса в Delphi 7 - фигуры для шахматной доски electric Компоненты Delphi 18 24.10.2013 15:06
Создание класса в Delphi program123 Помощь студентам 6 16.06.2009 14:39
Delphi. Создание нового класса, его "предков". Krechet Помощь студентам 0 26.04.2009 15:52
[Delphi]: Создание нового класса с наследованием Kolhan Помощь студентам 6 17.04.2009 00:03