From: Jon Elbery <shorline@iinet.net.au>
Subject: Help with ADT Stack
Date: 1997/05/29
Date: 1997-05-29T00:00:00+00:00 [thread overview]
Message-ID: <338CEEA4.93867B6D@iinet.net.au> (raw)
I have a problem with an assignment I am writing for university. You are
my last resort!!!
The program below works until I call line 259 ..I get a stack empty
exception.
Don't take any notice of the calls with cat, elephant etc..they will be
removed in the final version!!!!
I have tried everything I know (but am relatively new to Ada). Can
someone please point me in the right direction??
Any help appreciated. I am using Gnat307 running in Dos.
Penny
GNAT 3.07 (961023) Copyright 1991-1996 Free Software Foundation, Inc.
1.
2.
3.
4. --File Statlib.ADB
5.
6. with Ada.Text_IO, ADTBStk;
7. use Ada.Text_IO;
8. With Ada.Integer_Text_IO;
9. use Ada.Integer_Text_IO;
10. with GetInt;
11.
12.
13. procedure Statlib is
14.
15.
16. --Sub Types
17. subtype NumTitlesType is Positive;
18. subtype NumCopiesType is Positive;
19. subtype SimTimeType is Natural;
20. subtype IDCodeType is String (1..3);
21. subtype LoanTimeType is Natural;
22. subtype UsageTimeType is Natural;
23. subtype CopyType is String (1..2);
24. subtype TitleType is Character;
25.
26. subtype CopyRange is Integer range 1..5;
27.
28.
29. type ItemType is
30. record
31. IDCode : IDCodeType;
32. UsageTime : UsageTimeType := 0;
33. LoanOutTime : LoanTimeType := 0;
34. end record;
35.
36. package LibType is new ADTBSTK (ItemType);
37. use LibType;
38.
39. --Types
40. type MainChoiceType is (C, Q);
41. type SimChoiceType is (L, R, A, T, M);
42. type DispenserType is array (TitleType range <> ) of
LibType.Stack(5);
43. type OnLoanType is array (TitleType, CopyRange) of ItemType;
44.
45.
46. --Instantiations
47.
48. package MainChoice_IO is new Ada.Text_IO.Enumeration_IO
(MainChoiceType);
49. use MainChoice_IO;
50. package SimChoice_IO is new Ada.Text_IO.Enumeration_IO
(SimChoiceType);
51. use SimChoice_IO;
52.
53.
54. --Variables
55. Choice : MainChoiceType;
56.
------------------------------------------------------------------------------
57.
58. procedure ProgramIntro is
59.
60. -- introduces the program
61.
62. begin
63. Set_Col (30);
64. Put_Line ("*** Library Simulation ***");
65. New_Line (2);
66. Put_Line ("This program simulates the operation of a "
67. & "library reserve system.");
68. New_Line (2);
69. Put_Line ("Please choose an option from the menu.");
70.
71. end ProgramIntro;
72.
------------------------------------------------------------------------------
73.
74. procedure GetMainChoice (Choice : out MainChoiceType) is
75.
76. -- displays the menu and gets the user's choice of
77. -- commencing a simulation or quitting
78.
79. begin
80. New_Line(2);
81. Set_Col (25);
82. Put ("**Main Menu**");
83. New_Line(2);
84. Set_Col (20);
85. Put ("C Commence a simulation");
86. New_Line;
87. Set_Col (20);
88. Put ("Q Quit the program");
89. New_Line;
90.
91. InputLoop:
92. loop
93. declare
94. begin
95. New_Line;
96. Set_Col (20);
97. Put ("Your Choice: ");
98. Get (Choice);
99. Skip_Line;
100. exit;
101.
102. exception
103. when Data_Error =>
104. Skip_Line;
105. Set_Col (20);
106. Put_Line ("Invalid Choice, please try again.");
107. end;
108. end loop InputLoop;
109.
110. end GetMainChoice;
111.
------------------------------------------------------------------------------
112.
113. procedure GetNumTitles (NumTitles : out NumTitlesType) is
114.
115. -- prompts user for the number of titles
116.
117. begin
118. GetInt(NumTitles, 1,3, " the number of titles");
119. end GetNumTitles;
120.
------------------------------------------------------------------------------
121.
122. procedure CreateLoanOutArray (OnLoan : out OnLoanType) is
123.
124. -- creates the array for copies on loan
125.
126. -- CopyNo : CopyRange;
127.
128. begin
129.
130. for Title in TitleRange'Range loop
131. for CopyNo in CopyRange'Range loop
132. OnLoan(Title,CopyNo) :=("zzz", 0, 0);
133. end loop;
134. end loop;
135. end CreateLoanOutArray;
136.
------------------------------------------------------------------------------
137. procedure DoSimChoice (SimChoice : SimChoiceType);
138.
139. procedure Initialise (Dispenser : in out DispenserType;
140. OnLoan : out OnLoanType;
141. SimTime : out SimTimeType) is
142.
143. -- Initialises all values for the simulation
144.
145. NumTitles : NumTitlesType;
146. NumCopies : NumCopiesType;
147. Title : TitleType;
148. Copy : CopyType;
149. Item : ItemType;
150. Cat,Elephant,Dog : ItemType;
151. SimChoice : SimChoiceTYpe;
|
>>> warning: "SimChoice" is never assigned a value
152.
153. begin
154. GetNumTitles (NumTitles);
155.
156. for Count in 1..NumTitles loop
157. Title := Character'Val (Count + 64);
158. GetInt(NumCopies, 1, 5, "the number of copies for
Title " &
159. Title);
160.
161. declare
162. Dispenser : DispenserType('A'..'C');
163. begin
164. for Count in reverse 1..NumCopies loop
165. Copy :="0" & Character'Val(Count + 48);
166. Item.IDCode := Title & Copy;
167. Skip_Line;
168. Put(Item.IDCode);
169. Put ("Hell");
170. Skip_Line;
171. Item := ItemType(Item);
172. Push (Dispenser(Title),Item);
173. Cat := (Top(Dispenser(Title)));
174. New_Line;
175. Put(Cat.IDCode);
176. New_Line;
177. Put("Damn");
178. New_Line;
179. Put(Cat.UsageTime);
180.
181. end loop;
182. Put (NumberofObjects(Dispenser(Title)));
183. Put ("lucy");
184. Skip_Line;
185. DoSimChoice (SimChoice);
186. end;
187. end loop;
188. Dog := (Top(Dispenser('A')));
189. Put (Dog.IDCode);
190. Put("Penny");
191. SimTime := 0;
192. Put (SimTime);
193. CreateLoanOutArray (OnLoan);
194. Elephant := OnLoan('B',2);
195. Skip_Line;
196. Put(Elephant.IDCode);
197.
198. end Initialise;
199.
------------------------------------------------------------------------------
200.
201. procedure GetSimChoice (SimChoice : out SimChoiceType) is
202.
203. -- displays the options for a simulation and get's the user's
choice
204.
205. begin
206. New_Line(2);
207. Set_Col (25);
208. Put ("*** Options ***");
209. New_Line(2);
210. Set_Col(20);
211. Put ("L Loan request");
212. New_Line;
213. Set_Col(20);
214. Put ("R Return an item");
215. New_Line;
216. Set_Col(20);
217. Put ("A Advance simulation time");
218. New_Line;
219. Set_Col(20);
220. Put ("T Terminate the simulation");
221. New_Line;
222. Set_Col(20);
223. Put ("M Monitor the simulation");
224. New_Line;
225.
226. InputLoop:
227. loop
228. declare
229. begin
230. New_Line;
231. Set_Col (20);
232. Put ("Your Choice: ");
233. Get (SimChoice);
234. Skip_Line;
235. exit;
236.
237. exception
238. when Data_Error =>
239.
240. Skip_Line;
241. Set_Col (20);
242. Put_Line ("Invalid Choice, please try again.");
243. end;
244. end loop InputLoop;
245.
246. end GetSimChoice;
247.
------------------------------------------------------------------------------
248.
249. procedure GetLoanRequest (Title :out TitleType) is
250.
251. -- gets the user's choice of Title to borrow
252. Cat : ItemType;
253. Dispenser :DispenserType ('A'..'C');
254.
255. begin
256. New_Line(2);
257. Put ("Which Title would you like to borrow? : ");
258. Get (Title);
259. Cat := (Top(Dispenser(Title)));
260. Put (Cat.IDCode);
261. Put("Tim");
262. end GetLoanRequest;
263.
------------------------------------------------------------------------------
264.
265. procedure AdvanceSimTime (SimTime : in out SimTimeType) is
266.
267. -- advances simulation time by one unit
268.
269. begin
270. SimTime := SimTime + 1;
271. end AdvanceSimTime;
272.
------------------------------------------------------------------------------
273.
274. procedure DoLoan (SimTime : in out SimTimeType;
275. Title : out TitleType;
276. Dispenser : in out DispenserType;
277. OnLoan : in out OnLoanType) is
278.
279. -- takes the action to process a loan
280.
281. Item, Cat : ItemType;
282. CopyNo : CopyRange;
|
>>> warning: "CopyNo" is never assigned a value
283.
284. begin
285. -- GetLoanRequest (Title);
286. -- ProcessItem (Item, SimTime);
287. New_Line(2);
288. Put ("Which Title would you like to borrow? : ");
289. Get (Title);
290. Cat := (Top(Dispenser(Title)));
291. Put (Cat.IDCode);
292. Put("Tim");
293. AdvanceSimTime (SimTime);
294. end DoLoan;
295.
------------------------------------------------------------------------------
296.
297. procedure DoSimChoice (SimChoice : SimChoiceType) is
298.
299. -- takes the necessary action on user's choice of menu item
300.
301. Dispenser : DispenserType;--('A'..'C');
302. OnLoan : OnLoanType;
303. SimTime : SimTimeType;
304. Title : TitleType;
305.
306. begin
307. case SimChoice is
308. when L =>
309. Put ("Do Loan");
310. DoLoan (SimTime, Title, Dispenser, OnLoan);
311. when R =>
312. Put ("Return");
313. when A =>
314. Put ("Advance");
315. when T =>
316. Put ("Stop");
317. when M =>
318. Put ("In your Dreams!");
319. end case;
320. end DoSimChoice;
321.
------------------------------------------------------------------------------
322.
323. procedure DoSimulation is
324.
325. -- commences the simulation
326.
327. Dispenser : DispenserType ('A'..'C');
328. OnLoan : OnLoanType;
329. SimTime : SimTimeType;
330. SimChoice : SimChoiceType;
331. Cat : ItemType;
332.
333. begin
334. Put ("Sim");
335. Initialise(Dispenser, OnLoan, SimTime);
336. Cat := Top(Dispenser('A'));
337. Put (Cat.IDCode);
338. GetSimChoice (SimChoice);
339. Put (Cat.IdCode);
340. -- DoSimChoice (SimChoice);
341. end DoSimulation;
342.
------------------------------------------------------------------------------
343.
344. procedure Farewell is
345.
346. -- leaves the program
347.
348. begin
349. Put ("Thank you for using this program");
350. end Farewell;
351.
------------------------------------------------------------------------------
352.
353. begin -- Statlib
354. ProgramIntro;
355. loop
356.
357. GetMainChoice (Choice);
358. exit when Choice = Q;
359. DoSimulation;
360. end loop;
361. Farewell;
362. end Statlib;
362 lines:
next reply other threads:[~1997-05-29 0:00 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
1997-05-29 0:00 Jon Elbery [this message]
1997-05-29 0:00 ` Help With Ada_Io and Exceptions David H. Haley
1997-05-30 0:00 ` John G. Volan
1997-05-29 0:00 ` Help with ADT Stack Michael F Brenner
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox