IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Стек.
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 3
Пол: Женский

Репутация: -  0  +


Дан стек из чисел, упорядочить по убыванию.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 8)
сообщение
Сообщение #2


Гость






Можно использовать дополнительный стек?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Если можно, то все это элементарно реализуемо с помощью материала из FAQ'a:

http://forum.pascal.net.ru/index.php?showtopic=2706


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Oleg_Z

Поэтому и спросил ...
:yes:
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Хм... кстати сортировку ДСД можно включить в FAQ...
volvo, если тот модуль переписать под объектную основу (ООП), и методы обработки списка обозначить директивой virtual, можно будет изменять тип элемента ДСД в самой программе?
просто возникла идея сделать те модули из FAQ'a универсальными...


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Oleg_Z

Дать пример универсального кода без ООП? ;)
Кстати, если хочешь, могу показать как эмулировать шаблоны на Паскале.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Покажи пожалуйста универсальный код... н омне кажется, что без ООП это будут какие-то "обманы", и код не очень красивый будет... все-таки ООП это красиво ...
А чо зашаблоны? покажи пожалуйста...


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


А, ну понял... этот метод я знаю... часто используется при переводе $13 на паскаль (вобщемпри работе с диском часто буфера используют нетипизированные)
... нет, ООП красивее smile.gif)


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 23.11.2025 4:21
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name