comp.lang.ada
 help / color / mirror / Atom feed
From: "P S Norby" <psnorby@hotmail.com>
Subject: Re: Slice from a matrix?
Date: Fri, 23 May 2003 14:15:03 GMT
Date: 2003-05-23T14:15:03+00:00	[thread overview]
Message-ID: <H1qza.991356$S_4.1007300@rwcrnsc53> (raw)
In-Reply-To: Cmnza.38775$l66.3829@fe10.atl2.webusenet.com


"David C. Hoos" <david.c.hoos.sr@ada95.com> wrote in message
news:Cmnza.38775$l66.3829@fe10.atl2.webusenet.com...
>
> "Harald Schmidt" <harald.schmidt@anobject.net> wrote in message
> news:BAF3B30D.3023%harald.schmidt@anobject.net...
> > Hi,
> >
> > I got a generic matrix / vector package like this:
> >
> > Generic
> >     rows : positive;
> >     cols : positive;
> >     item_type is digits <>;
> > Package matrix is
> >     type vector_type is array (positive range <>) of item_type;
> >     type matrix_type is array (positive range <>,
> >                                positive range <>) of item_type;
> >     subtype col_vector is vector_type(1..cols);
> >     subtype row_vector is vector_type(1..rows);
> >     subtype matrix is matrix_type(1..rows, 1..cols);
> > ...
> > End matrix;
> >
> > Then I have three Put procedures, one for matrix, one for row_vector,
and
> > one for col_vector.
> >
> > My question is how to get a slice from a matrix which I can convert to a
> > col_vector which does the printing?
> >
> > Things like...
> >
> >     PUT (col_vector(M (1, 1..3)));
> >
> > doesn't work.
> >
> > I don't want to copy code for the printing routines.
> Since slices in ada can only be taken from one-dimensional arrays, you
> would need to declare your matrix as an array of vectors.
> Individual elements are then accessed by matrix (m}{n}.
>

The trouble then is that you can either have rows of columns, in which case
you can take a slice of a column, but not a slice of a row... or you can
have columns of rows, in which case you can take a slice of a row, but not a
slice of a  column.  The col_vector and row_vector are not subtypes of
matrix_type.


> Incidentally, shouldn't a vector which is indexed by row be a column
vector,
> and a vector which is indexed by column be a row vector?

Yes.  Might want to make them type-safe.

My simple solution would be to have a "Put_Item (item : in item_type);"
routine (add other parameters as desired), then declare something like

      procedure Put_Column (Mat : in Matrix_type; in_col : in cols;
from_row, to_row: in rows);

and similalry to print rows or matrix.  Your "PUT (col_vector(M (1,
1..3)));" becomes

 Put_Column (M, 1, 1, 3);

or    Put_Column (Mat => M, in_col => 1, From_row =>1, to_row => 3);   if
you prefer named notation.

These "put" routines could be in your generic or elsewhere.





  reply	other threads:[~2003-05-23 14:15 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-05-23  9:14 Slice from a matrix? Harald Schmidt
2003-05-23 10:52 ` Dale Stanbrough
2003-05-23 11:23 ` David C. Hoos
2003-05-23 14:15   ` P S Norby [this message]
2003-05-24 23:00     ` Robert I. Eachus
2003-05-23 18:13   ` Georg Bauhaus
2003-05-23 17:56 ` Stephen Leake
2003-05-23 20:03   ` Simon Wright
2003-05-23 21:06     ` Stephen Leake
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox