Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Binärzahl --> Dezimalzahl

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
15.11.2002, 15:34 Uhr
~Chris24
Gast


Ich muss folgendes C-Programm erstellen:

Ich brauche ein möglichst einfaches Programm, das eine vorzeichenlose Zahl in Binärdarstellung einliest.
Die Zahl kann bis zu 16 Ziffern haben.
Ziffern werden hintereinander ohne Leerzeichen eingegeben und mit einem Enter beendet.
Anschließend soll die Zahl als Dezimalzahl ausgegeben werden.

mfg
Chris
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.11.2002, 15:44 Uhr
void*
Generic Pointer
(Operator)


Und wo liegt das Problem genau?
--
Gruß
void*
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
15.11.2002, 16:26 Uhr
void*
Generic Pointer
(Operator)


Dieser kleine C++-Code sollte das machen, musst es halt auf C ändern:


C++:
#include <string>
#include <vector>
#include <sstream>
#include <iostream>
#include <stdio.h>


void BuildHexString(const std::vector<std::string> &nibbles, std::string &s)
{
  s="0x";

  std::vector<std::string>::const_iterator i=nibbles.begin(), l=nibbles.end();
  std::string h;
  
  while(i!=l)
  {
    h=*i;
    if("0000"==h)
    {
      s+="0";
    }
    else
    {
      if("0001"==h)
      {
        s+="1";
      }
      else
      {
        if("0010"==h)
        {
          s+="2";
        }
        else
        {
          if("0011"==h)
          {
            s+="3";
          }
          else
          {
            if("0100"==h)
            {
              s+="4";
            }
            else
            {
              if("0101"==h)
              {
                 s+="5";
              }
              else
              {
                if("0110"==h)
                {
                  s+="6";
                }
                else
                {
                  if("0111"==h)
                  {
                    s+="7";
                  }
                  else
                  {
                    if("1000"==h)
                    {
                      s+="8";
                    }
                    else
                    {
                      if("1001"==h)
                      {
                        s+="9";
                      }
                      else
                      {
                        if("1010"==h)
                        {
                          s+="A";
                        }
                        else
                        {
                          if("1011"==h)
                          {
                             s+="B";
                          }
                          else
                          {
                            if("1100"==h)
                            {
                              s+="C";
                            }
                            else
                            {
                              if("1101"==h)
                              {
                                 s+="D";
                              }
                              else
                              {
                                if("1110"==h)
                                {
                                  s+="E";
                                }
                                else
                                {
                                  s+="F";
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    ++i;
  }
}

void SplitString(const std::string &s, std::vector<std::string> &nibbles)
{
  std::string::size_type i=0, l=s.length();

  for(; i<l; i+=4)
  {
    nibbles.push_back(s.substr(i, 4));
  }
}

void FillString(std::string &s)
{
  std::string::size_type l=4-s.length()%4;
  std::string h;

  for(std::string::size_type i=0; i<l; ++i)
    h+='0';
  s=h+s;
}

int CheckString(const std::string &s)
{
  std::string::size_type j=0, l=s.length();

  while(j<l)
  {
    if('0'!=s[j] && '1'!=s[j])
      return(1);
    ++j;
  }
  return(0);
}

int main(void)
{
  std::string s;

  std::cin >> s;

  if(CheckString(s))
    return(1);

  if(s.length()%4)
    FillString(s);

  std::vector<std::string> n;
  SplitString(s, n);

  BuildHexString(n, s);

  unsigned u;
  sscanf(s.c_str(), "%x", &u);

  std::cout << u;
  
  return(0);
}


--
Gruß
void*

Dieser Post wurde am 15.11.2002 um 16:28 Uhr von void* editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.11.2002, 16:41 Uhr
virtual
Sexiest Bit alive
(Operator)


@void*

Chris meine binärdarstellung -> dezimal...
Wenn man Deinen Ansatz sich anguckt, dann fragt man sich, obs ne map nicht auch tun würde... aber ich würde wohl einen Anderen weg fahren
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
15.11.2002, 20:36 Uhr
Volle



Hallo zusammen,

ich hätte auch noch einen Ansatz beizusteuern. Ich fand, dass sich das schön für eine rekursive Funktion eignet. Und weil ich gerade Lust und Zeit hatte, habe ich folgendes gebastelt.


C++:
void CLogViewView::OnToDec()
{
    // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen

    CString binString;
    GetDlgItemText(IDC_BINSTRING, binString);
    
    decValue = 0;    //int aus Klassenheader;
    iterator = binString.GetLength();
    ParseBinString(binString);
    //decValue entspricht dem als Binärzahl interpretierten String
}

void CLogViewView::ParseBinString(CString binString)
{
    if (iterator)
    //Abbruchbedingung erreicht wenn iterator = 0
    {
        if (binString[0] == '1')
        {
            decValue += (int)pow(2,iterator - 1);
        }

        binString = binString.Right(iterator - 1);
        iterator--;
        ParseBinString(binString);
    }
}


In einem Dialog wird der String eingegeben und beim Drücken eines Button, wird er geparst, indem er in die rekursive Funktion ParseBinString reingegeben wird. Bei dem Ansatz spielt die Länge auch erstmal keine Rolle.

Grüße, Volle.

Dieser Post wurde am 15.11.2002 um 20:37 Uhr von Volle editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: