Arbeiten mit char arrays - BIN > DEZ Umwandler



  • Hi Leute, ich hab den ganzen Abend dran gesessen, nun gebe ich es auf.

    ich bastle ein Programm zum Umwandeln vom binären zum dezimalen Zahlensystem. So sieht es bis jetzt aus:

    #include <stdio.h>
      #include <string.h>
      #include <iostream.h>
      #include <conio.h>
      #include <math.h>
    
      int main ()
      {
      int x,y=0,z,dez=0;
    
      char bin[100]="1011";        //Binärzahl in einzelne Arrays packen
      x=strlen(bin)-1;             //Zähler zum Wiederholen des nächsten Schrittes
    
       while (x>=0)                //solange x größer gleich 0, dann if aufrufen
        if (bin[x]=1)             //wenn die Zahl 1 ist, bearbeiten
        {
         z=pow(2,y);               //2^y
         x--;
         y++;
         dez=dez+z;                //Rechenschritt dem Gesamtergebnis aufaddieren
         cout<<dez<<endl;          //Ausgabe (noch in der Schleife um einzelne Schritte verfolgen zu können)
        }   
    
    getch ();
    }
    

    Ausgabe:

    1
    3
    7
    15
    

    Im Prinzip läuft es gar nicht schlecht, nur dass der die 0 mitrechnet (bin[1]), trotz der Bedingung "if (bin[x]=1)".

    Oder hab ich da allgemein nen Denkfehler?

    Danke für eure Zeit!
    Sandro



  • Schau mal hier im Forum, wenn dich Alternativen interessieren.
    Hatten wir auch schon ein paar mal.

    Wenns läuft ists ja sicher nicht schlecht. 😉



  • In C++ ist der Gleichheitsoperator == und nicht = .

    Vielleicht wäre es einfacher, std::string statt der char -Arrays zu verwenden. Denn was machst du, wenn du plötzlich eine Binärzahl mit 100 Stellen (Bits) haben willst?



  • wow ihr beiden habt ja genau gleich viele Beiträge 😛

    @Nexus: du meinst sicherlich in Zeile 15 oder? Ich war mir nicht ganz sicher, und als ich es getestet habe kam nur mit einem Gleichheitszeichen etwas vernünftiges dabei heraus.

    Aber irgendwie ist es irre seltsam, denn eigentlich ist ja "bin[0]=1" und "bin[1]=0" (weil bin=1011). Aber wenn ich es probehalber einfach mal in ne andere Variable kopiere, sieht es so aus:

    int x,y=0,z,dez=0,test,test2;
    
      char bin[100]="1011";        //Binärzahl in einzelne Arrays packen
      x=strlen(bin)-1;             //Zähler zum Wiederholen des nächsten Schrittes
    
      test=bin[0];
      test2=bin[1];
      cout<<bin[0]<<"  -  "<<bin[1]<<endl;
      cout<<test<<"  -  "<<test2;
      /*
    

    Ausgabe:

    1 - 0
    49 - 48
    

    Obwohl beides gleich sein sollte. Oder arbeite ich von Grund auf falsch damit?

    ---

    Wie arbeite ich denn mit std::string? Denn so einfach scheint das laut Google nciht zu sein...

    Danke!

    Ach und Drakon: sicherlich kann ich mir andere Möglichkeiten ansehen, aber es gibt da nen gewissen Ehrgeiz, es selber zu schaffen 😃 außerdem lerne ich so besser 🙂



  • Nexus hat etwas anderes gemeint. Der =-Operator heisst Zuweisung. Der == - Operator heisst auf Gleichheit prüfen und gibt true bei Gleichheit zurück und false bei Ungleichheiht.

    Sprich das hier:

    if (bin[x]=1)
    



    Du willst offensitlich das hier:

    if (bin[x] == 1)
    

    Bei deinem Beispiel ist das "Problem", dass du zuerst die 1, respektive 0 als char Werte anschaust, was bei ASCII der Zahl 48/49 entspricht. Bei der Zuweisung an einen Integer wird das automatisch in diese 48/49 umgewandelt und somit hast du "unterschiedliche" Ausgaben.

    Das du das selbst machen willst, finde ich gut. Mach nur.
    Teste aber dann auch gut. z.B Minuswerte sind speziell. 😉

    EDIT:
    std::string kannst du hier anschauen:
    http://www.cplusplus.com/reference/string/



  • Aye!
    Einfach an der richtigen Stelle ein "-48" einbringen 😃

    Danke!



  • Sandro L. schrieb:

    Aye!
    Einfach an der richtigen Stelle ein "-48" einbringen 😃

    Danke!

    Aber hast du verstanden, was wir dir mit dem =/== - Operator gesagt haben?!



  • Japp. Das wusste ich auch eigentlich schwach, nur hab ichs anders gemacht weil so nichts funktioniert hat. Das lag aber an falschen if/else/for-Verschachtelungen. Müsste jetzt passen. hier mein Meisterwerk:

    #include <iostream.h>
    #include <conio.h>
    #include <math.h>
    
    int main ()
     {
      int x,y=0,temp=0,dez=0,intb[255];
      char bin[255];                                                 ////Variable "bin" wird als char deklariert, 
                                                                     //sodass jeder Charakter einzeln angesprochen 
                                                                     //werden kann  
    
      for ( ;x==x; )                                                 ////Endlosschleife
      { 
       cout<<">>BIN -> DEZ<<"<<endl<<endl;                           ////Eingabe
       cout<<"Bitte umzuwandelnde Zahl eingeben"<<endl;              //         
       cin>>bin;                                                     //   
       cout<<endl;                                                   //   
    
       for (x=0;x<=255;x++)                                          ////Konvertierung von Char zu Int, weil man 
         intb[x]=bin[x]-48;                                          //mit "Buchstaben" nicht rechnen kann
                                                                     //Zahl 0 hat ASCII-Code 30H, deswegen (- 48)
    
       x=strlen(bin)-1;                                              ////Zähler zum Wiederholen des nächsten Schrittes
                                                                     //strlen: Anzahl Charaktere eines Strings
    
       for ( ;x>=0;x--)                                              ////Rechnung
         if (intb[x]==1)                                             //Wenn 1,
           {                                                         //Dann:
             temp=pow(2,y);                                          //- 2^y in temporäre Variable speichern
             y++;                                                    //- y erhöhen
             dez=dez+temp;                                           //- Temporäres Ergebnis dem Gesamtergebnis addieren
           }                                                         //
         else                                                        //Sonst:
             y++;                                                    //- y erhöhen
    
       cout<<"Das Ergebnis lautet: "<<dez<<endl;                     ////Ausgabe
       getch ();
       system("cls");                                                ////Wiederholen
       dez=y=0;                                                      //Variablen zurücksetzen
      }
     }
    

    Noch schön viele Kommentare damit ich als Newbie nicht den Überblick verliere...^^

    Vielen Dank für Alles! Ich mach dann mal weiter mit hexdez.cpp 😃


Anmelden zum Antworten