Addition von Dualzahlen



  • 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++ 😛 ?



  • Ja is es! zum mindest ist es über einen C/C++ Compiler gemacht! abba es hat sich erledigt ich habe mich grade noch mal sehr intensive damit befasst und habe eine Lösung gefunden!

    Trotzdem Danke an alle!

    MfG Monchichu



  • Hi,

    die würde mich jetzt aber wirklich mal interessieren. Als Dank für unsere Mühen könntest Du die ja mal posten .... 😃

    Gruß,

    Simon2.



  • Monchichu schrieb:

    Ja is es! zum mindest ist es über einen C/C++ Compiler gemacht! abba es hat sich erledigt ich habe mich grade noch mal sehr intensive damit befasst und habe eine Lösung gefunden!

    Trotzdem Danke an alle!

    MfG Monchichu

    demnach ist assembler auch ein teilbereich von c++ 😛 ?


Anmelden zum Antworten