2016-03-30 16 views
0

Şu anda, Kabarcık Sıralama algoritmasını uygulamak ve Çubukları kullanarak görsel olarak görüntülemek istediğim Pascal programında çalışıyorum. BubbleSort prosedürünü başarıyla yazdım ancak PlotBars prosedürüne (BubbleSort prosedürü için çubuklar çizen prosedür) takılıyorum. Şimdi programı çalıştırdığımda sağdaki sayı panelini ve "Sırala" yı tıklattığımda görüntüleniyor. Buton sadece bir çubuk görüntüler ve sıralama düğmesine basmaya devam edersek çubuğun yüksekliğini azaltır. Kod snippet'inin ve çıktılarımın altına ekliyorum ve ayrıca çıktısının nasıl görünmesini istediğimin altına ekliyorum. Herhangi bir yardım takdir edilecektir. , WaleedPlotBars prosedürü

Kod 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; 
Her çubuk çizim önce for i döngü içine ekranı temizlemek

What my Output looks like

What i want my Output to look like

+0

Kod metin olarak değil, bir görüntü olarak gündeme eklenmesi gereken . Ayrıca, hangi Pascal sürümünü kullanıyorsunuz? – Raidri

+0

Minimal, Tam ve Doğrulanabilir bir örnek sağlamanız gerekir (http://stackoverflow.com/help/mcve). Birçok değişken ve fonksiyon dahil edilmediğinden, kodunuzun bir kısmı derlenmez. –

cevap

0

ait sayesinde

Selamlar, bu yüzden sadece son bar hayatta kalır. Aramayı döngüden önce ClearScreen()'a gönderin (ve çağrılardan sonra DrawInterface() ve RefreshScreen() çağrıları).

+0

Tamam, bunu yaptım ama hala ekranda sadece bir çubuk görünüyor. Çıktımın yukarıda eklediğim resim gibi görünmesini istiyorum. Daha fazla FillRectangle prosedürü olmamalıdır? –

0

Sorununuz, dikdörtgenleri nasıl çizdiğinizdir. Prosesinizin FillRectangle çağrılarını FillRect olarak kabul ediyorum. fillRect sol üst köşesinden çizim başlar ve ihtiyacı 4 koordinatlar ![enter image description here] 1

Yani Kodunuz böyle bir şey görünmek zorunda:

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; 
İlgili konular