/***************************************************************/
/* Prof. Dr. Carsten Vogt                                      */
/* FH Koeln, Fak. 07 / Nachrichtentechnik                      */
/* http://www.nt.fh-koeln.de/vogt                              */
/*                                                             */
/* Das Programm ist ein Anwendungsbeispiel fuer arithmetische  */
/* Operationen. Es berechnet eine Folge von Zweierpotenzen.    */
/***************************************************************/
        
import java.io.*;

public class Potenzen {

 public static void main(String args[]) throws IOException {

  short von, bis;  /* Grenzen fuer die Potenzberechnung: Das Programm soll alle
                      Zweierpotenzen zwischen 2^von und 2^bis ausgeben */
  long  potenz;    /* aktuell berechnete Zweierpotenz */
  short zaehler;   /* Laufvariable zum Durchlauf des Intervalls [von,bis] */

  /* Einlesen der Grenzen (so lange, bis von<=bis) */

  BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
  do {
   System.out.println();
   System.out.println("Bitte die Intervallgrenzen eingeben: ");
   System.out.println();
   System.out.print("untere Grenze: ");
   von = Short.parseShort(in.readLine());   
   System.out.print("obere Grenze: ");
   bis = Short.parseShort(in.readLine());   
   if (bis<von) /* Test, ob obere Grenze kleiner als untere */
    System.out.println("Die obere Grenze darf nicht kleiner als die untere sein!");
  } while (bis<von); /* Wiederholung, wenn obere Grenze kleiner als untere */
  System.out.println();

  /* Ausgabe der Zweierpotenzen */

  /* Vorbereitung der ersten Ausgabe */
  potenz = (long) Math.pow(2,von);
  zaehler = von;
  /* Schleife wird wiederholt, solange zaehler nicht groesser als obere Grenze ist */
  while (zaehler<=bis) { 
   System.out.println("2^"+zaehler+" = "+potenz);
   /* Vorbereitung der naechsten Ausgabe */
   zaehler++;
   potenz*=2;   
  }
    
 }

}

