Problem:
凸 n 角形の面積

凸 n 角形（すべての頂点の内角が 180 度未満である多角形、要するにへこんでいない多角形のこと）の頂点の座標を読んで、その面積を出力するプログラムを作成してください。頂点には辺のつながりの順序に従って頂点 1、頂点 2、頂点 3、‥‥頂点 n という名前がついています。

ただし、 n は 3 以上 20 以下とします。また、次の、三角形の 3 辺の長さ a, b, c から面積 S を求める公式を使ってもかまいません。

入力

入力は以下の形式で与えられます。

x1,y1
x2,y2
:
xn,yn

xi, yi はそれぞれ頂点 i の x 座標, y 座標を表す実数です。

出力

面積 S （実数）を１行に出力します。
出力は 0.000001 以下の誤差を含んでもかまいません。

Sample Input

0.0,0.0
0.0,1.0
1.0,1.0
2.0,0.0
1.0,-1.0

Output for the Sample Input

2.500000

Solution in C# (judge verdict: Accepted)

using System;
using System.Collections.Generic;
struct Coordinate
{
    private double x;
    private double y;
    public double X { get { return x; } }
    public double Y { get { return y; } }
    public Coordinate(double x, double y)
    {
        this.x = x;
        this.y = y;
    }
    public static Coordinate Sub(Coordinate p, Coordinate q)
    {
        return new Coordinate(p.X - q.X, p.Y - q.Y);
    }
}
class P
{
    static void Main()
    {
        List<Coordinate> ps = new List<Coordinate>();
        for (; ; )
        {
            try
            {
                string[] s = Console.ReadLine().Split(',');
                double x = double.Parse(s[0]);
                double y = double.Parse(s[1]);
                ps.Add(new Coordinate(x, y));
            }
            catch { break; }
        }
        int n = ps.Count;
        double ans = 0.0;
        for (int i = 1; i < n - 1; i++)
        {
            Coordinate p = Coordinate.Sub(ps[i], ps[0]);
            Coordinate q = Coordinate.Sub(ps[i + 1], ps[0]);
            ans += CalcArea(p, q);
        }
        Console.WriteLine(ans);
    }
    static double CalcArea(Coordinate p, Coordinate q){
        return Math.Abs(p.X * q.Y - p.Y * q.X) / 2;
    }
}