|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
28.03.2018, 14:50 | #1 |
Регистрация: 07.05.2017
Сообщений: 4
|
Организация счетчика в стеке
есть программа работы со стеком и нужно организовать счетчик, так как в этом вопросе не силен, решил обраться чтобы узнать, где что упустил или переборщил.
[CODEses SysUtils; type tItem = ^pItem; pItem = record n : Integer; x : tItem; end; type tStack = record Items : tItem; Empty : boolean; end; var t,t1,t2: TDateTime; ch:int64; function NewStack : tStack; var Stack : tStack; begin Stack.Items := nil; Stack.Empty := True; NewStack := Stack; ch:=ch+5; end; procedure Push(n : Integer; var Stack : tStack); var tmp : tItem; begin New(tmp); tmp^.n := n; tmp^.x := Stack.Items; Stack.Items := tmp; Stack.Empty := False; ch:=ch+10; end; function Pop(var Stack : tStack) : Integer; var res : Integer; tmp : tItem; begin if Not Stack.Empty then begin tmp := Stack.Items; Stack.Items := Stack.Items^.x; Stack.Empty := Stack.Items = nil; res := tmp^.n; Dispose(tmp); ch:=ch+13; end; Pop := res; ch:=ch+2; end; function CreateStack(n : Integer) : tStack; var Stack : tStack; begin Stack := NewStack; while n > 0 do begin Push(Random(200)-50, Stack); Dec(n); ch:=ch+3; end; CreateStack := Stack; ch:=ch+3; end; procedure PrintStack(Stack : tStack); var tmp : tItem; begin tmp := Stack.Items; if Stack.Empty then Write('Стек пуст!') else while tmp <> nil do begin Write(#32, tmp^.n); tmp := tmp^.x; ch:=ch+2; end; ch:=ch+3; WriteLn; end; procedure ClearStack(var Stack : tStack); begin while Not Stack.Empty do Pop(Stack); ch:=ch+2; end; procedure SortStack(var Stack : tStack); var swap : Boolean; tmpStack : tStack; n1, n2 : Integer; begin if Stack.Empty then Exit; tmpStack := NewStack; repeat swap := False; n1 := Pop(Stack); while Not Stack.Empty do begin n2 := Pop(Stack); if n1 > n2 then begin Push(n2, tmpStack); swap := True; end else begin Push(n1, tmpStack); n1 := n2; end; ch:=ch+2; end; Push(n1, Stack); while Not tmpStack.Empty do Push(Pop(tmpStack), Stack); ch:=ch+3; until Not swap; ch:=ch+3; end; var Stack : tStack; begin Stack := CreateStack(1000); writeln('Не отсортированный стек'); PrintStack(Stack); t1:=now; writeln('отсортированный стек'); SortStack(Stack); PrintStack(Stack); ClearStack(Stack); t2:=now; t:=t2-t1; writeln('Время сортировки: ',FormatDateTime('hh:mm:ss.zzz',t)) ; write('количество операций со стеком: ',ch); readln; end.][/CODE] счетчик делал как у одногрупника, то бишь где присваивание +1 к счетчику,если присваиваются указатели 2-3 и тд, но выходят слишком большие цифры. Уже не первый день голову ломаю с этими счетчиками Код:
Последний раз редактировалось oleg no; 28.03.2018 в 14:53. |
28.03.2018, 14:56 | #2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
ну, во-первых, по правилам хорошего тона надо в начале программы обязательно проиницилизировать переменную:
Код:
в-третьих, а что означает ? |
28.03.2018, 15:04 | #3 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,707
|
Скорее всего это счетчик операций. Для указателей, наверное, учитывается разыменование и собственно присваивание. Но сначала нужно нормальное ТЗ, а то гадать можно долго.
|
28.03.2018, 15:13 | #4 |
Регистрация: 07.05.2017
Сообщений: 4
|
с помощью указателей сделать сортировка стека используя процедуры pop и push
|
28.03.2018, 15:19 | #5 | |
Регистрация: 07.05.2017
Сообщений: 4
|
Цитата:
if Not Stack.Empty then begin tmp := Stack.Items; /1 присваивание Stack.Items := Stack.Items^.x; /1+1+1+1 присваивание указателей Stack.Empty := Stack.Items = nil;/1+1+1+1 res := tmp^.n;/1+1 Dispose(tmp);/1 ch:=ch+13; |
|
28.03.2018, 15:44 | #6 |
Регистрация: 07.05.2017
Сообщений: 4
|
Создать стек и сортировать его с помощью pop и push. И найти nop, но видел что люди писали в своих работах операция со стеком,так что не знаю разные ли это вещи
Последний раз редактировалось oleg no; 28.03.2018 в 15:54. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Максимум в стеке | akademochka | Общие вопросы C/C++ | 5 | 12.03.2013 23:19 |
количество элементов в стеке | svkpro | Помощь студентам | 8 | 30.11.2012 22:40 |
Pascal. Сортировка в стеке | aleksandrbol | Помощь студентам | 5 | 04.12.2011 20:10 |