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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.12.2009, 20:19   #1
Nostalgia
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 44
По умолчанию Классы

--------------------------------------------------------------------------------

Если здесь есть знающие люди, помогите пожалуйста разобратся, подскажите алгоритм.
вот задание: опишите класс human, который используется для хранения фамилии, года рождени человека и содержит методы получения значения года рождения, вычисления возраста. Вызовите три метода(включая конструктор).

Не могу разобраться что требуется в этой программе. эта программа для 1 человека или для нескольких тоже можно? где прописывать фамилии? Я пробовала написать код, но там две ошибки. Причина первой мне совсем непонятна. может кто то сможет разобраться? могу скинуть программку на электронный адрес.

первый модуль:

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Unit2, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
    H:THuman;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
H:=THuman.Create;
Form1.Memo1.Lines.Add(H.Describe);
H.fam:='Petrov';
H.God_rozd:=1985;
Form1.Memo1.Lines.Add(H.Describe);
end;

end.
второй модуль

Код:
unit Unit2;

interface
type
THuman=class
Ffam:string;
FGod_rozd:integer;
private
function GetFfam:string;
procedure SetFfam(Ff:string);
function GetFGod_rozd:integer;
procedure SetFGod_rozd(FGR:integer);
public
function Describe:string;
property fam: string read GetFfam
                     write SetFfam;
property God_rozd: integer read GetFGod_rozd
                           write SetFGod_rozd;
procedure A;
end;

implementation
function THuman.GetFfam:string;
begin
  GetFfam:=Ffam;
end;

function THuman.GetFGod_rozd:integer;
begin
  GetFGod_rozd:=FGod_rozd;
end;

procedure THuman.SetFfam(Ff:string);
begin
  Ffam:=Ff;
end;

procedure THuman.SetFGod_rozd(FGR:integer);
begin
  FGod_rozd:=FGR;
end;

function THuman.Describe:string;
begin
  Describe:='Ffam-'+Ffam+'   '+'God_rozd'+Inttostr(FGod_rozd);
end;

procedure THuman.A();
begin
FGod_rozd:=2009-FGod_rozd;
end;

end.
Nostalgia вне форума Ответить с цитированием
Старый 09.12.2009, 23:08   #2
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

То что написано в задании:
Код:
unit Unit2;

interface
type
  THuman = class
  private
    Ffam: string;
    FGod_rozd: integer;
  public
    constructor Create(fam: string; God_rozd: integer);

    function GetFfam: string;
    function GetFGod_rozd: integer;
    function Age: integer;
  end;

implementation

uses
  SysUtils, DateUtils;

constructor THuman.Create(fam: string; God_rozd: integer);
begin
  Ffam := fam;
  FGod_rozd := God_rozd;
end;

function THuman.Age: integer;
begin
  Result := YearOf(Date()) - FGod_rozd;
end;

function THuman.GetFfam: string;
begin
  GetFfam := Ffam;
end;

function THuman.GetFGod_rozd: integer;
begin
  GetFGod_rozd := FGod_rozd;
end;

end.
Используем
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  H:THuman;
begin
H:=THuman.Create('Petrov', 1985);
Form1.Memo1.Lines.Add('фамилия: ' + H.GetFfam);
Form1.Memo1.Lines.Add('год рождения: ' + IntToStr(H.GetFGod_rozd));
Form1.Memo1.Lines.Add('возраст: ' + IntToStr(H.Age));
H.Free;
s.Creator вне форума Ответить с цитированием
Старый 10.12.2009, 08:22   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Form1.Memo1.Lines.Add('фамилия: ' + H.GetFfam);
Откуда такая любовь к полному пути? Это же делфи тут можно проще написать:
Код:
With Form1.Memo1.Lines do begin
 Add('фамилия: ' + H.GetFfam);
 Add('год рождения: ' + IntToStr(H.GetFGod_rozd));
 Add('возраст: ' + IntToStr(H.Age));
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.12.2009, 10:27   #4
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Откуда такая любовь к полному пути? Это же делфи тут можно проще написать:
Код:
With Form1.Memo1.Lines do begin
 Add('фамилия: ' + H.GetFfam);
 Add('год рождения: ' + IntToStr(H.GetFGod_rozd));
 Add('возраст: ' + IntToStr(H.Age));
end;
1. Судя по разделу и приведенному в начале коду боюсь, что даже
Код:
YearOf(Date())
может вызвать у преподователя вопросы и подозрения.

2. В одной фирме руководитель-рецензент меня наоборот упрекнул в использовании with :
Код:
procedure TMyClass1.MyMesod();
begin
  with MyOtherClassObject do 
     Add('чтонибуть');
end;
и TMyClass1 и TMyOtherClassObject имеют метод Add.
Ваш сослуживец переименовывает MyOtherClassObject.Add в MyOtherClassObject.AddLog. - что произойдет?

3. После этого привык больше использовать:
Код:
memo_Lines: TStrings;
begin
 memo_Lines := Form1.Memo1.Lines;
 memo_Lines.Add('фамилия: ' + H.GetFfam);
 memo_Lines.Add('год рождения: ' + IntToStr(H.GetFGod_rozd));
 memo_Lines.Add('возраст: ' + IntToStr(H.Age));
end;
как компромиссный вариант ( и кстати и для отладки и читаемости более удобен )
s.Creator вне форума Ответить с цитированием
Старый 10.12.2009, 10:47   #5
Nostalgia
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 44
По умолчанию

Цитата:
Сообщение от s.Creator Посмотреть сообщение
1. Судя по разделу и приведенному в начале коду боюсь, что даже
Код:
YearOf(Date())
может вызвать у преподователя вопросы и подозрения.

2. В одной фирме руководитель-рецензент меня наоборот упрекнул в использовании with :
Код:
procedure TMyClass1.MyMesod();
begin
  with MyOtherClassObject do 
     Add('чтонибуть');
end;
и TMyClass1 и TMyOtherClassObject имеют метод Add.
Ваш сослуживец переименовывает MyOtherClassObject.Add в MyOtherClassObject.AddLog. - что произойдет?

3. После этого привык больше использовать:
Код:
memo_Lines: TStrings;
begin
 memo_Lines := Form1.Memo1.Lines;
 memo_Lines.Add('фамилия: ' + H.GetFfam);
 memo_Lines.Add('год рождения: ' + IntToStr(H.GetFGod_rozd));
 memo_Lines.Add('возраст: ' + IntToStr(H.Age));
end;
как компромиссный вариант ( и кстати и для отладки и читаемости более удобен )
Да, вот код YearOf(Date()) точно вызовет у преподователя подозрения, точнее он будет уверен, что это написано не мной... И будет добивать меня , пока не переделаю весь код...
Nostalgia вне форума Ответить с цитированием
Старый 10.12.2009, 11:13   #6
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

Тогда напиши как писал 2009 - FGod_rozd;
или брось Edit ( введите текущий год ) и StrToInt(Edit1.Text) - ...

или скажи что набрал в справке Delphi ( я использовал 7 ) Year и со второго раза нашел эту функцию - там написано что она в модуле DateUtils и есть примерчик.
От туда потом узнал про Date ( из примера ).
В общем надеюсь сообразишь

Если еще вопросы по коду спрашивай - сегодня я немного свободен, если понятно спросиш понятно обьясню

Последний раз редактировалось Stilet; 10.12.2009 в 11:28.
s.Creator вне форума Ответить с цитированием
Старый 12.12.2009, 13:01   #7
Nostalgia
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 44
По умолчанию

Цитата:
Сообщение от s.Creator Посмотреть сообщение
Тогда напиши как писал 2009 - FGod_rozd;
или брось Edit ( введите текущий год ) и StrToInt(Edit1.Text) - ...

или скажи что набрал в справке Delphi ( я использовал 7 ) Year и со второго раза нашел эту функцию - там написано что она в модуле DateUtils и есть примерчик.
От туда потом узнал про Date ( из примера ).
В общем надеюсь сообразишь

Если еще вопросы по коду спрашивай - сегодня я немного свободен, если понятно спросиш понятно обьясню

function THuman.Age: integer;
begin

Result := StrToInt(Form1.Edit1.Text)-FGod_rozd;
end;



Как сделать , чтобы год рождения вводить и считывать с Edita? Ато у меня так не работает...

Последний раз редактировалось Nostalgia; 12.12.2009 в 17:30.
Nostalgia вне форума Ответить с цитированием
Старый 12.12.2009, 18:19   #8
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

Так
Для твоего класса ( не обижайся )
в Unit2 после implementation
добавь ( то что красным )
uses
SysUtils, DateUtils, Unit1;

и естественно на форме должен быть Edit1
s.Creator вне форума Ответить с цитированием
Старый 12.12.2009, 18:23   #9
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

Цитата:
Как сделать , чтобы год рождения вводить и считывать с Edita? Ато у меня так не работает...
только в edit ты вводишь текущий год, а год рождения когда создаешь
H:=THuman.Create('Petrov', 1985);
s.Creator вне форума Ответить с цитированием
Старый 12.12.2009, 19:40   #10
Nostalgia
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 44
По умолчанию

Насколько мне известно USES пишут в разделе INTERFACE.

Edit есть на форме и
function THuman.Age: integer;
begin

Result := StrToInt(Form1.Edit1.Text)-FGod_rozd;
end;

Но выдаёт ошибку Circular unit reference to Unit1
Nostalgia вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++ классы KOLYTFR Помощь студентам 1 04.06.2009 19:58
классы elenSV Общие вопросы C/C++ 0 31.05.2009 09:48
Классы TeleSky Помощь студентам 11 05.01.2009 13:43
Классы Старовъръ Общие вопросы Delphi 4 26.06.2008 17:00