Sıralama Hk

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
d7new
Üye
Mesajlar: 20
Kayıt: 06 Eki 2014 10:55

Sıralama Hk

Mesaj gönderen d7new »

Sıralama üzerine biraz kopyala - yapıştır biraz da mantık kurarak bir şeyler yapmaya çalışıyorum ama bir türlü beceremedim.
2 sorum olacak aşağıdaki kod parçası neden çalışmıyor (Invalid pointer operation veya bunun gibi hata mesajları çıkıyor butona tıkladığımda)
Diğer sorum buradaki 0'dan başlama veya 1'den başlama arasındaki fark nedir?

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
dizi: array of Integer;
a,x,y,k,say,degistir: integer;
begin
say:= Listbox1.Items.Count;
SetLength(dizi,say);
for x:=0 to say-1 do begin
dizi[x]:= StrToInt(ListBox1.Items[x]);
end;

  for y:=0 to say-2 do begin
    for k:=1 to say-1 do begin
  if  dizi[k] > dizi[k+1] then begin
    degistir:= dizi[k];
    dizi[k]:= dizi[k+1];
    dizi[k+1]:= degistir;
    end;
    end;
    end;
    for  a:=0 to say-1 do begin
    ListBox2.Items.Add(IntToStr(dizi[a]));
end;
end;

end.
Kullanıcı avatarı
softdestek
Üye
Mesajlar: 155
Kayıt: 17 Eyl 2010 03:53

Re: Sıralama Hk

Mesaj gönderen softdestek »

Anladığım kadarı sayıları sıralamaya çalışıyorsun listbox içindeki en kolay yol şu bence..
Listbox sayıları ekle fakat eklerken sayıları formatlayarak ekle
eğer en büyük sayı iki basamaklı ise sayısını 01 veya 3 ü 03 diyerek kaydet

eğer en büyük sayın 3 basamaklı ise 0001 diye ekle listbox sonra listbos sort özelliği var onu seçersen tüm sayılar sıralanmış olur...
Eşağıdaki komutu kullanabilirsin mesela
ShowMessage(Format('0 ekle sayıya = <%.6d>', [1234])); bunun çıktısı aşağıda mesela
0 ekle sayıya = <001234>
speed60
Üye
Mesajlar: 53
Kayıt: 07 Eki 2011 08:07

Re: Sıralama Hk

Mesaj gönderen speed60 »

senin bu kod listbox1 boşken çalışmaz listbox1 a yukardan aşağıya 12345678 sayılarını gir çalıştır 8 i silip 2 sıraya 0 eklediğini görürsün yani bi acaip
PROGRAMADOR
Üye
Mesajlar: 239
Kayıt: 04 Oca 2008 01:53
Konum: Karşıyaka/İzmir

Re: Sıralama Hk

Mesaj gönderen PROGRAMADOR »

örnek:

Kod: Tümünü seç

  PPointerList = ^TPointerList;
  TPointerList = array[0..MaxListSize - 1] of Pointer;
  TListSortCompare = function (Item1, Item2: Pointer): Integer;

procedure QuickSort(SortList: PPointerList; L, R: Integer;
  SCompare: TListSortCompare);
var
  I, J: Integer;
  P, T: Pointer;
begin
  repeat
    I := L;
    J := R;
    P := SortList^[(L + R) shr 1];
    repeat
      while SCompare(SortList^[I], P) < 0 do Inc(I);
      while SCompare(SortList^[J], P) > 0 do Dec(J);
      if I <= J then
      begin
        T := SortList^[I];
        SortList^[I] := SortList^[J];
        SortList^[J] := T;
        Inc(I);
        Dec(J);
      end;
    until I > J;
    if L < J then QuickSort(SortList, L, J, SCompare);
    L := I;
  until I >= R;
end;

procedure TtheList.Sort(Compare: TListSortCompare);
begin
  if (FList <> nil) and (Count > 1) then
    QuickSort(FList, 0, Count - 1, Compare);
end;

 type
  precord_list=^record_list;
  record_list=record
   ackCount:integer;
 end;


function sort(item1,item2:pointer):integer; 
var
 list1,list2:precord_list;
begin
 list1:=item1;
 list2:=item2;

 result:=integer(list2^.ackCount) - integer(list1^.ackCount);
end;
In dubio pro reo...
Şüpheden sanık/özgürlük yararlanır...
Cevapla