www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Vorhilfe
  Status Geisteswiss.
    Status Erdkunde
    Status Geschichte
    Status Jura
    Status Musik/Kunst
    Status Pädagogik
    Status Philosophie
    Status Politik/Wirtschaft
    Status Psychologie
    Status Religion
    Status Sozialwissenschaften
  Status Informatik
    Status Schule
    Status Hochschule
    Status Info-Training
    Status Wettbewerbe
    Status Praxis
    Status Internes IR
  Status Ingenieurwiss.
    Status Bauingenieurwesen
    Status Elektrotechnik
    Status Maschinenbau
    Status Materialwissenschaft
    Status Regelungstechnik
    Status Signaltheorie
    Status Sonstiges
    Status Technik
  Status Mathe
    Status Schulmathe
    Status Hochschulmathe
    Status Mathe-Vorkurse
    Status Mathe-Software
  Status Naturwiss.
    Status Astronomie
    Status Biologie
    Status Chemie
    Status Geowissenschaften
    Status Medizin
    Status Physik
    Status Sport
  Status Sonstiges / Diverses
  Status Sprachen
    Status Deutsch
    Status Englisch
    Status Französisch
    Status Griechisch
    Status Latein
    Status Russisch
    Status Spanisch
    Status Vorkurse
    Status Sonstiges (Sprachen)
  Status Neuerdings
  Status Internes VH
    Status Café VH
    Status Verbesserungen
    Status Benutzerbetreuung
    Status Plenum
    Status Datenbank-Forum
    Status Test-Forum
    Status Fragwürdige Inhalte
    Status VH e.V.

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:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
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.vorhilfe.de