Schaltung mit boolesche Operation berechnen



  • @Swordfish Die Multiplikation macht da natürlich garkeinen Sinn. Hatte es glaube als ODER interpretiert. Ist dein Vorschlag die Korrektur davon?



  • @steven-w Mein "Vorschlag" ist das was in der Schaltung steht.



  • @Swordfish Danke



  • Kennt jemand diese beiden Gatter?

    A)
      ┌───┐
    ──│ ? │──
      └───┘
    B)
      ┌───┐
    ──│ ? │o──
      └───┘
    


  • @Swordfish
    Coole ASCII Art Grafik. Wusste gar nicht dass das hier geht.

                      __ __
                    ,;::\::\
                  ,'/' `/'`/
              _\,: '.,-'.-':.
             -./"'  :    :  :\/,
              ::.  ,:____;__; :-
              :"  ( .`-*'o*',);
               \.. ` `---'`' /
                `:._..-   _.'
                ,;  .     `.
               /"'| |       \
              ::. ) :        :
              |" (   \       |
              :.(_,  :       ;
               \'`-'_/      /
                `...   , _,'
                 |,|  : |
                 |`|  | |
                 |,|  | |
             ,--.;`|  | '..--.
            /;' "' ;  '..--. ))
            \:.___(___   ) ))'
                   SSt`-'-''
    

    @DocShoe
    Wenn man ? durch eine 1 ersetzt, kenne ich Gatter B als NOT Gatter.

    Ein anderes Gatter mit einem Eingang und einem Ausgang kenne ich nicht.



  • @DocShoe RND? -.-
    @Quiche-Lorraine Wennst noch statt ``` ein ```plain machst wirds nicht so bunt.



  • Erstmal danke für eure Hilfe. Ich hätte eine letzte Frage dazu:
    Wenn man a0, a1, a2 eine 0 eingibt wird grafisch ein E ausgegeben. Wie kann ich nach der Schleife, die Werte von berechne_b an a übergeben und mir eine zweite grafische Ausgabe ausgeben lassen?

    #include <iostream>
    using namespace std;
    
    //Aufgabe 3.a)
    void berechne_b(bool a[], bool b[])
    {
    b[0]= !a[0];
    b[1] = (!a[0] && a[1]) || (a[0] && !a[1]);
    b[2] = (!(a[0] && a[1] && a[2])) && ((a[0] && a[1]) || a[2]);
    }
    
    //Aufgabe 3.b
    void berechne_c(bool b[], bool c[])
    {
    c[0] = (b[0] && !b[2] || !b[0] && b[2]);
    c[1] = !b[0] && !b[1] && b[2];
    c[2] = !b[0] && b[2];
    c[3] = b[2] && !(b[0] && b[1]) || b[0] && !b[1] && !b[2];
    c[4] = !(b[0] && b[1] && b[2]) || b[0] && b[1] && b[2];
    c[5] = b[2] && !(b[0] && b[1]) || b[0] && !b[2];
    c[6] = !b[2] && (b[0] || b[1]) || !b[0] && b[1] && b[2];
    }
    
    bool a[3];
    bool b[3];
    bool c[6];
    
    int main(){
    
    
    cout << "Gebe a0 ein" << endl;
    cin >> a[0];
    
    cout << "Gebe a1 ein" << endl;
    cin >> a[1];
    
    cout << "Gebe a2 ein" << endl;
    cin >> a[2];
    
    berechne_b(a, b);
    cout << "--Berechnung der Ausgänge B--" << endl;
    cout << "" << endl;
    cout << "Ausgang B0 ist: " << b[0] << endl;
    cout << "Ausgang B1 ist: " << b[1] << endl;
    cout << "Ausgang B2 ist: " << b[2] << endl;
    
    berechne_c(b, c);
    cout << "--Berechnung der Ausgänge C--" << endl;
    cout << "" << endl;
    
    cout << "Ausgang C0 ist: " << c[0] << endl;
    cout << "Ausgang C1 ist: " << c[1] << endl;
    cout << "Ausgang C2 ist: " << c[2] << endl;
    cout << "Ausgang C0 ist: " << c[3] << endl;
    cout << "Ausgang C1 ist: " << c[4] << endl;
    cout << "Ausgang C2 ist: " << c[5] << endl;
    cout << "Ausgang C2 ist: " << c[6] << endl;
    
    
    //Aufgabe 3.c
    //000= E
    //
    
    
    {
    
    if (c[0] == 1)
        cout << "* * * * " << endl;
    else
        cout << "         " << endl;
    if (c[5] == 1)
        cout << "";
    else
        cout << " ";
    if (c[1] == 1)
        cout << "       " << endl;
    else
        cout << "        " << endl;
    if (c[5] == 1)
        cout << "";
    else
        cout << " ";
    if (c[1] == 1)
        cout << "       " << endl;
    else
        cout << "        " << endl;
    if (c[6] == 1)
        cout << "* * * " << endl;
    if (c[4] == 1)
        cout << "";
    else
        cout << " ";
    if (c[2] == 1)
        cout << "       " << endl;
    else
        cout << "        " << endl;
    if (c[4] == 1)
        cout << "";
    else
        cout << " ";
    if (c[2] == 1)
        cout << "       " << endl;
    else
        cout << "        " << endl;
    if (c[3] == 1)
        cout << "* * * *" << endl;
        cout << "" << endl;
    }
    }
    


  • @steven-w sagte in Schaltung mit boolesche Operation berechnen:

    Wenn man a0, a1, a2 eine 0 eingibt wird grafisch ein E ausgegeben. Wie kann ich nach der Schleife, die Werte von berechne_b an a übergeben und mir eine zweite grafische Ausgabe ausgeben lassen?

    Wat? Werte von berechne_b an a übergeben? Was soll das sein, in berechne_b wird das globale Array C beschrieben, da stehen dann doch die "Werte" von berechne_b drin? Und man übergibt Werte an Funktionen, aber nicht an Arrays, meinst du eine Zuweisung? Ich versteh´ die Frage nicht...

    Hilfestellung zu oben:
    Gatter A) ist ein "Warum," damit dürfte B auch klar sein 😉



  • @DocShoe Dann verstehe ich meine Aufgabenstellung nicht:

    Erweitern Sie Ihr Hauptprogramm um eine Schleife, um die Schaltung
    im \Dauerbetrieb" zu simulieren. Dazu sollten Sie willkurlich
    a = (0; 0; 0) als erste Eingabe festlegen und daraus b und c fur die erste
    LCD-Anzeige berechnen. Dann weisen Sie die Werte des Vektors
    b als neue Eingabe dem a zu und erzeugen die zweite LCD-Anzeige,
    u.s.w.. Auf diese Weise ergibt sich eine Folge von Ausgabezeichen.
    Uberlegen Sie sich, wie oft Sie die Schleife ausfuhren mussen, um
    alle erzeugten Zeichen einmal gesehen zu haben.



  • Dazu solltest du deinen Quelltext so umbauen, dass es für die verschiedenen Aufgaben (Berechnung, Ausgabe, etc.) eigene Funktionen gibt. Anschließend solltest du das laut Aufgabenstellung einfach runterschreiben können (ich halte mich mal an deinen Quelltext mit globalen Variablen. Da sie global sind schlage ich mich dann auch nicht mehr mit Parametern für die Funktionen rum. Das ganze Programm ist aber stark verbesserungswürdig und sieht mehr nach C als C++ aus.):

    bool A[3];
    bool B[3]:
    bool C[6];
    
    void initialize_data()
    {
        A[0] = false;
        A[1] = false;
        A[2] = false;
    }
    
    void process_data()
    {
       // Werte des Arrays B und C berechnen, hast du ja schon
    }
    
    void print_data()
    {
        // Ausgabe gemäß der Werte in C, hast du ja auch schon
    }
    
    void update_data()
    {
       // hier sollen die Werte von B als neue Eingabewerte benutzt werden.
       // Was sind deine Eingabedaten? (steht in der Aufgabe)
       // Wie werden die Eingabedaten aktualisiert? (steht auch in der Aufgabe)
    }
    
    int main()
    {
        intialize_data();
        while( true )
        {
           // Daten auswerten
           process_data();
    
           // berechnete Daten ausgeben
           print_data();
    
           // neue Eingabedaten bestimmen
           update_data();
       }
    }
    

    Edit:
    Warum werden in der Aufgabenstellung bool-Werte eigentlich mit 0 oder 1 intialisiert und gegen 0 oder 1 geprüft? Das ist C++, da gibt´s true und false.


Anmelden zum Antworten