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.