From: Matthew Heaney <matthew_heaney@acm.org>
Subject: Re: Beginner's question (array parameters to functions)
Date: 1998/11/29
Date: 1998-11-29T00:00:00+00:00 [thread overview]
Message-ID: <m3iufyykdy.fsf@mheaney.ni.net> (raw)
In-Reply-To: 73qc0p$24e$1@mulga.cs.mu.OZ.AU
fjh@cs.mu.oz.au (Fergus Henderson) writes:
> Matthew Heaney <matthew_heaney@acm.org> writes:
>
> >greg <ref15@columbia.edu> writes:
> >> One requirement of the assignment is that the
> >> sorting be done by a function which takes the array as a parameter and
> >> returns a sorted array.
> ...
> >> My question is the following: As I understand it, in an Ada function, a
> >> parameter must be passed in "in" mode. Therefore, I assume that in this
> >> assignment, the sorting function has to make a copy of the array
> >> parameter, sort the items in this second array, and finally return this
> >> second array to the caller subprogram, because, given that the array is
> >> passed as a parameter, there is no way to change the values of the array
> >> that is copied in for use in the function.
> >>
> >> Is my understanding correct, or is there some way to avoid having to use
> >> two arrays?
> >
> >But there are two arrays no matter what: one is unsorted
>
> When the sort function is called.
>
> >and one is sorted.
>
> When the sort function returns.
>
> >Having two arrays is a condition of the problem statement,
> >and has nothing to do with the language.
>
> This is not correct.
>
> In some languages, e.g. C++, arrays can be passed and returned by
> reference, and can be modified, so (unless there was some additional
> constraint in the assignment, e.g. that the function's input argument
> not be modified) the two arrays could be the same array.
That is precisely that case. The requirement is for a function, not a
procedure. Therefore, there is a requirement that the original array
not be modified.
The problem is perhaps more clearly stated as like this. "Given this
specification of this Ada function:
function Sort (Items : Item_Array) return Item_Array;
Implement the body of this Ada function."
Implementing the body Sort requires implies the existence of another
array; specifically, the return value of the function. When you call
the sort function:
First_Array_Which_Is_Unsorted : Item_Array;
...
Second_Array_Which_Is_Sorted : constant Item_Array :=
Sort (First_Array_Which_Is_Unsorted);
There are two arrays.
Here are excepts from the original post:
(start of quote)
I have a homework assignment which involves writing an Ada program that
sorts an array of items. One requirement of the assignment is that the
sorting be done by a function which takes the array as a parameter and
returns a sorted array.
My question is the following: As I understand it, in an Ada function, a
parameter must be passed in "in" mode. Therefore, I assume that in this
assignment, the sorting function has to make a copy of the array
parameter, sort the items in this second array, and finally return this
second array to the caller subprogram, because, given that the array is
passed as a parameter, there is no way to change the values of the array
that is copied in for use in the function. [Matt - yes, everything in
the paragraph is true.]
(I realize that it would be possible to use a procedure instead of a
function, or to use a global variable rather than pass any parameter to
the sorting function, but let's assume that that would not be acceptable
in this assignment.) [Matt - here is the explicit statement on the
requirement for a function, not a procedure.]
Is my understanding correct, or is there some way to avoid having to use
two arrays? [Matt - yes, your understanding is correct.]
(end of quote)
> The fact that these two arrays have different contents is not a contraction,
> because the different contents occur at different times, and it's quite
> possible for a single array to have different contents at different times.
I don't understand this paragraph.
next prev parent reply other threads:[~1998-11-29 0:00 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
1998-11-27 0:00 Beginner's question (array parameters to functions) greg
1998-11-28 0:00 ` Tom Moran
1998-11-28 0:00 ` Matthew Heaney
1998-11-28 0:00 ` Brian Rogoff
1998-11-29 0:00 ` Matthew Heaney
1998-11-29 0:00 ` Fergus Henderson
1998-11-29 0:00 ` Matthew Heaney [this message]
1998-12-02 0:00 ` Fergus Henderson
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox