Matrizenrechnung: Vektoren oder Variablen?
-
Dafür gibts std::valarray, das ist eine gute Grundlage dafür.
Ansonsten fang doch einfach mal mit normalen Variablen an, anstelle von Arrays. Ich wünsch dir viel Spaß dabei

-
Tippgeber schrieb:
Dafür gibts std::valarray, das ist eine gute Grundlage dafür.
Ansonsten fang doch einfach mal mit normalen Variablen an, anstelle von Arrays. Ich wünsch dir viel Spaß dabei

wie benutzt man valarray ist das ähnlich wie ien ganz normales array?
-
Sowohl C-Arrays als auch
std::valarrayscheinen mir der falsche Ansatz.Du brauchst ja nicht beliebig-dimensionale Vektoren und Matrizen, oder? Wenn du zum Beispiel nur die zweite Dimension benötigst, würde es sich unbedingt lohnen, dafür eine eigene Klasse zu schreiben. Dann kann man auch schön die Operatoren überladen und alles wird korrekt ausgerechnet. Ausserdem muss man sich nicht mit Dingen herumschlagen, die man nicht benötigt (bei
std::valarray). Wenn die Dimension anpassbar sein soll, sind dafür Templates geeignet.Im Weiteren ist die Implementierung einer eigenen Klasse eine gute Übung, um einige Konzepte von C++ kennen zu lernen und zu vertiefen...

-
also ist es für einen c++ laien zu schaffen ? oder habe ich mir da zu viel vorgenommen?
-
Also ich finde es recht einfach, solange man nicht in zu komplexe Themengebiete hineingerät

-
Viel schon - aber nicht unendlich zu viel ^^ das ganze hat ja den vorteil, dass man erst mal nur die beiden ineinander verschachtelten arrays (statisch) anlegen kann, dann mit templates beschäftigen, ein template draus machen. dann implementiert man + und -, dann schlägt man sich viel mit der mathematik hinter * und / rum und wenn man das versteht und dann noch lust hat, kann man das ja noch implementieren... ist denke ich nen gutes projekt, um seine programmier-kenntnisse zu verbessern (fett, da man vll wenigstens wissen sollte, was klassen sind, was funktionen, construktoren, member etc sind)...
guck dir einfach mal templates an und dann kannst du ja als template-argumente die beiden dimensionen angeben...
hätte den nachteil, dass man dann kein programm machen kann, á la:
geben sie an, wie breit die matrix sein soll o.ä.dann wäre std::valarray wahrscheinlich schon besser... aber mit std::vector machst du auch nichts grundsätzliches falsch...
bb

-
ja danke ich wollte sowieso vllt zuerst es so machen das man zwei matrizen mit 3 spalten und 3 zeilen miteinander multipliziert
-
Templates würde ich erst am Schluss erledigen. Meiner Ansicht nach ist Operatorüberladung grundlegender und für diese Thematik auch von grösserer Bedeutung. Auch das mit dem verschachtelten Zugriff über
operator[]würde ich vorerst lassen und über eine Funktion realisieren.Eine Klasse für 3x3-Matrizen ist nicht einmal so schwer, und sehr lange hat man dafür auch nicht. Im Gegenzug sammelt man bei praktischen Anwendungen wie diesen enorm viel Erfahrung. Aber wie unskilled gesagt hat, sollte man sich zuerst mit Klassen, Konstruktoren, Methoden und überladenen Operatoren auseinander setzen.
-
statisches Array?
Ich hör wohl nicht recht.
Was machst du, wenn du 2 Matrizen erzeugst?
-
vlad_tepesch schrieb:
statisches Array?
Ich hör wohl nicht recht.
Was machst du, wenn du 2 Matrizen erzeugst?meinst du das man arrays später nicht mehr ändern kann
daran hab ich noch nicht gedacht ^^ dann wären vektoren wohl besser
-
vlad_tepesch schrieb:
Was machst du, wenn du 2 Matrizen erzeugst?
hum?
ich erstelle 2 instanzen der matrizen-klasse ^^bb
-
Eine Matrixklasse ist eindeutig das Beste, vor allem wenn die Dimensionen fix sind. Man ist einfach am flexibelsten, kann seine Methoden und Operatoren hinzufügen, und weiss auch genau, was intern abläuft.
std::vectorund Co. sind als Container konzipiert und haben als solche die Aufgabe, mehrere Werte gleichen Typs zu speichern und die Speicherverwaltung abzunehmen. Sie unterstüzen aber keine mathematischen Funktionen. Aus diesem Grund würde der Versuch, sie als Matrizen zu missbrauchen, auch unweigerlich in einem Riesengefrickel enden.Wenn man später den Weg zu n*m-dimensionalen Matrizen einschlagen will, kann man immer noch intern
std::vectorverwenden, weil die Dimension erst zur Laufzeit feststeht. Aber eben intern. Eine Klasse aussen rum sollte schon bestehen.