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

Set32.java

gehe zur Dokumentation dieser Datei
00001 
00030 class Set32 {
00031 
00039     static int getEmpty() {
00040         return 0;
00041     }
00042 
00057     static int insertElem(int theSet, int theElem) {
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     }
00073 
00074 
00085     static int union(int set1, int set2) {
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     }
00095 
00105     static int intersection(int set1, int set2) {
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     }
00115 
00116 
00130     static int setminus(int set1, int set2) {
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     }
00140 
00151     static int complement32(int set1) {
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     }
00159 
00160 
00175     static void alpha(String name, int theSet) {
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     }
00200 
00205     public static void main(String args[]) {
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     }
00266 
00267 }

Erzeugt am Mon Nov 20 12:38:53 2006 für Imperative Programmierung - Einführung in Java von  doxygen 1.4.4