verem.ads

package verem is 
   type stack(size : integer := 10is private
    
   procedure pop(s : in out stack; e : out integer); 
   procedure push(s : in out stack; e : in integer); 
   procedure top(s : in stack; e : out integer); 
   function isEmpty(s : in stack) return boolean; 
   function isFull(s : in stack) return boolean; 
    
private 
   subtype int is integer range 1..100
   type stack_vect is array(int range <>) of integer; 
   type stack(size : integer := 10is record 
      v : stack_vect(1..size); 
      i : integer := 0
   end record
end verem; 
 

verem.adb

package body verem is 
 
   procedure pop(s : in out stack; e : out integer) is 
   begin 
      --most nem ellenorzok hibat! 
      e := s.v(s.i); 
      s.i := s.i - 1
   end pop; 
    
   procedure push(s : in out stack; e : in integer) is 
   begin 
      s.i := s.i + 1
      s.v(s.i) := e; 
   end push; 
    
   --ezt irhattuk volna fuggvenykent is 
   procedure top(s : in stack; e : out integer) is 
   begin 
      e := s.v(s.i); 
   end top; 
    
   function isEmpty(s : in stack) return boolean is 
   begin 
      return s.i = 0
   end isEmpty; 
    
   function isFull(s : in stack) return boolean is 
   begin 
      return s.i = s.size; 
   end isFull; 
 
end verem; 
 

veremmain.adb

with ada.text_io, verem; 
use ada.text_io, verem; 
 
procedure mainverem is 
   s : stack(15); 
   e : integer; 
begin 
   for i in 1..10 loop 
      push(s,i); 
   end loop
    
   for i in 1..10 loop 
      pop(s,e); 
      put_line(integer'image(e)); 
   end loop;   
    
end mainverem;
 
 
VISSZA