Problem mit Aufgabe



  • Hi Leute

    Ich hab da ein "Problem", weiss nicht genau ob es eins ist, mit einem Programm. Wir haben dieses Jahr, im 3. Semester in der Schule, mit der Programmiersprache C++ angefangen. Ist eigentlich auch sehr interessant und werd mich denke ich mal auch weiterhin ein bißchen damit beschäftigen. In der letzten Stunde haben wir mit Sequenzen angefangen und haben dazu auch eine Hausaufgabe aufbekommen.

    Dies ist die Aufgabe:

    Erstellen Sie ein Struktogramm, eine Variablenwertetabelle und ein C + +-Programm, sodass für eine Kupferleitung nach Eingabe von Durchmesser, Länge und anliegender Spannung die Stromstärke mit zwei Nachkommastellen ausgegeben wird, um den Stromkreis entsprechend abzusichern.
    Beispiel: d ? 4 mm, L ? 12 000 m, U ? 380 V

    Nach kurzer Zeit fand ich die nötigen Formeln im Tafelwerk und machte mich ans Schreiben. War auch nicht so das Problem, das Programm funktioniert auch, nur bekomm ich als Eregebnis 0.00 raus. Vll stimmt das Ergebnis ja auch so, aber kann mir das net vorstellen ^^

    Hier der C++ Code

    #include <iostream.h>
    #include <iomanip.h>
    #include <math.h>
    
    void main()
    {
    	double d, l, U, I, R, A;
    	const double CuWel=0.0172;
    	const double PI=3.141592654;
    
    	cout <<"Bitte geben sie zunaehst den Durchmesser (d in Meter), die Laenge (l in Meter)  und die Spannung (U in Volt) an!\n" <<"d = ";
    	cin  >>d;
    	cout <<"l = ";
    	cin  >>l;
    	cout <<"U = ";
    	cin  >>U;
    	cout <<endl;
    
    	A=1/4*PI*pow(d,2);
    	R=CuWel*l/A;
    	I=U/R;
    
    	cout.setf(ios::fixed);
    	cout<<setprecision(2);
    
    	cout <<"Die Stromstaerke betraegt " <<I <<" Ampere\n\n";
    

    Wäre schön, wenn einer einen Rat weiss oder mir bestätigen kann, dass beim Ergebnis wirklich 0.00 rauskommt.

    mfg



  • Mach es mal statt

    A=1/4*PI*pow(d,2);
    

    so:

    A=PI*pow(d,2)*1/4;
    

    Hab grad keine Zeit zum Erklären, vielleicht später 😉



  • Komm doch noch kurz dazu 🙂

    Wenn das 1/4 ganz links steht, fängt er mit dieser Berechnung an.
    Da es int Werte sind, also ohne Dezimalstellen, wird gerundet:
    1 / 4 = 0.25 ≈ 0

    Wenn das 1/4 ganz rechts steht, wird zuerst PI*pow(d,2) berechnet, und da hier Kommazahlen im Spiel sind, rechnet er auch mit Komma weiter.

    Alternativ zu

    A=PI*pow(d,2)*1/4;
    

    kannst du auch

    A=1.0/4.0*PI*pow(d,2);
    // hier werden explizit Dezimalstellen angegeben
    

    oder

    A=(double) (1)/4*PI*pow(d,2);
    // cast
    

    schreiben



  • oder auch:

    A=PI*pow(d,2)/4;
    

    (btw, das pow() ist an der Stelle vermutlich Overkill - schneller geht's mit 'd*d')



  • danke leutz, werds mal ausprobieren 🙂


Anmelden zum Antworten