Delphi Can
dizideki en buyuk sayı ve id si - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Genel Programlama (https://www.delphican.com/forumdisplay.php?fid=6)
+--- Konu Başlığı: dizideki en buyuk sayı ve id si (/showthread.php?tid=6351)



dizideki en buyuk sayı ve id si - sadikacar60 - 26-10-2021

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


dizideki en buyuk sayı ve id si - mrmarman - 26-10-2021

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;


xwwgbbj76aka2oecovjv.gif



Cvp: dizideki en buyuk sayı ve id si - sadikacar60 - 27-10-2021

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;