Verständnissfrage zu einem Programm



  • Hoi, hab ein Programm von einem bekannten bekommen und versteh ein paar teile davon nicht. Da ich das in naher zukunft wohl selbst machen muss wäre es nett wenn ihr mir helft 🙂

    #include <stdio.h>
    
    #include <limits.h>
    
    #include <string.h>
    
    #include <ctype.h>
    
    #include <stdlib.h>
    
    char umrechnung (char *ursprungszahl, int ursprungsystem, int zielsystem, char *zielzahl);
    
    int main()
    {
        int ursprungsystem, zielsystem, ueber, i=0, laenge;
        char ursprungszahl[50], zielzahl[50];
    
        printf("\n\n Umrechnung in beliebige Zahlensystem");
    
        do
        {
            printf("\n\nBitte geben Sie das Ursprungszahlensystem ein:\n");
            ueber = scanf("%d",&ursprungsystem);
                while( getchar() != '\n' );
        }
        while (ueber != 1||ursprungsystem<2||ursprungsystem>36);
    
        do
        {
            printf("\n\nBitte geben Sie das Zielzahlensystem ein:\n");
            ueber = scanf("%d",&zielsystem);
    
                    while( getchar() != '\n' );
        }
        while (ueber != 1 || zielsystem<2 || zielsystem>36);
    
        do{
    
            printf("\n\nBitte geben Sie die Ursprungszahl ein:\n");
            fgets(ursprungszahl, 50, stdin);
            ueber = 1;
    
            laenge=strlen(ursprungszahl);
    
            //Überprüfen der Ursprungszahl auf korrekte Werte
            for (i=0; i<laenge-1; i++)
    
            {
    
                if ((ursprungszahl[i]<'0' || ursprungszahl[i]>'9') && 
                    (ursprungszahl[i]<'A' || ursprungszahl[i]>'Z') &&  
                    (ursprungszahl[i]<'a' || ursprungszahl[i]>'z'))
                    {
    
                        printf("\nIhr Zahl beinhaltet nicht erlaubte Zeichen");
                        ueber = 0;
                        break;
    
                    }
    
            }
    
            //Überprüfen auf korrekte Eingabe der Zahl zum Ursprungssystem
    
            if (ursprungsystem <= 10)
    
                {
    
                for (i=0; i<laenge-1; i++)
    
                    {
    
                    if (ursprungszahl[i]>ursprungsystem+47)
    
                        {
    
                            printf("\nIhr Zahl entspricht nicht dem Ursprungssystem");
    
                            ueber = 0;
                            break;
    
                        }
    
                    }
    
                }
    
            else
    
                {
    
                for (i=0; i<laenge-1; i++)
    
                    {
    
                        if (toupper(ursprungszahl[i])>ursprungsystem+54)
    
                        {
    
                            printf("\nIhr Zahl entspricht nicht dem Ursprungssystem");
    
                            ueber = 0;
                            break; 
    
                        }
                    }
    
                }
    
        }while(ueber != 1 );
    
        //Übergabe an Funktion
    
        umrechnung(ursprungszahl, ursprungsystem, zielsystem, zielzahl);
    
        printf ("\n\nZielzahl= %s\n",zielzahl);
        //printf ("Der String hat %d Zeichen",laenge);
    
        return 0;
    
    }
    
    char umrechnung(char *ursprungszahl, int ursprungsystem,int zielsystem, char *zielzahl)
    
    {
    
        char zieltemp[50];
    
        int laenge, i=0, j=0, basis10, v;
    
        laenge=strlen(ursprungszahl);
    
        //printf("\n%s \t%d \t%d", ursprungszahl, ursprungsystem, zielsystem);
    
        //printf("\n%d", laenge);
    
        //Umrechnung ins 10er System
    
        for (i=0; i<laenge-1; i++)
    
        {
    
            if (ursprungszahl[i]>='0'&&ursprungszahl[i]<='9')
    
            {
    
                //printf("\n%d",ursprungszahl[i]-48 );
    
                basis10=((ursprungszahl[i]-48)+j)*ursprungsystem;
    
                j=basis10;
    
            }
    
            else if (ursprungszahl[i]>='A'&&ursprungszahl[i]<='Z')
    
            {
    
                basis10=((ursprungszahl[i]-55)+j)*ursprungsystem;
    
                j=basis10;
    
            }
    
            else if (ursprungszahl[i]>='a'&&ursprungszahl[i]<='z')
    
            {
    
                basis10=((ursprungszahl[i]-87)+j)*ursprungsystem;
    
                j=basis10;
    
            }
    
        }
    
        basis10=basis10/ursprungsystem;
    
        //printf("\n%d\n", basis10);
    
        //ziel[0]=basis10%zielsystem;
    
        //Umrechnung ins Zielsystem
    
        i=0;
    
            do
    
            {
    
                if (basis10%zielsystem>=10)
    
                    zieltemp[i]=(basis10%zielsystem)+55;
    
                else if (basis10%zielsystem<10)
    
                    zieltemp[i]=(basis10%zielsystem)+48;
    
                //printf("\ni=%d ziel=%c",i,zieltemp[i]);
    
                i++;
    
                basis10/=zielsystem;
    
            }while (basis10);
    
        zieltemp[i]='\0';
    
        laenge=strlen(zieltemp);
    
        for (i=0,v=laenge-1;i<=laenge;i++,v--)
    
            {
    
                zielzahl[i]=zieltemp[v];
    
            }
    
        //printf("\n%s",ziel);
    
    //    *zieltemp=(char)basis10;
    
        //printf("\n%s", ziel);
    
        return 0;
    
    }
    


  • Das main ist soweit klar bei mir nur versteh ich nicht wie er das mit der umrechnung in der Funktion gemacht hat.

    for (i=0; i<laenge-1; i++)
    
        {
    
            if (ursprungszahl[i]>='0'&&ursprungszahl[i]<='9')
    
            {
    
                //printf("\n%d",ursprungszahl[i]-48 );
    
                basis10=((ursprungszahl[i]-48)+j)*ursprungsystem;
    
                j=basis10;
    
            }
    
            else if (ursprungszahl[i]>='A'&&ursprungszahl[i]<='Z')
    
            {
    
                basis10=((ursprungszahl[i]-55)+j)*ursprungsystem;
    
                j=basis10;
    
            }
    
            else if (ursprungszahl[i]>='a'&&ursprungszahl[i]<='z')
    
            {
    
                basis10=((ursprungszahl[i]-87)+j)*ursprungsystem;
    
                j=basis10;
    
            }
    
        }
    
        basis10=basis10/ursprungsystem;
    

    und

    i=0;
    
            do
    
            {
    
                if (basis10%zielsystem>=10)
    
                    zieltemp[i]=(basis10%zielsystem)+55;
    
                else if (basis10%zielsystem<10)
    
                    zieltemp[i]=(basis10%zielsystem)+48;
    
                //printf("\ni=%d ziel=%c",i,zieltemp[i]);
    
                i++;
    
                basis10/=zielsystem;
    
            }while (basis10);
    
        zieltemp[i]='\0';
    
        laenge=strlen(zieltemp);
    
        for (i=0,v=laenge-1;i<=laenge;i++,v--)
    
            {
    
                zielzahl[i]=zieltemp[v];
    
            }
    


  • Wie wärs, wenn du selbst versuchst so ein Programm zu schreiben? Diese Form von 'reverse engeneering' ist wenig sinnvoll.

    Gruß,
    B.B.



  • brgecko schrieb:

    Da ich das in naher zukunft wohl selbst machen muss

    Das heißt schon mal, dass du programmübergreifend weißt, was passieren soll. Also quasi die Aufgabenstellung. Danach solltest du für dich erstmal überlegen, wie du es selbst umsetzen würdest. (siehe Argument von Big Brother)

    Nach dem ich kurz mal über alles geflogen bin, find ich den Quellcode grundsätzlich auch nicht so toll, dass man daraus abguggen sollte 😃
    Bis du alles verstanden hast, hast auch so nen Programm selbst zusammengeschrieben 😉



  • Soale, mit nen bissken überlegen und Taschenrechner hab ichs gerallt 🙂 Danke für die anworten.

    ps. es ging nicht ums abgucken sondern ums verstehen 🙂
    Ich schreib mein zeugs schon selbst weil ich das ganze beim vortragen ned erklären könnte.


Anmelden zum Antworten