Addition von Dualzahlen



  • Hey ich hoffe mir kann einer helfen!
    Ich soll 2 Dualzahlen addieren ohne sie umzuwandeln in das Dezimale Zahlensystem.
    Ich habe jedoch keine Ahnung wie.
    Wir haben auch noch nich so viel in der Schule gemacht!
    Also es sollte eigentich sehr Anspruchslos sein.
    Wir hatten schon Arrays, haben mit char und int gearbeitet aber sonst so großartig noch nichts gehabt!

    Bitte helft mir!!!

    MfG Monchichu



  • Hi,

    wenn Du das "sollst", ist das bestimmt eine Aufgabe, für die Du das Handwerkzeug schon bekommen hast.
    Ist aber auch nicht besonders schwer (kommst Du selbst drauf): Addiere mal schriftlich Dezimalzahlen (also: "normale") und achte darauf, was Du da genau tust .... und dann übertrage das auf Dualzahlen (Stichwort: "Überlauf").

    Schaffst Du schon !

    Gruß,

    Simon2.



  • Was meinst Du mit "Dualzahlen"? Gibt der User eine Folge von Nullen und Einsen ein?



  • Ja der User gibt 2 Zahlen im Binären Zahlensystem ein die werden dann eingelesen und die sollen dann addiert werden und hinterher wieder ausgegeben werde!

    @ Simon 2:: Ich weiß wie ich das machen muss abba ich kann das nich in C umsetzen! Ich habe es schon 3Tage lang versucht und alles mögliche ausprobiert abba das klappt nich!



  • Dann zeig mal dein "alles mögliche ausprobiert"

    Die Leute hier im Forum helfen bei Fehlern oder wider erwartung nicht funktionniernden Programmen sowie beim weiterführen von Ansätzen, also bei spezifischen Probleme.

    Sie machen KEINE Hausaufgaben.

    EDIT: @Simon2: diesmal war ich schneller, hehe.



  • Monchichu schrieb:

    ... Ich habe es schon 3Tage lang versucht und alles mögliche ausprobiert abba das klappt nich!

    Dann zeig doch mal Deinen erfolgversprechendsten Versuch und sag', wo's nicht klappt !

    EDIT: Hat sich mit Shinjas überschnitten ...
    EDIT2: Wenn Du das in C***++*** implementieren darfst, wirst Du hier im C***++***-Forum mehr Freunde (und an Deinem Code mehr Freude) finden. 😃

    Gruß,

    Simon2.



  • Ich Speicher doch nich das was nich klappt abba das hab ich habe kann ich euch ma geben!

    #include<stdio.h>
    
     main()
    {
        int ueber,i,j,erg;
        char Dual1[6],Dual2[6];
    
        printf("Dieses Programm addiert 2 Dualzahlen.");
        printf("\n\nBitte geben sie die 1. Dualzahl ein: ");
        scanf("%s",&Dual1[i]);
        printf("\nBitte geben sie die 2. Dualzahl ein: ");
        scanf("%s",&Dual2[j]);
        printf("1.Dualzahl     %s",Dual1);
        printf("\n2.Dualzahl   + %s",Dual2);
        while (i!='/0'||j!='/0')
        {
            i++;
            j++;
        }
         ueber=0;
    
        getchar();
        getchar();
    }
    


  • Monchichu schrieb:

    Ich Speicher doch nich das was nich klappt ...

    Musst Du nicht zum Kompilieren sowieso speichern ? ...

    na egal - zum Code:
    - Schalt mal die Warnungen ein und lies sie: i und j verwendest Du, bevor Du sie mit Werten belegst. Das dürfte hier zum Absturz führen.
    - Wenn Du eine Zeichenkette einlesen willst ("%s"), solltest Du das nicht in ein einzelnes Zeichen versuchen (Dual1 ist ein Array von Zeichen, Dual1[i] ist ein einzelnes Zeichen !)
    - Du liest Dual1 und Dual2 ein ... lässt die Schleife aber mit i + j durchlaufen
    - Addition von ASCII-Werten (eingegebene Zeichen: '0' hat den Wert 0x30) ist meistens nicht das, was man will.
    - Die eigentliche Addition fehlt noch, oder ?

    Nochmal die Frage: Darfst Du auch C++ verwenden ? Das machte einiges einfacher/sicherer....

    Gruß,

    Simon2.



  • ja eigentlich arbeit wir nur mit c++!sry hab ich vergessen zu sagen
    und i und j addiere ich net
    i und j sind auch mit werten belegt und zwar mit den werten aus dem Array oda habe ich da meinen Lehrer sehr viel falsch verstanden?



  • Monchichu schrieb:

    ja eigentlich arbeit wir nur mit c++! ...

    Merkt man gar nicht. 😃
    printf/scanf sind jedenfalls keine typischen C++-Mittel und mit char-Arrays braucht man sich eigentlich auch nicht herumzuschlagen, wenn man strings hat...

    nun gut:

    Monchichu schrieb:

    und i und j addiere ich net...

    doch (OK: Du addierst sie nicht miteinander, aber mit eins):

    Monchichu schrieb:

    i++;
            j++;
    

    (hier ist's kribbelig, weil Du es irgendwie nicht falsch gemacht hast und irgendwie doch - ich lasse das Ganze aber mal)

    Monchichu schrieb:

    i und j sind auch mit werten belegt und zwar mit den werten aus dem Array oda habe ich da meinen Lehrer sehr viel falsch verstanden?

    Entweder falsch verstanden oder falsch gelehrt oder Beides. 😉
    Das Prinzip ist: In Dual1 steht eine Reihe von Zeichen (in ASCII) und mit i bestimmst Du, welches Zeichen Du davon auswählst (Achtung: Man zählt von 0 an):

    Dual1[0] -> 1. Zeichen
    Dual1[1] -> 2. Zeichen
    ...
    Dual1[i] -> (i+1). Zeichen
    

    Lass doch erstmal das Einlesen weg - das kannst Du immer noch nachziehen, wenn der Rest läuft:

    #include <string>
    #include <iostream>
    
    int main() {
       std::string const Dual1 = "11011001";
       std::string const Dual2 = "01110010";
    
       // ... und ab hier mit Dual1+2 weitermachen
    

    Gruß,

    Simon2.



  • ich tippe auch falsch gelehrt!
    naja zum mindest wir hatten noch nie strings und was is std:: und const?



  • Hi,

    "std::" verweist auf Bezeichner (Funktionen, Typen, Variablen,...) aus einem anderen Namensraum hin - damit hat man noch die Möglichkeit, einen string in einem anderen Namensraum zu bauen ... z.B. Monchichu::string :D). Und die Dinge, die im C++-Standard festgelegt wurden (und damit ganz offiziell zur Sprache gehören) , liegen meistens im Namensraum std.
    Das braucht Dich aber eigentlich nicht zu belasten: Das Teil heißt einfach std::string.

    "const" sagt: Auf diese Variable wird nicht schreibend zugegriffen. Damit kann Dir der Compiler helfen, Fehler zu vermeiden, indem er Dir im Fall des Falles zeigt: Achtung: Hier willst Du eine Variable verändern, die Du nicht verändern wolltest/darfst ! Sollte man ruhig verwenden: Kostet nix und hilft viel.

    Gruß,

    Simon2.



  • dann habe ich noch eine frage wie mache ich ein und?
    also zum beispiel bei na while schleife bei oder sieht das ja so aus:

    while (i=1||j=1)

    und wie is das bei und??



  • && <-- logisches Und(AND)



  • also ich habe es jetzt noch einmal mit einer Funktion versucht und esimmer noch nich hin bekommen! damit ihr net denkt ich währe faul! und würde das von euch machen lassen!

    //Name: Daniel Kersting
    //Klasse: IF1Aa
    //Datum: 28.03.2007
    //Beschreibung: Addition von Dualzahlen
    
    #include<stdio.h>
    
    int i,j,ueber,erg;
    
    int add()
    {
    
         if (i=1 && j=1 && ueber=1)
         {
             erg=0;
             ueber=1;
         }
         if (i=1&&j=0&&ueber=1)
         {
             erg=0;
             ueber=1;
         }
         if (i=0&&j=1&&ueber=1)
         {
             erg=0;
             ueber=1;
         }
         if (i=1&&j=1&&ueber=0)
         {
             erg=0;
             ueber=1;
         }
         if (i=1&&j=0&&ueber=0)
         {
             erg=1;
             ueber=0;
         }
         if (i=0&&j=1&&ueber=0)
         {
             erg=1;
             ueber=0;
         }
    
    }             
    int main()
    {
    
        char Ubertrag[7],Dual1[6],Dual2[6];
    
        printf("Dieses Programm addiert 2 Dualzahlen.");
        printf("\n\nBitte geben sie die 1. Dualzahl ein: ");
        scanf("%s",&Dual1[i]);
        printf("\nBitte geben sie die 2. Dualzahl ein: ");
        scanf("%s",&Dual2[j]);
        printf("1.Dualzahl     %s",Dual1);
        printf("\n2.Dualzahl   + %s",Dual2);
        while (i!='/0'||j!='/0')
        {
            i++;
            j++;
        }
        Ubertrag[]=erg;
        while(erg!='/0')
        erg++;
        ueber=0;
        do 
        {
            add();
            i--;
            j--;
            erg--;
        }
        while(i||j=erg)
        erg++;   
    
        printf("%s",Uebertrag); 
    
        getchar();
        getchar();
    }
    


  • Monchichu schrieb:

    also ich habe es jetzt noch einmal mit einer Funktion versucht und esimmer noch nich hin bekommen! damit ihr net denkt ich währe faul! und würde das von euch machen lassen!

    //Name: Daniel Kersting
    //Klasse: IF1Aa
    //Datum: 28.03.2007
    //Beschreibung: Addition von Dualzahlen
    
    #include<stdio.h>
    
    int i,j,ueber,erg;
      
    int add()
    {
     
         if (i=1 && j=1 && ueber=1)
         {
             erg=0;
             ueber=1;
         }
         if (i=1&&j=0&&ueber=1)
         {
             erg=0;
             ueber=1;
         }
         if (i=0&&j=1&&ueber=1)
         {
             erg=0;
             ueber=1;
         }
         if (i=1&&j=1&&ueber=0)
         {
             erg=0;
             ueber=1;
         }
         if (i=1&&j=0&&ueber=0)
         {
             erg=1;
             ueber=0;
         }
         if (i=0&&j=1&&ueber=0)
         {
             erg=1;
             ueber=0;
         }
        
    }             
    int main()
    {
        
        char Ubertrag[7],Dual1[6],Dual2[6];
    
        printf("Dieses Programm addiert 2 Dualzahlen.");
        printf("\n\nBitte geben sie die 1. Dualzahl ein: ");
        scanf("%s",&Dual1[i]);
        printf("\nBitte geben sie die 2. Dualzahl ein: ");
        scanf("%s",&Dual2[j]);
        printf("1.Dualzahl     %s",Dual1);
        printf("\n2.Dualzahl   + %s",Dual2);
        while (i!='/0'||j!='/0')
        {
            i++;
            j++;
        }
        Ubertrag[]=erg;
        while(erg!='/0')
        erg++;
        ueber=0;
        do 
        {
            add();
            i--;
            j--;
            erg--;
        }
        while(i||j=erg)
        erg++;   
        
        printf("%s",Ubertrag); 
       
      
        getchar();
        getchar();
    }
    


  • Ich habe nur paar zeilen angesehen:

    ändere diese if(i=1...) mal um in if(i==1...) Das was du machst ist eine Zuweisung (also i wird 1) und ist ergo immer richtig. Verglichen wird mit ==.



  • aso ja abba funtzt trotzdem net und diese Komische Fehleranalyse oda was das sein soll was da immer steht checke ich net naja egal trotzdem danke für eure Hilfe!

    MfG Monchichu



  • Jaja, step by step, ok? Mach mal den Fehler raus. Dann sehen wir uns das nächste an.

    Da wäre z.B, dass man globale Variablen nicht sonderlich gerne sieht. Mach die besser lokal (lokal bedeutet, dass du sie da deklarieren sollst, wo du sie brauchst und übergib sie dann an die Funktion. Da du Funktionen kennst vermute ich, dass du das kannst)

    Dann hast du imemr noch das Problem, dass dein i und dein j keinen Wert haben. Du schreibst also eigentlich "irgendwas+1". Was soll der PC damit anfangen? Also auch mal schön mit i=0; j=0; beides auf 0 setzen (kann sein, dass es auch ohne funktionnieren würde, falls dein Compiler das per default auf 0 setzt)

    Dann schreibst du "Ubertrag=erg" aber erg hat auch keinen Wert bisher.

    Ich weisz nicht, ob das Problem vielleicht da liegen könnte, aber die "Lesensart" von programmen könnte dir vielleicht Schwierigkeiten bereiten.

    Also, im prozeduralen Programmieren (das was du gerade machst, später mag es etwas anders sein. Auszerdem jetzt etwas grob gesagt, also hängt mich nicht) fängt an in C++ mit dem Lesen bei "int main()" an. Danach liest man von oben nach unten und bei jedem Funktionsaufruf springt man zu der entsprechenden Funktion. Sobald diese zu Ende ist geht es in der Zeile nach dem Funktionsaufruf wieder weiter.

    Alle "Zuweisungen" also z.B i=j; bedeuten, dass i den wert von j bekommt, aber nichtumgekehrt. Sozusagen: Links steht das, was sich verändert.

    Vielleicht hilft es ein bisschen weiter, es gibt Leute die Probleme mit sowas haben, ich kann es ja im vorliegenden Fall nicht wissen.



  • Monchichu schrieb:

    Ich Speicher doch nich das was nich klappt abba das hab ich habe kann ich euch ma geben!

    #include<stdio.h> //c lib 
    
     main() // naja nichts vom beiden
    {
        int ueber,i,j,erg;
        char Dual1[6],Dual2[6];
    //c syntax
        printf("Dieses Programm addiert 2 Dualzahlen.");
        printf("\n\nBitte geben sie die 1. Dualzahl ein: ");
        scanf("%s",&Dual1[i]);
        printf("\nBitte geben sie die 2. Dualzahl ein: ");
        scanf("%s",&Dual2[j]);
        printf("1.Dualzahl     %s",Dual1);
        printf("\n2.Dualzahl   + %s",Dual2);
        while (i!='/0'||j!='/0')
        {
            i++;
            j++;
        }
         ueber=0;
       
            
        
        
        getchar();
        getchar();
    }
    

    ist das überhaupt c++ 😛 ?


Anmelden zum Antworten