Programm Umrechnung von Dezimal in hex.,bin. und okt.



  • Hallo bin neu im Forum brauche unbedingt hilfe schreibe schon seit ca.
    4-5 Std. an einem Programm für das Informatik Praktikum.
    Mein Problem ist das ich einfach den fehler nicht da er den char nicht zuweisen kann.

    [cpp]#include <stdio.h>
    #include <math.h>
    #include <string.h>

    char* intToChar(int index)
    {
    char* help[16] = {"0", "1", "2", "3",
    "4", "5", "6", "7",
    "8", "9", "A", "B",
    "C", "D", "E", "F"};

    return help[index];
    }

    // Eine Funktion, die berechnet, wie oft eine Zahl in eine andere hineinpasst
    int div(int zahl, int teiler)
    {
    return (int) zahl/teiler;
    }

    // Konvertiert eine beliebige Zahl in eine Zahl aus einem anderen Zahlensystem
    void numberConvert(int zahl, int zielsystem, char ausgabe[])
    {
    while (div(zahl, zielsystem) != 0)
    {
    strcat(ausgabe, intToChar(zahl%zielsystem));
    zahl = div(zahl, zielsystem);
    }

    strcat(ausgabe, intToChar(zahl%zielsystem));

    // strcat umdrehen, da es sonst spiegelverkehrt ist
    }

    int main()
    {

    printf("\n");
    printf("
    \n");
    printf("
    Dieses Programm wandelt Dezimalzahlen in \n");
    printf("
    Binear, Oktal und Hexadezimal um. \n");
    printf("
    \n");
    printf("
    \n");

    int zahl;
    char ausgabe[100];

    printf("Bitte geben sie eine Dezimalzahl ein:");

    scanf("%i", &zahl);

    int auswahl;
    printf("In welches Zahlensystem moechten Sie %i umrechnen.\n",zahl);
    printf("Hex(16)\n");
    printf("Oct(8)\n");
    printf("Bin(2)\n");

    scanf("%i", &auswahl);

    numberConvert(zahl, auswahl, &ausgabe);

    int i;
    for (i = strlen(ausgabe); i >= 0; --i)
    {
    printf("%c", ausgabe[i]);
    }

    int arsch;
    scanf("%i", &arsch);

    return 0;
    }



  • Der Fehler wird bei
    "numberConvert(zahl, auswahl, &ausgabe); " angezeigt



  • 1. Codetags ("[ cpp ] [ /cpp ]") müssen auch geschlossen werden, damit sie funktionieren.
    2. Einrücken macht Leser glücklich.
    3. Variablennamen wie "arsch" erfreuen Deinen Praktikumsbetreuer bei der Durchsicht des Quellcodes ganz sicherlich.
    4. Fehlermeldung im Ganzen hier mit angeben. (Text? Zeilennummer?)
    5. Welches Betriebssystem, welcher Compiler?

    Du solltest Dich auch dringend nochmal mit Pointern und Arrays beschäftigen, bevor Du weitermachst.

    char* intToChar(int index)
    {
    char* help[16] = {"0", "1", "2", "3",
    "4", "5", "6", "7",
    "8", "9", "A", "B",
    "C", "D", "E", "F"};
    
    return help[index];
    }
    

    tut womöglich nicht ganz das, was Du möchtest.



  • Ganz so schlimm ist es nicht.
    Das Programm funktioniert durchaus.
    Durch das fehlende [ /cpp ] Tag wird die Einrückung nicht angezeigt (sie ist noch vorhanden). Er hat es aber probiert. 👍

    Die fehlende Fehlermeldung ist allerdings 👎 👎

    Das ganze sieht mir nach einer Umsetzung von Pascal nach C aus.
    In C macht man das allerdings ein bischen anders.

    @padynator
    Du hast auch vergessen deine Variable ausgabe zu initialisieren.



  • Hallo
    Danke schon mal für eure Hilfe. Ich habe noch nicht so viel Programmier Erfahrung,
    das ist wohl der Grund warum die Fehler da sind 😃
    Habe auch die Codetags jetzt oben eingerückt.

    Der Fehler ist unterstrichen.

    Ich benutze DevC++ als compiler.
    Sry nochmals für das arsch im scanf befehl aber war wohl so gereizt ,weil ich den Fehler nicht gefunden habe das ich nur auf sowas kam 😉

    #include <stdio.h>
    #include <math.h>
    #include <string.h>

    char* intToChar(int index)
    {
    char* help[16] = {"0", "1", "2", "3",
    "4", "5", "6", "7",
    "8", "9", "A", "B",
    "C", "D", "E", "F"};

    return help[index];
    }

    // Eine Funktion, die berechnet, wie oft eine Zahl in eine andere hineinpasst
    int div(int zahl, int teiler)
    {
    return (int) zahl/teiler;
    }

    // Konvertiert eine beliebige Zahl in eine Zahl aus einem anderen Zahlensystem
    void numberConvert(int zahl, int zielsystem, char ausgabe[])
    {
    while (div(zahl, zielsystem) != 0)
    {
    strcat(ausgabe, intToChar(zahl%zielsystem));
    zahl = div(zahl, zielsystem);
    }

    strcat(ausgabe, intToChar(zahl%zielsystem));

    // strcat umdrehen, da es sonst spiegelverkehrt ist
    }

    int main()
    {

    printf("\n");
    printf("
    \n");
    printf("
    Dieses Programm wandelt Dezimalzahlen in \n");
    printf("
    Binear, Oktal und Hexadezimal um. \n");
    printf("
    \n");
    printf("
    \n");

    int zahl;
    char ausgabe[100];

    printf("Bitte geben sie eine Dezimalzahl ein:");

    scanf("%i", &zahl);

    int auswahl;
    printf("In welches Zahlensystem moechten Sie %i umrechnen.\n",zahl);
    printf("Hex(16)\n");
    printf("Oct(8)\n");
    printf("Bin(2)\n");

    scanf("%i", &auswahl);

    numberConvert(zahl, auswahl, &ausgabe);

    int i;
    for (i = strlen(ausgabe); i >= 0; --i)
    {
    printf("%c", ausgabe[i]);
    }

    int stop;
    scanf("%i", &stop);

    return 0;
    }

    http://s1.directupload.net/images/111115/temp/yl6js85v.jpg


  • Mod

    Ist das nicht ziemlich eindeutig? Ein Zeiger auf ein char-Array ist kein Zeiger auf char. Du meinst vermutlich numberConvert(zahl, auswahl, ausgabe); , denn ein Array zählt bei Übergabe an eine Funktion wie ein Zeiger auf sein erstes Element. (Ich habe aber nicht den ganzen Thread gelesen, mag sein, dass du das gar nicht so meinst)



  • Danke SeppJ habt das & bei Ausgabe weggemacht und es funkt endlich 😉 Ich freu mich.
    Nur muss noch mal mir das am Ende mit den Strings umkehren anschauen weil er mir bei den Ergebnissen am ende y= hinter das Ergebnis setzt ansonsten funktioniert es.

    Sry eigentlich Danke an euch alle für eure Hilfe. 😉



  • Die komischen Zeichen kommen daher, dass du das Array nicht initialisiert hast (bzw nur strcat nimmst).
    Mach char ausgabe[100] = ""; und die Zeichen sind weg.


Anmelden zum Antworten