Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Delphi] Переопределенный метод Invite


Автор: dawystrik 23.3.2009, 15:35
Вот у меня дана лабораторная:
Постановка задачи:

1. Вычислить значение арифметического выражения для следующих типов данных:

A,b:integer;
A,b:single;
A:integer, b:single;
A:single, b:integer.

2. Реализовать переопределенный метод Invite, в котором выводится сообщение о том, метод какого класса вызван.
3. Реализовать в родительском классе абстрактный метод .
4. Реализовать в производных классах виртуальный метод , который вычисляет значение арифметического выражения для разных типов данных.
5. Используя инструментальную среду Delphi в консольном режиме (или Windows приложение) вывести на экран значения выражения для разных типов данных.
Арифметическое выражение:
(arctg(c - d/2))/(2*a - b/c)

Подскажите,пожалуйста,что это за "переопределенный метод Invite" и как "Реализовать в родительском классе абстрактный метод" и "Реализовать в производных классах виртуальный метод , который вычисляет значение арифметического выражения для разных типов данных"?

Автор: Christoph 23.3.2009, 15:51
это все классика, читай ООП

Автор: dawystrik 23.3.2009, 15:58
я нигде не могу найти переопределенный метод Invite

Автор: Christoph 23.3.2009, 16:20
 smile почитай про перепопределние методов, а метод может называться по разному, хоть Invite, хоть Zooko (вспомнил рекламу "Invite просто добавь воды")

Автор: dawystrik 23.3.2009, 16:46
помогите,пожалуйста,мне с программкой,а то я в этих методах не разбираюсь...

Автор: CodeMonkey 23.3.2009, 17:28
Вам лабораторная на то и дана, чтобы вы разобрались smile 

Подсказка: метод Invite - вы должны реализовать его САМИ. Подумать как и сделать. Что должен делать метод? Ну вот: "котором выводится сообщение о том, метод какого класса вызван". Если хоть немного подключить сюда свою голову, то увидите, что:
- из "метод какого класса вызван" следует, что вы должны написать несколько классов.
- в самом методе должно выводиться сообщение (как? Ну должны же у вас читаться лекции!).
- метод ещё как-то должен узнать, из какого класса его вызвали. Есть несколько вариантов решения. Вы должны выбрать подходящий, исходя из своих лекций.

Всё. Голова + лекции = результат. Делов на 15 минут.

Добавлено через 1 минуту и 26 секунд
P.S.
Цитата(dawystrik @  23.3.2009,  16:46 Найти цитируемый пост)
помогите,пожалуйста,мне с программкой,а то я в этих методах не разбираюсь...

А если вы хотите готовую программу не думая - вам бы в соседние разделы: просить написать программу за соответствующую плату ;)

Автор: THandle 23.3.2009, 17:30
Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 

Автор: dawystrik 23.3.2009, 17:39
молодцы,всё без меня переместили,я что сказала,что мне готовая программа нужна???а по поводу лекций,я учусь заочно и лекций у нас не было!!!

Автор: CodeMonkey 23.3.2009, 17:57
Цитата(dawystrik @  23.3.2009,  17:39 Найти цитируемый пост)
я что сказала,что мне готовая программа нужна???

См.:
Цитата(dawystrik @  23.3.2009,  16:46 Найти цитируемый пост)
помогите,пожалуйста,мне с программкой


Автор: THandle 23.3.2009, 18:05
Цитата(dawystrik @  23.3.2009,  15:35 Найти цитируемый пост)

Подскажите,пожалуйста,что это за "переопределенный метод Invite" и как "Реализовать в родительском классе абстрактный метод" и "Реализовать в производных классах виртуальный метод , который вычисляет значение арифметического выражения для разных типов данных"? 


Example:

Код


type
  TMyParentClass = class
  public
    function SummInt(const A, B: Integer): Integer; virtual; abstract;
    procedure Invite;
  end;

  TMyFirstClass = class(TMyParentClass)
  public
    function SummInt(const A, B: Integer): Integer; virtual;
    procedure Invite;
  end;

{ TMyParentClass }

procedure TMyParentClass.Invite;
begin
  ShowMessage('Parent class');
end;

{ TMyFirstClass }

procedure TMyFirstClass.Invite;
begin
  ShowMessage('First class');
end;

function TMyFirstClass.SummInt(const A, B: Integer): Integer;
begin
  Result := A + B;
  ShowMessage(IntToStr(Result));
end;



dawystrik, почитайте хотя бы того же Пачеко, глава 2:

http://www.delphilab.ru/content/view/17/46/

Автор: CodeMonkey 23.3.2009, 18:19
THandle, убил всю самостоятельную работу на корню! smile

Автор: THandle 23.3.2009, 18:29
CodeMonkey, после этого:

Цитата(dawystrik @  23.3.2009,  17:39 Найти цитируемый пост)
сказала


Я не мог не сказать хоть пару слов по теме)

Автор: dawystrik 24.3.2009, 02:12
ну-ну!!!

Добавлено через 4 минуты и 39 секунд
Цитата(dawystrik @  23.3.2009,  17:39 Найти цитируемый пост)
я что сказала,что мне готовая программа нужна???

См.:
Цитата(dawystrik @  23.3.2009,  16:46 Найти цитируемый пост)
помогите,пожалуйста,мне с программкой

я что так и написала "сделайте мне программу"?Помочь - это не означает сделать,если Вы не понимаете значения данного слова,то не надо других в заблуждение вводить.

Добавлено через 6 минут и 55 секунд
CodeMonkey, после этого:

Цитата(dawystrik @  23.3.2009,  17:39 Найти цитируемый пост)
сказала


Я не мог не сказать хоть пару слов по теме)

очень по-мужски обсуждать за спиной...создайте где-нибудь во флудилке тогда тему как подколоть и обосрать человека...как вам идея??

Автор: THandle 24.3.2009, 09:24
dawystrik, не обижайтесь пожалуйста.

Цитата(dawystrik @  24.3.2009,  02:12 Найти цитируемый пост)
очень по-мужски обсуждать за спиной...создайте где-нибудь во флудилке тогда тему как подколоть и обосрать человека...как вам идея?? 


Даже в мыслях не было ничего подобного... Прошу прощения, если обидел.

Насчет переноса темы: я перенес тему сюда, так как она просто больше соответствует разделу. Тут люди чаще помогают с подобными вопросами.


dawystrik, что Вам остается непонятным, с учетом моего http://forum.vingrad.ru/index.php?showtopic=252439&view=findpost&p=1820588 поста?

Автор: Rrader 24.3.2009, 10:34
Цитата

(arctg(c - d/2))/(2*a - b/c)


А c и d откуда взять?

Автор: dawystrik 24.3.2009, 10:42
Цитата

(arctg(c - d/2))/(2*a - b/c)


А c и d откуда взять?
ввести с клавиатуры

Автор: Rrader 24.3.2009, 12:19
Код

program Project1;

{$APPTYPE CONSOLE}

uses Windows, Dialogs, Math;

type
  TBaseClass = class(TObject)
  protected
    procedure Invite; virtual; abstract;
  end;

  TIntegerClass = class(TBaseClass)
  private
    A, B: Integer;
  public
    procedure Invite; override;
    function Evaluate(C, D: Integer): Single; virtual;
  end;

  TSingleClass = class(TBaseClass)
  private
    A, B: Single;
  public
    procedure Invite; override;
    function Evaluate(C, D: Integer): Single; virtual;
  end;

  TIntSingleClass = class(TBaseClass)
  private
    A: Integer;
    B: Single;
  public
    procedure Invite; override;
    function Evaluate(C, D: Integer): Single; virtual;
  end;

  TSingleIntClass = class(TBaseClass)
  private
    A: Single;
    B: Integer;
  public
    procedure Invite; override;
    function Evaluate(C, D: Integer): Single; virtual;
  end;

{ TIntegerClass }


function TIntegerClass.Evaluate(C, D: Integer): Single;
begin
  Result := ArcTan(C - D / 2) / (A shl 1 - B / C);
  WriteLn('Result is : ', Result);
end;

procedure TIntegerClass.Invite;
begin
  ShowMessage('Вызван из: ' + ClassName);
end;

{ TSingleClass }

function TSingleClass.Evaluate(C, D: Integer): Single;
begin
  Result := ArcTan(C - D / 2) / (A * 2 - B / C);
  WriteLn('Result is : ', Result);
end;

procedure TSingleClass.Invite;
begin
  ShowMessage('Вызван из: ' + ClassName);
end;

{ TIntSingleClass }

function TIntSingleClass.Evaluate(C, D: Integer): Single;
begin
  Result := ArcTan(C - D / 2) / (A shl 1 - B / C);
  WriteLn('Result is : ', Result);
end;

procedure TIntSingleClass.Invite;
begin
  ShowMessage('Вызван из: ' + ClassName);
end;

{ TSingleIntClass }

procedure TSingleIntClass.Invite;
begin
  ShowMessage('Вызван из: ' + ClassName);
end;

function TSingleIntClass.Evaluate(C, D: Integer): Single;
begin
  Result := ArcTan(C - D / 2) / (A * 2 - B / C);
  WriteLn('Result is : ', Result);
end;

var
  C, D: Integer;

begin
  { TODO -oUser -cConsole Main : Insert code here }
  WriteLn('Please enter C and D...' + sLineBreak);
  ReadLn(C);
  WriteLn;
  ReadLn(D);
  with TIntegerClass.Create do
  try
    A := 20;
    B := 10;
    Invite;
    Evaluate(C, D);
  finally
    Free;
  end;
  with TSingleClass.Create do
  try
    A := 10.15;
    B := 5.25;
    Invite;
    Evaluate(C, D);
  finally
    Free;
  end;
  with TSingleIntClass.Create do
  try
    A := 10.15;
    B := 5;
    Invite;
    Evaluate(C, D);
  finally
    Free;
  end;
  with TIntSingleClass.Create do
  try
    A := 10;
    B := 5.25;
    Invite;
    Evaluate(C, D);
  finally
    Free;
  end;
  ReadLn;
end.


Задание не самое лучшее, пришлось много однотипного кода продублировать.

Автор: dawystrik 24.3.2009, 17:13
проверьте,плиз,на правильность согласно моему условию,а то ошбику выдает,а как исправить - фиг его знает
Код
program Project1;
{$APPTYPE CONSOLE}
uses SysUtils, Classes;
type
    TParent=class(TObject)
        a:array of string;
     protected
        procedure ShowList; virtual;
     public
        procedure Invite;virtual; abstract;
        procedure Show;
    end;
    TChild=class(TParent)
     public
        procedure Invite; override;
        procedure ShowList; override;
    end;


procedure TParent.ShowList;
var i:byte; s:string;
begin
    s:='';
    for i:=0 to High(a) do
      s:=s+a[i]+#13#10;
    write(s);
end;

procedure TParent.Show;
begin
    write('a list:');
    ShowList;
end;

procedure TChild.Invite;
begin
writeln((self as TObject).ClassName);
end;
 
procedure TChild.ShowList;
var i:byte; s:string;
begin
    s:='';
    for i:=0 to High(a) do
      s:=s+a[i]+' : ';
    write(s);
end;
function Ar1(var a,b,c,d:integer):real;
begin
if c=0 then
begin
   Writeln ('Na nol delit nelzja!!!!');
   Exit;
end;
Ar1:=(arctan(c - (d/2)))/(2*a - (b/c));
end;
function Ar2(var e,f:single;c,d:integer):double;
begin
if c=0 then
begin
   Writeln ('Na nol delit nelzja!!!!');
   Exit;
end;
Ar2:=(arctan(c - (d/2)))/(2*e - (f/c));
end;
function Ar3(var f:single; e,c,d:integer):double;
begin
if c=0 then
begin
   Writeln ('Na nol delit nelzja!!!!');
   Exit;
end;
Ar3:=(arctan(c - (d/2)))/(2*e - (f/c));
end;
function Ar4(var e:single; f,c,d:integer):double;
begin
if c=0 then
begin
   Writeln ('Na nol delit nelzja!!!!');
   Exit;
end;
Ar4:=(arctan(c - (d/2)))/(2*e - (f/c));
end;
var com,g:byte;
    a,b,c,d:integer;
    e,f:single;
begin
  writeln('Vuberite odnu iz command:');
  writeln('1. Pokazat imja klassa TParent');
  writeln('2. Pokazat imja klassa TChild');
  writeln('3. Vuchislit vurajenie (arctg(c - d/2))/(2*a - b/c)');
  writeln('4. Vuxod');
  read(com);
  case com of
    1: begin write('Type of class: '); TParent.Create.Invite; end;    {ERROR!!!!!}
    2: begin write('Type of Child-class: ');TChild.Create.Invite; end; {CORRECT}
    3: begin writeln('Vvedite a: ');
             Writeln('Vvedite b:');
             Writeln('Vvedite c:');
             Writeln('Vvedite d:');
             Writeln('Vuberite tip a i b:');
             Writeln('1. a,b:integer;');
             Writeln('2. a,b:single;');
             Writeln('3. a:integer, b:single;');
             Writeln('4. a:single, b:integer;');
             readln(a);
             readln(b);
             readln(c);
             readln(d);
             readln(e);
             readln(f);
             readln(g);
             case g of
                  1: begin Writeln('Rezultat raven: ',Ar1(a,b,c,d));
                           Writeln('Najmite <Enter> dlja vuxoda')
                     end;
                  2: begin Writeln('Rezultat raven: ',Ar2(e,f,c,d));
                           Writeln('Najmite <Enter> dlja vuxoda')
                     end;
                  3: begin Writeln('Rezultat raven: ',Ar3(e,f,c,d));
                           Writeln('Najmite <Enter> dlja vuxoda')
                     end;
                  4: begin Writeln('Rezultat raven: ',Ar4(e,f,c,d));
                           Writeln('Najmite <Enter> dlja vuxoda')
                     end;
                  end;
    4: begin
         Exit
       end;
  end;
  readln;
  readln;
end.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)