Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
dizideki en buyuk sayı ve id si
#1
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
Ekmeğimi yazılımdan kazanmıyorum kendi halimde bir şeyler yapıyorum. 49 yaşında emekliyim.
İğne sokmadan yardımcı olacaksan başımın üstünde yerin var.

Cevapla
#2
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
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#3
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;
Ekmeğimi yazılımdan kazanmıyorum kendi halimde bir şeyler yapıyorum. 49 yaşında emekliyim.
İğne sokmadan yardımcı olacaksan başımın üstünde yerin var.

Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Büyük Sayılarla Çalışmak narkotik 13 9.438 19-09-2024, Saat: 14:30
Son Yorum: Kush01
  Modelleme sayı kombinasyonu mersoy 13 2.425 25-08-2024, Saat: 09:02
Son Yorum: damert6
  Databasedeki total sayı Altıner 2 1.218 12-12-2022, Saat: 11:14
Son Yorum: Altıner
  random 0001 ile 1000 arası sayı üretme erdogan 4 2.212 14-04-2022, Saat: 00:27
Son Yorum: enigma
  inputbox'a sadece harf / sayı gimek ? cooxed 2 1.756 30-06-2021, Saat: 20:45
Son Yorum: mcuyan



Konuyu Okuyanlar: 1 Ziyaretçi