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.
next prev parent 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