Pascal中用于冒泡排序算法的PlotBars过程

时间:2016-03-30 08:28:38

标签: pascal

我目前正在研究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;  

What my Output looks like

What i want my Output to look like

2 个答案:

答案 0 :(得分:0)

在绘制每个条形图之前清除for i循环内的屏幕,因此只有最后一个条形图存活。在循环之前调用ClearScreen()(以及在循环之后调用DrawInterface()RefreshScreen())。

答案 1 :(得分:0)

你的问题是如何绘制rectangels。 我假设您的过程FillRectangle调用FillRect。 FillRect从左上角开始绘制,需要4个坐标![enter image description here] 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;