Sorumuz oldukça basit olsa da tek dizi içinde bunu yapmanızı talep edeceğim. Geçici olarak bir transfer objesi oluşturmak yasaktır.
10 tane ürün yer alıyor. Bunları bir TList içinde düşünün. 5 tanesi gömlek, 3 tanesi kravat, 2 tanesi de ceket. Önceliğimiz 5 tane gömlek sonra 3 kravat ve en son 2 ceket olacak şekilde sıralamayı elden geçirmek. Bunun için istediğiniz sıralama algoritmasını da kullanabilirsiniz.
Liste şu şekilde;
1. gömlek
2. kravat
3. ceket
4. gömlek
5. gömlek
6. kravat
7. gömlek
8. kravat
9. ceket
10. gömlek
İlk cevaplayan ve en kısa çözümü veren kişiye +10 puan
En kısa çözümü veren kişiye +9 puan
Doğru cevaplayan kişiye +8 puan
Başarılar!
program Project26;
{$APPTYPE CONSOLE}
{$R *.res}
{
1. gömlek
2. kravat
3. ceket
4. gömlek
5. gömlek
6. kravat
7. gömlek
8. kravat
9. ceket
10. gömlek
}
uses
System.SysUtils;
var
liste:array [0..9] of integer ;
const
urunler : array[1..3] of string =
(
'gömlek', 'kravat', 'ceket '
) ;
procedure QuickSort ( var aDizi: Array of Integer; aTaban, aTavan: Integer; aSadeceAraliktakiler: Boolean = FALSE);
var
Kucuk
, Buyuk
, Aradaki
, Temp : Integer;
begin
Kucuk := aTaban;
Buyuk := aTavan;
Aradaki := aDizi[ (Kucuk + Buyuk) div 2 ];
repeat
while ( aDizi[Kucuk] < Aradaki ) do Inc(Kucuk);
while ( aDizi[Buyuk] > Aradaki ) do Dec(Buyuk);
if (Kucuk <= Buyuk) then begin
Temp := aDizi[Kucuk];
aDizi[Kucuk] := aDizi[Buyuk];
aDizi[Buyuk] := Temp;
Inc(Kucuk) ;
Dec(Buyuk) ;
end;
until (Kucuk > Buyuk);
if (aSadeceAraliktakiler = FALSE) then begin
if (Buyuk > aTaban) then QuickSort(aDizi, aTaban, Buyuk);
if (Kucuk < aTavan) then QuickSort(aDizi, Kucuk, aTavan);
end;
end;
var
i:integer;
begin
liste[0]:=1;
liste[1]:=2;
liste[2]:=3;
liste[3]:=1;
liste[4]:=1;
liste[5]:=2;
liste[6]:=1;
liste[7]:=2;
liste[8]:=3;
liste[9]:=1;
QuickSort(liste, Low(liste), High(liste)) ;
for I := Low(liste) to High(liste) do writeln(inttostr(i+1)+'.'+urunler[liste[I]]);
Readln;
end.
Ben
burada Uğur Bey'in yazdığı QuickSort'u kullandım ama
buradan istenilen bir algoritmada kullanılabilir.
Degisken kullanabiliyor muyuz ?
(28-11-2017, Saat: 20:14)boreas Adlı Kullanıcıdan Alıntı: [ -> ]Degisken kullanabiliyor muyuz ?
Serbest ancak ek bir liste oluşturup tek tek ayırıp sonra birleştirip diğerlerini silmek yasak

CustomSort kullanılarak yapılabilir:
type
TGiysi = (gömlek, kravat, ceket); // ÖNCELİĞE GÖRE BU TİP OLUŞTURULMALI!!!
function CompareFunc(List: TStringList; Index1, Index2: Integer): Integer;
var
Priorty1, Priorty2: Integer;
begin
Priorty1 := GetEnumValue(TypeInfo(TGiysi), List[Index1]);
Priorty2 := GetEnumValue(TypeInfo(TGiysi), List[Index2]);
if Priorty1 > Priorty2 then
Result := 1
else if Priorty2 > Priorty1 then
Result := -1
else
Result := 0;
end;
var
Liste: TStringList;
...
Liste.Add('gömlek');
Liste.Add('kravat');
Liste.Add('ceket');
Liste.Add('gömlek');
Liste.Add('gömlek');
Liste.Add('kravat');
Liste.Add('gömlek');
Liste.Add('kravat');
Liste.Add('ceket');
Liste.Add('gömlek');
Liste.CustomSort(CompareFunc);
...