Matrix Eingabemaske
-
Moin erstmal.
Ich benötige ein wenig Hilfe bei einer Eingabemaske einer Matrix.
Und zwar soll die Matrix so eingegeben, dass sowohl nur relle Zahlen, als auch kompexe Zahlen, als auch Büche eingegeben werden können.
Das ganze soll mit Klassen geschehen.Es dient dafür, das ich Matrixoperationen durchführen kann, z.B Multiplikation, Inversin, Determinanten, ...
mittels Ableitungen und und undDa ich eigentlich nicht so in c++ bewandert bin, eigentlich gar nicht
, frage ich euch, ob ihr mir bei diesem Projekt helfen könnt, auch das ich mich dadurch ein wenig in C++ zurechtfinden kann. 
Danke schon einmal für eure Mühen
MfG
HugoEA
-
Guten Morgen.
Wie bewandert bist du denn, hast du schonmal nen hello world geschrieben ?
-
naja, bewandert
hatte mal vor ein paar Jahren Pascal gehabt, mit Java geht es einigermassen, dann gibt es bei mir noch Webprogrammierung mit PHP/Html/CSS und ein wenig JS.Also ein "Hello World" bekomme ich noch zusammen.
Mein Problem besteht eher im Verständniss von C++.
Wir haben es jetzt fast ein Semester.
Und ich verstehe das mit den Klassen einfach nicht, wie z.B. mit der Eingabe.
Also, man hat 1ne Eingabe, da kann man 3 unterschiedliche Typen eingeben und weiterrechen, das ist mir zu hoch.
-
Nagut und was verstehst du unter Eingabemaske ? Sowas ist meist ne grafische Oberfläche und ist vom Betriebssystem abhängig.
Oder willst du die Komplexen Zahlen in der Konsole eingeben ?
-
Ich denke mal in beiden Fällen kommst du nicht drum herum, die Zahlen für die Matrix erst einmal als einen String einzulesen und dann zu prüfen, ob es ne Komplexe Zahl ist.
Ne bessere Lösung fällt mir im Moment nicht ein.
-
Oder vielleicht noch im Falle der Eingabe über Konsole Realteil und Imaginärteil getrennt.
Ansonsten verfügt die C++ Bibliothek über eine Klasse mit Komplexen Zahlen.
Die Klasse hat auch überladene Operatoren für die gängisten Rechenarten mit diesen komplexen Biestern.Dann müsstest du dich noch genauer ausdrücken, wie deine Aufgabenstellung aussieht, ob z.B. die Matrixoperationen als Methoden in einer Klasse gekapselt werden sollen usw.
Starthilfe:
#include <iostream> #include <complex> using namespace std; int main() { complex < double > cpx1( 1.0, 1.0 ); complex < double > cpx2; cpx2 = cpx1; cout << cpx2; cpx2 *= 2; cout << cpx2; return 0; }Gruß,
p.
-
das ganze soll in der Shell/CMD laufen
Eingabemaske, ich habe es mir so gedacht gehabt, weil es ja c++ angeblich können soll, dass das prog automatisch an der eingabe erkennt, ob es eine Koplexe Matrix werden soll, oder nur eine "Normale"z.B. kann man es ja so machen, das man von vornherein ausgeht, das es komplexe Zahlen sind, die man eingibt (a+jb)
jetzt kann man ja z.B. den Imaginärteil weglassen.
Wenn man in der Matrix nur reelle Anteile hat, braucht man ja keine Komplexe Multiplikation, bzw. Division, was die ganze Sache schon vereinfacht.
Andersherum wird es ja schon zu einer Komplexen Matrix, wenn man nur eine Komplexe Zahl eingibt.Implementieren Sie ein System zur algebraischen Behandlung von Matrizen.
Folgende Operationen sollen realisiert werden
• Matrix-Multiplikation
• Vektor-Multiplikation
• Gauß-Elimination (Lösung von linearen Gleichungssystemen)
• Deteminantenberechnung
• Matrix-Inversion
• Eigenwert- und Eigenvektor-Berechnung (numerisch)
Implementieren Sie das System so, daß Matrizen verschiedener Dimension,
auch nicht-quadratische behandelt werden können (für das Eigenwert- und
Eigenvektor-Problem sind die Matrizen als quadratisch vorausgesetzt). Sehen
Sie verschiedene Typen von Matrizen vor (reele, komplexe). Implementieren
sie die Ein- und Ausgabefunktionen für das System.Das ist die eigentliche Aufgabenstellung.
Mein Part hierbei ist die Eingabe zu realisieren, die Determinantenberechnung und die Matrix-Inversion, da die Inversion ja schon die Determinantenberechnung beinhaltet.
-
Ja gut und wie sehen deine bisherigen Bemühungen aus ? ( Quellcode ) Hast du schon geschafft, eine Zahl einzulesen und diese in der Konsole auszugeben ?
-
jup, also die Eingabe einer Matrix , bzw, einer Komplexen Zahl in der Form a_+ib habe ich schon (Haben wir in einer Übung gemacht), aber zusammen bekomme ich es nicht.
#include <iostream> using namespace std; int main() { const int max_dim=12; // Maximale Dimension typedef double matrix[max_dim][max_dim]; // neuer Typ matrix matrix testmatrix; int dim_zeilen, dim_spalten, zeile, spalte; char q; // Damit das Konsolen-Fenster nicht schliesst do { cout << "#Zeilen und #Spalten (min. 1, max. " << max_dim << "): "; cin >> dim_zeilen >> dim_spalten; } while ((dim_zeilen < 1 || dim_zeilen > max_dim) || (dim_spalten < 1 || dim_spalten > max_dim)); // Eingabe for(zeile=0; zeile<dim_zeilen; ++zeile) { cout << "Matrix[" << zeile+1 << "][1.." << dim_spalten << "] ? "; for(spalte=0; spalte<dim_spalten; ++spalte) cin >> testmatrix[zeile][spalte]; } cout << endl; // Ausgabe cout << "Ihre Matrix:" << endl; for (zeile=0; zeile<dim_zeilen; ++zeile) { for (spalte=0; spalte<dim_spalten; ++spalte) cout << testmatrix[zeile][spalte] << '\t'; cout << endl; } cout << "'q' zum Beenden eingeben." << endl; do q=cin.get(); while(q != 'q'); // 'q' eingeben zum Beenden des Programms return (0); }und dieses Bsp habe ich zur ein, bzw. ausgabe von Kompl. Zahlen
#include <cstdlib> #include <iostream> #include "cplcl.h" using namespace std; int main(int argc, char *argv[]) { complex a; cout << "Gib eine komplexe Zahl ein (x +i*y): "; cin >> a; cout << "a = " << a << endl; system("PAUSE"); return (0); }cplcl.h:
using namespace std; class complex { private: double re, im; // Real-, Imaginaerteil public: complex () // Konstruktor { re = 0.0; im = 0.0; }; friend istream& operator >> (istream& is, complex& z); friend ostream& operator << (ostream& os, const complex& z); };cplcl1.cpp
#include <iostream> #include "cplcl.h" using namespace std; // Einagbe von komplexen Zahlen istream& operator >> (istream& is, complex& z) { char c[3]; is >> z.re >> c[0] >> c[1] >> c[2]; if (!(c[0] == '+' && c[1] == 'i' && c[2] == '*')) { cerr << "Input error complex" << std::endl; system("PAUSE"); exit(1); } else { is >> z.im; } return is; } // Ausgabe von komplexen Zahlen ostream& operator << (ostream& os, const complex& z) { os << z.re << "+i*" << z.im; return os; }
-
Aaaaach sooo, ihr sollt eine eigene Klasse für die Komplexen Zahlen schreiben.
Naja, da solltest du wohl erstmal einen anderen Namen für die Klasse wählen, weil der Name complex bereits vergeben ist und es daher zu Konflikten kommen kann.
... aber zusammen bekomme ich es nicht.
Angenommen, du nennst deine Klasse my_complex und die zugehörige Headerdatei my_complex.h, dann kannst du deine Klasse mit
#include my_complex.hin dein main-Programm einbinden.
Oki doki und dann kannst du in deinem main-Programm
diese Zeile: typedef double matrix[max_dim][max_dim];
rausschmeisen und ersetzen mit:
my_complex testmatrix[max_dim][max_dim];
Damit erzeugst du eine Matrix mit Objekten deiner my_complex Klasse und
kannst sie mit Ihhalt füllen.Die Zeile: matrix testmatrix;
Kann dann ganz rausfliegen.Gruß, p.
-
moin
naja, hier mal ein Teil des Bewertungsprinzips:Objektorientierte Realisierung (20 Prozent):
--------------------------------------------
durchgängig Klassen verwendet, Problem in mehreren Klassen abgebildetsinnvolle Datenkapselung (z. B. interne Daten einer Klasse als private deklariert, Zugriffsmethoden implementiert)
Vererbung sinnvoll verwendet
generische Programmierung (Templates) sinnvoll verwendet
Laufzeitfehler sinnvoll behandelt (Exception-handling)
Verständlichkeit der Implementierung (20 Prozent)
-------------------------------------------------
aussagekräftige Bezeichner für Typen, Variablen, Funktionen und
Klassen verwendetDatenstrukturen einfach gehalten
Programm-Code angemessen kommentiert
Verschachtlungstiefe in Auswahlen (if, switch) und Schleifen (while dowhile,
for) gering, keine SprüngeSinnvolle, schmale Schnittstellen bei Klassen und Funktionen, lose
Kopplungkurze Funktionsimplementierung, Funktionalität auf viele Funktionen
aufgeteilt
-
Na dann mal toi toi toi und ran an die Tasten

In Sachen Templates, Exceptions usw. helfen dir hier die Profis sicherlich gern weiter, denn diesbezüglich sind meine Kenntnisse nicht so doll.
Gruß,
p.
-
juhu, die Eingabe es geht

habe aber noch etwas, und zwar, sollen auch nur relle eingaben gemacht werden können, also nicht nur komplexe zahlen
wie funktioniert das?
weil wenn ich jetzt nur relle zahlen eingeben möchte, meckert das programm und beendet???
-
Hi,
supie das es funzt !Das das Programm bei der Eingabe reeller Zahlen meckert ist kein Wunder, denn das hast du ihm mit unten stehender Anweisung beigebracht:
...
if (!(c[0] == '+' && c[1] == 'i' && c[2] == ''))*
...Sinnvoll wäre da, für den Imaginärteil Null zuzulassen, dann ist es ja eine reelle Zahl.

Gruß,
p.
-
wäre es nicht besser, die Fehlerausgabe:
cerr << "Input error complex" << std::endl; system("PAUSE"); exit(1);umzuschreiben in:
z.im=0;oder funktioniert das so nicht?
-
Ja, warum nicht, das ist deine freie Wahl.
Ich finde es jedoch übersichtlicher, wie es der 'große Bruder' macht, also die
Klasse complex der C++ Bibliothek.
Eine Zahl mit Imaginärteil gleich Null sieht dann so aus: ( Re, 0 )Das ist natürlich dir überlassen wie du das möchtest.
-
habe es mal ausprobiert

geht leider nicht so richtig
#Zeilen und #Spalten (min. 1, max. 12):2 2 Matrix[1][1..2] ? 1 2 3 4 5 6 7 8 Matrix[2][1..2] ? 3 4 5 6 7 8 9 0 Ihre Matrix: 1+i*0 5+i*0 3+i*0 7+i*0 'q' zum Beenden eingeben.gibt es eine Übersicht zu der Klasse?
-
Geh doch mal eine Seite zurück, da ist doch das kleine "Starthilfe" Beispiel.
Die Übersicht gibts, bestimmt auch in deiner Kompiler-Bibliothek.
-
ja, hi. das zitat aus der aufgabenstellung kommt mir aber seeeeeeehr bekannt vor
du studierst nicht REIN zufällig an der FH jena oder? u wenn doch hattet ihr scho präsentation?