/*
 *  C# Program to Call Math Operations using Delegates
 */

using System;
public class MathOperations
{
    public static double Multiply(double value)
    {
        return value * 2;
    }

    public static double Square(double value)
    {
        return value * value;
    }
}


delegate double DoubleOp(double x);

class Application
{
    static void Main()
    {
        DoubleOp[] operations =
        {
            MathOperations.Multiply,
            MathOperations.Square
        };
        for (int i = 0; i < operations.Length; i++)
            {
                Console.WriteLine("Operation[{0}]:", i);
                ProcessAndDisplayNumber(operations[i], 5.0);
                ProcessAndDisplayNumber(operations[i], 13.55);
                ProcessAndDisplayNumber(operations[i], 1.732);
                Console.WriteLine();
            }
        Console.ReadLine();
    }

    static void ProcessAndDisplayNumber(DoubleOp action, double value)
    {
        double result = action(value);
        Console.WriteLine(
            "Value : {0}  Result : {1}", value, result);
    }
}
/*

Operation[0]:
Value : 5  Result : 10
Value : 13.55  Result : 27.1
Value : 1.732  Result : 3.464

Operation[1]:
Value : 5  Result : 25
Value : 13.55  Result : 183.6025
Value : 1.732  Result : 2.999824