![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
2407 |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 3 Пол: Женский Репутация: ![]() ![]() ![]() |
Дан стек из чисел, упорядочить по убыванию.
|
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Можно использовать дополнительный стек?
|
Altair |
![]()
Сообщение
#3
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Если можно, то все это элементарно реализуемо с помощью материала из FAQ'a:
http://pascal.dax.ru/forum/index.php?showtopic=2706 -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Oleg_Z
Поэтому и спросил ... :yes: |
Altair |
![]()
Сообщение
#5
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Хм... кстати сортировку ДСД можно включить в FAQ...
volvo, если тот модуль переписать под объектную основу (ООП), и методы обработки списка обозначить директивой virtual, можно будет изменять тип элемента ДСД в самой программе? просто возникла идея сделать те модули из FAQ'a универсальными... -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Oleg_Z
Дать пример универсального кода без ООП? ;) Кстати, если хочешь, могу показать как эмулировать шаблоны на Паскале. |
Altair |
![]()
Сообщение
#7
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Покажи пожалуйста универсальный код... н омне кажется, что без ООП это будут какие-то "обманы", и код не очень красивый будет... все-таки ООП это красиво ...
А чо зашаблоны? покажи пожалуйста... -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Сам модуль выглядит так:
Код Unit StackUnit; Interface Const stackOk = 0; stackOverflow = 1; stackUnderflow = 2; Var StackError : Byte; Type NodePtr = ^Node; Node = Record Info : Pointer; Next : NodePtr; End; Stack = Record Head : NodePtr; Size : Word; End; Procedure InitStack( Var S : Stack; size : Word ); Procedure ClearStack( Var S : Stack ); Procedure Push( Var S : Stack; Var E ); Procedure Pop( Var S : Stack; Var E ); Function Empty( Var S : Stack ) : Boolean; Implementation Var SaveHeapError : Pointer; {$F+} Function HeapFunc( Size : Word ) : Integer; Begin HeapFunc := 1; End; {$F-} Procedure InitStack( Var S : Stack; size : Word ); Begin SaveHeapError := HeapError; S.Head := nil; S.Size := size; StackError := stackOk; End; Procedure ClearStack( Var S : Stack ); Var T : NodePtr; Begin StackError := stackOk; While S.Head <> nil Do Begin T := S.Head; S.Head := T^.Next; FreeMem( T^.Info, S.Size ); Dispose( T ) End End; Procedure Push( Var S : Stack; Var E ); Label Quit; Var T : NodePtr; Begin HeapError := @HeapFunc; StackError := stackOverflow; T := New( NodePtr ); If T = nil Then Goto Quit; T^.Next := S.Head; S.Head := T; GetMem( T^.Info, S.Size ); If T^.Info = nil Then Goto Quit; Move( E, T^.Info^, S.Size ); StackError := stackOk; Quit: HeapError := SaveHeapError End; Procedure Pop( Var S : Stack; Var E ); Var T : NodePtr; Begin StackError := stackUnderflow; If S.Head = nil Then Exit; T := S.Head; S.Head := T^.Next; Move( T^.Info^, E, S.Size ); FreeMem( T^.Info, S.Size ); Dispose( T ); StackError := stackOk End; Procedure Top( Var S : Stack; Var E ); Begin StackError := stackUnderflow; If S.Head = nil Then Exit; Move( S.Head^.Info^, E, S.Size ); StackError := stackOk End; Function Empty( Var S : Stack ) : Boolean; Begin Empty := (S.Head = nil) End; END. А вот пример использования: Код uses stackunit; var si: stack; i, x: integer; begin initstack(si, sizeof(integer)); for i := 1 to 20 do push(si, i); while not empty(si) do begin pop(si, x); write(x:3); end; writeln; end. Сообщение отредактировано: volvo - 7.11.2004 9:37 |
Altair |
![]()
Сообщение
#9
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
А, ну понял... этот метод я знаю... часто используется при переводе $13 на паскаль (вобщемпри работе с диском часто буфера используют нетипизированные)
... нет, ООП красивее ![]() -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
![]() ![]() |
![]() |
Текстовая версия | 19.06.2025 19:27 |