Programmierung

Sieb des Erastosthenes - Java


 
  1. Aufgabe

    Finden von Primzahlen.

    1. Boolean-Array mit true bis max befüllen
    2. weil 0 und 1 laut Definition keine Primzahl, diese Streichen (durch 0 ersetzen)
    3. dann nächste nicht gestrichen Zahl suchen (2)
    4. um den Wert dieser Zahl weitergehen und streichen (4,6,8,10)
    5. wenn Ende des Arrays erreicht dann zu Punkt 3. gehen
    6. übrig bleiben alle nichtgestrichenen Zahlen -> Primzahlen (2,3,5,7)

  2. Struktogramm

    Sieb des Erastosthenes

  3. Quellcode

    import java.io.*
    /** Funktion: Primzahlerzeugung nach der Methode "Sieb des Erastosthenes"
        Applikation ohne Oberfläche, läuft in der Dos-Box: "java erastos"
        @author  DG1XPZ
        @version JDK131
    */

    class erastos {

      
    /** Funktion: Konstructor
           @param Primzahl Zahl, bis zu der alle Primzahlen ausgegeben werden sollen
       */

       erastos( int prim ) {
          getPrim( prim );  

       }

       /** Funktion: Konstructor
       */

       erastos( ) {
      }

      
    static boolean[ ] zahlen;                    //Array "zahlen" deklarieren

       public static void main( String[ ] vArgs ) {
           erastos e = new erastos ( );            //Instanz von der Klasse "erastos" erzeugen
           System.out.println("Sieb des Erastosthenes, Primzahlen ausgeben.");
           System.out.println("Bitte Zahl eingeben, bis zu der die Primzahlen ausgegeben werden sollen:");
           int prim = e.eingabe( );                  //Max-Wert von Tastatur holen
           zahlen=e.getPrim( prim );             //Feld "zahlen" bearbeiten
          
    System.out.println(e.toString( ));    //Feld "zahlen" ausgeben
       }

       /** Funktion: Eingabe (ganze Zahl) von Tastatur einlesen
            @exception IOException  Wenn keine Zahlen sondern Buchstaben o. Zeichen eingegeben wurden
            @return                             Die zurückgegebene Integerzahl
       */

       private int eingabe( ) {
           int m=0;
           BufferedReader eing=new BufferedReader (new InputStreamReader(System.in));
           // Eingabepuffer erzeugt, für Eingabe über Tastatur
           try {    //Fehlerbehandlung einleiten (try=versuche)
              String eingstr=eing.readLine( );                     // Lese String von Eingabepuffer (Tastatur)
              m=Integer.parseInt(eingstr);                           // Umwandeln String in Zahl
           } catch(java.io.IOException ioe) {                      // wenn Fehler dann Meldung erzeugen
              System.err.println("Fehler! Eingabe konnte nicht interpretiert werden!");
              // Ausgabe der Fehlermeldung wenn keine Zahlen eingegeben werden
          
    }
           return m//Rückgabe der ganzen Zahl
       } //
    private int eingabe( ) 

       /** Funktion: Primzahlen erzeugen nach der Methode "Sieb des Erastosthenes"
           1. Boolean-Array mit true bis max füllen
           2. weil 0 und 1 laut Def. keine Primzahlen sind, diese streichen<br>
           3. dann naechste nicht gestrichene Zahl suchen (2)<br>
           4. um den Wert dieser Zahl weitergehen und streichen (4,6,8,10)<br>
           5. wenn Ende des Arrays erreicht dann zu Punkt 3. gehen<br>
           6. übrig bleiben alle nichtgestrichenen Zahlen -> Primzahlen (2,3,5,7)<br>
           @param max  Die größte Zahl bis zu der die Primzahlen gesucht werden sollen
           @return           Rückgabe des Arrays mit Primzahlen (Feld:true=Primzahl)
       */

       public boolean [ ] getPrim( int prim ) {
          zahlen=new boolean[prim+1];        
          zahlen[1]=false;         //die 1 streichen
          for ( int i=2; i<zahlen.length; i++){
             zahlen[i]=true;        //alle Felder mit mit true belegen
          }

          for ( int i=2; i<zahlen.length / 2; i++){
              for (int j=2;j<zahlen.length / i); j++){
                 zahlen i * ] =false; 
              }
          }
         return zahlen;   //Rückgabe des Arrays
       } // public int [ ] getPrim(int prim)

      /** Funktion: Den Inhalt des 1-Dimensionalen Arrays zu einem String zusammenfügen
           @return           Der zusammengefügte String
       /*

       public
    String toString( ) {
           String
    s="";
           for ( int i=0; i<zahlen.length; i++ ) {
              if (
    zahlen[ i ]) s=s+ i +",";         //wenn Feld true dann Wert von i zum String hinzufügen + Komma
           }
           s=s+"\n" );                                   //letztes Komma entfernen + Zeilenumbruch zum Schluss hinzufügen
          
    return s;                                      //den String zurückgeben
       } //public String toString( )


    } //class erastos


  4. Download erastos.java

  5. Download erastos.class

 

http://www.counter-service.de http://www.counter-service.de

Home
uebermich
Programmierung
Amateurfunk
Elektronik
Download
Links
E-Mail
Gästebuch/Meckerecke
Counter-DG1XPZ