We help IT Professionals succeed at work.

We've partnered with Certified Experts, Carl Webster and Richard Faulkner, to bring you two Citrix podcasts. Learn about 2020 trends and get answers to your biggest Citrix questions!Listen Now

x

# Procedure problem

on
Medium Priority
180 Views
How do i write a procedure which takes an array of ten integer account codes and sorts them into ascending order. The only info i have been givenis:-
TYPE  numbers=array[1..10] of integer
Var   accounts : numbers

i = a var used to index the array
j = a var used to index the array
figures = an array used to hold integers to be sorted
temp = used as a temporary store when elements of the array
are to be interchanged
lowest = this holds the index of the current of the current
lowest element of the array,figures

Top down
for ten times
initialize variables
for the unsorted accounts
if this account<lowest in unsorted part
then
set index of lowest to index of this account
end if
end for
set temp var to lowest account number
set lowest to value of first in unsorted part
set first in unsorted part to value of temp var
end for

I know that you will probably find this incredably easy but it is the first procedure i have come up against as i have only been doing this for a month.
Comment
Watch Question

## View Solution Only

Commented:
OK, if you have the globally defined type numbers as the array you are passing, then you will setup your procedure like so:

procedure SortAccounts(var someArray:numbers);
begin
...
end;

you will call this procedure as follows:

SortAccounts(accounts);

Of course, if accounts is global you don't need to do all this hoopla, (although globally defined variables are trouble waiting to happen).  Now, for the sort, if you know that the accounts is an array of ten, just use a bubble sort.  It's not the fastest, but it will run good enough for an array of size 10.

so, here is what your code will look like (I have not tested this, so some syntactical errors may exist:

procedure SortAccounts(var AccountArray:numbers);
var done:boolean;
loop:byte;
dummy:integer;
begin
repeat
done:=true;

for loop:=1 to 9 do   {9 => 10 - 1}
if AccountArray[loop]<AccountArray[loop+1] then begin
dummy:=AccountArray[loop+1];
AccountArray[loop+1]:=AccountArray[loop];
AccountArray[loop]:=dummy;
{ This swaps the values in the array }

done:=false;
end;
until done;
end;

If this produces the variables in the wrong order (for example, ascending instead of descending), just change the less than sign in the if statement to a greater than sign.  Basically, this sort algorithm does the following:

start at the beginning of an indexed list (an array)
go from 1 to n-1 (9 in our case, since size of array = 10)
so... i = 1 .. n-1
if Array[i]<Array[i+1] Swap Array[i] with Array[i+1]
if you do swap, set the done flag to false, because we know we're not done until we traverse through the entire list without making any changes.
Exit the sort procedure once we go through the entire array without making any changes.

Now the array will be returned sorted.  So, if you were to do:

procedure SomeProc;
var A:numbers;
loop:byte;
begin
A=5; A=3; A=7;
A=1; A=9; A=13;
A=8; A=33; A=4;
A=11;

for loop:=1 to 10 do
write(A[loop],'  ');

SortAccounts(A);

writeln; writeln;

for loop:=1 to 10 do
write(A[loop],'  ');
end;

5  3  7  1  9  13  8  33  4  11

1  3  4  5  7  8  9  11  13  33

Neat, eh?  If you have anymore questions, or if this doesn't help solve your problem, let me know, and I will explain further!  Thanks!!  :)

Not the solution you were looking for? Getting a personalized solution is easy.

##### Thanks for using Experts Exchange.

• View three pieces of content (articles, solutions, posts, and videos)
• Ask the experts questions (counted toward content limit)
• Customize your dashboard and profile