* creating an array
@ 2006-02-14 6:06 isaac2004
2006-02-14 13:59 ` jimmaureenrogers
2006-02-14 19:25 ` Björn Persson
0 siblings, 2 replies; 23+ messages in thread
From: isaac2004 @ 2006-02-14 6:06 UTC (permalink / raw)
hello
how would i go about taking numbers generated by a function and storing
them into arrays in the purpose of having them on record
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: creating an array
2006-02-14 6:06 creating an array isaac2004
@ 2006-02-14 13:59 ` jimmaureenrogers
2006-02-14 15:20 ` isaac2004
2006-02-14 19:25 ` Björn Persson
1 sibling, 1 reply; 23+ messages in thread
From: jimmaureenrogers @ 2006-02-14 13:59 UTC (permalink / raw)
isaac2004 wrote:
> how would i go about taking numbers generated by a function and storing
> them into arrays in the purpose of having them on record
I am unclear about your goals.
Do you want to run a function and put successive results in array
elements?
Do you want to save that array to a file?
Jim Rogers
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: creating an array
2006-02-14 13:59 ` jimmaureenrogers
@ 2006-02-14 15:20 ` isaac2004
2006-02-14 18:44 ` jimmaureenrogers
0 siblings, 1 reply; 23+ messages in thread
From: isaac2004 @ 2006-02-14 15:20 UTC (permalink / raw)
>I am unclear about your goals.
Do you want to run a function and put successive results in array
elements?
Do you want to save that array to a file?
that would be nice as well but i want to store them to a temp directory
but saving them to a file would be nice to know as well
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: creating an array
2006-02-14 15:20 ` isaac2004
@ 2006-02-14 18:44 ` jimmaureenrogers
0 siblings, 0 replies; 23+ messages in thread
From: jimmaureenrogers @ 2006-02-14 18:44 UTC (permalink / raw)
isaac2004 wrote:
> >I am unclear about your goals.
> Do you want to run a function and put successive results in array
> elements?
> Do you want to save that array to a file?
>
> that would be nice as well but i want to store them to a temp directory
> but saving them to a file would be nice to know as well
Do you want to save the data in a binary format, or as human-readable
text?
Jim Rogers
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: creating an array
2006-02-14 6:06 creating an array isaac2004
2006-02-14 13:59 ` jimmaureenrogers
@ 2006-02-14 19:25 ` Björn Persson
2006-02-14 19:39 ` Dmitry A. Kazakov
1 sibling, 1 reply; 23+ messages in thread
From: Björn Persson @ 2006-02-14 19:25 UTC (permalink / raw)
isaac2004 wrote:
> how would i go about taking numbers generated by a function and storing
> them into arrays in the purpose of having them on record
for Index in The_Array_Type'Range loop
The_Array(Index) := The_Function;
end loop;
That's probably not what you want, but it does take numbers (or some
other data) generated by a function and store them in an array.
--
Bj�rn Persson PGP key A88682FD
omb jor ers @sv ge.
r o.b n.p son eri nu
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: creating an array
2006-02-14 19:25 ` Björn Persson
@ 2006-02-14 19:39 ` Dmitry A. Kazakov
2006-02-14 21:14 ` isaac2004
2006-02-15 7:42 ` Maciej Sobczak
0 siblings, 2 replies; 23+ messages in thread
From: Dmitry A. Kazakov @ 2006-02-14 19:39 UTC (permalink / raw)
On Tue, 14 Feb 2006 19:25:05 GMT, Bj�rn Persson wrote:
> isaac2004 wrote:
>> how would i go about taking numbers generated by a function and storing
>> them into arrays in the purpose of having them on record
>
> for Index in The_Array_Type'Range loop
> The_Array(Index) := The_Function;
> end loop;
The_Array_Type := (others => The_Function);
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: creating an array
2006-02-14 19:39 ` Dmitry A. Kazakov
@ 2006-02-14 21:14 ` isaac2004
2006-02-14 22:17 ` jimmaureenrogers
2006-02-15 7:42 ` Maciej Sobczak
1 sibling, 1 reply; 23+ messages in thread
From: isaac2004 @ 2006-02-14 21:14 UTC (permalink / raw)
ok to everybody trying to help me thank you i didnt specify enough. i
have a program that takes two inputs from prompts, the first number is
an integer less than 10. the second number has the amount of digits
that the previous number specifies. what i want to do is split the
number up into single digits, sort them and out put the min ascending
order.
here is my code i cant get the split function right
with Ada.Text_Io;
use Ada.Text_Io;
with Ada.Integer_Text_Io;
use Ada.Integer_Text_Io;
procedure test is
-----------------------------------------------------------------------------------------------
--| Recieves two inputs, one being a number les than ten and the
other number is a number with the same amount of digits
--| as the first recieved number. the second number is then
seperated, the digits stored in an array and put into ascending order
--| Author: Isaac Levin, Western Washington University
--| Last Modified: February 2006
----------------------------------------------------------------------------
type Index is Natural range 1 .. 10
type Number is Natural range 000000000 .. 999999999;
type Positivearray is array (Index) of Positive;
Num1 : Number;
Num_Array : Positivearray;
Prompt : Index;
Numdigit : Number;
procedure Split (
N1 : in Number;
A : in out Positivearray ) is
Temp : Integer := 1;
Remain : Number;
begin
for I in 1..(Prompt - 1) loop
Temp := Temp * 10;
end loop;
for I in Positivearray'range loop
A(N1) := Temp rem 10;
Remain := Remain rem Temp;
Temp := Temp / 10;
if Num1(N1) /= 0 then
N1 := N1 + 1;
end if;
end loop;
end Split;
procedure Sort (
Thearray : in out Positivearray;
Inuse : in Natural ) is
-- Sorts the elements of the array from smallest to largest
Min : Positive;
Indexmin : Positive;
Temp : Positive;
begin
for I in 1..Inuse - 1 loop
Min := Thearray(I);
Indexmin := I;
for J in I + 1 .. Inuse loop
if Thearray(J) < Min then
Min := Thearray(J);
Indexmin := J;
end if;
end loop;
Temp := Thearray(I);
Thearray(I) := Min;
Thearray(Indexmin) := Temp;
end loop;
end Sort;
-- end of ascending procedure
begin
Put(Item => " Please enter a number with ");
Put(Item => Prompt);
Put(Item => " or fewer digits: ");
New_Line;
Get(Item => Num1);
New_Line;
Split (Num1, Prompt);
Sort (Num1, Prompt);
New_Line;
Put ("The numbers in sorted order are");
New_Line;
for I in 1..Prompt loop
Put (Num1(I), 0);
New_Line;
end loop;
end test;
any help would be greatly appreciated
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: creating an array
2006-02-14 21:14 ` isaac2004
@ 2006-02-14 22:17 ` jimmaureenrogers
2006-02-14 22:30 ` isaac2004
2006-02-14 22:45 ` Ludovic Brenta
0 siblings, 2 replies; 23+ messages in thread
From: jimmaureenrogers @ 2006-02-14 22:17 UTC (permalink / raw)
isaac2004 wrote:
> ok to everybody trying to help me thank you i didnt specify enough. i
> have a program that takes two inputs from prompts, the first number is
> an integer less than 10. the second number has the amount of digits
> that the previous number specifies. what i want to do is split the
> number up into single digits, sort them and out put the min ascending
> order.
>
You might think through your requirements one more time.
What happens when the first parameter does not match the number of
digits in the second parameter? If this condition is never supposed to
occur then why enter the first parameter? Simply calculate the number
of digits from the number entered and sort its digits.
Your split subprogram is a lot of work. You can achieve the same
results by converting the number to a string, which is an array of
characters. Sort that array and output the results. The 'Image
attribute will convert the number to its corresponding string
representation.
Jim Rogers
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: creating an array
2006-02-14 22:17 ` jimmaureenrogers
@ 2006-02-14 22:30 ` isaac2004
2006-02-14 22:45 ` Ludovic Brenta
1 sibling, 0 replies; 23+ messages in thread
From: isaac2004 @ 2006-02-14 22:30 UTC (permalink / raw)
>You might think through your requirements one more time.
What happens when the first parameter does not match the number of
digits in the second parameter? If this condition is never supposed to
occur then why enter the first parameter? Simply calculate the number
of digits from the number entered and sort its digits.
Your split subprogram is a lot of work. You can achieve the same
results by converting the number to a string, which is an array of
characters. Sort that array and output the results. The 'Image
attribute will convert the number to its corresponding string
representation.
it is for a class i have and the ta told me to create a program that
did what i have already explained. he said it was fine just that i
needed some work with the split function, but the reason for first
prompt number is that it decides the length of the array so extra
numbers throw a exception handle that needs to be put in there
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: creating an array
2006-02-14 22:17 ` jimmaureenrogers
2006-02-14 22:30 ` isaac2004
@ 2006-02-14 22:45 ` Ludovic Brenta
2006-02-14 22:54 ` isaac2004
1 sibling, 1 reply; 23+ messages in thread
From: Ludovic Brenta @ 2006-02-14 22:45 UTC (permalink / raw)
"jimmaureenrogers@worldnet.att.net" <jimmaureenrogers@worldnet.att.net> writes:
> isaac2004 wrote:
>> ok to everybody trying to help me thank you i didnt specify enough. i
>> have a program that takes two inputs from prompts, the first number is
>> an integer less than 10. the second number has the amount of digits
>> that the previous number specifies. what i want to do is split the
>> number up into single digits, sort them and out put the min ascending
>> order.
>>
>
> You might think through your requirements one more time.
> What happens when the first parameter does not match the number of
> digits in the second parameter? If this condition is never supposed to
> occur then why enter the first parameter? Simply calculate the number
> of digits from the number entered and sort its digits.
>
> Your split subprogram is a lot of work. You can achieve the same
> results by converting the number to a string, which is an array of
> characters. Sort that array and output the results. The 'Image
> attribute will convert the number to its corresponding string
> representation.
Better yet: don't convert at all; Ada.Text_IO.Get_Line will give you
the user's input as a raw string. There is no requirement to convert
that string to a number anywhere. There is however an implicit
requirement to check that all characters in that string are digits,
and that there are exactly N1 of them.
If I understand the problem correctly, what you want is:
Inputs: 4 and 1977
Output: 1779
Is that correct? You can do the sorting by creating an array
indicating how many times each digit occurs in the user's input, like
so:
-- Caveat student: not compiled or tested; just wrote this in 10 minutes.
-- Caveat student: your teacher probably reads c.l.a, too :)
with Ada.Text_IO.Integer_IO;
procedure Sort_And_Display is
subtype Digit_Type is Character range '0' .. '9';
type Occurrences_Type is array (Digit_Type) of Natural;
Expected_Number_Of_Digits : Positive;
User_Input : String (1 .. 10);
Last : Natural;
Occurrences : Occurrences_Type := (others => 0);
Bad_Input : exception;
begin
Ada.Text_IO.Put ("How many digits (1 .. 10)? ");
Ada.Text_IO.Integer_IO.Get (Expected_Number_Of_Digits);
Ada.Text_IO.Skip_Line;
if not Expected_Number_Of_Digits in 1 .. 10 then
raise Bad_Input;
end if;
Ada.Text_IO.Put ("Now type your number consisting of " &
Integer'Image (Expected_Number_Of_Digit) &
" digits: ");
Ada.Text_IO.Get_Line (User_Input, Last);
if Last > Expected_Number_Of_Digits then
raise Bad_Input;
end if;
-- Parse the character string
for J in 1 .. Last loop
if not User_Input (J) in Digit_Type then
raise Bad_Input;
end if;
Occurrences (User_Input (J)) := Occurrences (User_Input (J)) + 1;
end if;
-- Now, Occurrences is naturally sorted; just walk over it.
for K in Occurrences'Range loop
for L in 1 .. Occurrences (K) loop
Ada.Text_IO.Put (K);
end loop;
end loop;
end Sort_And_Display;
--
Ludovic Brenta.
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: creating an array
2006-02-14 22:45 ` Ludovic Brenta
@ 2006-02-14 22:54 ` isaac2004
2006-02-14 23:10 ` Ludovic Brenta
0 siblings, 1 reply; 23+ messages in thread
From: isaac2004 @ 2006-02-14 22:54 UTC (permalink / raw)
>If I understand the problem correctly, what you want is:
Inputs: 4 and 1977
Output: 1779
that is sort of correct but the code you just gave me just puts the
array into a string and parses it out when the operation should be done
on the array, i see that you can do it that way but that would make
throw away all of my old code. how can the old code be changed,
especially the procedure to split the file, so that i can preform these
actions on an array
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: creating an array
2006-02-14 22:54 ` isaac2004
@ 2006-02-14 23:10 ` Ludovic Brenta
2006-02-14 23:37 ` isaac2004
0 siblings, 1 reply; 23+ messages in thread
From: Ludovic Brenta @ 2006-02-14 23:10 UTC (permalink / raw)
"isaac2004" <isaac_2004@yahoo.com> writes:
>>If I understand the problem correctly, what you want is:
>
> Inputs: 4 and 1977
> Output: 1779
>
>
> that is sort of correct but the code you just gave me just puts the
> array into a string and parses it out when the operation should be done
> on the array, i see that you can do it that way but that would make
> throw away all of my old code. how can the old code be changed,
> especially the procedure to split the file, so that i can preform these
> actions on an array
No, my program does not "put the array into a string". It obtains
user input as a string (which is its natural form anyway), transforms
is into an array of Naturals, and then walks the array to display
sorted digits. Your program takes the user input as a string (its
natural form), converts it to a number (by means of
Ada.Integer_Text_IO.Get), and then tries to massage it back into an
array. This is not only convoluted, it is also inefficient.
If that's any help, you can convert a number to an array by working
backwards; units first, then tens, then hundreds etc. This should get
you going:
type Index_Type is range 0 .. 9;
type Occurrences_Type is array (Index_Type) of Natural;
procedure Split (Number : in Natural;
Occurrences : out Occurrences_Type) is
Occurrences := (others => 0);
begin
while Number > 0 loop
Index := Index_Type (Number mod 10);
Occurrences (Index) := Occurrences (Index) + 1;
Number := Number / 10;
end loop;
end Split;
But I still think my solution is much, much better :)
--
Ludovic Brenta.
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: creating an array
2006-02-14 23:10 ` Ludovic Brenta
@ 2006-02-14 23:37 ` isaac2004
2006-02-15 7:45 ` Anders Wirzenius
2006-02-15 21:53 ` Ludovic Brenta
0 siblings, 2 replies; 23+ messages in thread
From: isaac2004 @ 2006-02-14 23:37 UTC (permalink / raw)
>If that's any help, you can convert a number to an array by working
backwards; units first, then tens, then hundreds etc. This should get
you going:
thanx jus thave to match varible names and such
>But I still think my solution is much, much better :)
sorry havent learned that far yet, but i cant seem to get your code to
work by itself, it throws a error about a loop where the first if
statement is. oh well it wasnt tested but i would like ot see a running
program of that if possible.
happy coding !
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: creating an array
2006-02-14 19:39 ` Dmitry A. Kazakov
2006-02-14 21:14 ` isaac2004
@ 2006-02-15 7:42 ` Maciej Sobczak
2006-02-15 10:37 ` Jean-Pierre Rosen
2006-02-15 13:30 ` Dmitry A. Kazakov
1 sibling, 2 replies; 23+ messages in thread
From: Maciej Sobczak @ 2006-02-15 7:42 UTC (permalink / raw)
Dmitry A. Kazakov wrote:
>>for Index in The_Array_Type'Range loop
>> The_Array(Index) := The_Function;
>>end loop;
>
> The_Array_Type := (others => The_Function);
^^^^^
Rather The_Array := ...
But what's more important - could you point to a specific paragraph in
AARM that guarantees that the two above are equivalent? I mean - is it
guaranteed that (others=>The_Function) has the meaning of increasing
order of indexes? Is is possible for the implementation to call
The_Function just once and reuse its return value for all elements'
assignments?
5.2 seems to be a relevant chapter, but I haven't found anything that
would apply here. 4.3.3 does not help either.
--
Maciej Sobczak : http://www.msobczak.com/
Programming : http://www.msobczak.com/prog/
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: creating an array
2006-02-14 23:37 ` isaac2004
@ 2006-02-15 7:45 ` Anders Wirzenius
2006-02-15 20:44 ` Björn Persson
2006-02-15 21:53 ` Ludovic Brenta
1 sibling, 1 reply; 23+ messages in thread
From: Anders Wirzenius @ 2006-02-15 7:45 UTC (permalink / raw)
"isaac2004" <isaac_2004@yahoo.com> writes:
> sorry havent learned that far yet, but i cant seem to get your code to
> work by itself, it throws a error about a loop where the first if
> statement is. oh well it wasnt tested but i would like ot see a running
> program of that if possible.
>
> happy coding !
>
Quick and dirty just to get it running:
Correct the spelling error:
end if; -> end loop;
you have to instantiate the Ada.Text_IO.Integer_IO:
package Anders is new Ada.Text_IO.Integer_IO (Integer);
and then use your new package:
Anders.Get (Expected_Number_Of_Digits);
If the operator "not" is not defined, change the
if statement to:
if ... then
null;
else
...;
end if;
Good luck!
--
Anders
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: creating an array
2006-02-15 7:42 ` Maciej Sobczak
@ 2006-02-15 10:37 ` Jean-Pierre Rosen
2006-02-15 13:30 ` Dmitry A. Kazakov
1 sibling, 0 replies; 23+ messages in thread
From: Jean-Pierre Rosen @ 2006-02-15 10:37 UTC (permalink / raw)
Maciej Sobczak a �crit :
> But what's more important - could you point to a specific paragraph in
> AARM that guarantees that the two above are equivalent? I mean - is it
> guaranteed that (others=>The_Function) has the meaning of increasing
> order of indexes? Is is possible for the implementation to call
> The_Function just once and reuse its return value for all elements'
> assignments?
> 5.2 seems to be a relevant chapter, but I haven't found anything that
> would apply here. 4.3.3 does not help either.
>
>
4.3.3(23): each component is evaluated once (it is thus not allowed to
evaluate the function only once), but this happens in an arbitrary order
(there is no guarantee that the function is called in increasing index
order).
--
---------------------------------------------------------
J-P. Rosen (rosen@adalog.fr)
Visit Adalog's web site at http://www.adalog.fr
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: creating an array
2006-02-15 7:42 ` Maciej Sobczak
2006-02-15 10:37 ` Jean-Pierre Rosen
@ 2006-02-15 13:30 ` Dmitry A. Kazakov
2006-02-15 16:23 ` isaac2004
1 sibling, 1 reply; 23+ messages in thread
From: Dmitry A. Kazakov @ 2006-02-15 13:30 UTC (permalink / raw)
On Wed, 15 Feb 2006 08:42:09 +0100, Maciej Sobczak wrote:
> Dmitry A. Kazakov wrote:
>
>>>for Index in The_Array_Type'Range loop
>>> The_Array(Index) := The_Function;
>>>end loop;
>>
>> The_Array_Type := (others => The_Function);
> ^^^^^
> Rather The_Array := ...
Yes, of course.
> But what's more important - could you point to a specific paragraph in
> AARM that guarantees that the two above are equivalent? I mean - is it
> guaranteed that (others=>The_Function) has the meaning of increasing
> order of indexes? Is is possible for the implementation to call
> The_Function just once and reuse its return value for all elements'
> assignments?
Jean-Pierre has answered this.
Functions shouldn't have side effects relevant to the call context. So the
result of The_Function should be independent on Index. It shouldn't read a
stream, but it can call to random generator, it can create a new object, it
can start a task etc.
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: creating an array
2006-02-15 13:30 ` Dmitry A. Kazakov
@ 2006-02-15 16:23 ` isaac2004
0 siblings, 0 replies; 23+ messages in thread
From: isaac2004 @ 2006-02-15 16:23 UTC (permalink / raw)
>Quick and dirty just to get it running:
Correct the spelling error:
end if; -> end loop;
you have to instantiate the Ada.Text_IO.Integer_IO:
package Anders is new Ada.Text_IO.Integer_IO (Integer);
and then use your new package:
Anders.Get (Expected_Number_Of_Digits);
If the operator "not" is not defined, change the
if statement to:
if ... then
null;
else
...;
end if;
this whole program throws flags up everywhere in Adagide, undefined
varibles and misuse of packages. i dont know where to start on how to
fix it. thanks though
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: creating an array
2006-02-15 7:45 ` Anders Wirzenius
@ 2006-02-15 20:44 ` Björn Persson
2006-02-16 6:59 ` Anders Wirzenius
0 siblings, 1 reply; 23+ messages in thread
From: Björn Persson @ 2006-02-15 20:44 UTC (permalink / raw)
Anders Wirzenius wrote:
> you have to instantiate the Ada.Text_IO.Integer_IO:
> package Anders is new Ada.Text_IO.Integer_IO (Integer);
Or use Ada.Integer_Text_IO.
> If the operator "not" is not defined, change the
> if statement to:
Of course "not" is defined! Insert parentheses!
--
Bj�rn Persson PGP key A88682FD
omb jor ers @sv ge.
r o.b n.p son eri nu
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: creating an array
2006-02-14 23:37 ` isaac2004
2006-02-15 7:45 ` Anders Wirzenius
@ 2006-02-15 21:53 ` Ludovic Brenta
2006-02-15 23:29 ` isaac2004
1 sibling, 1 reply; 23+ messages in thread
From: Ludovic Brenta @ 2006-02-15 21:53 UTC (permalink / raw)
"isaac2004" <isaac_2004@yahoo.com> writes:
>>But I still think my solution is much, much better :)
> sorry havent learned that far yet, but i cant seem to get your code
> to work by itself, it throws a error about a loop where the first if
> statement is. oh well it wasnt tested but i would like ot see a
> running program of that if possible.
OK, it took me another minute or two. Here is the corrected version,
followed by the diff so you can see what I changed.
(in retrospect, "if X not in 1 .. 10" reads better than "if not X in 1
.. 10", don't you think?
--
Ludovic Brenta.
-- Caveat student: not compiled or tested; just wrote this in 10 minutes.
-- Caveat student: your teacher probably reads c.l.a, too :)
with Ada.Integer_Text_IO;
with Ada.Text_IO;
procedure Sort_And_Display is
subtype Digit_Type is Character range '0' .. '9';
type Occurrences_Type is array (Digit_Type) of Natural;
Expected_Number_Of_Digits : Positive;
User_Input : String (1 .. 10);
Last : Natural;
Occurrences : Occurrences_Type := (others => 0);
Bad_Input : exception;
begin
Ada.Text_IO.Put ("How many digits (1 .. 10)? ");
Ada.Integer_Text_IO.Get (Expected_Number_Of_Digits);
Ada.Text_IO.Skip_Line;
if Expected_Number_Of_Digits not in 1 .. 10 then
raise Bad_Input;
end if;
Ada.Text_IO.Put ("Now type your number consisting of " &
Integer'Image (Expected_Number_Of_Digits) &
" digits: ");
Ada.Text_IO.Get_Line (User_Input, Last);
if Last > Expected_Number_Of_Digits then
raise Bad_Input;
end if;
-- Parse the character string
for J in 1 .. Last loop
if User_Input (J) not in Digit_Type then
raise Bad_Input;
end if;
Occurrences (User_Input (J)) := Occurrences (User_Input (J)) + 1;
end loop;
-- Now, Occurrences is naturally sorted; just walk over it.
for K in Occurrences'Range loop
for L in 1 .. Occurrences (K) loop
Ada.Text_IO.Put (K);
end loop;
end loop;
end Sort_And_Display;
--- /tmp/ediff10085Ca 2006-02-15 22:51:09.000000000 +0100
+++ /tmp/sort_and_display.adb 2006-02-15 22:51:09.000000000 +0100
@@ -1,6 +1,7 @@
-- Caveat student: not compiled or tested; just wrote this in 10 minutes.
-- Caveat student: your teacher probably reads c.l.a, too :)
-with Ada.Text_IO.Integer_IO;
+with Ada.Integer_Text_IO;
+with Ada.Text_IO;
procedure Sort_And_Display is
subtype Digit_Type is Character range '0' .. '9';
type Occurrences_Type is array (Digit_Type) of Natural;
@@ -11,13 +12,13 @@
Bad_Input : exception;
begin
Ada.Text_IO.Put ("How many digits (1 .. 10)? ");
- Ada.Text_IO.Integer_IO.Get (Expected_Number_Of_Digits);
+ Ada.Integer_Text_IO.Get (Expected_Number_Of_Digits);
Ada.Text_IO.Skip_Line;
- if not Expected_Number_Of_Digits in 1 .. 10 then
+ if Expected_Number_Of_Digits not in 1 .. 10 then
raise Bad_Input;
end if;
Ada.Text_IO.Put ("Now type your number consisting of " &
- Integer'Image (Expected_Number_Of_Digit) &
+ Integer'Image (Expected_Number_Of_Digits) &
" digits: ");
Ada.Text_IO.Get_Line (User_Input, Last);
if Last > Expected_Number_Of_Digits then
@@ -26,11 +27,11 @@
-- Parse the character string
for J in 1 .. Last loop
- if not User_Input (J) in Digit_Type then
+ if User_Input (J) not in Digit_Type then
raise Bad_Input;
end if;
Occurrences (User_Input (J)) := Occurrences (User_Input (J)) + 1;
- end if;
+ end loop;
-- Now, Occurrences is naturally sorted; just walk over it.
for K in Occurrences'Range loop
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: creating an array
2006-02-15 21:53 ` Ludovic Brenta
@ 2006-02-15 23:29 ` isaac2004
2006-02-16 3:09 ` jimmaureenrogers
0 siblings, 1 reply; 23+ messages in thread
From: isaac2004 @ 2006-02-15 23:29 UTC (permalink / raw)
hey finally got it to work thanks to everybody for helping.
here is code
with Ada.Text_Io;
use Ada.Text_Io;
with Ada.Integer_Text_Io;
use Ada.Integer_Text_Io;
procedure Lab6 is
-----------------------------------------------------------------------------------------------
--| Recieves two inputs, one being a number les than ten and the
other number is a number with the same amount of digits
--| as the first recieved number. the second number is then
seperated, the digits stored in an array and put into ascending order
--| Author: Isaac Levin, Western Washington University
--| Last Modified: February 2006
----------------------------------------------------------------------------
subtype Index is Natural range 1 .. 10;
subtype Number is Natural range 000000000 .. 999999999;
type Positivearray is array (1 .. 10) of Natural;
A : Positivearray;
Promptnum : Index;
Fullnum : Number;
procedure Split (
N : in Number;
Num_Digits : in Index;
Dl : in out Positivearray) is
-- set the variables
Temp : Natural := 1;
Remain : Number := N;
Numdigits : Natural := 1;
-- set this flag to TRUE initially to signify that we should
ignore the leading zeros
Leadingzero : Boolean := True;
-- Calculate the largest number to divide the input number by so
we can extract the left most digit.
-- So if # of digits specified are: 3, then Temp would be: 100
begin
-- Loop to extract all the digits
-- Note: Numdigit is used as the index variable for our array,
this helps us take out the leading zeros if the number entered
-- has less digits than what the user specified
for I in 1..Num_Digits loop
-- Get the individual digit by remaindering
A(I) := Remain mod 10;
-- Store the remainder so in the next loop we can extract the
next left most digit
Remain := Remain / 10;
end loop;
end Split;
-- procedure to sort parts of array
procedure Sort (
Thearray : in out Positivearray;
Inuse : in Natural) is
-- Sorts the elements of the array from smallest to largest
Min : Positive;
Indexmin : Positive;
Temp : Positive;
begin
for I in 1..Inuse - 1 loop
Min := Thearray(I);
Indexmin := I;
for J in I + 1 .. Inuse loop
if Thearray(J) < Min then
Min := Thearray(J);
Indexmin := J;
end if;
end loop;
Temp := Thearray(I);
Thearray(I) := Min;
Thearray(Indexmin) := Temp;
end loop;
end Sort;
begin -- actual interface
Put ("Please enter the number of digits.");
Get(Item => Promptnum);
New_Line;
Put(Item => "Please enter a number with ") ;
Put (
Item => Promptnum,
Width => 0) ;
Put (Item => " digits.");
Get(Item => Fullnum);
Split(Fullnum, Promptnum, A);
Sort (A, Promptnum); -- sort array
New_Line;
Put ("The numbers in sorted order are");
New_Line;
for I in 1..Promptnum loop
Put (A(I), 0);
New_Line;
end loop;
end Lab6;
thank you
Happy Coding!
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: creating an array
2006-02-15 23:29 ` isaac2004
@ 2006-02-16 3:09 ` jimmaureenrogers
0 siblings, 0 replies; 23+ messages in thread
From: jimmaureenrogers @ 2006-02-16 3:09 UTC (permalink / raw)
Now that you have a complete program, here is the solution I was
thinking of.
with Ada.Text_Io;
procedure Sort_Digits is
procedure Sort_Characters (Buffer : in out String) is
Exchanged : Boolean;
Temp : Character;
begin
loop
Exchanged := False;
for I in Buffer'First..Buffer'Last - 1 loop
if Buffer(I) > Buffer(I + 1) then
Temp := Buffer(I + 1);
Buffer(I + 1) := Buffer(I);
Buffer(I) := Temp;
Exchanged := True;
end if;
end loop;
exit when not Exchanged;
end loop;
end Sort_Characters;
Input_String : String(1..10);
Length : Natural;
begin
Ada.Text_Io.Put_Line("Enter a number of no more than 10 digits");
Ada.Text_Io.Get_Line(Item => Input_String, Last => Length);
Sort_Characters(Input_String(1..Length));
Ada.Text_Io.Put_Line(Input_String(1..Length));
end Sort_Digits;
Note that there is only one input, the number to be sorted.
The resulting output matches your program requirements.
There can never be a mis-match between stated and actual sizes
of the input string. There is no need to raise an exception due to
parameter inconsistencies.
Jim Rogers
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: creating an array
2006-02-15 20:44 ` Björn Persson
@ 2006-02-16 6:59 ` Anders Wirzenius
0 siblings, 0 replies; 23+ messages in thread
From: Anders Wirzenius @ 2006-02-16 6:59 UTC (permalink / raw)
Björn Persson <spam-away@nowhere.nil> writes:
> Anders Wirzenius wrote:
> > you have to instantiate the Ada.Text_IO.Integer_IO: package Anders
> > is new Ada.Text_IO.Integer_IO (Integer);
>
> Or use Ada.Integer_Text_IO.
>
> > If the operator "not" is not defined, change the if statement to:
>
> Of course "not" is defined! Insert parentheses!
>
A less dirty solution than my quick and dirty. :)
Not is defined for boolean type.
--
Anders
^ permalink raw reply [flat|nested] 23+ messages in thread
end of thread, other threads:[~2006-02-16 6:59 UTC | newest]
Thread overview: 23+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-02-14 6:06 creating an array isaac2004
2006-02-14 13:59 ` jimmaureenrogers
2006-02-14 15:20 ` isaac2004
2006-02-14 18:44 ` jimmaureenrogers
2006-02-14 19:25 ` Björn Persson
2006-02-14 19:39 ` Dmitry A. Kazakov
2006-02-14 21:14 ` isaac2004
2006-02-14 22:17 ` jimmaureenrogers
2006-02-14 22:30 ` isaac2004
2006-02-14 22:45 ` Ludovic Brenta
2006-02-14 22:54 ` isaac2004
2006-02-14 23:10 ` Ludovic Brenta
2006-02-14 23:37 ` isaac2004
2006-02-15 7:45 ` Anders Wirzenius
2006-02-15 20:44 ` Björn Persson
2006-02-16 6:59 ` Anders Wirzenius
2006-02-15 21:53 ` Ludovic Brenta
2006-02-15 23:29 ` isaac2004
2006-02-16 3:09 ` jimmaureenrogers
2006-02-15 7:42 ` Maciej Sobczak
2006-02-15 10:37 ` Jean-Pierre Rosen
2006-02-15 13:30 ` Dmitry A. Kazakov
2006-02-15 16:23 ` isaac2004
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox