Aufgabe: Matritzen einlesen ??Speichern der Werte??
-
Hi,
ich habe von meinem Professor die Aufgaben bekommen 2 Matritzen einzulesen und hierraus das Matrixprodukt zu ermitteln.
Meine Frage: Wie kann ich die eingelesenen Werte in die Matrix schreiben?Die Vorgabe:
"Der Zugriff auf die einzelnen Matrixelemente soll durch die beiden Funktionenvoid setzeElement (mat *m, int posx, int posy, int wert); int holeElement (mat *m, int posx, int posy);
realisiert werden."
lg
Hans
-
Hast du eine konkrete Frage oder erwartest du einfach nur, dass dir hier jemand die Hausaufgaben macht?
Siehe die Links in meiner Signatur und den Sticky-Thread "RTFM! Warum dir keiner helfen will".
-
Ich würde mich über einen Tipp freuen wie ich mit dem Problem "einlesen und speichern der Matrixelemente mithilfe von Funktionen" verfahren könnte.
Gibt es schon ähnliche Beiträge?
-
Du liest ein Element ein (woher eigentlich?) und schreibst es mit hilfe deiner Funktion (setzeElement) in die Matrix.
Das machst du innerhalb zweier verschachtelter Schleifen (für Zeilen und Spalten)
-
Die Eingabe erfolgt durch den Benutzer.
So etwas hatte ich mir auch überlegt:
int ieins, izwei; //... if ( ieins = 0, ieins < na, ieins ++) { if (izwei = 0, izwei < ma, izwei ++) { printf("Bitte das Element A(%d,%d) eingeben:", izwei + 1, ieins + 1); scanf("%d", &a[izwei][ieins]); } }
Leider wird hier nur ein Wert eingelesen und die Eingabe beendet.
Hierbei sind ma und na die Dimensionen der Matrix A in der Form m x n.
-
hans123456 schrieb:
int ieins, izwei; //... if ( ieins = 0, ieins < na, ieins ++) { if (izwei = 0, izwei < ma, izwei ++) { printf("Bitte das Element A(%d,%d) eingeben:", izwei + 1, ieins + 1); scanf("%d", &a[izwei][ieins]); } }
Sollen die
if
evtl.for
sein?
Und die Kommas dann Semikolons ?Es gibt keine if-Schleifen.
-
Stimmt, Danke.
Die Eingabe funktioniert soweit wie gewünscht, allerdings wird das Element der Matrix nicht korrekt ausgegeben.
Ist die Speicherung (Zeile 7) so korrekt?int ieins, izwei; //... for ( ieins = 0; ieins < na; ieins ++) { for (izwei = 0; izwei < ma; izwei ++) { printf("Bitte das Element A(%d,%d) eingeben:", izwei + 1, ieins + 1); scanf("%d", &a[izwei][ieins]); } }
-
Wie ist a definiert?
Wie gibst du das aus?
-
Definition a:
int a [5][5]={0};
Ausgabe der Matrix A:
for (idrei = 0; idrei < ma; idrei ++) { for (ivier = 0; ivier < na; ivier ++){ printf("| %d ",a[ma][na]); } printf(" \n"); }
-
Schau mal genau hin.
Du gibst immer nur das Selbe Element aus.
Und das existiert noch nicht mal (wenn ma == mb == 5 ist)
-
Ersetze mb durch na
-
printf("| %d ",a[idrei][ivier]);
-
So,
bin grad dabei eine eigene Bibliothek zu erstellen und möchte dort einen eigenen Datentyp für die Matritzen definieren.
Ich komme zu diesem ergebins in der Headerdatei:typedef struct { int mmatrix, nmatrix, matirx[5][5]; // 5x5-Matrix, Vorgabe } mat;
Die Benutzung des Typs mat soll in der main wie folgt aussehen:
mat matrixA = {0}, matrixB = {0}, matrixC = {0};
Ist diese Schreibweise korrekt?
-
Ja, wen du alles mit 0 initialisiert haben möchtest.
Gibt es Probleme?
-
Ja,
Fehlermeldung Visual Studio Zeile 6: "mat matrix A: Es ist keine passende Konvertierungsform von mat in *mat vorhanden"// Abfrage der Elemente von A und B: for ( ieins = 0; ieins < na; ieins ++) { for (izwei = 0; izwei < ma; izwei ++) { printf("Bitte das Element A(%d,%d) eingeben:", izwei + 1, ieins + 1); scanf("%d", element); setzeElem (matrixA, ieins, izwei, element); } }
Die Funktion:
void setzeElem( mat *m, int posx, int posy, int wert ){ m -> matrix [posx] [posy] = wert ; return; }
Offenbar soll ich einen Zeiger auf die Matrix A (Typ mat) übergeben.
Wie erstelle ich einen solchen Zeiger auf Matrix A?
-
Mit dem Adressoperator &.
Der fehlt auch beim scanf.
In deinem Beitrag vom 16:28:08 05.12.2012 war er noch drin.
-
d.h. es müsste wie folgt funktionieren?
// Abfrage der Elemente von A und B: for ( ieins = 0; ieins < na; ieins ++) { for (izwei = 0; izwei < ma; izwei ++) { printf("Bitte das Element A(%d,%d) eingeben:", izwei + 1, ieins + 1); scanf("%d", &element); setzeElem (&matrixA, ieins, izwei, element); } }
-
Ja.
Aber mit einem Compilerlauf wäre die Frage schneller beantwortet gewesen.
Auch wenn du gleich alles gezeigt hättest. Denn die Fehler lagen bei deinen Problemen nie da wo du sie vermutet hast.
-
Das Programm läuft, vielen Dank für die schnelle Hilfe!