fork download
  1. #include<stdio.h>
  2. #include<stdbool.h>
  3. #include<stdlib.h>
  4.  
  5. typedef struct{
  6. long* body;
  7. int size;
  8. }vlong;
  9.  
  10. typedef struct{
  11. int* body;
  12. int size;
  13. }vint;
  14.  
  15. typedef struct{
  16. long m,n;
  17. vlong* ind;
  18. vint* val;
  19. }matr;
  20.  
  21. vlong* vl_create(){
  22. vlong* v = (vlong*) malloc(sizeof(vlong));
  23. v -> size = 0;
  24. v -> body = NULL;
  25. }
  26.  
  27. void vl_destroy(vlong* v){
  28. free(v -> body);
  29. free(v);
  30. }
  31.  
  32. int vl_get_size(vlong* v){
  33. return v -> size;
  34. }
  35.  
  36. long vl_get(vlong* v, int i){
  37. return v -> body[i];
  38. }
  39.  
  40. void vl_set(vlong* v, int i, long val){
  41. v -> body[i] = val;
  42. }
  43.  
  44. bool vl_set_size(vlong* v, int size){
  45. long* body1 = (long*) realloc(v -> body,size* sizeof(long));
  46. if (body1 == NULL && size != 0){
  47. return false;
  48. }
  49. for (int i = v -> size; i < size; i ++){
  50. body1[i] = 0;
  51. }
  52. v -> body = body1;
  53. v -> size = size;
  54. return true;
  55. }
  56.  
  57. bool vl_push(vlong* v, long val){
  58. int new_size = vl_get_size(v) + 1;
  59. if (!vl_set_size(v, new_size)){
  60. return false;
  61. }
  62. vl_set(v, new_size - 1, val);
  63. return true;
  64. }
  65.  
  66. vint* vi_create(){
  67. vint* v = (vint*) malloc(sizeof(vint));
  68. v -> size = 0;
  69. v -> body = NULL;
  70. }
  71.  
  72. void vi_destroy(vint* v){
  73. free(v -> body);
  74. free(v);
  75. }
  76.  
  77. int vi_get_size(vint* v){
  78. return v -> size;
  79. }
  80.  
  81. int vi_get(vint* v, int i){
  82. return v -> body[i];
  83. }
  84.  
  85. void vi_set(vint* v, int i, int val){
  86. v -> body[i] = val;
  87. }
  88.  
  89. bool vi_set_size(vint* v, int size){
  90. int* body1 = (int*) realloc(v -> body,size* sizeof(int));
  91. if (body1 == NULL && size != 0){
  92. return false;
  93. }
  94. for (int i = v -> size; i < size; i ++){
  95. body1[i] = 0;
  96. }
  97. v -> body = body1;
  98. v -> size = size;
  99. return true;
  100. }
  101.  
  102. bool vi_push(vint* v, int val){
  103. int new_size = vi_get_size(v) + 1;
  104. if (!vi_set_size(v, new_size)){
  105. return false;
  106. }
  107. vi_set(v, new_size - 1, val);
  108. return true;
  109. }
  110.  
  111. matr* m_create(int m, int n){
  112. matr* mat = (matr*) malloc(sizeof(matr));
  113. mat -> m = m;
  114. mat -> n = n;
  115. mat -> ind = vl_create();
  116. mat -> val = vi_create();
  117. return mat;
  118. }
  119.  
  120. void m_destroy(matr* m){
  121. vl_destroy(m -> ind);
  122. vi_destroy(m -> val);
  123. free(m);
  124. }
  125.  
  126. matr* m_read1(){
  127. int n,m;
  128. int i, j;
  129. scanf("%d%d", &m, &n);
  130. matr* mat = m_create(m, n);
  131. for (int i = 0; i < m; i ++){
  132. for (int j = 0; j < n; j ++){
  133. int val;
  134. scanf("%d", &val);
  135. if (val != 0){
  136. vl_push(mat -> ind, mat -> n * i + j);
  137. vi_push(mat -> val, val);
  138. }
  139. }
  140. j = 0;
  141. }
  142. return mat;
  143. }
  144.  
  145. matr* m_read2(int m, int n){
  146. int i, j;
  147. matr* mat = m_create(m, n);
  148. for (int i = 0; i < m; i ++){
  149. for (int j = 0; j < n; j ++){
  150. int val;
  151. scanf("%d", &val);
  152. if (val != 0){
  153. vl_push(mat -> ind, mat -> n * i + j);
  154. vi_push(mat -> val, val);
  155. }
  156. }
  157. j = 0;
  158. }
  159. return mat;
  160. }
  161.  
  162. void m_print(matr* mat){
  163. int now = 0;
  164. int i, j;
  165. for (int i = 0; i < mat -> m; i ++){
  166. for (int j = 0; i < mat -> n; j ++){
  167. if (mat -> ind -> body [now] == mat -> n * i + j && now < vl_get_size(mat -> ind)){
  168. printf("%d", mat -> val -> body[now]);
  169. now ++;
  170. }else{
  171. printf("0");
  172. }
  173. }
  174. j = 0;
  175. printf("\n");
  176.  
  177. }
  178. printf("\n");
  179. }
  180.  
  181. int main(){
  182. printf("Enter size and matrix \n");
  183. matr* mat = m_read1();
  184. printf("Enter a column with size %d * 1 \n", mat -> n);
  185. matr* st = m_read2(mat -> n, 1);
  186. m_print(mat);
  187. return 0;
  188. }
Runtime error #stdin #stdout 0s 9432KB
stdin
2 2
1 0
0 1
1 2
stdout
Standard output is empty