0c5b1ab0026d2299663f70c14c6af71ffe3b98e7
[my-code/beginners.git] / matrix_mult.c
1 #include <stdio.h>
2
3 int *pelemente, *pmatrix1, *pmatrix2;
4
5 void read_matrix ( int *pzeilen, int *pspalten ) {
6         
7         /* abfragen der anzahl der zeilen und spalten. eintrag auf pointer. */
8         int i,j,temp,zeilen,spalten;
9         printf("Anzahl der Zeilen eingeben: ");
10         scanf("%d",&zeilen);
11         *pzeilen=zeilen; 
12         printf("Anzahl der Spalten eingeben: ");
13         scanf("%d",&spalten);
14         *pspalten=spalten;
15         
16         /* memory allocation */
17         pelemente=(int *)malloc(zeilen*spalten * sizeof(int));
18
19         /* abfragen der elemente */
20         for (i=0;i<zeilen;++i) {
21                 for (j=0;j<spalten;++j) {
22                         printf("Element: %d. Spalte und %d. Zeile: ",j+1,i+1);
23                         scanf("%d",&temp);
24                         /* speichern der elemente */
25                         *(pelemente + i*spalten + j)=temp;
26                 }
27         }
28
29         return;
30 }
31
32 void write_matrix ( int zeilen, int spalten ) {
33
34         /* matrix ausgeben */
35         int i,j,temp;
36         for (i=0;i<zeilen;++i) {
37                 for (j=0;j<spalten;++j) {
38                         temp=*(pelemente + i*spalten + j);
39                         printf("%03d\t",temp);
40                 }
41         printf("\n");
42         }
43         return;
44 }
45
46 int main() {
47
48 int z1,z2;
49 int s1,s2;
50 int i,j,k,ergebnis;
51
52 read_matrix(&z1,&s1);
53
54 pmatrix1=(int *)malloc(z1*s1 * sizeof(int));
55 *pmatrix1=*pelemente;
56
57 free( *pelemente );
58
59 read_matrix(&z2,&s2);
60
61 pmatrix2=(int *)malloc(z2*s2 * sizeof(int));         
62 *pmatrix2=*pelemente;
63
64 free( *pelemente );
65
66
67 if ( s1!=z2 ) {
68         printf("Nicht definiert!\n");
69         return;
70 }
71
72 for (i=0;i<z1;i++) {
73         for (j=0;j<s2;j++) {
74                 for (k=0;k<s1;++k) ergebnis+=(*(pmatrix1 + i*s1 + k) * *(pmatrix2 + k*s2 + j));
75                 *(pelemente + i*s2 + j)=ergebnis;
76         }
77 }
78         
79
80 write_matrix(z1,s2);
81
82 return;
83 }