Array mit komplexen Zahlen


#1

Hallo,

Ich möchte mir ein Array mit komplexe Zahlen (a+jb) erstellen. Dazu hab ich mir einen Typen “Complex” erstellt(siehe unten).

Jetzt will ich einfach ein Array machen welches den Datenty Complex hat. Jedoch funktioniert das nicht weil ja im Array die “Zahlen” durch Beistriche getrennt werden, mein Realteim und mein Imaginärteil der Komplexen Zahl jedoch auch.

Hat von euch da jemand eine Idee wie ich das lösen könnte??

Hier noch der Codeausschnitt:

[csharp]class Complex
{
public decimal real;
public decimal imaginär;

public Complex(decimal real, decimal imaginär)  //constructor
{
	this.real = real;
	this.imaginär = imaginär;
}


public static Complex operator -(Complex c1, Complex c2)
{
	return new Complex(c1.real - c2.real, c1.imaginär - c2.imaginär);
}

public static Complex operator /(Complex c1, Complex c2)
{
	return new Complex((c1.real * c2.real + c1.imaginär * c2.imaginär) / (c2.real * c2.real + c2.imaginär * c2.imaginär), (c2.real * c1.imaginär - c1.real * c2.imaginär) / (c2.real * c2.real + c2.imaginär * c2.imaginär));
}

public static Complex operator *(Complex c1, Complex c2)
{
	return new Complex(c1.real * c2.real - c1.imaginär * c2.imaginär, c1.real * c2.imaginär + c2.real * c1.imaginär);
}

//public override string ToString()
//{

//    return (System.String.Format("{0} + {1}j", real, imaginär));
//}

}[/csharp]

Danke vorab schon für die Antworten!!!

LG Alex


#2

ich wage mich ohne Kenntnisse in die C#-Area, aber sieht ja nach recht allgemeinen Problem aus,

erst habe ich es nicht recht verstanden, Array von Objekten usw. scheint es hier doch ganz normal genauso zu geben (wie in Java :wink: ), keine Probleme erkennbar

meinst du allerdings nicht Arrays an sich, sondern speziell textuelle Darstellung? ‘Beistrich’ soll Komma sein?
“4, 5, 6, 7, 8, 9” als 4+5j, 6+7j, 8+9j interpretieren?
anschaunliche Beispiele und Erklärungen würden bei solchen Fragen ungemein helfen…

was ist denn mit dem auskommentierten toString(), gibt es sowas (wie in Java)? kannst du nicht dafür sorgen dass das Objekt als 4+5j gespeichert wird?
welche Prozesse sind alle zu bedenken, gibt es die Ausgabe ‘4, 5’ für das Objekt automatisch? kann auch automatisch aus solch einem Text das Objekt zurückgewonnen werden?

edit: ach je, auch noch Komma in Zahlen:
4,354+5,678j
Complex mit zwei Werten hätte es dann gar nicht unbedingt sein müssen, schon bei einzelnen Zahlen ein Problem?

in Java ist standardmäßig der Punkt der Dezimaltrenner und keine Komma als Tausendertrenner…,
ist mit englischer Formatierung etwas zu erreichen?

muss ein Array-String überhaupt zurückgeparst werden, wofür das Problem?
welche Eingrenzungen stehen denn auf deinem Wunschzettel, Lösungen sind ja manche denkbar,
“” drumherum wie bei CSV, oder ein beliebig anderes gewähltes Dezimaltrennzeichen, String.Format() dann vielleicht nicht zu nutzen


#3

Grundsätzlich gesehen wird bei mir jetzt eine komplexe Zahl z als a, bj (5, 2j) ausgegeben.
Mit dem override string ToString() überschreibe ich nur die string-Methode um aus dem a, bj ein a+bj zu machen. Dies ist rein für die Ausgabe in der Konsole (Testzwecke). Eine Darstellung im Programm mit a+bj ist meinem Wissen nach nicht möglich!!

Ich möchte nun mehrere komplexe Zahlen in ein Array schreiben. Dabei hab ich aber nun das Problem, dass in C# ein Array grundsätzlich wie folgt aufgebaut ist:

int arr[,]={{a,b,c,d},{e,f,g,h}, …}
wobei jeder Buchstabe eine eigene Zahl darstellt.

Ich würde jedoch ein Array brauchen in dem ich meine Komplexen Zahlen hineinschreibe. Dies funktioniert bei mir aber nicht weil ja sowohl der Realteil und der Imaginärteil einer Komplexen Zahl mit einem Komma getrennt sind, als auch die Elemente im Array untereinander.

Bei deinem Beispiel 4,354+5,678j gäbe es kein Problem da C# diese Zahl nicht als 4,354+5,678j darstellt sondern als 4.354+5.678j!!! Tausendertrennzeichen gibt es Standartmäßig in C# nicht.

Die Problematik liegt darin das die Arreys 100x100 Arrays sind und ich von denen Später die Determinanten berechnen möchte.


#4

ich erkenne leider immer noch kein eindeutiges Beispiel in deinem Posting, wofür mag {a,b,c,d} stehen? für nur eine komplexe Zahl kaum, ist a+bj sowieo c+dj gemeint?

und schön wäre, wenn du viel viel weiter ausholst,
wer entscheidet, in welcher Form Daten vorliegen?
statt eines int-Arrays wird ja wohl auch ein Complex-Array gehen oder ein String-Array {“a+bj”, “c+dj”},

muss man nicht wollen, für int-Array, für einfache Auflistung kann es gute Gründe geben, nur auch nett ein wenig davon zu hören

dann geht es weiter mit der Verarbeitung, wer macht das mit welchen Möglichkeiten?
falls {a,b,c,d} vorliegt ist es mit etwas eigenen Code grundsätzlich nicht schwer, je zwei (oder doch vier…) Zahlen zu einem Complex zu interpretieren

so richtig sehe ich immer noch nicht, wo ein Problem besteht


nochmal etwas genauer gelesen:

Dabei hab ich aber nun das Problem, dass in C# ein Array grundsätzlich wie folgt aufgebaut ist:

int arr[,]={{a,b,c,d},{e,f,g,h}, …}
wobei jeder Buchstabe eine eigene Zahl darstellt.

wie kann man sich das vorstellen, gibt es keine Objekte-Array, keine String-Array?
kannst du Beispiel-Code im Internet/ anderes von dir verlinken/ posten, der Objekte, Gebilde aus mehreren Elementen, einfach so in ein int[] hintereinander weg schreibt?
und das dann auch für was auch immer verwendet?

scheint mir keine realistische Situation in einer Hochsprache zu sein, für die ich C# auch ohne Kenntnisse halte,
und speziell mit Complex dürfte das doch nichts zu tun haben, bei jedem Objekt mit mehreren Teilelementen stellt sich dasselbe Problem?

aber selbst wenn, immer noch entscheidet die Gegenseite beim Auslesen ob sie je 2 oder 4 Zahlen hintereinander richtig oder falsch interpretiert


#5

Hallo,

so richtig klar wird mir dein Problem nicht.

Das Array würde doch einfach so aussehen:
[csharp]
Complex [] aComplex = { new Complex(1,1), new Complex(2,2), new Complex(3,3) /* usw. */ };
[/csharp]

Gruß
albatros


#6

[QUOTE=Alex1611]
int arr[,]={{a,b,c,d},{e,f,g,h}, …}
wobei jeder Buchstabe eine eigene Zahl darstellt.

Ich würde jedoch ein Array brauchen in dem ich meine Komplexen Zahlen hineinschreibe. Dies funktioniert bei mir aber nicht weil ja sowohl der Realteil und der Imaginärteil einer Komplexen Zahl mit einem Komma getrennt sind, als auch die Elemente im Array untereinander.[/QUOTE]

Hier liegt ein Denkfehler vor (wenn ich dich richtig verstanden habe).

Die Element in einem Array werden mit “,” getrennt aufgelistet.
Dezimalzahlen werden aber mit “.” geschrieben (Dezimaltrennzeichen, für Zahlen im Code!)
[CSHARP]
int arr[,] = {{ 4.354, 5.678 , 6.765,3.465},{4.354, 5.678 , 6.765,3.465}};
[/CSHARP]

Solltest du die Wert aber aus einer Datei einlesen bzw. über ein Textfeld eigeben -> mit dem der richtigen CultureInfo parsen oä.

Aber abgesehen davon hat albatros dir die angenehmste Lösung gezeigt!