Dinamik dizide en büyük değişken nasıl bulunur
Maxvalue fonksiyonu dizi tipi dinamiktir diyor ve program çalışmıyor.
Dinamik dizide en büyük değişken nasıl bulunur ?
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- 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 ?
Bazen sert rüzgarlar eser başını öne eğmekten asla korkma
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Döngü kullan o zaman. Bu kod umarım işine yarar.
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;
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
Delphi Help'e baktım.. Orada See Also'yu (buna da bir gözat manasındadır ya hani
) ç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ı

- 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ı

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;
- uğur alkan
- Üye
- Mesajlar: 227
- Kayıt: 29 Ağu 2004 04:49
- Konum: Istanbul
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ç
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ç
@Opt2000 haklı...
- Ispatı da hazır, bu fonksiyonu çalıştıran kütüphane olan MATH'ın kaynak kodları içerisindekinden inciler...
- Ispatı da hazır, bu fonksiyonu çalıştıran kütüphane olan MATH'ın kaynak kodları içerisindekinden inciler...

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;