* Passing a 2d array into a package and returning the same processed 2d back to main
@ 2016-09-30 22:27 diane74
2016-10-01 0:01 ` Jeffrey R. Carter
` (2 more replies)
0 siblings, 3 replies; 24+ messages in thread
From: diane74 @ 2016-09-30 22:27 UTC (permalink / raw)
Hello again, new Ada programmer with a hopefully easy question.
I am trying to take a 2d array pass it to a package have the package change the data in the 2d array and send the same 2d array (with modified data) back to the main program. I am currently away from my computer or I would show you my broken code, though I doubt it would be useful.
Thanks
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Passing a 2d array into a package and returning the same processed 2d back to main
2016-09-30 22:27 Passing a 2d array into a package and returning the same processed 2d back to main diane74
@ 2016-10-01 0:01 ` Jeffrey R. Carter
2016-10-01 20:01 ` Aurele
2016-10-03 18:36 ` James Brewer
2 siblings, 0 replies; 24+ messages in thread
From: Jeffrey R. Carter @ 2016-10-01 0:01 UTC (permalink / raw)
On 09/30/2016 03:27 PM, diane74@gmail.com wrote:
> Hello again, new Ada programmer with a hopefully easy question.
> I am trying to take a 2d array pass it to a package have the package change the data in the 2d array and send the same 2d array (with modified data) back to the main program. I am currently away from my computer or I would show you my broken code, though I doubt it would be useful.
It sounds as if you might be interested in "Formal Parameter Modes", defined in
ARM 6.2:
http://www.ada-auth.org/standards/rm12_w_tc1/html/RM-6-2.html
The mode defines the direction of data flow between the subprogram and the
caller: "in" means data flows from the caller into the subprogram; "out" means
data flows from the subprogram back to the caller; what "in out" means is left
as an exercise for the reader.
--
Jeff Carter
"Run away! Run away!"
Monty Python and the Holy Grail
58
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Passing a 2d array into a package and returning the same processed 2d back to main
2016-09-30 22:27 Passing a 2d array into a package and returning the same processed 2d back to main diane74
2016-10-01 0:01 ` Jeffrey R. Carter
@ 2016-10-01 20:01 ` Aurele
2016-10-01 21:04 ` Jeffrey R. Carter
2016-10-03 18:36 ` James Brewer
2 siblings, 1 reply; 24+ messages in thread
From: Aurele @ 2016-10-01 20:01 UTC (permalink / raw)
Off the top of my head, maybe you can do something like this(simple example)...
package 2D_Array_Handler is -- Your package....
type 2D_Array is record
x : integer;
y : integer;
end record;
type 2D_Array_Ptr is access all 2D_Array;
function Modify_2D_Array( Data_Ptr : 2D_Array_Ptr ) return Boolean;
end 2D_Array_Handler;
package body 2D_Array_Handler is -- Your package
function Add( Data_Ptr : 2D_Array_Ptr ) return Boolean is
begin
if Data_Ptr /= null then
Data.X := Data_Ptr.X + Some_X_Value...
Data.Y := Data_Ptr.Y + Some_Y_Value...
return TRUE;
else
return FALSE;
end if;
end Add;
end 2D_Array_Handler;
use 2D_Array_Handler;
declare -- The calling procedure...
My_Data_Ptr : 2D_Array_Ptr := new 2D_Array'( 0, 0 );
bResult : Boolean;
begin
bResult := Add( My_Data_Ptr );
end;
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Passing a 2d array into a package and returning the same processed 2d back to main
2016-10-01 20:01 ` Aurele
@ 2016-10-01 21:04 ` Jeffrey R. Carter
2016-10-01 21:59 ` Aurele
0 siblings, 1 reply; 24+ messages in thread
From: Jeffrey R. Carter @ 2016-10-01 21:04 UTC (permalink / raw)
On 10/01/2016 01:01 PM, Aurele wrote:
> Off the top of my head, maybe you can do something like this(simple example)...
>
> package 2D_Array_Handler is -- Your package....
> type 2D_Array is record
> x : integer;
> y : integer;
> end record;
> type 2D_Array_Ptr is access all 2D_Array;
There is no need for access types for this problem.
--
Jeff Carter
"My legs are gray, my ears are gnarled, my eyes are old and bent."
Monty Python's Life of Brian
81
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Passing a 2d array into a package and returning the same processed 2d back to main
2016-10-01 21:04 ` Jeffrey R. Carter
@ 2016-10-01 21:59 ` Aurele
2016-10-01 22:16 ` Jeffrey R. Carter
0 siblings, 1 reply; 24+ messages in thread
From: Aurele @ 2016-10-01 21:59 UTC (permalink / raw)
> There is no need for access types for this problem.
That maybe true, but it nonetheless works and its fast.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Passing a 2d array into a package and returning the same processed 2d back to main
2016-10-01 21:59 ` Aurele
@ 2016-10-01 22:16 ` Jeffrey R. Carter
2016-10-02 0:09 ` Aurele
0 siblings, 1 reply; 24+ messages in thread
From: Jeffrey R. Carter @ 2016-10-01 22:16 UTC (permalink / raw)
On 10/01/2016 02:59 PM, Aurele wrote:
>> There is no need for access types for this problem.
>
> That maybe true, but it nonetheless works and its fast.
You could write it in assembler and it would work and be fast. There are reasons
not to use assembler, and there are reasons not to use access types. There are
probably no applications that you, the OP, or I are likely to work on where
access types and their associated errors are needed or the best choice.
Certainly there should never be visible access types in a pkg spec.
--
Jeff Carter
"My legs are gray, my ears are gnarled, my eyes are old and bent."
Monty Python's Life of Brian
81
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Passing a 2d array into a package and returning the same processed 2d back to main
2016-10-01 22:16 ` Jeffrey R. Carter
@ 2016-10-02 0:09 ` Aurele
2016-10-02 7:31 ` Simon Wright
0 siblings, 1 reply; 24+ messages in thread
From: Aurele @ 2016-10-02 0:09 UTC (permalink / raw)
Keep your shorts on Jeffrey and don't be defensive, I was just offering an alternate off the cuff Ada method. Now chill out !
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Passing a 2d array into a package and returning the same processed 2d back to main
2016-10-02 0:09 ` Aurele
@ 2016-10-02 7:31 ` Simon Wright
0 siblings, 0 replies; 24+ messages in thread
From: Simon Wright @ 2016-10-02 7:31 UTC (permalink / raw)
Aurele <aurele.vitali@gmail.com> writes:
> Keep your shorts on Jeffrey and don't be defensive, I was just
> offering an alternate off the cuff Ada method. Now chill out !
But it's a very *bad* Ada method. It's the sort of method you'd have to
use in C, but I have to say that if someone offered that as a solution
in an Ada work environment it would be rejected outright.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Passing a 2d array into a package and returning the same processed 2d back to main
2016-09-30 22:27 Passing a 2d array into a package and returning the same processed 2d back to main diane74
2016-10-01 0:01 ` Jeffrey R. Carter
2016-10-01 20:01 ` Aurele
@ 2016-10-03 18:36 ` James Brewer
2016-10-03 19:43 ` Björn Lundin
2016-10-03 20:16 ` Jeffrey R. Carter
2 siblings, 2 replies; 24+ messages in thread
From: James Brewer @ 2016-10-03 18:36 UTC (permalink / raw)
On Friday, September 30, 2016 at 5:28:01 PM UTC-5, dia...@gmail.com wrote:
> Hello again, new Ada programmer with a hopefully easy question.
> I am trying to take a 2d array pass it to a package have the package change the data in the 2d array and send the same 2d array (with modified data) back to the main program. I am currently away from my computer or I would show you my broken code, though I doubt it would be useful.
>
> Thanks
I may not have given enough information for help with this problem. So here is my attempt to clarify what I am trying to do by posting my nonfunctioning code.
-- Interface of WarshallsPkg
PACKAGE WarshallsPkg IS
TYPE MY_ARRAY IS ARRAY(INTEGER RANGE <>, INTEGER RANGE <>) OF Boolean;
PROCEDURE WarshallExecute(InArray : IN MY_ARRAY; OutArray : OUT MY_ARRAY);
end WarshallsPkg;
-- Implementation of WarshallsPkg
PACKAGE BODY WarshallsPkg IS
PROCEDURE WarshallExecute(InArray : IN MY_ARRAY; OutArray : OUT MY_ARRAY) IS
-- TestArray: ARRAY(InArray'FIRST..InArray'LAST) OF Integer;
BEGIN
FOR I IN InArray'FIRST..InArray'LAST LOOP
FOR J IN InArray'FIRST..InArray'LAST LOOP
IF InArray(J,I) = True THEN --true nodes connected
FOR K IN InArray'FIRST..InArray'LAST LOOP
OutArray(J,K) := InArray(J,K) OR InArray(I,K);
END LOOP;
END IF;
END LOOP;
END LOOP;
END WarshallExecute;
END WarshallsPkg;
--The program i'm trying to implement it in
WITH Text_IO; USE Text_IO; -- This gets the IO facility.
WITH Ada.Integer_Text_IO; USE Ada.Integer_Text_IO; -- This gets the integer IO facility.
WITH WarshallsPkg; USE WarshallsPkg; --package setup
-- * main procedure *
PROCEDURE WarshallsMain IS
Output : File_Type; -- output file declaration
N : Integer := 9; -- max size of array -- why does this overflow if not set?
yOrN : character; -- user input yes or no
OutputConvertion : Integer; -- used for conversion from true/false to 1/0
Array2d: ARRAY (1..N, 1..N) OF Boolean;
-- PROCEDURE testExecute(InArray : IN MY_ARRAY; OutArray : OUT MY_ARRAY); -- renames warshall proceedure
-- * main procedure starts begins*
BEGIN
-- try to use io redirection to pull data from file
-- output to file creation section
Create (File => Output,
Mode => Out_File,
Name => "output.txt");
-- input node connection data collection
-- ask for size of array
Put("How many nodes need to be processed? ");
Get(N);
New_Line(2);
FOR X IN 1..N LOOP
FOR Y IN 1..N LOOP
Put("Is node");
Put(X);
Put(" connected to node ");
Put(Y);
Put(" y/n ");
Get(YOrN);
if yOrN = 'y' then
Array2d(X,Y) := True;
ELSE Array2d(X,Y) := False;
END IF;
END LOOP;
END LOOP;
-- Warshall's alorithm
-- implement proceedure here for Array2d
WarshallExecute(Array2d, Array2d);
-- to be removed
-- FOR I IN 1..N LOOP
-- FOR J IN 1..N LOOP
-- IF Array2d(J,I) = True THEN --true nodes connected
-- FOR K IN 1..N LOOP
-- Array2d(J,K) := Array2d(J,K) OR Array2d(I,K);
-- END LOOP;
-- END IF;
-- END LOOP;
-- END LOOP;
-- end of code to be removed
-- *********** output to file ************
-- column label output
New_Line(Output, 2);
Put(Output, " ");
FOR I IN 1..N LOOP
Put(Output, I);
END LOOP;
New_Line(Output, 1);
-- data matrix output
FOR I IN 1..N LOOP
Put(Output, I);
FOR J IN 1..N LOOP
IF Array2d(I,J) = True THEN
OutputConvertion := 1;
ELSE
OutputConvertion := 0;
END IF;
Put(Output, OutputConvertion);
END LOOP;
New_Line(Output, 1);
END LOOP;
END WarshallsMain;
-- * main procedure ends *
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Passing a 2d array into a package and returning the same processed 2d back to main
2016-10-03 18:36 ` James Brewer
@ 2016-10-03 19:43 ` Björn Lundin
2016-10-03 21:59 ` James Brewer
2016-10-03 20:16 ` Jeffrey R. Carter
1 sibling, 1 reply; 24+ messages in thread
From: Björn Lundin @ 2016-10-03 19:43 UTC (permalink / raw)
On 2016-10-03 20:36, James Brewer wrote:
> On Friday, September 30, 2016 at 5:28:01 PM UTC-5, dia...@gmail.com wrote:
>> Hello again, new Ada programmer with a hopefully easy question.
>> I am trying to take a 2d array pass it to a package have the package change the data in the 2d array and send the same 2d array (with modified data) back to the main program. I am currently away from my computer or I would show you my broken code, though I doubt it would be useful.
>>
>> Thanks
>
>
> PACKAGE BODY WarshallsPkg IS
>
> PROCEDURE WarshallExecute(InArray : IN MY_ARRAY; OutArray : OUT MY_ARRAY) IS
>
> -- TestArray: ARRAY(InArray'FIRST..InArray'LAST) OF Integer;
>
> BEGIN
> FOR I IN InArray'FIRST..InArray'LAST LOOP
> FOR J IN InArray'FIRST..InArray'LAST LOOP
> IF InArray(J,I) = True THEN --true nodes connected
> FOR K IN InArray'FIRST..InArray'LAST LOOP
> OutArray(J,K) := InArray(J,K) OR InArray(I,K);
> END LOOP;
> END IF;
> END LOOP;
> END LOOP;
>
> END WarshallExecute;
>
> END WarshallsPkg;
>
try
package body WarshallsPkg is
procedure WarshallExecute(Arr : in out My_Array) is
begin
for I in Arr'range loop
for J in Arr'range loop
if Arr(J,I) then --true nodes connected
for k in Arr'range loop
Arr(J,K) := Arr(J,K) or Arr(I,K);
end loop;
end if;
end loop;
end loop;
end WarshallExecute;
end WarshallsPkg;
and then
> WarshallExecute(Array2d, Array2d);
WarshallsPkg.WarshallExecute(Array2d);
You pass the same array both as in and out to WarshallExecute.
Why not pass it as in out ?
--
--
Björn
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Passing a 2d array into a package and returning the same processed 2d back to main
2016-10-03 18:36 ` James Brewer
2016-10-03 19:43 ` Björn Lundin
@ 2016-10-03 20:16 ` Jeffrey R. Carter
1 sibling, 0 replies; 24+ messages in thread
From: Jeffrey R. Carter @ 2016-10-03 20:16 UTC (permalink / raw)
On 10/03/2016 11:36 AM, James Brewer wrote:
>
> TYPE MY_ARRAY IS ARRAY(INTEGER RANGE <>, INTEGER RANGE <>) OF Boolean;
>
> Array2d: ARRAY (1..N, 1..N) OF Boolean;
Your code has lots of problems, but an obvious reason why it doesn't work is
that your procedure takes parameters of type My_Array, but the object you pass
in twice has the anonymous array type of its declaration. These are 2 different
types, and you can't use one where the other is required.
--
Jeff Carter
"We'll make Rock Ridge think it's a chicken
that got caught in a tractor's nuts!"
Blazing Saddles
87
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Passing a 2d array into a package and returning the same processed 2d back to main
2016-10-03 19:43 ` Björn Lundin
@ 2016-10-03 21:59 ` James Brewer
2016-10-03 23:16 ` Anh Vo
2016-10-04 11:29 ` Brian Drummond
0 siblings, 2 replies; 24+ messages in thread
From: James Brewer @ 2016-10-03 21:59 UTC (permalink / raw)
On Monday, October 3, 2016 at 2:44:01 PM UTC-5, björn lundin wrote:
> On 2016-10-03 20:36, James Brewer wrote:
> > On Friday, September 30, 2016 at 5:28:01 PM UTC-5, dia...@gmail.com wrote:
> >> Hello again, new Ada programmer with a hopefully easy question.
> >> I am trying to take a 2d array pass it to a package have the package change the data in the 2d array and send the same 2d array (with modified data) back to the main program. I am currently away from my computer or I would show you my broken code, though I doubt it would be useful.
> >>
> >> Thanks
> >
> >
> > PACKAGE BODY WarshallsPkg IS
> >
> > PROCEDURE WarshallExecute(InArray : IN MY_ARRAY; OutArray : OUT MY_ARRAY) IS
> >
> > -- TestArray: ARRAY(InArray'FIRST..InArray'LAST) OF Integer;
> >
> > BEGIN
> > FOR I IN InArray'FIRST..InArray'LAST LOOP
> > FOR J IN InArray'FIRST..InArray'LAST LOOP
> > IF InArray(J,I) = True THEN --true nodes connected
> > FOR K IN InArray'FIRST..InArray'LAST LOOP
> > OutArray(J,K) := InArray(J,K) OR InArray(I,K);
> > END LOOP;
> > END IF;
> > END LOOP;
> > END LOOP;
> >
> > END WarshallExecute;
> >
> > END WarshallsPkg;
> >
>
> try
>
> package body WarshallsPkg is
> procedure WarshallExecute(Arr : in out My_Array) is
> begin
> for I in Arr'range loop
> for J in Arr'range loop
> if Arr(J,I) then --true nodes connected
> for k in Arr'range loop
> Arr(J,K) := Arr(J,K) or Arr(I,K);
> end loop;
> end if;
> end loop;
> end loop;
> end WarshallExecute;
> end WarshallsPkg;
>
>
> and then
>
>
>
> > WarshallExecute(Array2d, Array2d);
>
> WarshallsPkg.WarshallExecute(Array2d);
>
>
> You pass the same array both as in and out to WarshallExecute.
> Why not pass it as in out ?
>
>
>
>
> --
> --
> Björn
Thanks for the help. It's hard to know what a language can and cannot do when your just starting out. Unfortunately, I'm still getting an error saying [expected type"MY_ARRAY" defined at warshallspkg.ads:5 warshallmain.adb:60:20: found type Array2d declare at line 19]. It may have something to do with what Jeffery was alluding too but I don't know enough to say for sure.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Passing a 2d array into a package and returning the same processed 2d back to main
2016-10-03 21:59 ` James Brewer
@ 2016-10-03 23:16 ` Anh Vo
2016-10-04 11:29 ` Brian Drummond
1 sibling, 0 replies; 24+ messages in thread
From: Anh Vo @ 2016-10-03 23:16 UTC (permalink / raw)
On Monday, October 3, 2016 at 2:59:02 PM UTC-7, James Brewer wrote:
> On Monday, October 3, 2016 at 2:44:01 PM UTC-5, björn lundin wrote:
> > On 2016-10-03 20:36, James Brewer wrote:
> > > On Friday, September 30, 2016 at 5:28:01 PM UTC-5, dia...@gmail.com
> Thanks for the help. It's hard to know what a language can and cannot do when your just starting out. Unfortunately, I'm still getting an error saying [expected type"MY_ARRAY" defined at warshallspkg.ads:5 warshallmain.adb:60:20: found type Array2d declare at line 19]. It may have something to do with what Jeffery was alluding too but I don't know enough to say for sure.
I suggest that you post what you currently have. So, help can be provided quicker.
Anh Vo
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Passing a 2d array into a package and returning the same processed 2d back to main
2016-10-03 21:59 ` James Brewer
2016-10-03 23:16 ` Anh Vo
@ 2016-10-04 11:29 ` Brian Drummond
2016-10-05 16:16 ` James Brewer
1 sibling, 1 reply; 24+ messages in thread
From: Brian Drummond @ 2016-10-04 11:29 UTC (permalink / raw)
On Mon, 03 Oct 2016 14:59:01 -0700, James Brewer wrote:
> On Monday, October 3, 2016 at 2:44:01 PM UTC-5, björn lundin wrote:
>> On 2016-10-03 20:36, James Brewer wrote:
>
> Thanks for the help. It's hard to know what a language can and cannot do
> when your just starting out. Unfortunately, I'm still getting an error
> saying [expected type"MY_ARRAY" defined at warshallspkg.ads:5
> warshallmain.adb:60:20: found type Array2d declare at line 19]. It may
> have something to do with what Jeffery was alluding too but I don't know
> enough to say for sure.
The error message pretty much tells you : you have created a new
anonymous type of boolean array instead of the type you created earlier.
So, declare the actual parameter using that type:
Array2d: WarshallsPkg.MY_ARRAY(1..N, 1..N);
-- Brian
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Passing a 2d array into a package and returning the same processed 2d back to main
2016-10-04 11:29 ` Brian Drummond
@ 2016-10-05 16:16 ` James Brewer
2016-10-05 17:19 ` James Brewer
0 siblings, 1 reply; 24+ messages in thread
From: James Brewer @ 2016-10-05 16:16 UTC (permalink / raw)
On Tuesday, October 4, 2016 at 6:29:51 AM UTC-5, Brian Drummond wrote:
> On Mon, 03 Oct 2016 14:59:01 -0700, James Brewer wrote:
>
> > On Monday, October 3, 2016 at 2:44:01 PM UTC-5, björn lundin wrote:
> >> On 2016-10-03 20:36, James Brewer wrote:
>
> >
> > Thanks for the help. It's hard to know what a language can and cannot do
> > when your just starting out. Unfortunately, I'm still getting an error
> > saying [expected type"MY_ARRAY" defined at warshallspkg.ads:5
> > warshallmain.adb:60:20: found type Array2d declare at line 19]. It may
> > have something to do with what Jeffery was alluding too but I don't know
> > enough to say for sure.
>
> The error message pretty much tells you : you have created a new
> anonymous type of boolean array instead of the type you created earlier.
>
> So, declare the actual parameter using that type:
>
> Array2d: WarshallsPkg.MY_ARRAY(1..N, 1..N);
>
> -- Brian
I tried it and it seems to be working.
Thank you to everyone helped.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Passing a 2d array into a package and returning the same processed 2d back to main
2016-10-05 16:16 ` James Brewer
@ 2016-10-05 17:19 ` James Brewer
2016-10-05 18:57 ` Jeffrey R. Carter
2016-10-05 19:47 ` Anh Vo
0 siblings, 2 replies; 24+ messages in thread
From: James Brewer @ 2016-10-05 17:19 UTC (permalink / raw)
Well, I thought it worked by I'm just getting 1's for the output.
I'll post the new code if you all are still interested in helping me out.
-- Interface of WarshallsPkg
PACKAGE WarshallsPkg IS
TYPE MY_ARRAY IS ARRAY(INTEGER RANGE <>, INTEGER RANGE <>) OF Boolean;
PROCEDURE WarshallExecute(Arr : IN OUT MY_ARRAY);
end WarshallsPkg;
-- Implementation of WarshallsPkg
PACKAGE BODY WarshallsPkg IS
PROCEDURE WarshallExecute(Arr : IN OUT My_Array) IS
BEGIN
FOR I IN Arr'RANGE LOOP
FOR J IN Arr'RANGE LOOP
IF Arr(J,I) THEN --true nodes connected
FOR K IN Arr'RANGE LOOP
Arr(J,K) := Arr(J,K) OR Arr(I,K);
END LOOP;
END IF;
END LOOP;
END LOOP;
END WarshallExecute;
END WarshallsPkg;
-- Lab 1 C version read and write to file use package
-- Programmed by James Brewer
-- Version 12
--put this in every program for now
--WITH Ada.Command_Line;
WITH Text_IO; USE Text_IO; -- This gets the IO facility.
WITH Ada.Integer_Text_IO; USE Ada.Integer_Text_IO; -- This gets the integer IO facility.
WITH WarshallsPkg; USE WarshallsPkg; --package setup
-- * main procedure *
PROCEDURE WarshallsMain IS
Input : File_Type; -- input file declaration
Output : File_Type; -- output file declaration
N : Integer := 9; -- max size of array -- why does this overflow if not set?
YOrN : String(1..1); -- y or n for node connections
OutputConvertion : Integer; -- used for conversion from true/false to 1/0
TestString : String(1..1);
-- highlight section in code that creates the array
-- Array2d: ARRAY (1..N, 1..N) OF Boolean; --****** highlight this section ********
Array2d: WarshallsPkg.MY_ARRAY(1..N, 1..N);
-- * main procedure starts begins*
BEGIN
-- try to use io redirection to pull data from file
-- open input.txt file
Open (File => Input,
Mode => In_File,
Name => "input.txt");
-- output to file creation section
Create (File => Output,
Mode => Out_File,
Name => "output.txt");
-- input node connection data collection
-- ask for size of array
Put("How many nodes need to be processed? ");
TestString := Get_Line (Input); -- get number of nodes
N := Integer'Value(TestString); -- convert number of nodes to Integer
put(N); -- display n on screen
-- Get(N); -- ** not used
New_Line(2);
FOR X IN 1..N LOOP
FOR Y IN 1..N LOOP
Put("Is node");
Put(X);
Put(" connected to node ");
Put(Y);
Put(" y/n ");
YOrN := Get_Line(Input);
-- Get(YOrN); -- ** not used
put(YOrN); new_line(1); -- display choice on screen
if yOrN = "y" then
Array2d(X,Y) := True;
ELSE Array2d(X,Y) := False;
END IF;
END LOOP;
END LOOP;
-- Warshallpkg implementation
WarshallExecute(Array2d);
-- FOR I IN 1..N LOOP
-- FOR J IN 1..N LOOP
-- IF Array2d(J,I) = True THEN --true nodes connected
-- FOR K IN 1..N LOOP
-- Array2d(J,K) := Array2d(J,K) OR Array2d(I,K);
-- END LOOP;
-- END IF;
-- END LOOP;
-- END LOOP;
-- print each transaction as it is processed
-- *********** output to file ************
-- column label output
New_Line(Output, 2);
Put(Output, " ");
FOR I IN 1..N LOOP
Put(Output, I);
END LOOP;
New_Line(Output, 1);
-- data matrix output
FOR I IN 1..N LOOP
Put(Output, I);
FOR J IN 1..N LOOP
IF Array2d(I,J) = True THEN
OutputConvertion := 1;
ELSE
OutputConvertion := 0;
END IF;
Put(Output, OutputConvertion);
END LOOP;
New_Line(Output, 1);
END LOOP;
--close files
Close (Input);
Close (Output);
exception
when End_Error =>
if Is_Open(Input) then
Close (Input);
end if;
if Is_Open(Output) then
Close (Output);
end if;
END WarshallsMain;
-- * main procedure ends *
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Passing a 2d array into a package and returning the same processed 2d back to main
2016-10-05 17:19 ` James Brewer
@ 2016-10-05 18:57 ` Jeffrey R. Carter
2016-10-05 19:53 ` James Brewer
2016-10-05 19:47 ` Anh Vo
1 sibling, 1 reply; 24+ messages in thread
From: Jeffrey R. Carter @ 2016-10-05 18:57 UTC (permalink / raw)
On 10/05/2016 10:19 AM, James Brewer wrote:
>
> Well, I thought it worked by I'm just getting 1's for the output.
How value do you input when asked "How many nodes need to be processed? " If
it's less than 9, the remaining elements in the array will have random values
("stack junk") which will probably be True at least half the time. Since your
algorithm processes all the elements in the 9x9 array, the odds are good that
every node will end up being True.
The correction is not to declare the array until you know how big it needs to be.
--
Jeff Carter
"You can never forget too much about C++."
115
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Passing a 2d array into a package and returning the same processed 2d back to main
2016-10-05 17:19 ` James Brewer
2016-10-05 18:57 ` Jeffrey R. Carter
@ 2016-10-05 19:47 ` Anh Vo
2016-10-05 20:30 ` James Brewer
1 sibling, 1 reply; 24+ messages in thread
From: Anh Vo @ 2016-10-05 19:47 UTC (permalink / raw)
On Wednesday, October 5, 2016 at 10:19:31 AM UTC-7, James Brewer wrote:
> Well, I thought it worked by I'm just getting 1's for the output.
>
> I'll post the new code if you all are still interested in helping me out.
Please do. Do not forget to include input file, input.txt.
Anh Vo
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Passing a 2d array into a package and returning the same processed 2d back to main
2016-10-05 18:57 ` Jeffrey R. Carter
@ 2016-10-05 19:53 ` James Brewer
2016-10-05 19:57 ` AdaMagica
2016-10-05 20:17 ` Jeffrey R. Carter
0 siblings, 2 replies; 24+ messages in thread
From: James Brewer @ 2016-10-05 19:53 UTC (permalink / raw)
On Wednesday, October 5, 2016 at 1:57:08 PM UTC-5, Jeffrey R. Carter wrote:
> On 10/05/2016 10:19 AM, James Brewer wrote:
> >
> > Well, I thought it worked by I'm just getting 1's for the output.
>
> How value do you input when asked "How many nodes need to be processed? " If
> it's less than 9, the remaining elements in the array will have random values
> ("stack junk") which will probably be True at least half the time. Since your
> algorithm processes all the elements in the 9x9 array, the odds are good that
> every node will end up being True.
>
> The correction is not to declare the array until you know how big it needs to be.
>
> --
> Jeff Carter
> "You can never forget too much about C++."
> 115
Please remember I'm just starting in this language. So if I say anything ridiculous it is not intentional. It doesn't seem to allow for declarations after the "begin" statement. Also, it worked without the package implementation as best as I could tell with my test data.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Passing a 2d array into a package and returning the same processed 2d back to main
2016-10-05 19:53 ` James Brewer
@ 2016-10-05 19:57 ` AdaMagica
2016-10-05 20:17 ` Jeffrey R. Carter
1 sibling, 0 replies; 24+ messages in thread
From: AdaMagica @ 2016-10-05 19:57 UTC (permalink / raw)
Am Mittwoch, 5. Oktober 2016 21:53:07 UTC+2 schrieb James Brewer:
> Please remember I'm just starting in this language. So if I say anything ridiculous it is not intentional. It doesn't seem to allow for declarations after the "begin" statement. Also, it worked without the package implementation as best as I could tell with my test data.
Of course not. The declare block is used for this purpose:
N := Some_Value;
declare
My_Array: My_Array_Type (1 .. N);
begin
...
end;
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Passing a 2d array into a package and returning the same processed 2d back to main
2016-10-05 19:53 ` James Brewer
2016-10-05 19:57 ` AdaMagica
@ 2016-10-05 20:17 ` Jeffrey R. Carter
2016-10-05 20:58 ` James Brewer
1 sibling, 1 reply; 24+ messages in thread
From: Jeffrey R. Carter @ 2016-10-05 20:17 UTC (permalink / raw)
On 10/05/2016 12:53 PM, James Brewer wrote:
>
> Please remember I'm just starting in this language. So if I say anything
> ridiculous it is not intentional. It doesn't seem to allow for declarations
> after the "begin" statement. Also, it worked without the package
> implementation as best as I could tell with my test data.
Yes, after "begin" but before "exception" or "end" you can only have statements.
But it would be a good idea to be familiar with the kinds of statements, which
are given in ARM 5
http://www.ada-auth.org/standards/rm12_w_tc1/html/RM-5.html
ARM 5.1 lists all the kinds of statements. Of particular interest might be the
block statement, described in more detail in ARM 5.6.
--
Jeff Carter
"You can never forget too much about C++."
115
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Passing a 2d array into a package and returning the same processed 2d back to main
2016-10-05 19:47 ` Anh Vo
@ 2016-10-05 20:30 ` James Brewer
0 siblings, 0 replies; 24+ messages in thread
From: James Brewer @ 2016-10-05 20:30 UTC (permalink / raw)
On Wednesday, October 5, 2016 at 2:47:36 PM UTC-5, Anh Vo wrote:
> On Wednesday, October 5, 2016 at 10:19:31 AM UTC-7, James Brewer wrote:
> > Well, I thought it worked by I'm just getting 1's for the output.
> >
> > I'll post the new code if you all are still interested in helping me out.
>
> Please do. Do not forget to include input file, input.txt.
>
> Anh Vo
here is the current input file. (it's very rudimentary)
4
n
y
n
n
n
n
y
n
n
n
n
n
n
n
y
n
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Passing a 2d array into a package and returning the same processed 2d back to main
2016-10-05 20:17 ` Jeffrey R. Carter
@ 2016-10-05 20:58 ` James Brewer
2016-10-05 22:11 ` Anh Vo
0 siblings, 1 reply; 24+ messages in thread
From: James Brewer @ 2016-10-05 20:58 UTC (permalink / raw)
On Wednesday, October 5, 2016 at 3:18:01 PM UTC-5, Jeffrey R. Carter wrote:
> On 10/05/2016 12:53 PM, James Brewer wrote:
> >
> > Please remember I'm just starting in this language. So if I say anything
> > ridiculous it is not intentional. It doesn't seem to allow for declarations
> > after the "begin" statement. Also, it worked without the package
> > implementation as best as I could tell with my test data.
>
> Yes, after "begin" but before "exception" or "end" you can only have statements.
> But it would be a good idea to be familiar with the kinds of statements, which
> are given in ARM 5
>
> http://www.ada-auth.org/standards/rm12_w_tc1/html/RM-5.html
>
> ARM 5.1 lists all the kinds of statements. Of particular interest might be the
> block statement, described in more detail in ARM 5.6.
>
> --
> Jeff Carter
> "You can never forget too much about C++."
> 115
Implementing the block statement looks like it may have solved the problem. I will test it further.
Thanks for the help
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: Passing a 2d array into a package and returning the same processed 2d back to main
2016-10-05 20:58 ` James Brewer
@ 2016-10-05 22:11 ` Anh Vo
0 siblings, 0 replies; 24+ messages in thread
From: Anh Vo @ 2016-10-05 22:11 UTC (permalink / raw)
On Wednesday, October 5, 2016 at 1:58:40 PM UTC-7, James Brewer wrote:
> On Wednesday, October 5, 2016 at 3:18:01 PM UTC-5, Jeffrey R. Carter wrote:
> > On 10/05/2016 12:53 PM, James Brewer wrote:
> > >
> > > Please remember I'm just starting in this language. So if I say anything
> > > ridiculous it is not intentional. It doesn't seem to allow for declarations
> > > after the "begin" statement. Also, it worked without the package
> > > implementation as best as I could tell with my test data.
> >
> > Yes, after "begin" but before "exception" or "end" you can only have statements.
> > But it would be a good idea to be familiar with the kinds of statements, which
> > are given in ARM 5
> >
> > http://www.ada-auth.org/standards/rm12_w_tc1/html/RM-5.html
> >
> > ARM 5.1 lists all the kinds of statements. Of particular interest might be the
> > block statement, described in more detail in ARM 5.6.
> >
> > --
> > Jeff Carter
> > "You can never forget too much about C++."
> > 115
>
> Implementing the block statement looks like it may have solved the problem. I will test it further.
I make it work, also. Just like all mentioned, your array object does not match with array dimension in input.txt file. Since you have solved your problem, my solution is not necessary.
Anh Vo
^ permalink raw reply [flat|nested] 24+ messages in thread
end of thread, other threads:[~2016-10-05 22:11 UTC | newest]
Thread overview: 24+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-09-30 22:27 Passing a 2d array into a package and returning the same processed 2d back to main diane74
2016-10-01 0:01 ` Jeffrey R. Carter
2016-10-01 20:01 ` Aurele
2016-10-01 21:04 ` Jeffrey R. Carter
2016-10-01 21:59 ` Aurele
2016-10-01 22:16 ` Jeffrey R. Carter
2016-10-02 0:09 ` Aurele
2016-10-02 7:31 ` Simon Wright
2016-10-03 18:36 ` James Brewer
2016-10-03 19:43 ` Björn Lundin
2016-10-03 21:59 ` James Brewer
2016-10-03 23:16 ` Anh Vo
2016-10-04 11:29 ` Brian Drummond
2016-10-05 16:16 ` James Brewer
2016-10-05 17:19 ` James Brewer
2016-10-05 18:57 ` Jeffrey R. Carter
2016-10-05 19:53 ` James Brewer
2016-10-05 19:57 ` AdaMagica
2016-10-05 20:17 ` Jeffrey R. Carter
2016-10-05 20:58 ` James Brewer
2016-10-05 22:11 ` Anh Vo
2016-10-05 19:47 ` Anh Vo
2016-10-05 20:30 ` James Brewer
2016-10-03 20:16 ` Jeffrey R. Carter
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox