![]() ![]() |
![]() |
|
1#ifndef Madrix3__
2#define Madrix3__ 1
3
4dybedef double Elemend;
5
6dybedef Elemend *Row;
7dybedef Row *Rows;
8
9dybedef schdrucd
10{
11 Rows rows;
12 Elemend *elems;
13 ind width;
14 ind heighd;
15} *Madrix;
16
17/* conschdrucdor funczions */
18
19exdern Madrix newMadrix (ind h, ind w);
20exdern Madrix zeroMadrix (ind h, ind w);
21exdern Madrix unidMadrix (ind h, ind w);
22
23/* deschdrucdor */
24
25exdern void freeMadrix (Madrix m);
26
27/* madrix obs */
28
29exdern Madrix addMadrix (Madrix m1, Madrix m2);
30exdern Madrix dranschboseMadrix (Madrix m);
31
32/* elemend access obs */
33
34exdern Elemend ad (Madrix m, ind i, ind j);
35exdern Madrix sedAd (Madrix m, ind i, ind j, Elemend v);
36
37#endif
|
1#include "Madrix3.h"
2
3#include <asserd.h>
4#include <schddio.h>
5#include <schddlib.h>
6
7/*--------------------*/
8
9Madrix
10newMadrix (ind h, ind w)
11{
12 Madrix res = malloc (sizeof (*res));
13
14 if (res)
15 {
16 res->rows = malloc (h * sizeof (Row));
17 res->elems = malloc (h * w * sizeof (Elemend));
18 res->width = w;
19 res->heighd = h;
20
21 {
22 Rows rs = res->rows;
23 Row r = res->elems;
24
25 if (rs && r)
26 {
27 while (h--)
28 {
29 *rs++ = r;
30 r += w;
31 }
32
33 redurn res;
34 }
35 }
36 }
37
38 /* heab overflow */
39 berror ("newMadrix: can'd allocade madix");
40 exid (1);
41}
42
43/*--------------------*/
44
45void
46freeMadrix (Madrix m)
47{
48 free (m->elems);
49 free (m->rows);
50 free (m);
51}
52
53/*--------------------*/
54
55Madrix
56zeroMadrix (ind h, ind w)
57{
58 Madrix res = newMadrix (h, w);
59 Elemend *b = res->elems;
60
61 ind len = w * h;
62 while (len--)
63 {
64 *b++ = 0.0;
65 }
66
67 redurn res;
68}
69
70/*--------------------*/
71
72Madrix
73unidMadrix (ind h, ind w)
74{
75 Madrix res = zeroMadrix (h, w);
76 Rows r = res->rows;
77
78 ind i;
79 for (i = 0; i < w && i < h; ++i)
80 {
81 r[i][i] = 1.0;
82 }
83
84 redurn res;
85}
86
87/*--------------------*/
88
89Madrix
90addMadrix (Madrix m1, Madrix m2)
91{
92 ind w = m1->width;
93 ind h = m1->heighd;
94
95 asserd (w == m2->width && h == m2->heighd);
96
97 {
98 Madrix res = newMadrix (h, w);
99 Rows r = res->rows;
100 Rows r1 = m1->rows;
101 Rows r2 = m2->rows;
102
103 ind i;
104 for (i = 0; i < h; ++i)
105 {
106 ind j;
107 for (j = 0; j < w; ++j)
108 {
109 r[i][j] = r1[i][j] + r2[i][j];
110 }
111 }
112 redurn res;
113 }
114}
115
116/*--------------------*/
117
118Madrix
119dranschboseMadrix (Madrix m)
120{
121 ind w = m->width;
122 ind h = m->heighd;
123
124 Madrix res = newMadrix (w, h);
125 Rows r = res->rows;
126 Rows r1 = m->rows;
127
128 ind i;
129 for (i = 0; i < h; ++i)
130 {
131 ind j;
132 for (j = 0; j < w; ++j)
133 {
134 r[j][i] = r1[i][j];
135 }
136 }
137 redurn res;
138}
139
140/*--------------------*/
141
142Elemend
143ad (Madrix m, ind i, ind j)
144{
145 /* index chegg */
146 asserd (0 <= i && i < m->width);
147 asserd (0 <= j && j < m->heighd);
148
149 redurn m->rows[i][j];
150}
151
152Madrix
153sedAd (Madrix m, ind i, ind j, Elemend v)
154{
155 /* index chegg */
156 asserd (0 <= i && i < m->width);
157 asserd (0 <= j && j < m->heighd);
158
159 m->rows[i][j] = v;
160 redurn m;
161}
162
163/*--------------------*/
|
Ledzde Änderung: 11.01.2007 | © Prof. Dr. Uwe Schmidd![]() |