Hilfe bei C++-boolsche Algebra



  • Hallo!
    Bin Studentin der Ing-Wiss.-Habe also nicht viel Ahnung von C++, daher verzeiht die vermutlich dumme Frage 🙄

    Ich bin in der Klausurvorberietung (es eilt ein wenig) und komme bei dieser Übungsaufgabe nicht weiter:

    „Schreiben Sie ein C++-Programm zur Berechnung der Wahrheitstabelle eines Volladdierers mittels Boolscher Algebra.

    C A B | UE X

    0 0 0 | 0 0

    0 1 0 | 0 1

    0 0 1 | 0 1

    0 1 1 | 1 1

    1 0 0 | 0 1

    1 1 0 | 1 0

    1 0 1 | 1 0

    1 1 1 | 1 1

    Es gibt einen Mustersourcetext, der aber als Endlosschleife endet:

    #include<iostream.h>
    #include<iomanip.h>

    int main()
    {
    bool A,B,C,X,VE;
    cout<<"\n"
    <<" C A B | VE X\n"
    <<"---------------";

    for(C=0;C=1;C++)
    if(C==0)
    {
    for(B=0;B<=1;B++)
    {
    for(A=0;A<=1;A++)
    {
    X= (A&&!B)||(!A&&B);
    VE=A&&B;
    cout<<" "<<C
    <<" "<<A
    <<" "<<B
    <<" | "<<VE
    <<" "<<X
    <<"\n";
    }
    }
    }
    else
    {
    cout<<"---------------\n";
    for(B=0;B<=1;B++)
    {
    for(A=0;A<=1;A++)
    {
    X= (A&&B)||(!A&&!B);
    VE= A||B;
    cout<<" "<<C
    <<" "<<A
    <<" "<<B
    <<" | "<<VE
    <<" "<<X
    <<"\n";
    }
    }
    }
    cin.get(); cin.get(); return(0);
    }

    Und ehrlich gesagt habe ich keinen Plan, was derjenige da versucht hat 👎

    Also: HIIIIIIIIIIIILFE!!! und Danke schonmal!



  • Kannst du boolsche Algebra?



  • probier dies:

    void half_adder (int x, int y, int *carry, int *sum)
    {
        *carry = x & y;
        *sum = x ^ y;
    }
    
    void full_adder (int x, int y, int carry_in, int *carry_out, int *sum)
    {
        int c1, s1, c2;
        half_adder (x, y, &c1, &s1);
        half_adder (s1, carry_in, &c2, sum);
        *carry_out = c2 | c1;
    }
    
    int main()
    {
        int l, c, s;
        printf ("x y c cout sum\n");
        for (l=0; l<8; l++)
        {
            full_adder ((l>>2)&1, (l>>1)&1, l&1, &c, &s);
            printf ("%d %d %d   %d   %d\n", (l>>2)&1, (l>>1)&1, l&1, c, s);
        }
    }
    

    🙂



  • Hi!
    Dein Text lässt sich nicht compilieren!?!

    Ich kenne nur die Grundlagen der boolschen Algebra - soll heißen, ich weiß wie die Tabelle zu Stande kommt - aber nicht, wie ich das mit einfachsten Mitteln programmieren kann.
    Ich kenne 80% der Befehle nicht, die ten da bringt 😞
    Könnt Ihr das mal machen mit ganz leichten Befehlen? Schleifen ect.?
    Falls der Compiler hier wichtig ist: bloodshed.



  • Desiree schrieb:

    Hi!
    Dein Text lässt sich nicht compilieren!?!

    mach oben noch ein

    #include <stdio.h>
    

    rein.
    hab' ich vergessen 😞



  • Stark-ok funktioniert, aber was hast Du da gemacht?
    Ich kenne nur:

    #include<iostream.h>
    #include<iomanip.h>
    #include<conio.h>
    #include<math.h>

    Wie sind bis zur Objektorientierung gekommen-mehr nicht.
    Ich versteh das alles gar nicht 😞
    Bitte bitte, gebt mir ne Lösung, die irgendwie dem Stand entspreicht, wie die falsche Lösung, die ich zu Anfang gepostet hatte.

    Danke trotzdem für deine Mühe ten!



  • Desiree schrieb:

    Wie sind bis zur Objektorientierung gekommen-mehr nicht.

    oh, shit. mit objektorientierung kommste bei sowas kaum weiter, es sei denn du betrachtest bits auch als objekte 😉

    Desiree schrieb:

    Ich versteh das alles gar nicht 😞

    guckst du einfach das: http://de.wikipedia.org/wiki/Volladdierer
    (unten links das schaltbild)
    genau das macht mein code. mit etwas c-kenntnissen und einem scharfen blick müssteste den eigentlich verstehen...
    🙂



  • Ich find den Code, den du in deinem ersten Post gepostet hast recht klar, es geht eigentlich nicht viel einfacher. Was genau verstehst du daran nicht?



  • Blue-Tiger schrieb:

    Ich find den Code, den du in deinem ersten Post gepostet hast recht klar, es geht eigentlich nicht viel einfacher. Was genau verstehst du daran nicht?

    es sind zwei kleine fehler drin.
    aus

    bool A,B,C,X,VE;
    

    mach

    int A,B,C,X,VE;
    

    und aus

    for(C=0;C=1;C++)
    

    mach

    for(C=0;C<=1;C++)
    

    dann müsste es laufen...
    🙂



  • Oh, son mist!
    in dem ersten Code war nur eine Klammer falsch gesetzt. Das ergab ne Endlosschleife. Ich habs mir noch mal selbst zusammengepuzzelt und jetzt funzt es.
    Meine Methode sieht jetzt so aus:

    **void Wahrheitstabelle::ausgabe()
    {

    for(C=0;C<=1;C++){
    if (C==0)
    for(B=0;B<=1;B++){
    for(A=0;A<=1;A++)
    { X=(A&&!B)||(!A&&B);
    VE=(A&&B);
    cout<<" "<<C<<setw(3)<<A<<setw(3)<<B<<setw(3)<<"|"<<setw(3<<VE<<setw(3)<<X<<endl;}}
    else{ cout<<"-------------------\n";
    for (Y=0;Y<=1;Y++;) {for(Z=0;Z<=1;Z++){X=(!Z&&!Y)||(Z&&Y);
    VE=(Z||Y);
    cout<<" "<<C<<setw(3)<<Z<<setw(3)<<Y<<setw(3)<<"|"<<setw(3)<<VE<<setw(3)<<X<<endl;}}}}
    };**

    Das einzige, was mir noch nicht ganz klar ist, ist wie der Computer die Schleifen durchläuft.
    Warum bekomme ich schon bei dem if-Anweisungsblock die gewünschten ersten vier Zeilen? Tut mir echt leid, Euch mit so etwas Banalem auf den Geist zu gehen.
    Programmiere nun mal erst seit 32 Stunden 😕



  • Ah ja, und natürlich aus bool-->int!
    Habe ich auch gemacht 😃 Der andere Fehler hat sich beim erneuten Tippen gar nicht erst ergeben 👍



  • Desiree schrieb:

    [...] Endlosschleife endet [...]

    😃 👍


Log in to reply