XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Общение> Трактир
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
JET_LI

offline
Опыт: 1,724
Активность:
Модуль объектов и динамические объекты
Цитата:
Сообщение от NightSoldier
1.Создайте модуль определения объектов под именем chet_2. Скомпилируйте его и сохраните в каталоге на локальном диске под тем же именем.
Содержимое модуля должно выглядеть примерно так.
Код:
unit chet_2;{заголовок модуля}
interface
type
    strn=string[30];
    mel=0..99;
    DenSum=Object{определение типа объекта денежная сумма}
{определение полей объектов}
           Rubl:integer;
           kop:mel;
{определение заголовков методов объекта DenSum}
 procedure InitDS( R:integer;Kp:mel);
 procedure AddSumm(R:integer;Kp:mel);
 procedure SubSumm(R:integer;Kp:mel);
 procedure PrintSum;
 end;
{конец определения типа объекта DenSum}
   Client=Object(DenSum){определения типа объекта Client}
{определение полей объекта Client}
         Name:strn;
         code:integer;
{определение заголовков методов объекта Client}
  constructor InitCL(R:integer;Kp:mel;x:strn);
  procedure AddSumm(R:integer;Kp:mel);
   procedure SubSumm(R:integer;Kp:mel);
  procedure PrintSchet;
  end;{конец определения типа объекта Client}

implementation
{определение методов объектов DenSum и Client}

 procedure DenSum.InitDS( R:integer;Kp:mel);
 begin
 Rubl:=R;
 kop:=Kp;
 end;

  procedure DenSum.AddSumm(R:integer;Kp:mel);
  begin
  if kop>=kp then
    begin
     Rubl:=Rubl+R+1;
     kop:=kop+kp-100;
     end
     else
     begin
      Rubl:=Rubl+R;
     kop:= kop+kp;
     end;
   end;

procedure DenSum.SubSumm(R:integer;Kp:mel);
begin
if kop<kp then
    begin
     rubl:=rubl-R-1;
     kop:=100+kop-kp;
     end
     else
     begin
      rubl:=rubl-R;
     kop:= kop- kp;
     end;
     end;

     procedure DenSum.PrintSum;
     begin
     writeln(' =',Rubl,'p',kop);
     end;

     constructor Client.InitCL(R:integer;Kp:mel;x:strn);
     begin
     name:=x;
     DenSum.InitDS(R,Kp);
     end;

     procedure Client.AddSumm(R:integer;Kp:mel);
     begin
     DenSum.AddSumm(R,Kp);
     end;

     procedure Client.SubSumm(R:integer;Kp:mel);
     begin
     DenSum.SubSumm(R,Kp);
     end;

     procedure Client.PrintSchet;
     begin
     write(name);
     DenSum.PrintSum;
     end;
     end.
При создании своего модуля воспользуйтесь текстами своих предыдущих программ чтобы не писать все заново.

2.Создайте программу для тестирования своего модуля.

Подключите модуль chet_2 к своей программе. В программе оформите процедуру, которая будет содержать основные операции со счетом клиента. Входным параметром процедуры будет экземпляр объекта типа Client, т.е. заголовок модуля должен выглядеть примерно так
procedure menu(anyclient:Client);
begin
{тело процедуры}
end;
В программе определите несколько экземпляров объекта типа Client.

3.Создание динамических объектов типа Client.
Создайте программу которая создает список объектов типа Client. Программа использует модуль chet_2.
Код:
Program schet_2;
uses chet_2;
     type
     ClientPtr=^Client;
     NodePtr = ^Node;
Node = record
Item : ClientPtr;{указатель на тип произодный от типа Client}
Next : NodePtr;{указатель на следующий в списке элемент}
end;
List = Object{определяется тип объекта List (список)}
CurNode : NodePtr;
{заголовки методов типа объекта List}
Constructor Init;
Destructor LastStep;
Procedure AddNew(Item : ClientPtr);
Procedure ShowAll;
end;

Constructor List.Init;
{создание объекта типа List}
Begin
CurNode:=nil; {CurNode – указатель на начало списка}
End;

Destructor List.LastStep;
{деструктор объекта типа List}
Var Temp : NodePtr;
Begin
While CurNode <> nil Do Begin
Temp:=CurNode;
{Dispose(Temp^.Item,LastStep);} {Вызывается деструктор данного типа}
CurNode:=Temp^.Next;
Dispose(Temp); {Удалить переменную из динамической памяти}
End;
End;

Procedure List.AddNew(Item : ClientPtr);
{добавление нового объекта в начало списка}
Var Temp : NodePtr;
Begin
New(Temp);
Temp^.Item:=Item;
Temp^.Next:=CurNode; {элемент добавляется в начало списка}
CurNode:=Temp;
End;

Procedure List.ShowAll;
{показать весь список}
Var Temp : NodePtr;
Begin
Temp:=CurNode;
While Temp <> nil Do {цикл по цепочке указателей }
Begin Temp^.Item^.PrintSchet;
Temp:=Temp^.Next;
End;
End;

     var
     Xlist:List;
     Mychet:Client;
     S1:integer;k1:mel;
     y:strn;

     begin {main}
     Xlist.Init; {создание экземпляра объекта типа List}
     Xlist.AddNew( New(ClientPtr,InitCL(100,20,'Ivan')));
     Xlist.AddNew( New(ClientPtr,InitCL(150,30,'Peter')));
     Xlist.AddNew( New(ClientPtr,InitCL(200,50,'jon')));
     Xlist.AddNew( New(ClientPtr,InitCL(250,70,'vasy')));
     Xlist.ShowAll; {показать весь список}
     Xlist.LastStep;{удаление экземпляра объекта из списка}
     end.


Самостоятельное задание.
Добавить метод Find в определение объекта типа List.
Метод находит в списке клиента с заданным именем и если его нет, то добавляет его в начало списка. Можно использовать эту же программу.
Старый 04.06.2009, 15:48
Arte_de_Mort

offline
Опыт: 23,452
Активность:
и?
Старый 04.06.2009, 16:12
JET_LI

offline
Опыт: 1,724
Активность:
Помогите сделать, плииз.
завтро сдавать, а я вообще без понятий с чего начать.
бывает же-(
Старый 04.06.2009, 16:47
Ответ

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

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

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 04:47.