/**
Klasse:  BCDASCII
Zweck:   Verdeutlicht die BCD- und die ASCII-Codierung
Autor:   Fabian Wleklinski
Sprache: Java
*/

class BCDASCII {

  public static void main( String[] args ) {

    // Für den Anfang den Wertebereich auf fünf Stellen begrenzen
    data = new byte[ 5 ];

    System.out.println();
    System.out.println( "Demonstration von BCD- und ASCII-Kodierung (Fabian Wleklinski 1999)" );
    System.out.println( "-------------------------------------------------------------------");
    System.out.println();

    System.out.println( "1)  - Fülle das Array mit 0,49d,51d,57d,55d" );
    data[0] = 0;  data[1] = 49;  data[2] = 51;  data[3] = 57;  data[4] = 55;
    schreibeWerte();    

    System.out.println( "2)  - Fülle das Array mit 49d,48d,52d,49d,57d" );
    data[0] = 49;  data[1] = 48;  data[2] = 52;  data[3] = 49;  data[4] = 57;
    schreibeWerte();    

    System.out.println( "3)  - Fülle das Array mit 9,7,3,6,2" );
    data[0] = 9;  data[1] = 7;  data[2] = 3;  data[3] = 6;  data[4] = 2;
    schreibeWerte();    
  }

  public static void schreibeWerte() {
    System.out.println( "    - Gebe die Werte des Array aus:  " + Byte.toString( data[0] ) + "," + Byte.toString( data[1] ) + "," + Byte.toString( data[2] ) + "," + Byte.toString( data[3] ) + "," + Byte.toString( data[4] ) );
    System.out.print(   "    - Gebe den Wert des Array aus:   " );
    
    // Hält den Wert (über alle Stellen, reicht bei fünf Stellen noch aus)
    long wert = 0;
    // Hält den Wert einer Stelle (10^i)
    long stellenwert = 1;

    // Alle Stellen abarbeiten
    for (int i=4; i>=0; i--) {
      // Fallunterscheidung, ob ASCII oder BCD
      if (data[ i ] <= 9) {
        // BCD
        wert = wert + data[ i ] * stellenwert;
      } else {
        // ASCII
        wert = wert + (data[ i ] - 48) * stellenwert;
      }
      // vorbereiten für den nächsten Stellenwert (Dezimalsystem)
      stellenwert = stellenwert * 10;
    }

    // Den berechneten Wert ausgeben
    System.out.println( Long.toString( wert ) + "d" );
    System.out.println();
  }

  //Hält das Array mit den Variablen, die die Ziffern halten
  static byte[] data;

}