Advertisement
Guest User

Untitled

a guest
Jan 18th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.38 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdio.h>
  3. using namespace std;
  4.  
  5. #define MAX_N 100
  6.  
  7. struct s_triplet{
  8. int linie, coloana, valoare;
  9. };
  10.  
  11. struct s_matrice_rara{
  12. int num_linii, num_coloane;
  13. int num_elemente;
  14. s_triplet elemente[MAX_N];
  15. };
  16.  
  17. int mai_mic_lex(s_triplet t1, s_triplet t2);
  18. void inserare(s_matrice_rara &m, s_triplet x);
  19. int determina_element(s_matrice_rara &m, int linie, int coloana);
  20. void citire(s_matrice_rara &m);
  21. void suma(s_matrice_rara &a, s_matrice_rara &b, s_matrice_rara &c);
  22. void produs(s_matrice_rara &a, s_matrice_rara &b, s_matrice_rara &p);
  23. void afiseaza(s_matrice_rara &m);
  24.  
  25. int main(void)
  26. {
  27. s_matrice_rara a, b, c, p;
  28.  
  29. citire(a);
  30. citire(b);
  31.  
  32. afiseaza(a);
  33. afiseaza(b);
  34.  
  35. suma(a, b, c);
  36. afiseaza(c);
  37.  
  38. produs(a, b, p);
  39. afiseaza(p);
  40.  
  41. return 0;
  42. }
  43.  
  44. int mai_mic_lex(s_triplet t1, s_triplet t2)
  45. {
  46. if (t1.linie < t2.linie)
  47. return 1;
  48. if (t1.linie == t2.linie && t1.coloana < t2.coloana)
  49. return 1;
  50. return 0;
  51. }
  52.  
  53. void inserare(s_matrice_rara &m, s_triplet x)
  54. {
  55. if (m.num_elemente == 0)
  56. m.elemente[0] = x;
  57. else{
  58. int i = m.num_elemente;
  59. while (i > 0 && mai_mic_lex(x, m.elemente[i - 1])){
  60. m.elemente[i] = m.elemente[i - 1];
  61.  
  62. i--;
  63. }
  64. m.elemente[i] = x;
  65. }
  66. m.num_elemente++;
  67. }
  68.  
  69. int determina_element(s_matrice_rara &m, int linie, int coloana)
  70. {
  71. for (int k = 0; k < m.num_elemente; k++)
  72. if (m.elemente[k].linie == linie && m.elemente[k].coloana == coloana)
  73. return m.elemente[k].valoare;
  74. return 0;
  75. }
  76.  
  77. void citire(s_matrice_rara &m)
  78. {
  79.  
  80. cout << "introduceti numarul de linii = ";
  81. cin >> m.num_linii;
  82. cout << "introduceti numarul de coloane = ";
  83. cin >> m.num_coloane;
  84.  
  85. m.num_elemente = 0;
  86.  
  87. s_triplet t;
  88. cin >> t.linie >> t.coloana >> t.valoare;
  89.  
  90. while (!(t.linie == -1 && t.coloana == -1 && t.valoare == -1)){
  91. if (determina_element(m, t.linie, t.coloana) == 0) // daca tripletul nu a fost inserat deja
  92. inserare(m, t);
  93. cin >> t.linie >> t.coloana >> t.valoare;
  94. }
  95. }
  96.  
  97. void suma(s_matrice_rara &a, s_matrice_rara &b, s_matrice_rara &c)
  98. {
  99. c.num_coloane = a.num_coloane;
  100. c.num_linii = a.num_linii;
  101. c.num_elemente = 0;
  102.  
  103. for (int i = 1; i <= c.num_linii; i++)
  104. for (int j = 1; j <= c.num_coloane; j++)
  105. {
  106. int s = determina_element(a, i, j) + determina_element(b, i, j);
  107. if (s != 0)
  108. {
  109. s_triplet t;
  110.  
  111. t.linie = i;
  112. t.coloana = j;
  113. t.valoare = s;
  114. inserare(c, t);
  115. }
  116. }
  117. }
  118.  
  119. void produs(s_matrice_rara &a, s_matrice_rara &b, s_matrice_rara &p)
  120. {
  121. p.num_coloane = a.num_coloane;
  122. p.num_linii = a.num_linii;
  123. p.num_elemente = 0;
  124.  
  125.  
  126. for(int i = 1;i <= p.num_linii ; i++)
  127. for(int j = 1;j <= p.num_coloane; j++)
  128. {
  129. s_triplet t;
  130. t.linie = i;
  131. t.coloana = j;
  132. t.valoare = 0;
  133.  
  134. for(int k = 1; k <= p.num_coloane; k++)
  135. t.valoare+= determina_element(a, i, k) * determina_element(b, k, j);
  136.  
  137. inserare(p, t);
  138.  
  139. }
  140.  
  141. }
  142.  
  143. void afiseaza(s_matrice_rara &m)
  144. {
  145. for (int i = 1; i <= m.num_linii; i++){
  146. for (int j = 1; j <= m.num_coloane; j++)
  147. cout << determina_element(m, i, j) << " ";
  148. cout << '\n';;
  149. }
  150. cout <<'\n';
  151. }
  152.  
  153. /*
  154. 2 2
  155. 1 1 6
  156. 1 2 7
  157. 2 1 8
  158. 2 2 9
  159. -1 -1 -1
  160. 2 2
  161. 1 1 1
  162. 1 2 2
  163. 2 1 3
  164. 2 2 4
  165. -1 -1 -1
  166.  
  167. *
  168. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement