matheraum.de
Raum für Mathematik
Offene Informations- und Nachhilfegemeinschaft

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Mathe
  Status Schulmathe
    Status Primarstufe
    Status Mathe Klassen 5-7
    Status Mathe Klassen 8-10
    Status Oberstufenmathe
    Status Mathe-Wettbewerbe
    Status Sonstiges
  Status Hochschulmathe
    Status Uni-Analysis
    Status Uni-Lin. Algebra
    Status Algebra+Zahlentheo.
    Status Diskrete Mathematik
    Status Fachdidaktik
    Status Finanz+Versicherung
    Status Logik+Mengenlehre
    Status Numerik
    Status Uni-Stochastik
    Status Topologie+Geometrie
    Status Uni-Sonstiges
  Status Mathe-Vorkurse
    Status Organisatorisches
    Status Schule
    Status Universität
  Status Mathe-Software
    Status Derive
    Status DynaGeo
    Status FunkyPlot
    Status GeoGebra
    Status LaTeX
    Status Maple
    Status MathCad
    Status Mathematica
    Status Matlab
    Status Maxima
    Status MuPad
    Status Taschenrechner

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Dt. Schulen im Ausland: Mathe-Seiten:Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
StartseiteMatheForenC/C++Dezimal- in Binärzahl
Foren für weitere Schulfächer findest Du auf www.vorhilfe.de z.B. Deutsch • Englisch • Französisch • Latein • Spanisch • Russisch • Griechisch
Forum "C/C++" - Dezimal- in Binärzahl
Dezimal- in Binärzahl < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Dezimal- in Binärzahl: umwandlung von zahlen
Status: (Frage) beantwortet Status 
Datum: 14:51 Fr 19.10.2007
Autor: Ines27

Aufgabe
Benötigt wird ein Programm, welches eine Dezimalzahl(Integer) über Eingabe bekommt, und diese als eine Binärzahl wieder ausgibt.

So, nun habe ich die Binärzahl durch % Operation berechnet und gebe Sie aus. Die Zahl steht aber noch in der falschen Richtung da.

Nach schmerzhaften Kopfzerbrechen und keiner Lösung weiß ich leider nicht mehr weiter! Ich finde immer nur Lösungen mit Arrays, aber Arrays haben wir noch nicht gemacht und unser Prof. wird auch nicht erlauben, dass wir diese anwenden!

Wie kann ich jetzt die Bitzahl in der richtigen Reihenfolge anzeigen?

Zur Zeit steht sie so da:
Dezimaleingabe: 25
Bitausgabe: 10011

Richtig wäre aber 11001    hm, wäre über jeden Tip froh!

Vielen dank,

lg Ines

Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.

        
Bezug
Dezimal- in Binärzahl: Antwort
Status: (Antwort) fertig Status 
Datum: 17:33 Fr 19.10.2007
Autor: o.tacke

Hallo, Ines!

Tipp: 25 (dez) = 11001 (bin)
lässt sich (dezimal) darstellen als 1*1 + 0*10 + 0*100 + 1*1000 + 1*10000

Falls das nicht hilft, schreibe doch noch dazu, wie du die Ausgabevariable speicherst (Datentyp) und wie dein Algorithmus aussieht. Dann kann man gezielter Tipps geben.


Bezug
        
Bezug
Dezimal- in Binärzahl: Antwort
Status: (Antwort) fertig Status 
Datum: 17:40 Fr 19.10.2007
Autor: Mumrel

Hi,

als weitere Idee wäre es das Problem rekursiv zu lösen.

Ein ähnliches Problem dass du vemutlich auf dein Problem übertragen kannst.

Rekursiv einen String spiegeln.

func readandmirror()
a = read();
if a != ENTER then
   readandmirror();
else
  return;
end if;

print a;

end func

Eingabe ASD(ENTER)
Ausgabe DSA

Grüße Mumrel







Bezug
        
Bezug
Dezimal- in Binärzahl: Antwort
Status: (Antwort) fertig Status 
Datum: 17:49 Fr 19.10.2007
Autor: Martin243

Hallo,

ich weiß natürlich auch nicht, wie du die Daten speicherst oder ausgibst, aber als Anregung mal mein Beispiel:
int mask; 
for (mask = 0x8000; mask; mask >>= 1) printf("%c", dec & mask ? '1' : '0');

Rekursive Lösungen sind immer sehr speicherintensiv, davon würde ich mal abraten außer zu akademischen Zwecken.


Gruß
Martin

Bezug
        
Bezug
Dezimal- in Binärzahl: input / output
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 19:39 Fr 19.10.2007
Autor: Ines27

hallo!

Danke erstmal für die Antworten! :)

Ich lese einen int ein und habe es bis jetzt so gemacht, dass durch den Rest von % mit printf eine 0 oder eine 1 (auch int) ausgegeben habe. Hier schreibt er mirs dann halt aber logischerweise in die falsche Richtung! :)

lg

Bezug
                
Bezug
Dezimal- in Binärzahl: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 21:15 Fr 19.10.2007
Autor: Martin243

Hallo,

dann habe ich ja richtig gelegen. Also musst du die Zahl nur in der richtigen Reihenfolge abarbeiten. Da die dezimale Zahl aber eh in binärer Form im Speicher liegt, brauchst du den %-Operator nicht. Ich habe mal das komplette Programm von oben etwas verändert. Kernstück ist nach wie vor ein Maske, die eine Eins und sonst Nullen enthält. Die Eins wandert von links nach rechts und klappert einfach alle Bits der ursprünglichen Zahl ab und gibt sie aus.

Der komplette Code:
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  unsigned int mask = 0x80000000, dec;
  scanf("%ud", &dec);
  do printf("%d", dec & mask ? 1 : 0); while (mask >>= 1);
  exit(0);
}


Gruß
Martin

Bezug
                        
Bezug
Dezimal- in Binärzahl: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 11:42 So 21.10.2007
Autor: Ines27

Hallo!

Leider bin ich eine Anfängerin, und hab den code nicht verstanden, den du geschrieben hast! :(

Ich habe dafür aber diese Lösung zusammengebastelt, aber irgendwas stimmt noch nicht so ganz und ich finde den Fehler einfach nicht:

int main()
{
  //variablen deklarieren und befüllen
  int decimal_number = 0;
  int counter = 31;


  scanf("%d", decimal_number);

  //schleife, die alle 32 dual-stellen durchläuft
  for (counter = 31; counter = 0; counter--)
  {
    if (decimal_number >=  (2^counter))
   {
      printf("1");
      decimal_number = decimal_number - (2^counter);
    }
    else
      printf("0");

    // alle 8 dual-stellen eine leerzeichen einfuegen
    if (counter % 8 == 0)
      printf(" ");
  }
  return 0;
}

Bezug
                                
Bezug
Dezimal- in Binärzahl: Antwort
Status: (Antwort) fertig Status 
Datum: 17:32 So 21.10.2007
Autor: Martin243

Hallo,

ja, da sind einige Fehler im Code. Ich gehe den Code mal durch, denn einiges passt hier nicht zusammen:

  int decimal_number = 0;
  int counter = 31;
//Ich sehe gerade, dass du das Problem durch den Vergleich per größer-gleich etwas komplizierter machst als nötig. Aber das schaffen wir schon. Dafür müssen wir aber unsere Dezimalzahl als unsigned (nicht vorzeichenbehaftet) deklarieren. Du kannst die Initialisierungen aber auch weglassen, also
  unsigned int decimal_number;
  int counter;

  scanf("%d", decimal_number); 
//Das ist falsch. Hier muss ein Pointer hin. Da wir aber bereits einen int deklariert haben, nehmen wir eine Referenz auf decimal_number. Das u kommt von unsigned:
  scanf("%ud", &decimal_number); 

  for (counter = 31; counter = 0; counter--) 
//Gemeint war wohl eher:
  for (counter = 31; counter >= 0; counter--) 
/*Um nicht zufällig eine Zuweisung vorzunehmen, wo keine erwünscht ist, wird auch empfohlen, bei Vegleichen etwaige Konstanten links hinzuschreiben, also statt a==5 lieber 5==a. */

    if (decimal_number >=  (2^counter)) 
/* Ein großer Irrtum! Das Dach steht nicht für Potenzen, sondern für bitweises XOR! Wir bräuchten hier entweder die <math.h> oder, weil es hier 2er-Potenzen sind, den Shift-Operator: */
    if (decimal_number >=  (1 << counter)) 
/* Dasselbe gilt auch in der nächsten Zeile mit der Potenz*/

Der Rest ist ok.

Weil es etwas unleserlich war, hier nochmal der ganze Code:
int main()
{
  //variablen deklarieren und befüllen
  unsigned int decimal_number;
  int counter;


  scanf("%ud", &decimal_number);

  //schleife, die alle 32 dual-stellen durchläuft
  for (counter = 31; counter >= 0; counter--)
  {
    if (decimal_number >=  (1 << counter))
   {
      printf("1");
      decimal_number = decimal_number - (1 << counter);
    }
    else
      printf("0");

    // alle 8 dual-stellen eine leerzeichen einfuegen
    if (counter % 8 == 0)
      printf(" ");
  }
  return 0;
}
Gruß
Martin

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.matheraum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]