package Wider;

/**
 * Einfache Klasse, die die Formeln, die für das Berechnen des Widerstandsnetzwerkes
 * nötig sind, kapselt. Duch Austauschen/Manipulieren dieser Klasse kann man ganz
 * einfach zB ein Kondensatornetzwerk aus dem Widerstandsnetwerk machen ;-)
 */
public class Calculator implements Tokens{

    /**
     * Führt Rechenoperation durch...
     * @param double[] args: Widerstandswerte auf die die Operation durchzuführen ist.
     * @param int op: Durchzuführende Operation
     *
     * @return Ergebnis der Rechnung
     */
    public double calc(double[] args, int op) throws Exception
    {
        double ret=0;
        if (op==PLUS) {      // Serienscahltung: R[ges.]=R[0]+R[1]+R[2]+...
            for (int i=0;i<args.length;i++)
            {
                ret+=args[i];
            }
        } else
        if (op==SLASH) {      // Parallelschaltung
            for (int i=0;i<args.length;i++)
            {
                if (args[i]!=0)
                    ret+=1/args[i];
            }
            ret=1/ret;
        } else throw new WiderException("invalid operator");

     return ret;
    }
}