title image


Smiley Re: Probleme mit call-by-reference-Variablen
Hallo,



ich möchte dir zunächst nur einige Hinweise geben, weil mir nicht ganz klar ist, was das Problem ist (wenn es nur das ist, daß es nicht fehlerfrei ist, dann siehe folgende Anmerkungen).



Zunächst schreibst du:



[...]daß für alle Möglichkeiten (also a = 0, b = 0, ..., a != 0, ...) immer 3 Nullstellen (jede Nullstelle mit Real- und Imaginärteil dargestellt) ausgegeben bzw. berechnet werden sollen. Ist die Nullstelle nicht vorhanden, dann soll "nan" berechnet werden.



Das paßt nicht zusammen, da eine kubische Gleichung immer drei Lösungen (dabei zählen Nullstellen eventuell mehrfach, wie bei der Lösung von x3 = 0, diese Gleichung besitzt eine dreifache Nullstelle x = 0) besitzt, wenn man schon im Bereich der komplexen Zahlen arbeitet. Der Fall "nan" (not a number) kann also nie eintreten, aber dann reicht es wohl, eine mehrfache Nullstelle nur einmal auszugeben. Oder war es auch Teil der Aufgabe, das herauszufinden? Egal, jetzt habe ich das "verraten".



Dann nur noch zu den Fehlern:



reschnung (sollte das nicht eher rechnung heißen, oder ist regionaler Dialekt erlaubt?) wurde als Funktion mit 6 Parametern definiert:



void reschnung(double& Re1, double& Re2, double& Re3, double& Im1, double& Im2, double& Im3)



aber die Deklaration:





#ifndef FUNKTIONEN_H_

#define FUNKTIONEN_H_

void reschnung(double a,double b,double c,double d);

#endif /*FUNKTIONEN_H_*/





besitzt nur vier davon, der entsprechende Aufruf in main wird auch mit vier Argumenten ausgeführt, also hier paßt etwas nicht. Vielleicht sollten a, b, c und d auch zusätzlich mit übergeben werden, denn die in reschnung definierten gleichnamigen Variablen "wissen" doch nichts von den Werten, die sie in main bekommen haben. Das könnte ein entscheidender Hinweis sein, wahrscheinlich hattest du es so geplant, zumindest der Aufruf deutet darauf hin.



Und daß der Compiler bei Divisionen durch Null meckert, sollte auch klar sein.



Und hier noch der Code in der Form, wie er hätte ins Forum gestellt werden sollen, damit sich eher jemand damit befaßt (dazu wurde der Code in <pre> und </pre> eingefaßt):





void reschnung(double& Re1, double& Re2, double& Re3, double& Im1, double& Im2, double& Im3)

{

double a;

double b;

double c;

double d;

double D;



if (a==0)

{

if (b==0)

{

if (c==0)

{

Re1 = 0/0;

Re2 = 0/0;

Re3 = 0/0;

Im1 = 0/0;

Im2 = 0/0;

Im3 = 0/0;

}

else

{

Re1 = 0/0;

Im1 = 0/0;

Re2 = 0/0;

Im2 = 0/0;

Re3 = -(d/c);

Im3 = 0;

}

}

else

{

if (c==0)

{

Re1 = 0/0;

Im1 = 0/0;

Re2 = 0/0;

Im2 = 0/0;

D = -(d/b);



if (D > 0)

{

Re3 = sqrt(D);

Im3 = 0;

}

else

{

D = -D;

Re3 = 0;

Im3 = sqrt(D);

}

}

else

{

}



}

}

else

{

if (b==0)

{

if (c==0)

{

}

else

{

}

}

else

{

if (c==0)

{

}

else

{

}

}

}

}





geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: