我目前正在研究Pascal中的一个程序,我想在其中实现冒泡排序算法并使用Bars在视觉上显示它。我已经成功编写了BubbleSort程序,但我仍然坚持使用PlotBars程序(为BubbleSort程序绘制条形图的程序)。现在,当我运行程序时,它会显示右侧的数字面板,当我点击"排序!"按钮它只显示一个条形,如果我一直按下排序按钮,它会降低条形的高度。我附加在我的代码片段和输出下面,并且我附加在我想要的输出之下。任何帮助将不胜感激。感谢
此致 瓦利德
PltoBars代码
procedure PlotBars(var data: array of Integer);
var
i: Integer;
yAxis: Integer;
newWidth: Single;
newHeight: Single;
roundNewWidth: Integer;
roundNewHeight: Integer;
begin
yAxis := 600; //Screenheight is 600
newWidth := ((ScreenWidth() - PanelWidth('NumberPanel')) / 25); // There are 25 index in array
for i:= 0 to High(data) do
begin
newHeight := data[i] - ScreenHeight();
roundNewWidth := Round(newWidth);
roundNewHeight := Round(newHeight);
ClearScreen();
FillRectangle(ColorRed, i, yAxis, roundNewWidth, roundNewHeight);
end;
end;
答案 0 :(得分:0)
在绘制每个条形图之前清除for i
循环内的屏幕,因此只有最后一个条形图存活。在循环之前调用ClearScreen()
(以及在循环之后调用DrawInterface()
和RefreshScreen()
)。
答案 1 :(得分:0)
你的问题是如何绘制rectangels。 我假设您的过程FillRectangle调用FillRect。 FillRect从左上角开始绘制,需要4个坐标] 1
所以你的代码必须看起来像这样:
procedure PlotBars(var data: array of Integer);
var
i: Integer;
yAxis: Integer;
newWidth: Single;
newHeight: Single;
roundNewWidth: Integer;
roundNewHeight: Integer;
begin
yAxis := 600; //Screenheight is 600
newWidth := ((ScreenWidth() - PanelWidth('NumberPanel')) / High(data)); // changed from fixed value, since there could be more than 25!
roundNewWidth := Round(newWidth);
for i:= 0 to High(data) do
begin
newHeight := ScreenHeight() - data[i];
roundNewHeight := Round(newHeight);
FillRectangle(ColorRed, i*roundNewWidth, yAxis, i*roundNewWidth+roundNewWidth, roundnewHeight);
end;
end;