added string2hex prog (usefull for wep key)
[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 /* welcome */
53 printf("\nMatrixmultiplikation:\n\n");
54
55 /* read matrix1 */
56 printf("Matrix1:\n");
57 read_matrix(&z1,&s1);
58
59 /* save matrix1 for future use */
60 pmatrix1=(int *)malloc(z1*s1 * sizeof(int));
61 for (i=0;i<(s1*z1);++i) *(pmatrix1 + i)=*(pelemente + i);
62
63 /* freeing memory */
64 free( pelemente );
65
66 /* read matrix2 */
67 printf("Matrix2:\n");
68 read_matrix(&z2,&s2);
69
70 /* save matrix2 for future use */
71 pmatrix2=(int *)malloc(z2*s2 * sizeof(int));         
72 for (i=0;i<(s2*z2);++i) *(pmatrix2 + i)=*(pelemente + i);
73
74 /* freeing memory */
75 free( pelemente );
76
77 /* just calculate if it is defined! */
78 if ( s1!=z2 ) {
79         printf("\n...well, i ll calculate it for you,\n\nestimated finish on the answer of the question of what life is all about:\t2323.Jan.15th\nand by the way, thanx for the fish. :)\n");
80         return;
81 }
82
83 /* allocating memory for target matrix */
84
85 pelemente=(int *)malloc(z1*s2 * sizeof(int));
86 /* calculating matrix product */
87 for (i=0;i<z1;i++) {
88         for (j=0;j<s2;j++) {
89                 ergebnis=0;
90                 for (k=0;k<s1;++k) ergebnis+=((*(pmatrix1 + i*s1 + k)) * (*(pmatrix2 + k*s2 + j)));
91                 *(pelemente + i*s2 + j)=ergebnis;
92         }
93 }
94         
95
96 /* printout target matrix */
97 printf("\n\nDie neue Matrix:\n\n");
98 write_matrix(z1,s2);
99 printf("\n");
100
101 return;
102 }