// Beispiel fuer STRUKTURIERTEN, MODULAREN aber NICHT
// objekt-orientierten Programmierstil.
//
// STRUKTURIERT bedeutet: Flusskontrolle nur über
// if-else, while, ; , etc. KEINE VERWENDUNG von
// Sprüngen (goto-Anweisungen, entspricht den 
// jump <ADRESSE> Anweisungen im Assembler).
//
// MODULAR bedeutet: Kapselung von Algorithmen in 
// METHODEN (mit return-Werten) und PROZEDUREN
// (void, d.h. ohne return-Wert)
// 
// Modulare, noch nicht objekt-orientierte
//  Programmierung verwendet BEFEHLE (INSTRUKTIONEN), die
// auf DATEN operieren. Die Operationen werden separat von den
// Datenstrukturen entwickelt.

 class Modular {

// Deklaration der Datenstrukturen, die explizit
// im Hauptprogramm manipuliert oder in den 
// Funktionen als Parameter mitgegeben werden.

    static int a[] = new int[10];
    static int b[] = new int[10];

    static void copy(int toArray[], int fromArray[]) {

	for (int iCnt = 0; iCnt < fromArray.length && iCnt < toArray.length; iCnt++)
	    toArray[iCnt] = fromArray[iCnt];

    }

    static int search(int z[], int theNumber) {

	int jCnt = 0;

	while ( jCnt < z.length && z[jCnt] != theNumber) jCnt ++;

	return ( jCnt == z.length ) ? -1 : jCnt;

    }


    public static void main(String args[]) {

	int index;

	// Werte werden explizit durch Zuweisungen
        // in die Datenstrukturen geschrieben:

        for (int iCnt=0; iCnt < 10; iCnt++) a[iCnt] = 10*iCnt;

        // Funktionen, die Algorithmen implementieren,
        // erhalten die zu verwendenden Datenstrukturen
        // als Eingabeparameter

        copy(b,a);


	for (int iCnt=0; iCnt < 10; iCnt++)
	    System.out.println("b["+iCnt+"] = "+b[iCnt]);

        b[5] = 7;

        // Dieselbe Funktion operiert auf unterschiedlichen 
        // Datenstrukturen, die als Eingangsparameter
        // anzugeben sind. Zuerst auf b:

        index = search(b,7);
        if ( 0 < index) System.out.println("b[] enthält 7 am Index " + index);


        // dann auf a:

        index = search(a,7);
        if ( 0 < index) 
            System.out.println("a[] enthält 7 am Index " + index);
        else
            System.out.println("a[] enthält keine 7");

    }

}
