Advertisement
STANAANDREY

rare matrix

Mar 22nd, 2025 (edited)
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.70 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <assert.h>
  4.  
  5. #define NMAX 1000
  6. typedef struct {
  7.     int rows, cols, len;
  8.     int row[NMAX], col[NMAX];
  9.     double val[NMAX];
  10. } RareMatrix;
  11.  
  12. static void readRareMatrix(RareMatrix* m) {
  13.     assert(scanf_s("%d%d%d", &m->rows, &m->cols, &m->len));
  14.     for (int i = 0; i < m->len; i++) {
  15.         assert(scanf_s("%d%d%lf", &m->row[i], &m->col[i], &m->val[i]));
  16.     }
  17. }
  18.  
  19. static void printRareMatrix(const RareMatrix* const rMat) {
  20.     for (int i = 0; i < rMat->rows; i++) {
  21.         for (int j = 0; j < rMat->cols; j++) {
  22.             double val = .0;
  23.             for (int k = 0; k < rMat->len; k++) {
  24.                 if (rMat->row[k] == i && rMat->col[k] == j) {
  25.                     val = rMat->val[k];
  26.                     break;
  27.                 }
  28.             }
  29.             printf("%lf ", val);
  30.         }
  31.         printf("\n");
  32.     }
  33. }
  34.  
  35. static void addRareMats(const RareMatrix* const rMat1, const RareMatrix* const rMat2, RareMatrix* rMat3) {
  36.     rMat3->rows = rMat1->rows;
  37.     rMat3->cols = rMat1->cols;
  38.     rMat3->len = 0;
  39.     for (int i = 0; i < rMat1->len; i++) {
  40.         rMat3->row[rMat3->len] = rMat1->row[i];
  41.         rMat3->col[rMat3->len] = rMat1->col[i];
  42.         rMat3->val[rMat3->len] = rMat1->val[i];
  43.         rMat3->len++;
  44.     }
  45.     for (int i = 0; i < rMat2->len; i++) {
  46.         int j;
  47.         for (j = 0; j < rMat3->len; j++) {
  48.             if (rMat3->row[j] == rMat2->row[i] && rMat3->col[j] == rMat2->col[i]) {
  49.                 rMat3->val[j] += rMat2->val[i];
  50.                 break;
  51.             }
  52.         }
  53.         if (j == rMat3->len) {
  54.             rMat3->row[rMat3->len] = rMat2->row[i];
  55.             rMat3->col[rMat3->len] = rMat2->col[i];
  56.             rMat3->val[rMat3->len] = rMat2->val[i];
  57.             rMat3->len++;
  58.         }
  59.     }
  60. }
  61.  
  62. int main() {
  63.     RareMatrix rMat1, rMat2, rMat3;
  64.     readRareMatrix(&rMat1);
  65.     readRareMatrix(&rMat2);
  66.     addRareMats(&rMat1, &rMat2, &rMat3);
  67.     printRareMatrix(&rMat3);
  68.     return 0;
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement