2011-08-20 18 views

cevap

6

Dizide doğrusal bir şekilde basitçe döngü yapın. Min değeri ve maksimum değerler için bir değişken tutun. Dizideki her iki değeri de ilklendirin. Daha sonra, her eleman için, bu eleman, sırasıyla min veya maksimum değerinden daha küçük veya daha büyükse, minimum veya maksimum değeri güncelleyin.

minval := a[0]; 
maxval := a[0]; 
for i := 1 to Count-1 do 
begin 
    if a[i]<minval then 
    minval := a[i] 
    else if a[i]>maxval then 
    maxval := a[i]; 
end; 

Açıkçası bu kod Sayısı> 0 varsayar.

MinValue ve MaxValue yordamlarını eşit olarak Matematik biriminden kullanabileceğinizi unutmayın.

+0

Sanırım aynı anda yazıyorduk! Başarımızı daha iyi seviyorum, fakat Delphi'nin hangi sürümünün desteklenip desteklenmediğine bağlı olmasına rağmen, daha kompakt yapıları tercih ederim. –

+3

+1 'MinValue' ve' MaxValue' için. Ayrıca, ['MinIntValue'] (http://docwiki.embarcadero.com/VCL/en/Math.MinIntValue) ve [' MaxIntValue'] (http://docwiki.embarcadero.com/VCL/en/Math. MaxIntValue). – NGLN

+0

@ngln bunun için teşekkürler, tabii ki haklısınız, kaçak nokta verileriyle alışkanlıkla çalışıyorum. –

4

Önceki bulunan min ve maks.

İşte bir kod parçacığı. Açıklamanızın ardından, Int64'ü kullanmak için kodu düzenledim.

Min := High(Int64); 
Max := Low(Int64); 
for ThisNumber in MyArray do 
begin 
    if ThisNumber < Min then 
    begin 
    Min := ThisNumber; 
    end 
    if ThisNumber > Max then 
    begin 
    Max := ThisNumber; 
    end; 
end; 

O Math.pas içinde MaxIntValue olarak uygulandığını ilginçtir:

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; 

Bu uygulama, David'in cevap benzeyen, başlangıç ​​değeri olarak ilk dizi değerini kullanır. Bu, dizinin en az bir öğeye sahip olduğunu varsayar. Ayrıca döngü, Düşük (Veri) + 1'den başlayıp gereksiz bir karşılaştırmayı kaydedebileceğine de dikkat edin. Tanımladığınız veriler için, her bir dizide 100 elemanla, en iyi ihtimalle% 1'lik bir hız artışı elde edersiniz.

Performans önemli değilse, MinIntValue ve MaxIntValue daha özlü olacaktır. Eğer kendi yerinizi yuvarlarsanız, o zaman sadece iki kere yerine bir kere dizinin üzerinden yineleyin.

+0

üzerindeki kodu kullanın. David, biçimlendirme için teşekkürler. –

+0

no dizim int64'tür .. –

+0

Kod şimdi Int64 olarak değiştirildi. –

İlgili konular