Hauptseite | Alphabetische Liste | Auflistung der Klassen | Auflistung der Dateien | Klassen-Elemente

Set32 Klassenreferenz

Aufstellung aller Elemente

Ausführliche Beschreibung

Die Implementierung von Mengenoperatoren erfolgt mit Hilfe von 32 Bit Integern und Bitoperatoren.

Es handelt sich hier um ein Beispiel für Abstraktion und Verfeinerung von Datentypen und Operatoren.

Eine Teilmenge M von {0,1,2, - - - ,31} wird folgendermaßen als Integer m codiert: i aus {0,1,2, - - - ,31} ist genau dann ein Element von M, wenn das Bit Nummer i im Integer m den Wert 1 hat.

Zu beachten:
Bei int-Werten wird das niederwertigste Bit mit 0 nummeriert und das Vorzeichenbit mit 31. Nicht-negative Zahlen haben damit die Repräsentation (2^30)*bit30 + (2^29)*bit29 + ... + 2*bit1 + bit0 Es ist zu beachten, dass diese Interpretation in der folgenden Implementierung der Mengenoperatoren gar nicht benötigt wird.

Definiert in Zeile 30 der Datei Set32.java.

Öffentliche, statische Methoden

static void main (String args[])
 Hauptprogramm zum Test der Mengenoperationen auf Basis von Integercodierungen.

Statische Paketfunktionen

static int getEmpty ()
 getEmpty() liefert die leere Menge zurück.
static int insertElem (int theSet, int theElem)
 insertElem() fügt ein Element in eine gegebene Menge ein.
static int union (int set1, int set2)
 union() bildet die Vereinigung von 2 Mengen
static int intersection (int set1, int set2)
 intersection() bildet den Durchschnitt von zwei Mengen
static int setminus (int set1, int set2)
 setminus() bildet die mengentheoretische Differenz
static int complement32 (int set1)
 complement32() bildet das Komplement einer Menge relativ zu {0, - - - , 31}
static void alpha (String name, int theSet)
 alpha() abstrahiert als Integer codierte Mengen in die übliche Darstellung { element1, element2, - - - }


Dokumentation der Elementfunktionen

static void Set32.alpha String  name,
int  theSet
[static, package]
 

alpha() abstrahiert als Integer codierte Mengen in die übliche Darstellung { element1, element2, - - - }

Autor:
Jan Peleska
Parameter:
name Name der auszugebenden Menge, erscheint in der Form name = { - - - }
theSet Auszugebende Menge, codiert als Integer. Ein Element i im Wertebereich 0 bis 31 wird genau dann als Element der auszugebenden Menge dargestellt, wenn Bit nummer i im Integer theSet gesetzt ist.

Definiert in Zeile 175 der Datei Set32.java.

Wird benutzt von main().

00175                                                {
00176 
00177         boolean haveOneElement = false;
00178 
00179         System.out.print(name + " = { ");
00180 
00181         // Schleife über alle Bits, beginnend bei Bit0
00182         for (int i = 0; i < 32; i = i + 1) {
00183 
00184             // Wenn Bit i in theSet gesetzt ist ...
00185             if ( (theSet & ( 1 << i )) != 0 ) {
00186                 if ( haveOneElement ) {
00187                     // Wenn vorher schon ein Element ausgegeben
00188                     // wurde, Komma als Trenner setzen
00189                     System.out.print(",");
00190                 }
00191                 // ... wird es als Element der Menge ausgegeben.
00192                 System.out.print(i);
00193                 haveOneElement = true;
00194             }
00195         }
00196 
00197         System.out.println(" }");
00198 
00199     }

static int Set32.complement32 int  set1  )  [static, package]
 

complement32() bildet das Komplement einer Menge relativ zu {0, - - - , 31}

Autor:
Jan Peleska
Parameter:
set1 Menge, deren Komplement zu bilden ist
Rückgabe:
Komplement von set1 relativ zu {0, - - - , 31}. Dies ist definiert als {0, - - - , 31} \ set1.

Definiert in Zeile 151 der Datei Set32.java.

Wird benutzt von main().

00151                                       {
00152 
00153         // ~set1 invertiert alle Bits, so dass im Ergebnis
00154         // Bit i genau dann gesetzt ist, wenn i nicht in set1 gesetzt
00155         // war.
00156         return ~set1;
00157 
00158     }

static int Set32.getEmpty  )  [static, package]
 

getEmpty() liefert die leere Menge zurück.

Autor:
Jan Peleska
Rückgabe:
leere Menge, codiert als Integer-Wert 0.

Definiert in Zeile 39 der Datei Set32.java.

Wird benutzt von main().

00039                           {
00040         return 0;
00041     }

static int Set32.insertElem int  theSet,
int  theElem
[static, package]
 

insertElem() fügt ein Element in eine gegebene Menge ein.

Autor:
Jan Peleska
Parameter:
theSet Vorgegebene Menge (leer oder nicht leer), codiert als Integer.
theElem Element im Wertebereich 0 bis 31, welches in die Menge eingefügt werden soll.
Rückgabe:
theSet in unveränderter Form, wenn theElem nicht im Wertebereich 0 bis 31 liegt,

theSet union { theElem }, codiert als Integer, wenn theElem im Wertebereich 0 bis 31 liegt.

Definiert in Zeile 57 der Datei Set32.java.

Wird benutzt von main().

00057                                                    {
00058 
00059         if ( 0 <= theElem && theElem <= 31 ) {
00060 
00061             // Der folgende Ausdruck setzt genau
00062             // das Bit Nummer theElem in theSet,
00063             // unabhängig davon, ob es vorher schon gesetzt
00064             // war oder nicht. Alle anderen Bits von theSet
00065             // bleiben unverändert.
00066             theSet = theSet | ( 1 << theElem );
00067 
00068         }
00069 
00070         return theSet;
00071 
00072     }

static int Set32.intersection int  set1,
int  set2
[static, package]
 

intersection() bildet den Durchschnitt von zwei Mengen

Autor:
Jan Peleska
Parameter:
set1 Erste Menge, die an der Durchschnittsbildung teilnimmt.
set2 Zweite Menge, die an der Durchschnittsbildung teilnimmt.
Rückgabe:
set1 intersection set2 codiert als Integer.

Definiert in Zeile 105 der Datei Set32.java.

Wird benutzt von main().

00105                                                 {
00106 
00107         // Das bitweise UND setzt alle Bits, die
00108         // bereits in set1 UND set2 gesetzt waren.
00109         //  Dies entspricht in
00110         // der Abstraktion unter Alpha gerade der
00111         // mengentheoretischen Durchschnittsbildung.
00112         return set1 & set2;
00113 
00114     }

static void Set32.main String  args[]  )  [static]
 

Hauptprogramm zum Test der Mengenoperationen auf Basis von Integercodierungen.

Definiert in Zeile 205 der Datei Set32.java.

Benutzt alpha(), complement32(), getEmpty(), insertElem(), intersection() und setminus().

00205                                            {
00206 
00207 
00208         int s1;
00209         int s2;
00210         int s3;
00211 
00212         // Erzeuge 2 leere Mengen
00213         s1 = getEmpty();
00214         s2 = getEmpty();
00215 
00216         // Konstruiere s1 = { 1,5,31 }
00217         s1 = insertElem(s1,1);
00218         s1 = insertElem(s1,5);
00219         s1 = insertElem(s1,31);
00220 
00221         // s1 ausgeben
00222         alpha("s1",s1);
00223 
00224         // Konstruiere s2 = { 0,5,7,9,11 }
00225         s2 = insertElem(s2,0);
00226         s2 = insertElem(s2,5);
00227         s2 = insertElem(s2,7);
00228         s2 = insertElem(s2,9);
00229         s2 = insertElem(s2,11);
00230 
00231         // s2 ausgeben
00232         alpha("s2",s2);
00233 
00234         // ---- s1 union s2 ----------------------------------------------
00235         System.out.println("Teste Vereiningung von s1 und s2");
00236         System.out.println("Erwartetes Resultat:   { 0,1,5,7,9,11,31 }");
00237 
00238         s3 = union(s1,s2);
00239         alpha("Resultat s1 union s2",s3);
00240         
00241         // ---- s1 intersection s2 ----------------------------------------------
00242         System.out.println("Teste Durchschnitt von s1 und s2");
00243         System.out.println("Erwartetes Resultat:          { 5 }");
00244 
00245         s3 = intersection(s1,s2);
00246         alpha("Resultat s1 intersection s2",s3);
00247   
00248 
00249         // ---- s1 setminus s2 ----------------------------------------------
00250         System.out.println("Teste s1 \\ s2");
00251         System.out.println("Erwartetes Resultat: { 1,31 }");
00252 
00253         s3 = setminus(s1,s2);
00254         alpha("Resultat s1 \\ s2  ",s3);
00255   
00256         // ---- Komplement von s2 in {0..31} --------------------------------
00257         System.out.println("Teste Complement von s2 in {0..31}");
00258         System.out.print("Erwartetes Resultat:       { 1,2,3,4,6,8,10,12,13,14,15,16,17,18,19,");
00259         System.out.println("20,21,22,23,24,25,26,27,28,29,30,31 }");
00260 
00261         s3 = complement32(s2);
00262         alpha("Resultat complement s2  ",s3);
00263 
00264 
00265     }

Hier ist der Graph aller Aufrufe für diese Funktion:

static int Set32.setminus int  set1,
int  set2
[static, package]
 

setminus() bildet die mengentheoretische Differenz

Die Differenz von Mengen ist definiert als
set1 \ set2 = { x | x in set1 and not (x in set2) }

Autor:
Jan Peleska
Parameter:
set1 Erste Menge, repräsentiert in Integer-Codierung
set2 Zweite Menge, repräsentiert in Integer-Codierung
Rückgabe:
Wert von set1 \ set2, repräsentiert in Integer-Codierung

Definiert in Zeile 130 der Datei Set32.java.

Wird benutzt von main().

00130                                             {
00131 
00132         // (~set2) invertiert alle Bits in set2
00133         // set1 & (~set2) hat daher genau diejenigen
00134         // Bits gestetzt, die in set1, aber nicht in set2
00135         // gesetzt sind. Als Mengen mittels alpha() repräsentiert,
00136         // Entspricht dies genau der mengentheoretischen Differenz
00137         return set1 & (~set2);
00138 
00139     }

static int Set32.union int  set1,
int  set2
[static, package]
 

union() bildet die Vereinigung von 2 Mengen

Autor:
Jan Peleska
Parameter:
set1 Erste Menge, codiert als Integer
set2 Zweite Menge, codiert als Integer
Rückgabe:
set1 union set2, codiert als Integer

Definiert in Zeile 85 der Datei Set32.java.

00085                                          {
00086 
00087         // Das bitweise ODER setzt alle Bits, die
00088         // bereits in set1 oder set2 oder beiden
00089         // Integers gesetzt waren. Dies entspricht in
00090         // der Abstraktion unter Alpha gerade der
00091         // mengentheoretischen Vereinigung.
00092         return set1 | set2;
00093 
00094     }


Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Datei:
Erzeugt am Mon Nov 20 12:38:53 2006 für Imperative Programmierung - Einführung in Java von  doxygen 1.4.4