Ασκήσεις

  1. Να υλοποιηθούν σε Java οι κλάσεις AndGate, OrGate, NotGate. Οι κλάσεις αυτές θα προσομοιάζουν τις αντίστοιχες λογικές πύλες. Κάθε κλάση να έχει μεθόδους που να θέτουν τις εισόδους (π.χ. setA, setB) και μέθοδο που να επιστρέφει την τιμή της εξόδου (π.χ. getOutput).
  2. Με τη χρήση των παραπάνω κλάσεων (και μόνο) να υλοποιήσετε μια κλάση που να προσομοιάζει έναν ημιαθροιστή. Η κλάση αυτή να έχει μεθόδους που να θέτουν τις δύο εισόδους και μεθόδους που να επιστρέφουν το άθροισμα (getSum) και το κρατούμενο (getCarryOut).
  3. Να γράψετε ένα πρόγραμμα σε Java που να τυπώνει τους πίνακες αλήθειας για τις παραπάνω κλάσεις.
  4. (Προαιρετικά) Με τη χρήση των παραπάνω κλάσεων να υλοποιήσετε μια κλάση που να προσομοιάζει έναν πλήρη αθροιστή. Η κλάση αυτή πρέπει να έχει μεθόδους που να θέτουν τις δύο εισόδους και το κρατούμενο εισόδου (setCarryIn) καθώς και μεθόδους που να επιστρέφουν το άθροισμα και το κρατούμενο εξόδου. Με τη χρήση του πλήρη αθροιστή και τους τελεστές bit της Java μπορεί να υλοποιηθεί μια κλάση αθροιστή ακεραίων αριθμών (wordadder) με τον παρακάτω τρόπο:
    /*
     * wordadder.java
     *
     * D. Spinellis, February 2000, December 2001
     */

    import gr.aueb.dds.BIO;

    class WordAdder {
            private int a, b;
            public void setA(int v) { a = v;}
            public void setB(int v) {b = v;}
            public int getSum() {
                    FullAdder fa[] = new FullAdder[32];
                    int i, bit;
                    int result = 0;

                    for (i = 0; i < 32; i++)
                            fa[i] = new FullAdder();

                    fa[0].setCarryIn(false);
                    // bit is the bit position to add
                    for (i = 0, bit = 1; i < 32; bit <<= 1, i++) {
                            fa[i].setA((a & bit) != 0);
                            fa[i].setB((b & bit) != 0);
                            // Propagate carry
                            if (i < 31)
                                    fa[i + 1].setCarryIn(fa[i].getCarryOut());
                            // Merge adder output into result
                            if (fa[i].getSum())
                                    result |= bit;
                    }
                    return (result);
            }

            // Test harness
            public static void main(String args[]) {
                    int a, b;
                    WordAdder wa = new WordAdder();

                    BIO.print("a=");
                    wa.setA(a = BIO.readInt());
                    BIO.print("b=");
                    wa.setB(b = BIO.readInt());
                    BIO.println(a + " + " + b + " = " + wa.getSum());
            }
                                    
    }
    Δοκιμάστε το!