// project created on 21.11.2005 at 10:50
#define TEST_THIS_FUCKING_SHIT

using System;

class MainClass
{
    public static void Main(string[] args)
        {
        // Macht mir das Leben leichter
        const int cnARRAY_SIZE  = 10000;
        const int cnARRAY_RANGE = 1337;
        
        // dynamisches Array mit 10000 Werten deklarieren
        int[] anZahlen = new int[cnARRAY_SIZE];
        Random rndZufallsGenerator = new Random();
         
        Console.WriteLine("Playing with Arrays!");
        
        // C# kennt die Groesse eines Arrays!
        for (int i = 0 ; i < anZahlen.Length ; i++  )
            {
#if TEST_THIS_FUCKING_SHIT
            // Testszenario primitivo erzeugt 50% 100er und 50% 0er
            // Min: 0 Max: 100, Mittel 50, Summe 50000, Stdev: 50, Var: 50² == 2500
            anZahlen[i] = (i%2 == 0 ? 100 : 0);
#else
            anZahlen[i] = rndZufallsGenerator.Next(cnARRAY_RANGE);
#endif
            }
        
        // Min und Max mit Funktionen testen
        Console.WriteLine("Minimum: {0}\nMaximum: {1}", 
                          arrayMin(anZahlen), arrayMax(anZahlen));  
        // Summe & Mittelwert mit Funktionen testen
        Console.WriteLine("Summe: {0}", arraySum(anZahlen));    
        Console.WriteLine("Mittelwert: {0}", arrayMean(anZahlen));  
        Console.WriteLine("Varianz: {0}", arrayVar(anZahlen));  
        Console.WriteLine("Standardabweichung: {0}", arrayStdev(anZahlen)); 
        }
        
    static void arrayShow(int[] anArray)
        {
        for (int i = 0 ; i < anArray.Length ; i++  )
            {
            Console.Write("{0}, ", anArray[i]);
            }
        }   

    static int arrayMin(int[] anArray)
        {
        int nMin = anArray[0];
        
        foreach (int nZahl in anArray)
            {
            if (nZahl < nMin) 
                nMin = nZahl;
            } 
        return nMin;
        }   

    static int arrayMax(int[] anArray)
        {
        int nMax = anArray[0];
        
        foreach (int nZahl in anArray)
            {
            if (nZahl > nMax) 
                nMax = nZahl;
            } 
        return nMax;
        }   
    
    // Mittelwert in Ganzzahlen.    
    static int arraySum(int[] anArray)
        {
        // Crosscheck: 1337 * 10000 = 13370000 passt in einen int32.
        int nSum = 0;
        
        foreach (int nZahl in anArray)
            {
            nSum += nZahl;
            } 
        return nSum;
        }   

    // Mittelwert in Ganzzahlen.    
    static int arrayMean(int[] anArray)
        {
        return arraySum(anArray) / anArray.Length;
        }   

    // Varianz in Ganzzahlen.   
    static int arrayVar(int[] anArray)
        {
        // Varianz: Summe der quadrierten Abweichungen vom Mittelwert
        // Den Mittelwert VORHER bestimmen (CPU-Power)
        int    nMean  = arrayMean(anArray);
        double dftSum = 0;
        
        // worst case crosscheck: 1337² = 2E6, * 1E5 = 1E11: Geht net in int!
        foreach (int nZahl in anArray)
            {
            int nDiff = nZahl - nMean;
            dftSum   += Convert.ToDouble(nDiff * nDiff); // Quadrat
            }
        return Convert.ToInt32( dftSum / Convert.ToDouble(anArray.Length - 1));
        }   

    // Standardabweichung in Ganzzahlen.    
    static int arrayStdev(int[] anArray)
        {
        return Convert.ToInt32(Math.Sqrt(Convert.ToDouble(arrayVar(anArray))));
        }
    } // class

syntax highlighted by Code2HTML, v. 0.9.1