|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Модуль объектов и динамические объекты
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. При создании своего модуля воспользуйтесь текстами своих предыдущих программ чтобы не писать все заново. Подключите модуль 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. Метод находит в списке клиента с заданным именем и если его нет, то добавляет его в начало списка. Можно использовать эту же программу. Последний раз редактировалось Admin, 04.06.2009 в 12:53. |
#2
|
|||
|
|||
Хоть 1 задание подскажите, плииис.
|
#3
|
||||
|
||||
У вас уже готовый код, что вам еще подсказывать?
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#4
|
|||
|
|||
я не могу понять как с этим работать!
-( Я создал юнит chet_2, вставил в него код, описанный в 1 пункте. Создал новую программу и подключил к ней этот юнит. В программе создал процедуру menu из пункта 2. А вот в теле её незнаю, что писать! Как распоряжаться в дальнейшем с этой процедурой? Плиз, если не трудно напишите пример тела этой процедуры и скажите, как работать с ней, например при нажатии кнопки Button1. |
#5
|
|||
|
|||
Пожалуйста помогите!
Мне срочно нужно сделать это задание! Скиньте исходник, что получилось плииз. |