brauche Hilfe bei Programm...

  • geschlossen
  • C

  • tr00per
  • 1366 Aufrufe 9 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • brauche Hilfe bei Programm...

    Hi,

    ich möchte ein Programm schreiben das binär in dezimal umwandelt (später noch mit hex erweitern). Jedoch bekomme ich z.B. bei der Eingabe von "1001" ne ausgabe von "36", richtig wäre aber "9". Vielleicht kann mir ja jemand helfen :)

    hier mein Quellcode:

    C-Quellcode

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <string.h>
    4. int main(){
    5. char eingabe[200];
    6. int i, j, k, l;
    7. int zahl, dezimal_ausgabe = 0;
    8. int binaer_liste[200], dezimal_liste[200];
    9. printf("Bitte Binaerzahl eingeben: ");
    10. scanf("%s",&eingabe);
    11. for( i = 0; i < strlen(eingabe); i++ )
    12. {
    13. zahl = ( eingabe[ i ] ) - 48;
    14. binaer_liste[i] = zahl;
    15. }
    16. k = 1;
    17. printf( "\n\n" );
    18. for( j = ( (strlen(eingabe) ) + 1 ); j >=0 ; j-- )
    19. {
    20. dezimal_liste[j] = ( binaer_liste[j] * k );
    21. k = k * 2;
    22. dezimal_ausgabe = dezimal_ausgabe + dezimal_liste[j];
    23. }
    24. printf( "\n%d\n", dezimal_ausgabe );
    25. system( "pause" );
    26. return 0;
    27. }
    Alles anzeigen
  • Naja zuerst mal hattest du in deinem Programm strlen(eingabe) + 1.
    Lässt du das + 1 weg läuft die Schleife immernoch einmal zu viel, weil sie von 4 bis 0 läuft.

    Bei arrays (wozu ja auch der string zählt) fängt man immer bei 0 an zu zählen, nicht bei 1. Also 0, 1, 2, 3 nicht 1, 2, 3, 4. Du bist von 4 bis 0 runter gegangen, was 5 iterationen sind.

    Ich hoffe das war verständlich ;)
    [SIZE="1"]i'm a signature virus. copy me into your signature to help me spread. - smart questions[/SIZE]
  • Hast du dir schon mal überlegt, daß 36d 100100b ist, also gegenüber 1001b um zwei Stellen nach links verschoben?

    Gruß Konradin
    Aktuell zum 70. Jahrestag:
    Auschwitz war sicher nur die Folge berechtigter Ängste gegen die Juden.
    Damals war es die Verjudung, heute ist es die Islamisierung, welche uns Angst macht.
    Eigentlich müssten sich diese Leute bei uns dafür entschuldigen.
  • Ich will ja nicht mekern aber wozu braucht man bitteschön beim Umwandeln von Binär in Dezimalzahlen diese Codezeile -> zahl = ( eingabe[ i ] ) - 48;
    Das will mir irgendwie in keinster Weise sinnvoll erscheinen.
  • Solviper schrieb:

    Ich will ja nicht mekern aber wozu braucht man bitteschön beim Umwandeln von Binär in Dezimalzahlen diese Codezeile -> zahl = ( eingabe[ i ] ) - 48;
    Das will mir irgendwie in keinster Weise sinnvoll erscheinen.

    Das wird zur Umwandlung von der char eingabe in integer verwendet. der character '9' hat den ascii wert 57, deswegen werden 48 abgezogen um auf integer 9 zu kommen
    [SIZE="1"]i'm a signature virus. copy me into your signature to help me spread. - smart questions[/SIZE]
  • ohne deinen code jetzt näher betrachtet zu haben hier mal ein pseudocode beispiel wie ich manuell ne binärzahl in ne dezimalzahl umwandeln würde:

    dezimal=0 // dies ist gefragt
    int binzahl=110110
    while (binzahl > 0){
    ...if (mod2(binzahl) !=0) // also wenn binärzah ungerade ist (letzte stelle ist ne 1)
    ......dezimal+=2^i
    ...binzahl = floor(binzahl/10) // um eine stelle nach rechts shiften ... ggf nachkommastelle abschneiden via round, floor etc
    }

    vielleicht hilft dir oder irgendjemandem sonst das ja irgendwie weiter :)