Matrix einlesen für Matrix-Vektor-Multiplikation
-
Hallo,
ich will eine Matrix - Vektor - Multiplikation realisieren. An einer Stelle komme ich nicht weiter, und zwar da wo die Matrix eingelesen werden soll,
Ich habe zuerst folgende Variablen deklariert:int i,j,k,m,n; //Variablen int *a,*b,*c; //Zeiger auf die Felder
Nach Eingabe der Spalten- und Zeilenanzahl habe ich mittels dynamischer Feldvereinbarung die Größe festgelegt:
a=(int*)malloc(m*n*sizeof(int)); //Speicherplatz für a,b,c reservieren b=(int*)malloc(n*sizeof(int)); //a-Zeilen, b-Spalten, c-Vektor c=(int*)malloc(m*sizeof(int)); //a: Matrix
Jetzt habe ich eine Lösung gefunden um die Matrix einzulesen, die auch funktioniert. Ich versteh Sie nicht so ganz:
for(i=0;i<m;i++) //Zeile 0 bis m { printf("\n%d. Zeile",i+1); for(j=0;j<n;j++) //Element 0 bis n (Spalte) { printf("%d. Element: ",j+1); scanf("%d",&a[i*n+j]); } }
Für mich wäre folgendes logisch:
for(i=0;i<m;i++) //Zeile 0 bis m { printf("\n%d. Zeile",i+1); for(j=0;j<n;j++) //Element 0 bis n (Spalte) { printf("%d. Element: ",j+1); scanf("%d",&a[i][j]); // <--- diese Stelle } }
Kann mir das jemand von Euch erklären? Vielen Dank schonmal...
Viele Grüße
Christian
-
Hallo,
mit deiner Allokierung
a=(int*)malloc(m*n*sizeof(int));
erstellst du einen 1 Dimensionalen Array. Deswegen auch nur einmal die [] und nicht zweimal.
-
Danke für die Antwort. Ist es auch möglich Speicherplatz für ein mehrdimensionales Feld zu reservieren? Das wäre für mich logischer. Ich versteh nämlich nicht so ganz dieses
scanf("%d",&a[i*n+j]);
Wieso i*n+j?
Verstehe ich es richtig dass hier alle Zeilen hintereinander in einem eindimensionalen Feld abgelegt sind?Viele Grüße
Christian
-
So ungefähr müßte das IMHO für ein 2-dim. Feld aussehen:
int i; double **A; A = (double **)calloc(m, sizeof(double *)); for( i=0;i<m;i++ ) A[i] = (double *)calloc (n, sizeof(double));
Wobei m Zeilenanzahl, n Spaltenanzahl...
Speicherplatz freigeben:
int i; for( i=0;i<m;i++ ) free (A[i]); free (A);