/*
 * Aufgabe 19 d:
 * -------------
 *
 * (Herausfordernd:) Lösen Sie die vorige Teilaufgabe erneut, ohne dabei jedoch
 * Arrays oder mehrfache Fallunterscheidungen zur Überprüfung der Parameter
 * zu verwenden!
 */

public class Aufgabe19d
{
	/* FIXME: schlechte Lösung; zulang, zu umständlich */
	public static int tagImJahr(int t, int m, int j)
	{
		int feb;

		/* bestimme Februar tage in diesem Jahr */
		feb = (j % 4 == 0 && j % 100 != 0) || j % 400 == 0 ? 29 : 28;

		/* teste Datum auf Gültigkeit (Tag muss immer zwischen
		 * 1 und 31 liegen) */
		if ((j < 1900 || j > 2040) ||
		    (m < 1 || m > 12) ||
		    (t < 1) || (t > 31) ||
		    ((m == 4 || m == 6 || m == 9 || m == 11) && t > 30) ||
		    (m == 2 && t > feb)) {
			System.err.println("Datum " + t + "." + m +
				"." + j + " ist ungueltig");
			return 0;
		}

		/* Summiere (vorige) Monatstage */
		while (m-- > 1) {
			/* FIXME: schlecht; disharmoniert mit Branch-Prediction
			 * (aber fällt das bei Javas Langsamkeit noch ins
			 * Gewicht?); sollte besser der wahrscheinlichste Weg
			 * sein. */
			if (m == 2)
				t += feb;
			else if (m == 4 || m == 6 || m == 9 || m == 11)
				t += 30;
			else
				t += 31;
		}

		return t;
	}

	public static void main(String[] argv)
	{
		int t = 31;
		int m = 2;
		int j = 2001;

		System.out.println(t + "." + m + "." + j +
			" = " + tagImJahr(t, m, j));
	}
}

