Dinamik dizide en büyük değişken nasıl bulunur ?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
uğur alkan
Üye
Mesajlar: 227
Kayıt: 29 Ağu 2004 04:49
Konum: Istanbul

Dinamik dizide en büyük değişken nasıl bulunur ?

Mesaj gönderen uğur alkan »

Dinamik dizide en büyük değişken nasıl bulunur
Maxvalue fonksiyonu dizi tipi dinamiktir diyor ve program çalışmıyor.
Bazen sert rüzgarlar eser başını öne eğmekten asla korkma
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Döngü kullan o zaman.

Kod: Tümünü seç

function EnBuyuk(const Degerler:array of Integer):Integer;
var i:Integer;
begin
  i:=Low(Degerler);
  Result:=Degerler[i];
  for i:=i+1 to High(Degerler) do
   if Degerler[i]>Result then Result:=Degerler[i];
end;
Bu kod umarım işine yarar.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Delphi Help'e baktım.. Orada See Also'yu (buna da bir gözat manasındadır ya hani :wink: ) çok severim.

- Orada MaxIntValue diye başka bir şey gözüme ilişti... Aşağıdaki gibi denedim sesini çıkarmadan görevini başarıyla yaptı 8)

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
Var
  Dinamik : Array of Integer;
  Sayac   : Integer;
begin
  Randomize;
  SetLength(Dinamik, 10);
  For Sayac := 0 to 9 do Dinamik[Sayac] := Random(10) * Sayac+1;
  For Sayac := 0 to 9 do Memo1.Lines.Add(IntToStr(Dinamik[Sayac]));
  ShowMessageFmt('En Yüksek Sayı : %d', [MaxIntValue(Dinamik)]);
end;
Resim
Resim ....Resim
Kullanıcı avatarı
uğur alkan
Üye
Mesajlar: 227
Kayıt: 29 Ağu 2004 04:49
Konum: Istanbul

Mesaj gönderen uğur alkan »

Bende döngü ile çözdüm fakat maxintvalue gayet güzel çalışırken
max value çalışmaması gayet ilginç geldi.
Kullandığım dizi float tipinde döngüsüz belki daha hızlı çözüm vardır diye düşündüm. Teşekkür ederim.
Bazen sert rüzgarlar eser başını öne eğmekten asla korkma
Kullanıcı avatarı
Opt2000
Üye
Mesajlar: 216
Kayıt: 09 Tem 2003 10:04

Mesaj gönderen Opt2000 »

Selam,

MaxValue ve MaxIntValue fonksiyonları da zaten döngü ile yapıyorlar bu yüzden senin yazdığın kodla arasında herhangi bir fark yok.

Bunu olabilecek en hızlı çözümü (asm girmedikten sonra tabii) pointer aritmetiği ile bir şeyler yapmak, ama burada kazanacağın süre de bir iki milyonluk bir dizide en fazla 50-100 ms olacaktır. Eğer bir oyun yazıyor olsaydın belki mantıklı olabilirdi, ama 50-100 ms gibi bir fark bir çok program için önemli bir fark değil. Pointer aritmetiğindeki en büyük avantaj da range checking yapılmamasıdır. Bu yüzden daha hızlı çalışır.

Kolay gelsin,
Bahadır Alkaç
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@Opt2000 haklı...

- Ispatı da hazır, bu fonksiyonu çalıştıran kütüphane olan MATH'ın kaynak kodları içerisindekinden inciler... :o

Kod: Tümünü seç

function MaxValue(const Data: array of Double): Double;
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;

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;

function Max(const A, B: Integer): Integer;
begin
  if A > B then
    Result := A
  else
    Result := B;
end;
Resim
Resim ....Resim
Cevapla