Hilfe:(



  • [Edit] Sorry hatte float statt double gelesen.

    gruß
    syntax



  • Du musst die Leerschlaege im Formatierungsstring weglassen:

    scanf ("%lf", &r);
    


  • Nö, %lf ist für double richtig.
    EDIT: Bezog sich auf Syntax' Beitrag.

    Warum das nicht geht ist mir aber auch suspekt. Ist das der Quellcode 1:1 übernommen? Und gibst du die Komma-Zahlen auch mit . statt , ein?



  • Selbst wenn scanf nichts einliest, hat Radius irgendein Wert.
    Irgendein Ergebnis muss ausgegeben werden.

    Bleibt das Konsolenfenster denn offen?



  • Ja, das Konsolenfenster bleibt offen. Mit dem Enter zur Bestätigung von scanf () wird immer eine Zeile weiter gesprungen, ohne das sonst etwas passiert.



  • Hast Du icarus' Rat befolgt?



  • Oh, das hab ich überlesen. Jetzt funktioniert es :-).
    Vielen vielen Dank!



  • Ich hätte da noch ein kleines Problem....
    Aufgabe ist es den Mittelwert m und die Varianz v einer Messreihe, messung [], zu berechnen und per Zeiger zurück zu geben.
    Ich bekomme das Programm nicht zum laufen.
    Wäre super, wenn mir nochmal jemand helfen könnte...

    #include <stdio.h>

    void berechne_m_v (double messung [N], double *m, double *v);

    #define N 5

    int main (void)
    {
    double messung [N] = {1.1, 1.5, 1.3, 1.4, 1.7};
    double m, v;

    berechne_m_v (messung,&m, &v);

    printf ("Messwerte: %lf %lf %lf %lf %lf /nAnzahl: %d /nMittelwert: %lf Varianz: %lf"
    , messung [0], messung [1], messung [2], messung [3], messung [4], N, m, v);

    return 0;
    }

    void berechne_m_v (double messung [N], double *m, double *v)
    {
    int i = 1;

    while (i < 2)
    {
    i = i + 1;

    *m = (messung [0] + messung [1] + messung [2] + messung [3] + messung [4])/N;
    }

    while ( i < 3)
    {
    i = i + 1;

    *v = ((messung [0] - *m)+(messung [1]-*m)+(messung [2]-*m)+(messung [3]-*m)+(messung [4]-*m))/(N-1);

    }

    }



  • Bitte verwende cpp-Tags, sonst kann man deinen Code nicht lesen.
    Fuer die Korrektur siehe den Kommentar im Code.

    #include <stdio.h>
    
    #define N 5
    
    void berechne_m_v (double messung [N], double *m, double *v); // Muss nach der Definition von 'N' kommen, da sonst der Compiler nicht weiss, was 'N' ist.
    
    int main (void)
    {
        double messung [N] = {1.1, 1.5, 1.3, 1.4, 1.7};
        double m, v;
    
        berechne_m_v (messung,&m, &v);
    
        printf ("Messwerte: %lf %lf %lf %lf %lf /nAnzahl: %d /nMittelwert: %lf Varianz: %lf"
        , messung [0], messung [1], messung [2], messung [3], messung [4], N, m, v);
    
        return 0;
    }
    
    void berechne_m_v (double messung [N], double *m, double *v)
    {
        int i = 1;
    
        while (i < 2)
        {
        i = i + 1;
    
        *m = (messung [0] + messung [1] + messung [2] + messung [3] + messung [4])/N;
    }
    
    while ( i < 3)
    {
        i = i + 1;
    
        *v = ((messung [0] - *m)+(messung [1]-*m)+(messung [2]-*m)+(messung [3]-*m)+(messung [4]-*m))/(N-1);
    
        }
    }
    

    So sollte es zumindest kompilieren.



  • const unsigned int N = 5U; // oder anderen integralen typen
    

    ist in der Regel besser als

    #define N 5
    


  • Tim06TR schrieb:

    const unsigned int N = 5U; // oder anderen integralen typen
    

    ist in der Regel besser als

    #define N 5
    

    Begründung? (Für den TE 😃 )



  • Sorry, ich habe keine Ahnung was cpp-Tags sind. Bin ein absoluter Neuling in Sachen Programmierung.
    Dein Tip war aber echt gut, vielen Dank 🙂



  • Celia schrieb:

    Sorry, ich habe keine Ahnung was cpp-Tags sind. Bin ein absoluter Neuling in Sachen Programmierung.
    Dein Tip war aber echt gut, vielen Dank 🙂

    Du findest die cpp Tags unter den Smileys. Alternativ kannst du sie auch von Hand tippen
    [cpp*]
    // Hier dein Code
    [/cpp*]
    und dabei einfach das * weglassen.



  • Du hast da diese merkwürdigen while-Schleifen. Haben die einen Zweck?



  • Hacker schrieb:

    Tim06TR schrieb:

    const unsigned int N = 5U; // oder anderen integralen typen
    

    ist in der Regel besser als

    #define N 5
    

    Begründung? (Für den TE 😃 )

    Defines werden Konstanten vielleicht bei der Mikroprozessorprogrammierung vorgezogen, weil man dort wenig Speicher hat und somit erfreut darüber ist, dass man sich Speicher für eine Variable spart, in dem es direkt im Code ersetzt wird. Aber selbst dort, sollte man versuchen es mit Konstanten zu lösen.
    Außerdem und somit viel wichtiger, ist der Scope. Während defines einen global file scope haben, haben Konstanten den Scope, in dem sie definiert werden.



  • Hallo,
    ich möchte den Wert pmax mit hilfe von return an main () zurück geben, das funktioniert aber nicht. Mir wird immer der Fehler: Run-Time Check Failure #3 - The variable 'wmax' is being used without being initialized. angezeigt.
    Was habe ich falsch gemacht?

    #include <stdio.h>

    int maximale_leistung (int drehzahl [19], double drehmoment [19], double *pmax);

    int main (void)
    {
    int drehzahl [19] = {1000, 1500, 2000, 2500, 3000, 3500, 4000, 4500, 5000, 5500, 6000, 6500, 7000, 7500, 8000, 8500, 9000, 9500, 10000};
    double drehmoment [19] = {6., 16., 32., 40., 43., 44., 45., 47., 48., 51., 53.8, 50.1, 48.6, 45.3, 43.9, 38., 29., 21., 17.};
    double pmax;
    int wmax;

    maximale_leistung (drehzahl, drehmoment, &pmax);

    printf ("Maximale Leistung pmax= %.2lf kW\ndazugehoerige Drehzahl wmax: %d U/min\n", pmax, wmax);

    return 0;
    }

    int maximale_leistung (int drehzahl [19], double drehmoment [19], double *pmax)
    {
    double p [19];
    int i;
    int wmax = 0;

    for ( i = 0; i < 19; i++)
    {
    p [i] = (drehzahl [i] * drehmoment [i]) / 1000;

    if ( p [i] > p [i-1] )
    {
    *pmax = p [i];
    wmax = drehzahl [i];
    }
    }
    return wmax;
    }



  • icarus2 schrieb:

    Bitte verwende cpp-Tags, sonst kann man deinen Code nicht lesen.



  • Bitte fang an Codetags zu benutzen. Außerdem suchst du den Fehler an der falschen Stelle. In der main() hast du eine Variable mit dem Namen wmax, welche keinen Wert gesetzt bekommt. In der nächsten Zeile rufst du die Funktion maximale_leistung auf, ohne ihren Wert irgendwo abzuspeichern. Somit bleibt wmax immer noch "wertlos" und versuchst dann im printf() ihren Wert abzufragen.

    wmax = maximale_leistung(drehzahl, drehmoment, &pmax);
    

    Dein Code sieht sehr nach "C/C++" aus, also falsch und eklig. Schau dir doch mal ein paar C++ Codeschnipsel oder Code Konventionen an.



  • Vielen Dank, habe meinen Fehler gefunden.


Anmelden zum Antworten