2011-08-20 17 views
6

हैलो मुझे डेल्फी में सबसे छोटी और सबसे बड़ी संख्या कैसे मिल सकती है?एक सरणी में सबसे छोटी और सबसे बड़ी संख्या कैसे खोजें?

मान लीजिए मैं 10 विभिन्न एक सरणी में संग्रहीत नंबर हैं:

मैं कैसे जान सकता हूँ सबसे बड़ी संख्या है और मेरे सरणी में सबसे छोटी संख्या?

उत्तर

6

रैखिक फैशन में सरणी के माध्यम से बस लूप करें। एक मान को न्यूनतम मान के लिए रखें और अधिकतम मानों के लिए एक रखें। सरणी में पहले मान दोनों को शुरू करें। फिर प्रत्येक तत्व के लिए, न्यूनतम या अधिकतम मान को अद्यतन करें यदि वह तत्व क्रमशः न्यूनतम या अधिकतम मान से कम या उससे अधिक है।

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; 

स्पष्ट रूप से यह कोड गणना> 0 मानता है।

ध्यान दें कि आप गणित इकाई से मिनवैल्यू और मैक्सवेल्यू रूटीन का समान रूप से उपयोग कर सकते हैं।

+0

मुझे लगता है कि हम एक ही समय में टाइप कर रहे थे! मुझे आपकी शुरुआत बेहतर पसंद है, लेकिन मैं अधिक कॉम्पैक्ट for.in.in संरचना पसंद करता हूं, हालांकि यह डेल्फी के किस संस्करण पर निर्भर करता है कि यह समर्थित है या नहीं। 'MinValue' और 'MaxValue' के लिए –

+3

+1। ['MinIntValue'] भी है (http://docwiki.embarcadero.com/VCL/en/Math.MinIntValue) और [' MaxIntValue'] (http://docwiki.embarcadero.com/VCL/en/Math। MaxIntValue)। – NGLN

+0

@ngln इसके लिए धन्यवाद, आप सही हैं, मैं आदत से फ़्लोटिंग पॉइंट डेटा के साथ काम करता हूं। –

4

पिछले मिले न्यूनतम और अधिकतम की तुलना में सरणी के माध्यम से Iterate।

यहां एक कोड स्निपेट है। आपके स्पष्टीकरण के बाद, मैंने Int64 का उपयोग करने के लिए कोड संपादित किया है।

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; 

यह ध्यान रखें कि Math.pas में MaxIntValue के रूप में कार्यान्वित किया जाता है दिलचस्प है:

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; 

यह कार्यान्वयन, डेविड के जवाब के लिए इसी तरह, प्रारंभिक मूल्य के रूप में पहली सरणी मान उपयोग करता है। यह मानता है कि सरणी में कम से कम एक तत्व है। ध्यान दें कि लूप तब कम (डेटा) + 1 पर शुरू हो सकता है और एक अनावश्यक तुलना को बचा सकता है। आपके द्वारा वर्णित डेटा के लिए, प्रत्येक सरणी में 100 तत्वों के साथ, आपको सबसे अच्छा 1% गति सुधार मिलेगा।

यदि प्रदर्शन कोई फर्क नहीं पड़ता तो MinIntValue और MaxIntValue अधिक संक्षिप्त होगा। यदि आप अपना खुद का रोल करते हैं, तो आप केवल दो बार की बजाय सरणी के माध्यम से फिर से चल रहे हैं।

+0

धन्यवाद डेविड के ऊपर कोड का उपयोग करें। –

+0

कोई मेरी सरणी int64 है .. –

+0

कोड अब Int64 में बदल गया है। –

संबंधित मुद्दे