2013-07-10 4 views
5

आप एक विधि कैसे बनाते हैं जिसमें सबसे कम तापमान शामिल होता है और औसत अस्थायी गणना करता है। मैं बस एक संकेत चाहता हूं और पूरा समाधान नहीं, क्योंकि मैं अपनी प्रोग्रामिंग समस्याओं को हल करना चाहता हूं। मेरे पास केवल 10 वर्ग हैं .. लोगों की टिप्पणियों पर टिप्पणी करने के लिए मेरे प्रोफेसर व्याख्यान नहीं लेते हैं और मैंने अपनी पुस्तक को कई बार देखा है।आप ऐरे के मूल्य को कैसे बाहर निकालते हैं?

मैंने इस कार्यक्रम को उपयोगकर्ता से एक नंबर लेने के लिए बनाया है। वह संख्या सरणी में जोड़ दी गई है। निम्नतम और उच्चतम temps मुद्रित करने के लिए उस सरणी का उपयोग Temp वर्ग का उदाहरण बनाने के लिए किया जाता है।

class Program 
{ 
    static void Main(string[] args) 
    { 
     Console.Write("Enter a Temperature in Degrees:"); 
     string n = Console.ReadLine(); 
     int number = Convert.ToInt32(n); 
     Temp t = new Temp(100, 52, 98, 30, 11, 54, number); 
     Console.WriteLine("Lowest Temperature:{0}", t.lowest()); 
     Console.WriteLine("Highest Temperature: {0}", t.highest()); 
     Console.WriteLine("Average Temperature: {0}", t.Average()); 
    } 

    public class Temp 
    { 
     private int[] temp = new int[7]; // array 
     public Temp(int d1, int d2, int d3, int d4, int d5, int d6, int d7) // constructor with 7 parameters 
     { 
      temp[0] = d1; // assigning constructor parameters to array 
      temp[1] = d2; 
      temp[2] = d3; 
      temp[3] = d4; 
      temp[4] = d5; 
      temp[5] = d6; 
      temp[6] = d7; 
     } 

     public int lowest() // returning the lowest value of the set of numbers 
     { 
      int smallest = 150; 
      for (int c = 0; c < 7; c++) 
      { 
       if (temp[c] < smallest) 
       { 
        smallest = temp[c]; 
       } 

      } 
      return smallest; 
     } 

     public int highest() 
     { 
      int highest = -1; 
      for (int c = 0; c < 7; c++) 
      { 
       if (temp[c] > highest) 
       { 
        highest = temp[c]; 
       } 
      } 

      return highest; 
     } 

     public double Average() 
     { 
      double average = 0; 
      for (int c = 0; c < 7; c++) 
      { 

      } 
      return average; 
     } 
    } 
} 

उत्तर

8

यह एक एकल पाश से कोई लेना देना बहुत आसान है:

public double Average() 
{ 
    // Initialize smallest with the first value. 
    // The loop will find the *real* smallest value. 
    int smallest = temp[0]; 

    // To calculate the average, we need to find the sum of all our temperatures, 
    // except the smallest. 
    int sum = temp[0]; 

    // The loop does two things: 
    // 1. Adds all of the values. 
    // 2. Determines the smallest value. 
    for (int c = 1; c < temp.Length; ++c) 
    { 
     if (temp[c] < smallest) 
     { 
      smallest = temp[c];  
     } 
     sum += temp[c]; 
    } 
    // The computed sum includes all of the values. 
    // Subtract the smallest. 
    sum -= smallest; 

    double avg = 0; 
    // and divide by (Length - 1) 
    // The check here makes sure that we don't divide by 0! 
    if (temp.Length > 1) 
    { 
     avg = (double)sum/(temp.Length-1); 
    } 
    return avg; 
} 
+1

+1: मैंने सुझाव दिया है कि मैं इस जवाब को पसंद करता हूं। – Douglas

1

आपको त्रुटि हैंडलिंग जोड़ने की जरूरत है, लेकिन यह मदद कर सकते हैं एक शुरुआत

var ints = new List<int>(); 
var newInts = ints.OrderBy(x => x).ToList(); 
newInts.RemoveAt(0); 
var avg = newInts.Average(); 
0

आप कुछ LINQ कार्यों के साथ आसानी से कर सकते हैं। ऐसा करने के कई अन्य तरीके हैं लेकिन वे सभी समान होंगे। यदि आपके औसत में एक से अधिक मिनट मूल्य हैं तो उनमें से कोई भी शामिल नहीं होगा।

int min = myArray.Min(); // get the min element 
var withoutMin = myArray.Where(x => x != min); // get a new list without the min element 
double mean = withoutMin.Average(); // take the sum and divide it by the count 
+0

यह अमान्य होगा यदि कई तत्व हैं जो न्यूनतम – Sayse

+0

@Sayse के बराबर नहीं हैं। यह सूची की विशेषताओं और न्यूनतम परिभाषित करने पर निर्भर करता है। मुझे लगता है कि यह गणित/लैम्ब्डा कैलकुस के सम्मेलनों का पालन करता है। मैंने हालांकि इसे संपादित करने के लिए एक संपादन में रखा था। – evanmcdonnal

+0

मैंने देखा :) निष्पक्षता में, आप अपनी अंतिम पंक्ति – Sayse

0
public double Average() 
    { 
     var tempsToUse = temp.OrderByDescending(t => t).Take(temp.Length - 1); 

     return tempsToUse.Average(); 
    } 

संपादित पूर्ण समारोह हस्ताक्षर शामिल करने के लिए।

2

यहाँ तैनात (निश्चित रूप से अपने संस्करण, पूरी तरह से ठीक है और अच्छी तरह से वर्णित है मैं तो बस के लिए डाल दिया डगलस से थोड़ा अलग संस्करण है आपके समीक्षा)। यह निम्नतम() विधि कॉल का उपयोग नहीं करता है।

public double Average() 
{ 
    double sum = temp[0]; // sum of temperatures, starting from value of first one in array 
    double lowest = temp[0]; // buffer for lowest temperature value 
    for (int c = 1; c < 7; c++) // start loop from second position in array 
    { 
     if (temp[c] < lowest) // checking if next value in array is smaller than the lowest one so far... 
     { 
      lowest = temp[c]; // ...if so, value of variable lowest is changing 
     } 
     sum = sum + temp[c]; // adding temparatures value to variable sum, one by one 
    } 
    sum = sum - lowest; // at the end we substract lowest value from sum of all temperatures 
    double average = sum/6; // average value calculation 
    return average; 
} 

संपादित करें: जिम Mischel पहले था ;-)। उनका संस्करण temp.Length का उपयोग करने के लिए भी अधिक लचीला धन्यवाद है, स्थिर संख्या नहीं (इस मामले में 7)।

+0

आपने temp का उपयोग क्यों किया [0] .. मुझे लगता है कि आप मान रहे हैं कि temp [0] हमेशा तापमान का सबसे कम सेट है। या आप सिर्फ योग और न्यूनतम के मूल्य को शुरू कर रहे हैं? –

+0

@ZachB: बस आरंभ करना। यह करने का थोड़ा और अधिक प्रभावी तरीका है, क्योंकि यह एक के द्वारा पुनरावृत्तियों की संख्या को कम करता है। – Douglas

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

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