Programm: Dezimal in Binär umrechnen
-
hallo miteinander,
ich möchte dezimalzahlen in binärzahlen umrechnen und habe dafür folgendes Programm geschrieben:
#include <stdio.h> #include <stdlib.h> int main() { float zahl=3; int zwerg; int x=0; float rest; int ziffer=0; float abc = 0; zwerg = zahl; while (zwerg > 0.5){ ziffer = zwerg % 2; abc= zwerg/2.0; if (ziffer == 1){ zwerg = abc - 0.5; } else{ } } printf("Binär:%d", ziffer); system("PAUSE"); return 0; }
Stimmt das soweit?
Allerdings habe ich nun das Problem, dass mir nur die letzte berechnete Ziffer ausgegeben wird.Und wenn ich dann eine Kette von Zahlen (Bsp: 10001) habe, muss ich diese ja auch noch in umgekehrter Reihenfolge ausgeben, dass die Umwandlung stimmt. Wie mache ich nun aber das?
Ich hoffe ihr könnt mir helfen
-
Ähm ... ich weiß nicht, wofür man dabei Zwerge, doubles und floats bräuchte!? Schau dir doch bitte nochmal Vom Dezimalsystem ins Dualsystem an und machs ein paarmal per Hand.
#include <stdio.h> #include <stdint.h> int main( void ) { uint32_t number; unsigned i; int ch; while( printf( "Enter an unsigned number: " ), scanf( "%u", &number ) != 1 ) { fputs( "Input Error!\n\n", stderr ); while( ( ch = getchar() ) != '\n' && ch != EOF ); } for( i = 32; i; putchar( '0' + ( ( number & ( 1 << --i ) ) != 0 ) ) ); putchar( '\n' ); }
*scnr*
-
hallo, wir haben bisher nur die einfachsten Grundkenntnisse gelernt und daher ist mir an deinem code ziemlich viel unklar. Ich habe keine ahnung was stderr, getchar, EOF,uint32_t,fputs und putchar sein sollen.
also von hand kann ich die umwandlung, daher habe ich versucht mein programm eben genau so aufzubauen.
-
Vl. hilft dir folgendes Bsp.
Haben wir auch ziemlich am Anfang gemacht
/******************************************************* *Programm liest eine beliebig lange Binärzahl von der Tastatur. Die eingelesenen Ziffern werden in eine Dezimalzahl umgerechnet und auf dem Bildschirm ausgegeben. *******************************************************/ #include <stdio.h> int getIntFromChar(char input); int main() { /*ein eingegebene char Variable*/ char input; int basis =2; /*Die auszugebende Dezimalzahl wird deklariert und initialisiert*/ int dezimalZahl = 0; /*der entsprchende int Wert, der als char eingegeben wurde*/ int intInput; printf("Willkommen beim Binarrechner.\n"); printf("Bitte geben Sie eine Binaerzahl ein.\n"); while ((input=getchar()) != '\n') //Man kann solange Ziffern eingeben, bis eine newline-zeichen(Enter) eingegeben wird { /*es wird der numerische Eingabewert berechnet*/ intInput = getIntFromChar(input); dezimalZahl = dezimalZahl * basis + intInput; } printf("Die Zahl in Dezimalschreibweise ist: %i\n", dezimalZahl); printf("Vielen Dank für die Inanspruchnahme des Binaerrechners.\n"); getchar(); getchar(); } /*************************************************************************** *Die Funktion berechnet den numerischen Wert, wenn er als char eingegeben wurde. ****************************************************************************/ int getIntFromChar(char input) { int result; result = input-'0'; return result; }
-
danke, kannst du mir noch kurz erklären, was der numerische zahlenwert ist?
-
Oder rekursiv
void itobin(unsigned int i) { if (i == 0) return; itobin (i/2); putchar (i%2 + '0'); // printf("%u", i%2 ); }
-
Dulfried schrieb:
danke, kannst du mir noch kurz erklären, was der numerische zahlenwert ist?
Einfach der Wert einer Zahl. Im Gegensatz zu einer bestimmten Darstellung. Wird komischerweise oft verwechselt.
-
Geht das nicht auch ganz einfach mit den Grundbausteinen, die ich verwendet habe?
Ich weiß bei euren Lösungen nie was itobin, putchar, usw. sein soll.
-
itobin ist die Funktion die ich da gerade definiert habe.
Kannst du aus
main
mit itobin(3); oder itobin(zahl); aufrufenStatt
putchsr
kannst du auch dasprintf
aus dem Kommentar nehmen.
http://www.cplusplus.com/reference/cstdio/putchar/
-
Dulfried schrieb:
[...] Ich habe keine ahnung was stderr, getchar, EOF,uint32_t,fputs und putchar sein sollen.
daher auch das
Swordfish schrieb:
*scnr*
-
danke für eure Hilfe!
könntet ihr mir bitte auch noch verraten, wie ich es schaff den string in seinen numerischen zahlenwert umzurechnen?
Allerdings verstehe ich nicht, was man davon hat den string überhaupt in seinen numerischen zahlenwert umzurechnen und nicht direkt mit ihm zu rechnen (ist allerdins in der aufgabe vorgeschrieben)
-
Dulfried schrieb:
könntet ihr mir bitte auch noch verraten, wie ich es schaff den string in seinen numerischen zahlenwert umzurechnen?
Das zeigen die Beispielcodes diverser Nutzer doch bereits.
http://de.wikipedia.org/wiki/StellenwertsystemAllerdings verstehe ich nicht, was man davon hat den string überhaupt in seinen numerischen zahlenwert umzurechnen und nicht direkt mit ihm zu rechnen (ist allerdins in der aufgabe vorgeschrieben)
Wie rechnest du denn mit Zeichenketten?
-
ja mit den beispielprogrammen meckert mein compiler immer.
char eingabe_feld[17];
int zahl;ich muss für die eingabe folgendes benutze: scanf("%c%16s", &zahlentyp, eingabe_feld)
um dann den numerischen Zahlenwert zu bekommen habe ich folgendes gemacht:
numwert = eingabe_feld - 48;Der compiler streicht mir das = an und "ein wert vom typ char* kann keiner Entität vom vom typ unsigned char zugewiesen werden.
-
numwert = eingabe_feld - 48;
Du musst schon mit den einzelnen Stellen von
eingabe_feld
je nach Position und dem Stellenwert je nach gewünschtemzahlentyp
(Zahlensystem?) rechnen ...Wahrscheinlich ist
%c
fürzahlentyp
das falsche Format. Zeig doch mal vollständigen Code!
-
In Erwartung von etwas bashing...
Ich finde es immernoch "quite cool". :pMit führenden Nullen:
char line[100] = "\0"; unsigned ich = 3001; unsigned i; for( i = 0x8000; i > 0; i >>= 1 ) strcat( line, (ich & i) == i ? "1" : "0" ); printf( "%s" , line );
EDIT:
und noch etwas reduzierter:strcat( line, ich & i ? "1" : "0" );
EDIT #2:
noch übler:for( i = 0x8000; i > 1; i >>= 1, strcat( line, ich & i ? "1" : "0" ) );
EDIT #3 hat leider doch nicht funktioniert.
-
Ah, ein Crank-Code-Contest ... ich mach mit
-
Swordfish schrieb:
Ah, ein Crank-Code-Contest ... ich mach mit
LOL, schaff es printf auch noch in die for-Schleife zu integrieren und du hast den Pokal.
-
darfs auch
putchar()
sein? :pfor( unsigned i = 17; i; putchar( "10"[ !( ich & 1 <<-- i ) ] ) );
-
for( i = 0x8000; i; i >>= 1, strcat( line, ich & i ? "1" : "0" ), i == 1 && printf( "%s", line ) );
macht alles in einer Zeile.
EDIT:
ist eher was für den code obfuscation contest
-
Im Golfen bin ich trotzdem vorn :p
for( i = 17; i-- || puts( line ); line[ 16 - i ] = "10"[ !( ich & 1 << i ) ] );
// edit: 55 ohne whitespace