-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTriangularMatrix.c
96 lines (89 loc) · 2.11 KB
/
TriangularMatrix.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/**
*
* @file TriangularMatrix.c
* @author Max Base ([email protected])
* @brief Working with large triangular matrix (upper or lower) in C
* @version 0.1
* @date 2022-12-02
* @copyright Copyright (c) 2022
*
*/
#include "TriangularMatrix.h"
/**
* @brief Create a Triangular Matrix object
* @param n: size of matrix
* @param def: default value
* @return TriangularMatrix
*/
TriangularMatrix* createTriangularMatrix(int n, int def)
{
TriangularMatrix* tm = (TriangularMatrix*)malloc(sizeof(TriangularMatrix));
tm->n = n;
tm->A = (int*)malloc(n * (n + 1) / 2 * sizeof(int));
tm->def = def;
for (int i = 0; i < n * (n + 1) / 2; i++) {
tm->A[i] = def;
}
return tm;
}
/**
* @brief Set value of matrix
* @param tm: TriangularMatrix
* @param i: row
* @param j: column
* @param x: value
*/
void setTriangularMatrix(TriangularMatrix* tm, int i, int j, int x)
{
if (i >= j)
tm->A[i * (i - 1) / 2 + j - 1] = x;
}
/**
* @brief Put the value of matrix without worrying about the order of i and j
* @param tm: TriangularMatrix
* @param index: index
* @param x: value
*/
void setTriangularMatrixIndex(TriangularMatrix* tm, int index, int x)
{
tm->A[index] = x;
}
/**
* @brief Get value of matrix
* @param tm: TriangularMatrix
* @param i: row
* @param j: column
* @return int
*/
int getTriangularMatrix(TriangularMatrix* tm, int i, int j)
{
if (i >= j)
return tm->A[i * (i - 1) / 2 + j - 1];
return 0;
}
/**
* @brief Display the matrix
* @param tm: TriangularMatrix
*/
void displayTriangularMatrix(TriangularMatrix* tm)
{
int i, j;
for (i = 1; i <= tm->n; i++) {
for (j = 1; j <= tm->n; j++) {
if (i >= j)
printf("%d ", tm->A[i * (i - 1) / 2 + j - 1]);
else
printf("%d ", tm->def);
}
printf("\n");
}
}
/**
* @brief Destroy the Triangular Matrix object
* @param tm: TriangularMatrix
*/
void destroyTriangularMatrix(TriangularMatrix* tm)
{
free(tm->A);
free(tm);
}