
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.3] |
![]() |
|
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
![]() |
Сообщ.
#16
,
|
|
Цитата kotmatroskin55 @ А ты знаешь, агрегацию тоже никто не отменял:Кстати,мне сказали,что наследование использовать нельзя: "Вы еще до этого не доросли" ![]() ![]() type TQueue = object private Lst : TList; public constructor Create; destructor Destroy; virtual; procedure Put (X : TItem); function Get : TItem; procedure Print; end; // ... constructor TQueue.Create; begin Lst.Create; end; destructor TQueue.Destroy; begin Lst.Destroy; end; procedure TQueue.Put (X : TItem); begin Lst.Append (X); end; function TQueue.Get : TItem; var T : Link; begin if Lst.IsEmpty then WriteLn('<>') else begin Get := Lst.head^.data; Lst.RemoveAt (Lst.head); end; end; procedure TQueue.Print; begin Lst.Print; end; ![]() |
Сообщ.
#17
,
|
|
|
Очень даже понятно,просто я сам только сегодня узнал.что наследование использовать нельзя. с одной стороны - правильно - необходимо со всеми этими делами как следует разобраться, а с другой - пользователю же все равно сколько и чего используется в программе - главное чтоб сама прога работала нормально.
|
Сообщ.
#18
,
|
|
|
вопрос:получается те процедуры,что я написал - неправильные или как? Добавлено Извини,сам понял, что вопрос предельно глупый |
Сообщ.
#19
,
|
|
|
еще два вопроса:
1. чем отличается "private" от "protected"; 2. и еще компилятор страшно ругается вот на это: ![]() ![]() function Queue.Get_Que:TElem;//взять элемент из очереди begin if Lst.IsEmpty then begin end else begin Get_Que := Lst.head^.data; Lst.RemoveAt (Lst.head); end; end; вот так: Error: identifier idents no member "head" |
Сообщ.
#20
,
|
|
|
RTFM: тут, и на лекциях должны рассказывать. Вкратце: public доступен откуда хочешь, private доступен только из методов самого класса и больше ниоткуда, protected еще доступен из методов потомков класса, если они есть. И ругается именно поэтому, head в твоем L1_List не паблик, а достать хочешь из не связанного никак Queue.
|
Сообщ.
#21
,
|
|
|
И еще один вопросик: как организовать обработку ошибок с помощью маски?,честно говоря не понял вообще
|
Сообщ.
#22
,
|
|
|
Наверное последний вопрос в этой теме: написал процедуру обработки,которая решает поставленную задачу,все робит,только не могу сообразить как правильно организовать цикл. Подскажите пожалуйста.
![]() ![]() ![]() ![]() ![]() ![]() ![]() procedure Queue.change(qu1,qu2:Queue;var qu_rez:Queue); var p:L1_List; x,y:TElem; begin//вот здесь должен быть цикл,типа пока обе очереди не станут пустыми x:=qu1.get_que; y:=qu2.get_que; if x>=y then begin qu_rez.put_que(x); qu_rez.put_que(y); end else begin qu_rez.put_que(y); qu_rez.put_que(x); end; end; |
![]() |
Сообщ.
#23
,
|
|
Цитата kotmatroskin55 @ //вот здесь должен быть цикл,типа пока обе очереди не станут пустыми Это неправильное предположение. Цикл должен быть до тех пор, пока ОДНА из очередей не станет пустой. Как только одна очередь пустая - выходишь из цикла и потом просто дописываешь в очередь-результат содержимое непустой очереди. Это было первое. Второе: не надо сразу писать и X и Y в очередь-результат. Иначе при вот таких данных: 1: <1, 2, 6, 8> 2: <5, 7> ты получишь неправильный результат: у тебя первые 2 элемента первой очереди меньше, чем первый элемент второй (а твой алгоритм запишет 1, 5 в результирующую очередь), поэтому надо писать в qu_rez только МЕНЬШЕЕ из значений. Идею понимаешь? ![]() |
Сообщ.
#24
,
|
|
|
если честно не особо: не могу понять, как проверить закончилась ли очередь:так что ли
![]() ![]() while lst.head<>nil do |
![]() |
Сообщ.
#25
,
|
|
Обычно у списка есть готовый метод, проверяющий его на пустоту. У тебя в первом сообщении он назывался IsEmptyList, у меня в №15 - IsEmpty. Вот его и вызывай для проверки.
|
Сообщ.
#26
,
|
|
|
попробовал - ничего хорошего не выходит,пишет пустая очередь
![]() ![]() procedure Queue.change(qu1,qu2:Queue;var qu_rez:Queue); var p:L1_List; x,y:TElem; begin while not lst.IsEmpty do begin x:=qu1.get_que; y:=qu2.get_que; if x>=y then begin qu_rez.put_que(x); qu_rez.put_que(y); end else begin qu_rez.put_que(y); qu_rez.put_que(x); end; end; end; |
![]() |
Сообщ.
#27
,
|
|
Знаешь, я второй раз то же самое писать не буду - перечитай мои посты выше и переделай алгоритм, потом будем продолжать. Этот код неверный.
|
Сообщ.
#28
,
|
|
|
кажись разобрался,осталось доделать процедуру сравнения,но это уже мелочи
|
Сообщ.
#29
,
|
|
|
Всем спасибо. Вопрос решен
|
Сообщ.
#30
,
|
|
|
На всякий случай решил выложить. Может кому сгодится, ну или появится желание покритиковать. Эту задачу я сдал. 1 курс матфака ОмГУ
Прикреплённый файл ![]() |