All pastes #217706 Raw Edit

Untitled

public text v1 · immutable
#217706 ·published 2006-10-23 19:48 UTC
rendered paste body
program stos;
{$APPTYPE CONSOLE}
uses
  SysUtils;

type
    stack = ^Tstack;
   	Tstack = record
  	  	data : integer;
  	  	next : stack;
  	end;

// ========================================================================== //
// Dokladanie elementu na stos:
procedure Push(Value : integer; var Top : stack);
var
 TempItem : stack;
begin
 TempItem := Top;
 New(Top);
 Top.data := value;
 Top.next := TempItem;
end;

// ========================================================================== //
// Usuwanie elementu ze stosu:
function Pop(var Top : stack; var Val : integer) : boolean;
var
 TempItem : stack;
begin
 if Top <> nil then
 begin
  Val := Top.data;
  TempItem := Top;
  Top := Top.next;
  Dispose(TempItem);
  result := true;
 end
 else
  result := false;
end;

// ========================================================================== //
// Kasowanie stosu:
procedure Destroy(var Top : stack);
var
 TempItem : stack;
begin
 while (Top <> nil) do
 begin
  TempItem := Top.next;
  Dispose(Top);
  Top := TempItem;
 end;
end;

// ========================================================================== //
// Wypisanie zawartosci stosu (od szczytu w dol):
procedure List(Top : stack);
begin
 WriteLN('* Elementy stosu: ');
 while (Top <> nil) do
 begin
  WriteLN(Top.data);
  Top := Top.next;
 end;
 WriteLN('* Koniec listy.');
end;

// ========================================================================== //
// Wypisanie zawartosci stosu (od dolu do szczytu):
procedure ListR(Top : stack);
var
 TopR : stack;
begin
 TopR := nil;

 while (Top <> nil) do
 begin
  Push(Top.data, TopR);
  Top := Top.next;
 end;

 List(TopR);
 Destroy(TopR);
end;

// ========================================================================== //
// Kopiowanie stosu TopS(Source) na stos TopD(Destination):
procedure Copy(TopS : stack; var TopD : stack);
var
 TopR : stack;
begin
 TopR := nil;

 while (TopS <> nil) do
 begin
  Push(TopS.data, TopR);
  TopS := TopS.next;
 end;

 while(TopR <> nil) do
 begin
  Push(TopR.data, TopD);
  TopR := TopR.next;
 end;

 Destroy(TopR);
end;


// ================================= TESTER ================================= //
var
 Top : stack;
 TopCopy : stack;
 Value : integer;
 i, j : integer;

begin
 Randomize;

 WriteLN('=== Testowanie wrzucania 15 elementow na stos...');
 for i:=1 to 15 do
 begin
  Value := Random(100);
  Push(Value, Top);
  WriteLN('Na stos wrzucono liczbe ', Value);
 end;
 WriteLN('=== OK.');

 WriteLN('=== Testowanie kasowania 5 elementow ze stosu...');
 for j:=1 to 5 do
 begin
  if Pop(Top, Value) = true then
   WriteLN('Ze stosu zdjeto liczbe: ', Value)
  else
   WriteLN('Brak elementow do zdjecia ze stosu.');
 end;
 WriteLN('=== OK.');

 WriteLN('=== Wypisywanie elementow ze stosu od gory...');
 List(Top);
 WriteLN('=== OK.');

 WriteLN('=== Wypisywanie elementow ze stosu od dolu...');
 ListR(Top);
 WriteLN('=== OK.');

 WriteLN('=== Kopiowanie stosu i wypisywnaie elementow z kopii...');
 Copy(Top, TopCopy);
 List(TopCopy);
 WriteLN('=== OK.');

 WriteLN('=== Testowanie zakonczono pomyslnie.');
 ReadLN; ReadLN;
end.