brauche hilfe bem Programmieren für ein (für mich schwer)leichtes Programm



  • ALso ich habe schonmal hier mein Problem geschildert,habe auch Hilfe von euch bekommen, aber es nicht geschaft,eure Hilfe umzusetzten. Ich bitte deshalb nochmal um eure Hilfe....bitte. Da ich im Moment nicht weiter weiss, ist es mehr Try & Error Vorgehen von mir.
    Mein Programm soll Zahlen einlesen.....zb 143. ich soll sie dann wie folgt umrechnen....1*7^0 + 4*7^1 + 3*7^2 . das ergebniss soll ich dan ausgeben. aber da ich das return zeichen nicht dabei haben will, muss ich es auch irgendwie aus der Berechnung mit raus nehmen....die Funktion die das machen soll ist bei mir unsigned int wandlung (int wandeln)

    Folgend ist der Code....die vielen printf sind nur für mich zum Test,um zu schauen wo das Programm gerade ist und die letzte Funktion ist erstaml aussen vor....

    unsigned int wandlung (int wandeln)                         //Umwandelfuntkion
    {
       int i=0,n=0;                                             //soll laenge zaehlen
       int wert,neuer_wert,summe,neue_summe;
    
       for (i=0;mystring[i]!='\0'; i++)                         //Zaehlt durchlaufe und soll dann das Zeichen umwandeln
        {
    
          wert=(mystring[i]-48);                                //Wert bekommt das erste umgerechnete Zeichen/Zahl
          printf("TEST wert von mystring: %d\n",wert);          //Testausgabe für wert!!!
          neuer_wert=wert;                                      //Wert wird an neuer_wert uebergeben  
          printf("TEST Wandlung1 neuer_wert:%d\n",neuer_wert);  //Testausgabe für neuer_wert!!
    
          summe = wert + neuer_wert;                            //wert und neuer_wert werden addiert
          neue_summe=summe;
          wandeln=summe+neue_summe;
          //wandeln=summe;
    
          //summe=i;                                            //Test uebergibt einfach nur die Anzahl der Zeichen
        }
    wandeln=summe;
    return wandeln;
    }
    

    Wenn ich den Wert in unsigned int Funktion berechnen lasse, gibt der mir nur den berechneten Wert des Returnzeichen zurück....warum rechnet er nicht so wie ich das will?

    Ich hoffe ihr könnt mir nochmal helfen....bitte. 😞

    Gruß

    Torsten

    edit: Habe mal das Main Programm und die letzte Funktion (Übersicht halber)rausgenommen



  • Mal noch ne Frage...wenn ich in der unsigned int wandlung (int wandeln) Funktion bin und 3 Zahlen eingabe,warum behält der nicht den als erstes berechneten Wert? Sondern nur den zueletzt in der for schleife berechneten Wert und "vergisst" die anderen Werte? Kann ich das nicht einfach mit einem Variablenwert Tausch machen wie in Zeile 49 bis 51?

    Gruß



  • 1: die prototypen dürfen nicht in main() stehen!
    2: hab mir den code zwar nicht wirklich durchgelesen, aber ich würds so machen: nach dem einlesen die einzelnen ziffern mittels sscanf in ints umwandeln, und dann einfach nur jede zahl einzeln in einer for schleife mal 7 hoch n nehmen (pow()). und noch was: ich glaube die die ziffernanzahl der zahl x (unsigned) ist immer (int)log(x)



  • Blöde Frage, wo soll ich die Prototypen dann deklarieren?

    zu zweiten punkt:ich versteh jetzt grad nicht wie du das meinst!Sorry 😞



  • Torstenda schrieb:

    Mal noch ne Frage...wenn ich in der unsigned int wandlung (int wandeln) Funktion bin und 3 Zahlen eingabe,warum behält der nicht den als erstes berechneten Wert? Sondern nur den zueletzt in der for schleife berechneten Wert und "vergisst" die anderen Werte?

    Weil du alle Variablen in der Schleife neu zuweist. Keine Variable behält ihren Wert aus dem letzten Durchlauf.

    wert ermittelst du aus dem String, neuerwert setzt du auf wert, summe setzt du (effektiv) auf 2 * wert, neue_summe auf summe, und wandeln auf 2 * summe, also 4 * wert.

    Wozu hat die Funktion überhaupt einen Parameter?



  • MFK schrieb:

    Torstenda schrieb:

    Mal noch ne Frage...wenn ich in der unsigned int wandlung (int wandeln) Funktion bin und 3 Zahlen eingabe,warum behält der nicht den als erstes berechneten Wert? Sondern nur den zueletzt in der for schleife berechneten Wert und "vergisst" die anderen Werte?

    Weil du alle Variablen in der Schleife neu zuweist. Keine Variable behält ihren Wert aus dem letzten Durchlauf.

    wert ermittelst du aus dem String, neuerwert setzt du auf wert, summe setzt du (effektiv) auf 2 * wert, neue_summe auf summe, und wandeln auf 2 * summe, also 4 * wert.

    Wozu hat die Funktion überhaupt einen Parameter?

    Was genau meist du mit Parameter? Ich muss doch einen Wert zurück geben,oder nicht?
    Aber wenn ich ja nur einen Wert zurück geben, dann ann ich ja nicht in meiner zweiten Funktion dann mit 143 rechnen,ondern habe ja eigentlich ja nur den einen Wert :(.........dann sollte ich vielleicht die zweite (die mir dann 1*7^0 usw berechnet) mit in die obige Funktion nehmen....hmmm ist ja noch schwer als ich gedacht habe 😕



  • sorri war müll was ich da gequasselt habe, der zweite punkt zumindest, ich hätts mir doch durchlesen sollen...
    und zum ersten nochmal: du musst die prototypen außerhalb einer funktion platzieren und sie müssen schon vor der funktion auftauchen, in der du sie verwendest (bei dir main(), also muss es auch davor stehn).



  • Torstenda schrieb:

    Was genau meist du mit Parameter?

    Das, was zwischen den runden Klammern steht: int wandeln.

    Ich muss doch einen Wert zurück geben,oder nicht?

    Das hat aber mit den Funktionsparametern nichts zu tun. Das sind die Eingabewerte der Funktion. Wozu soll "int wandeln" dienen? Der einzige Eingabewert der Funktion ist doch das globale Array mystring.

    Aber wenn ich ja nur einen Wert zurück geben, dann ann ich ja nicht in meiner zweiten Funktion dann mit 143 rechnen,ondern habe ja eigentlich ja nur den einen Wert :(.........dann sollte ich vielleicht die zweite (die mir dann 1*7^0 usw berechnet) mit in die obige Funktion nehmen....hmmm ist ja noch schwer als ich gedacht habe 😕

    Ich glaube, du solltest dir zunächst mal mit Bleistift und Papier (ohne Code) klarmachen, wie du deinen eingelesenen String in eine Zahl umwandelst. Warum benutzt du eigentlich nicht atoi?



  • falls ich dich richtig verstanden habe und du das hier berechnen willst (input 1234) 1*7^0 + 2*7^1 + 3*7^2 + 4*7^3 (die zahl liegt als string vor, wobei ich sie aber an deiner stelle direkt auch als zahl einlesen würde) dann probier mal sowas:

    int wandlung(const char* s)
    {
        int i, sum=0;    
        for(i=0; i<strlen(s); ++i)
             sum+=(s[i]-48) * pow(7, i);
    
        return sum;             
    }
    

    du brauchst dazu die header math.h und string.h.
    ich hoffe das ist das, was duch suchst.



  • ... schrieb:

    falls ich dich richtig verstanden habe und du das hier berechnen willst (input 1234) 1*7^0 + 2*7^1 + 3*7^2 + 4*7^3 (die zahl liegt als string vor, wobei ich sie aber an deiner stelle direkt auch als zahl einlesen würde) dann probier mal sowas:

    int wandlung(const char* s)
    {
        int i, sum=0;    
        for(i=0; i<strlen(s); ++i)
             sum+=(s[i]-48) * pow(7, i);
             
        return sum;             
    }
    

    du brauchst dazu die header math.h und string.h.
    ich hoffe das ist das, was duch suchst.

    Ja genau,so soll ich dass dann berechnen.....hier ist mal die Aufgabenstellung
    3.1.2.2 Konversionsfunktion “atobin”
    Erweitern Sie dieses Programm um eine Funktion “atobin”, die einen String in eine Integervariable
    (im weiteren n genannt) konvertiert (Typ z.B. unsigned short int). Prototyp:
    unsigned short int atobin(char str[]);
    Dabei sei die Konversionsbasis (und die unten ben¨otigte Funktion) gem¨ass Ihres Versuchscodes
    (Tabelle s.u.) zu programmieren. Der String darf dann nat¨urlich keine beliebigen Zeichen mehr
    beinhalten sondern nur noch zul¨assige Ziffern. Testen und dokumentieren Sie das Ergebnis der
    Wandlung mittels der C Funktion “printf”
    .

    Hmmm,danke für Hilfe!!!Das heisst du hast in deinem Code auch die Addition gemacht.....hmmmm...das muss ich mir mal genauer Ansehen...ist natürlich um ein vielfaches geringer (Zeilenaufwand)

    EDIT: Das heisst,anstelle meiner funktion wandlung schreib ich einfach das?hmmmmmmm muss ich mal versuche einzuarbeiten



  • ... schrieb:

    falls ich dich richtig verstanden habe und du das hier berechnen willst (input 1234) 1*7^0 + 2*7^1 + 3*7^2 + 4*7^3 (die zahl liegt als string vor, wobei ich sie aber an deiner stelle direkt auch als zahl einlesen würde) dann probier mal sowas:

    int wandlung(const char* s)
    {
        int i, sum=0;    
        for(i=0; i<strlen(s); ++i)
             sum+=(s[i]-48) * pow(7, i);
             
        return sum;             
    }
    

    du brauchst dazu die header math.h und string.h.
    ich hoffe das ist das, was duch suchst.

    Kann ich das auch so machen?

    unsigned int wandlung (int wandeln)                         
    {
       int i=0,
    
       for (i=0;mystring[i]!='\0'; i++)                         
        {
    
          wandeln += (mystring[i]-48)*(pow(7,i));
    
        }
    return wandeln;
    
    }
    

    also fehler gibts keine nur die Rechnung stimmt nicht,da ja am Ende noch mit -38*7^i gerechnet wird. Ich weiss aber noch nicht warum.


Anmelden zum Antworten