Komplexe Zahlen, Ein- und Ausgabe - Hilfe gesucht!
-
Die langen Zahlen sind ja vor dem Komma. Was steht denn in der Variablen wirklich drin?
-
Wie meinst du das?
Bei der Eingabe wähle ich ja Werte für a und b.
Gerne würde ich das Beispiel
a= 1.00 + 1.00 i und
b= 1.00 - 1,00 i
durchrechnen.
Aber wenn ich die Werte so eingebe, gibt es mir ja für "a=" und "b=" schon ganz andere (abstruse) Zahlen aus.
-
mgaeckler schrieb:
Hallo,
lies Dir doch mal bitte die Beschreibung des Formatstrings bei scanf durch.
%d gibt an, daß Du einen int einlesen will. scanf erwartet daher die Adresse eines ints. Du übergibst aber die Adresse eines doubles. Korrekt wäre der Formatstring "%f".
mfg Martin
Das ist noch immer nicht ganz richtig. Tatsächlich handelt es sich bei %f um ein float. Er rechnet jedoch mit einem double. Korrekt wäre daher "%lf".
Maya, warum liest du deine Werte eigentlich zunächst in eine Variable ein, um sie dann einer anderen zuzuweisen? Wie wäre es damit:
scanf("%lf", &a.re);
Wie auch immer... Probier mal das aus.
int main() { COMPLEX a, b, x; // Einlesen der beiden Zahlen mit der Konsole printf("Das Programm fuehrt Rechenoperationen mit zwei komplexen Zahlen aus.\nGeben Sie fuer Zahl a den Realteil ein: "); scanf("%lf", &a.re); printf("Geben Sie den Imaginaerteil ein: "); scanf("%lf", &a.im); printf("Geben Sie den Realteil fuer die zweite Zahl b ein: "); scanf("%lf", &b.re); printf("Geben Sie den Imaginaerteil ein: "); scanf("%lf", &b.im); printf("a = %.2lf + %.2lf i\n", a.re, a.im); printf("b = %.2lf + %.2lf i\n", b.re, b.im); x=addiere(a,b); printf("a+b = %.2lf + %.2lf i\n", x.re, x.im); x=subtrahiere(a,b); printf("a-b = %.2lf + %.2lf i\n", x.re, x.im); x=multipliziere(a,b); printf("a*b = %.2lf + %.2lf i\n", x.re, x.im); /*x=diviere(a,b); printf("a/b = %.2lf + %.2lf i\n", x.re, x.im); x=betrag(a); printf("Der Betrag von a ist %.2lf\n", x);*/ }
-
Hallo Unbekannter,
den Umweg über die Variablen hatte ich ursprünglich gemacht eben weil das Problem mit dem Einlesen aufgetreten ist. (Ich dachte vielleicht kann ich nicht direkt in a.re schreiben.)
Anscheind lag es tatsächlich an dem lf-Problem, denn jetzt werden die Zahlen richtig eingelesen. VIELEN LIEBEN DANK!
Das richtige Ergebniss kommt aber dennoch nicht raus.Bei x= dividiere(a,b) und x=betrag(a) habe ich außerdem noch das Problem, dass beim Komplilieren immer die Fehlermeldung "incompatible types in assignment" erscheint.
-
Bei der Funktion betrag bekommst du einen Fehler, weil sie ein float zurückgibt und du versuchst daraus ein COMPLX zu machen. Das haut natürlich nicht hin.
Die Zuweisung x = dividieren(a, b) müsste aber funktionieren, schließlich gibt die Funktion im Gegensatz zu betrag ein COMPLEX zurück.
Warum die richtigen Ergebnisse nicht raus kommen, weiß ich leider nicht, da ich den Umgang mit Komplexen Zahlen nie gelernt habe. Ich habe also keine Ahnung, wie das korrekte Ergebnis lauten müsste.
-
Mit den Ergebnissen werde ich mich nochmal auseinander setzen. Hauptsache er rechnet überhaupt mal was.
-
Ich soll noch zwei komplexe Vektoren (d.h. wohl dass jeder Eintrag auch Real- und Imaginärteil hat) einlesen.
Ich habe mir zwei Arrays mit Länge dim definiert:
COMPLEX c[dim], d[dim];Nun möchte ich mittels einer for-Schleife die Werte einlesen.
Wie kann ich sagen, dass er den Realteil eines Wertes i speichern soll?scanf("%lf",&c[i.re]);
und
scanf("%lf",&c.re[i]);
funktionieren nicht und kommen mir auch sehr mysteriös vor...
-
Versuch mal
scanf("%lf", &c[i].re);
-
Danke. Hat funktioniert.
Das Programm ist jetzt soweit fertig, kompiliert und läuft.
Nur leider wird dividiere immernoch nicht akzeptiert. WAH!
-
Ich möchte wetten, dass diese ganzen Probleme auch als Warnung ausgegeben wurden. Mindestens aber die "Typumwandlungen".
Schau dir mal deine Warnungen an, vielleicht würde das schonmal helfen. Nur weil man sie ignorieren kann heißt das nicht, dass man das auch sollte.