2016-03-30 4 views
0

Ich arbeite gerade an einem Programm in Pascal, in dem ich den Bubble Sort Algorithmus implementieren und visuell mit Bars anzeigen möchte. Ich habe die BubbleSort-Prozedur erfolgreich geschrieben, aber ich bleibe bei der PlotBars-Prozedur (Die Prozedur, die Balken für die BubbleSort-Prozedur zeichnet). Jetzt, wenn ich das Programm starte, zeigt es das Nummernfeld auf der rechten Seite an und wenn ich auf "Sort!" Knopf zeigt nur einen Balken an und wenn ich den Sortierknopf drücke, verringert sich die Höhe des Balkens. Ich füge unterhalb meines Codeausschnitts und meiner Ausgaben an und füge auch unten an, wie meine Ausgabe aussehen soll. Jede Hilfe wird geschätzt. DankPlotBars Prozedur in Pascal für Bubble Sort Algorithmus

Grüße, Waleed

Code of 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

+0

-Code sollte in der Frage als Text eingefügt werden, nicht als Bild . Welche Version von Pascal benutzt du? – Raidri

+0

Sie sollten ein minimales, vollständiges und überprüfbares Beispiel angeben (http://stackoverflow.com/help/mcve). Ihr Teil des Codes kompiliert nicht, da viele Variablen und Funktionen nicht enthalten sind. –

Antwort

0

Sie den Bildschirm in Ihrem for i Schleife löschen, bevor jede Bar, so dass nur die letzte Zeichnung Bar überlebt. Setzen Sie den Anruf auf ClearScreen() vor der Schleife (und die Anrufe nach DrawInterface() und RefreshScreen() nach der Schleife).

+0

Okay, ich habe das getan, aber immer noch erscheint nur ein Balken auf dem Bildschirm. Ich möchte, dass meine Ausgabe wie das oben angefügte Bild aussieht. Sollte es nicht noch mehr FillRectangle-Prozeduren geben? –

0

Ihr Problem ist, wie Sie die Rectangels zeichnen. Ich nehme an, dass Ihre Prozedur FillRectangle FillRect aufruft. FillRect geht von der linken oberen Ecke Zeichnung und benötigt 4 Koordinaten ![enter image description here] 1

So hat Ihr Code so etwas wie folgt aussehen:

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;