Problem bei Parameterübergabe



  • Hallo,

    wir sollen ein Programm zu Ende schreiben, es fehlen eigentlich nur bruchstücke.
    Das Teil sieht wie folgt aus:

    #include <stdio.h>

    -------------------
    -------------------
    -------------------

    int main (void)
    {
    float r1;
    float r2;
    float r;
    -------------------
    berechnung (r1,r2,&r);
    ausgabe (r1,r2,r);
    return 0;
    }

    void eingabe (float * u, float * v)
    {

    -------------------
    }

    void berechnung (float x, float y, float * z)
    {
    -------------------

    }

    void ausgabe (float a, float b, float c)
    {
    printf ("\nDer Ersatzwiderstand von %d und %d ist %d",a,b,c);
    }

    Die "-------------------" verdecken die Anweisungen, die wir ersetzen sollen.

    Ich habe das wie folgt gemacht:

    #include <stdio.h>

    /*funktionsprototypen*/
    void eingabe (float * k, float * l);
    void berechnung (float m, float n, float * o);
    void ausgabe (float p, float q, float s);

    int main (void)
    {
    float r1;
    float r2;
    float r;
    eingabe (&r1,&r2);
    berechnung (r1,r2,&r);
    ausgabe (r1,r2,r);
    return 0;
    }

    void eingabe (float * u, float * v)
    {
    printf ("Geben Sie Widerstand 1 ein: ");
    scanf ("%d", &u);
    printf ("Geben Sie Widerstand 2 ein: ");
    scanf ("%d", &v);
    printf ("\nDie Widerstaende betragen %d und %d",u,v);

    }

    void berechnung (float x, float y, float * z)
    {
    *z = (x*y)/(x+y);

    }

    void ausgabe (float a, float b, float c)
    {
    printf ("\nDer Ersatzwiderstand von %d und %d ist %d",a,b,c);
    }

    Zum Anfang muss man ja die Funktionsprototypen erstellen, wobei die Variablen ja nicht zwangsläufig die selben wie in den Funktionen sein müssen.

    Die Eingabe klappt soweit reibungslos, aber sobald er zum Funktionsaufruf von berechnung kommt, werden die Parameter nicht übergeben, also, er rechnet mit unbekannten Werten weiter.

    (Die Formel ist für die Berechnung der Widerstände bei einer Parallelschaltung)

    Kann mir jemand vielleicht sagen, wie ich das Problem löse, und ob der Ansatz soweit schonmal okay ist, oder ob das völliger Blödsinn ist, was ich programmiert habe..?

    Ich danke im voraus!



  • Haxx0r schrieb:

    Zum Anfang muss man ja die Funktionsprototypen erstellen...

    nee, du brauchst nur die anordnung der funktionen zu verändern (main nach ganz unten z.b.)

    Haxx0r schrieb:

    Die Eingabe klappt soweit reibungslos, aber sobald er zum Funktionsaufruf von berechnung kommt, werden die Parameter nicht übergeben, also, er rechnet mit unbekannten Werten weiter.

    die argumente für 'eingabe' sind schon adressen, d.h. du kannst bei scanf den adressoperator weglassen.
    🙂



  • void eingabe (float * u, float * v)
    {
    printf ("Geben Sie Widerstand 1 ein: ");
    scanf ("%d", &u);
    printf ("Geben Sie Widerstand 2 ein: ");
    scanf ("%d", &v);
    printf ("\nDie Widerstaende betragen %d und %d",u,v);
    
    }
    

    wieso machst du jier noch ein & davor u und v sind doch sowieso zeiger lass dass mal weg



  • Versuchs mal so:

    #include <stdio.h>
    
    /* Funktionsprototypen */
    void eingabe (float * u, float * v);
    void berechnung (float x, float y, float * z);
    void ausgabe (float a, float b, float c);
    
    int main (void)
    {
    	float r1;
    	float r2;
    	float r;
    
    	eingabe (&r1,&r2);
    
    	berechnung (r1,r2,&r);
    
    	ausgabe (r1,r2,r);
    
    	return 0;
    }
    
    void eingabe (float * u, float * v)
    {
    	printf ("Geben Sie Widerstand 1 ein: ");
    	scanf ("%f", u);
    
    	printf ("Geben Sie Widerstand 2 ein: ");
    	scanf ("%f", v);
    
    	printf ("\nDie Widerstaende betragen %f und %f", *u, *v);
    }
    
    void berechnung (float x, float y, float * z)
    {
    	*z = (x*y) / (x+y);
    }
    
    void ausgabe (float a, float b, float c)
    {
    	printf ("\nDer Ersatzwiderstand von %f und %f ist %f", a, b, c);
    }
    

    Deine Fehler:
    - Du hast bei printf und scanf %d genutzt. Es handelt sich aber um eine Variable vom Typ float. Daher muss du %f nutzen. Siehe auch (scanf type specifiers): http://www.cplusplus.com/reference/clibrary/cstdio/scanf/

    Außerdem hast du bei scanf noch & angegeben. Das war aber nicht nötig, da du bereits einen Zeiger übergibst.



  • Achso und mit *u und *v musst du die Zeiger natürlich auch wieder dereferenzieren.



  • Ich danke euch.

    Bin noch ziemlich frisch auf diesem Gebiet.
    Das mit der Scanf-Funktion war irgendwie immer so im Kopf, aber ist mir gerade klar geworden, weshalb das dort mehr als flüssig ist.

    Im Grunde, wenn ich es jetzt richtig gesehen habe, waren die Fehler nur dumme Schusselfehler.
    Muss ich mir die Sache mit den Pointern und Adressen nochmal anschauen.

    Ich danke euch 🙂


Anmelden zum Antworten