Hi, am trying to make a program that when prompted by the user creates, displays and sorts an array using the bubble sort method.
It fills and draws the array fine but does not carry out any sorting procedure.
Is there a problem with the way I am passing variables between the Sort and NumSwap procedures?
Thanks.
program GameMain;
uses SwinGame, sgTypes, SysUtils;
type
IntArray = array [0..24] of Integer;
procedure PopulateArray(var data: IntArray);
var
i: Integer;
begin
for i := 0 to High(data) do
begin
data[i] := Rnd(ScreenHeight());
end;
end;
procedure ShowNumbersInList(var data: IntArray);
var
i: Integer;
begin
ListClearItems('NumbersList');
for i := 0 to High(data) do
begin
ListAddItem('NumbersList', IntToStr(data[i]));
end;
end;
procedure PlotBars(var data: IntArray);
var
barWidth: Integer;
i: Integer;
x: Integer;
y: Integer;
begin
ClearScreen(ColorWhite);
barWidth := Round((ScreenWidth() - PanelWidth('NumberPanel')) / Length(data));
for i := 0 to High(data) do
begin
x := i * barWidth;
y := ScreenHeight() - data[i];
FillRectangle(ColorRed, x, y, barWidth, data[i]);
x := x + barWidth;
end;
DrawInterface();
RefreshScreen(60);
end;
procedure NumSwap(var v1: Integer; var v2: Integer);
var
temp: Integer;
begin
temp := v1;
v1 := v2;
v2 := temp;
end;
procedure Sort(var data: IntArray);
var
i, j: Integer;
begin
for i := High(data) to Low(data) do
for j := Low(data) to i - 1 do
if data[j] > data[j + 1] then
begin
NumSwap(data[j], data[j + 1]);
PlotBars(data);
Delay(100);
end
end;
procedure DoSort();
var
data: IntArray;
begin
PopulateArray(data);
ShowNumbersInList(data);
PlotBars(data);
Sort(data);
end;
procedure Main();
var
data: IntArray;
begin
OpenGraphicsWindow('Sort Visualiser', 800, 600);
LoadResourceBundle( 'NumberBundle.txt' );
GUISetForegroundColor( ColorBlack );
GUISetBackgroundColor( ColorWhite );
ShowPanel( 'NumberPanel' );
ClearScreen(ColorWhite);
repeat
ProcessEvents();
UpdateInterface();
DrawInterface();
RefreshScreen(60);
if ButtonClicked('SortButton') then
begin
DoSort();
end;
until WindowCloseRequested();
end;
begin
Main();
end.