arkadaşlar dizi içindeki en buyuk değeri bulma üzerine netde araştırma yaptım.
sonuc:=MaxIntValue(frmWinTp);//en büyük degeri bul
bu kodla en buyuk değeri buluyorum ama bana en buyuk değerin id side lazım
for döngüsü kullanmadan bulmak mümkünmü?
saygılarımla
Size bir iyi bir kötü haberim var...
Kötü haber; Math unitinde MaxIntValue fonksiyonunu incelerseniz zaten for döngüsü ile çalıştığı aşağıdaki kodu görürsünüz.
function MaxIntValue(const Data: array of Integer): Integer;
var
I: Integer;
begin
Result := Data[Low(Data)];
for I := Low(Data) + 1 to High(Data) do
if Result < Data[I] then
Result := Data[I];
end;
İyi haber ise Math unitini boş verin, kendiniz bu fonksiyonu copy/paste yapın ve ekstra bir tane daha değişken koyup index'i de tutabilirsiniz.
Örnek :
Type tSonuc = record
Maxvalue, Index : Integer;
end;
function MaxIntValueAndIndex(const Data: array of Integer): tSonuc;
var
I: Integer;
begin
Result.Maxvalue := Data[Low(Data)];
Result.Index := Low(Data);
for I := Low(Data) + 1 to High(Data) do
if Result.Maxvalue < Data[I] then begin
Result.Maxvalue := Data[I];
Result.Index := I;
end;
end;
Kullanımı
procedure TForm1.Button1Click(Sender: TObject);
const
LDizi : Array[0..4] of integer = ( 5, 7, 12, 1, 3 );
var
LSonuc : tSonuc;
begin
LSonuc := MaxIntValueAndIndex( LDizi );
ShowmessageFmt('Dizinin Max değeri :%d ve %d index nosunda yer alıyor', [ LSonuc.Maxvalue, LSonuc.Index ]);
end;
hocam bu kadar detaylı cevap gelince utandım valla çok sağolun hocam.
ben aşagıdaki şekilde halletmiştim. sizin örneklerinizide kullanacağım
saygılarımla
procedure TfrmWin.FormShow(Sender: TObject);
var
i,sonuc:integer;
id:integer;
begin
//kazanann sıralayı belirleyelim
sonuc:=MaxIntValue(frmWinTp);//en büyük degeri bul
for i:=1 to 10 do
begin
if frmWinTp[i]=sonuc then id:=i;
end;
lblBir.Caption:=frmWinAd[id];
lblBirPuan.Caption:=IntToStr(sonuc);
end;