Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.85 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. //((char*)(&(a[i][j])))[0]pentru ultimele 2 cifre ale numarului pe biti
  4. /*
  5. 4
  6. 4 1 2 3 4
  7. 3 100 101 102
  8. 1 FFFFFFFF
  9. 2 FF 100
  10.  
  11.  
  12. */
  13.  
  14. /*double suma(int ** a, int * nr_elem, int n) {
  15. double s = 0;
  16. int contor = nr_elem[0] * 4 + nr_elem[n - 1] * 4;
  17. for (int i = 0; i < nr_elem[0]; i++) {
  18. s = s + ((char * )( & (a[0][i])))[0];
  19. } // suma primei linii
  20. for (int i = 0; i < nr_elem[n - 1]; i++) {
  21. s = s + ((char * )( & (a[n - 1][i])))[3];
  22. } // suma ultimei linii
  23. for (int i = 0; i < n; i++) {
  24. s = s + ((char * )( & (a[i][0])))[0] + ((char * )( & (a[i][nr_elem[i] -
  25. 1])))[3]; contor = contor + 2; } // suma primei si ultimei coloane
  26. // s = s - a[0][0] - a[n-1][0] - a[0][nr_elem[0]-1] - a[n-1][nr_elem[n-1]-1];
  27. contor = contor - 4;
  28. double rezultat = s / contor * 1.0;
  29. printf("%lf\n",s / contor );
  30. return rezultat;
  31. }*/
  32. void afisare(int** a, int n, int* nr_elem) {
  33. for (int i = 0; i < n; ++i) {
  34. printf("\n");
  35. for (int j = 0; j < nr_elem[i]; j++) printf("%.8X ", a[i][j]);
  36. }
  37. }
  38.  
  39. void free_matrice(int** a, int n) {
  40. for (int i = 0; i < n; i++) free(a[i]);
  41. free(a);
  42. }
  43. void suma(int** a, int* nr_elem, int n) {
  44. char** matrice = (char**)a;
  45. int s = 0;
  46. int contor = 0;
  47. for (int i = 0; i < nr_elem[0] * 4; i++) // prima linie
  48. {
  49. s = s + matrice[0][i];
  50. contor++;
  51. }
  52. for (int i = 1; i < n - 1; i++) // prima coloana
  53. {
  54. s = s + matrice[i][0];
  55. contor++;
  56. }
  57. for (int i = 0; i < nr_elem[n - 1] * 4; i++) // ultima linie
  58. {
  59. s = s + matrice[n - 1][i];
  60. contor++;
  61. }
  62. for (int i = 1; i < n - 1; i++) // ultima coloana
  63. {
  64. s = s + matrice[i][4 * nr_elem[i] - 1];
  65. contor++;
  66. }
  67. printf("task 1\n");
  68. printf("%.8lf\n", (double) s / (double)contor * 1.0);
  69.  
  70.  
  71.  
  72. }
  73.  
  74.  
  75. void task2_M(int** a, char operatie, char dimensiune, int linie, int index,
  76. int valoare, int* nr_elem, int* n) {
  77. if (linie > *n) { // daca linia depaseste realochez pe lungime si schimb
  78. // valoarea lui n
  79. a = realloc(a, linie * sizeof(int*));
  80. nr_elem = realloc(nr_elem,1+ linie * sizeof(int*));
  81. for (int i = *n; i < linie; i++) {
  82. a[i][0] = 0;
  83. nr_elem[i] = 0;
  84. }
  85. *n = linie;
  86. }
  87. if (dimensiune == 'I') {
  88. if (index > nr_elem[linie]) {
  89. a[linie] = realloc(
  90. a[linie],
  91. index * sizeof(int*)); // chiar daca mi se da index care e mai mare
  92. // ca val mea, la mn se numara de la 0;
  93. a[linie][index - 1] = valoare; // index se da cu 1 mai mult
  94. nr_elem[linie] = index - 1;
  95. }
  96. a[linie][index - 1] = valoare;
  97. }
  98. if (dimensiune ==
  99. 'S') { // iau ultimele 4cifre si le fac primele 4 short[0] = short[1]
  100. if (index > nr_elem[linie] * 2) {
  101. a[linie] = realloc(a[linie], (index / 2 + 1) * sizeof(int*));
  102. a[linie][index - 1] = valoare;
  103. nr_elem[linie] = index / 2 + 1;
  104. }
  105. ((short*)a[linie])[index - 1] = (short)valoare;
  106. }
  107. if (dimensiune == 'C') {
  108. if (index > nr_elem[linie] * 4) {
  109. a[linie] = realloc(a[linie], (index / 4 + 1) * sizeof(int*));
  110. a[linie][index - 1] = valoare;
  111. nr_elem[linie] = index / 4 + 1;
  112. }
  113. ((char*)a[linie])[index - 1] = (char)valoare;
  114. }
  115. }
  116.  
  117. void task2_D(int** a, char dimensiune, int linie, int index) {
  118. if (dimensiune == 'I') {
  119. a[linie][index - 1] = 0;
  120. }
  121. if (dimensiune == 'S') {
  122. ((short*)a[linie])[index - 1] = 0;
  123. }
  124. if (dimensiune == 'C') {
  125. ((char*)a[linie])[index - 1] = 0; // aici am bulit o
  126. }
  127. }
  128.  
  129. void task2_S(int** a, char dimensiune,int linie,int index) {
  130. if (dimensiune == 'I') {
  131. /*char aux =((char*)(&a[linie][index]))[0];
  132. ((char*)(&a[linie][index]))[0] = ((char*)(&a[linie][index]))[3];
  133. ((char*)(&a[linie][index]))[3] = aux;
  134. char aux =((char*)(&a[linie][index]))[1];
  135. ((char*)(&(a[linie][index])))[1] = ((char*)(&a[linie][index]))[2];
  136. ((char*)(&(a[linie][index]))[2] = aux;*/
  137. char** matrice = (char**)a;
  138. int index2 = index * 4;
  139. char aux = matrice[linie][index2];
  140. matrice[linie][index2] = matrice[linie][index2 + 2];
  141. matrice[linie][index2 + 2] = aux;
  142. aux = matrice[linie][index2 + 1];
  143. matrice[linie][index2 + 1] = matrice[linie][index2 + 3];
  144. matrice[linie][index2 + 3] = aux;
  145. }
  146. if (dimensiune = 'S') {
  147. short** matrice = (short**)a;
  148. int index2 = index * 2;
  149. char aux = matrice[linie][index2];
  150. }
  151. }
  152.  
  153. /*void task3(char** a,int* nr_elem,int linie,int coloana,int n,int* contor) { //sa nu uit sa inmultesc nr_elem cu 4 cand citesc
  154. char** b = (char**)(&a);
  155. printf("%d\n",*contor);
  156. (int*)contor++; //b[linie-1][coloana] -->elementul de sus
  157. if((linie -1 < n && linie -1 > -1) && coloana <nr_elem[linie-1] && coloana > -1 && b[linie-1][coloana] == 0)
  158. task3(b,nr_elem,linie-1,coloana,n,*contor);
  159. //b[linie][coloana-1]--> precedent
  160. if(linie < n && linie > -1 && coloana -1 < nr_elem[linie] && coloana-1 > -1 && b[linie][coloana-1] == 0)
  161. task3(b,nr_elem,linie,coloana - 1,n,*contor);
  162. //b[linie][coloana+1]-->urmatorul
  163. if(linie < n && linie > -1 && coloana + 1 < nr_elem[linie] && coloana + 1 > -1 && b[linie][coloana+1] == 0)
  164. task3(b,nr_elem,linie,coloana + 1,n,*contor);
  165. //b[linie+1][coloane]-->elementul de jos
  166. if(linie+1 < n && linie + 1 > -1 && coloana < nr_elem[linie + 1] && coloana > -1 && b[linie+1][coloana] == 0)
  167. task3(b,nr_elem,linie + 1,coloana,n,*(contor));
  168. }*/
  169.  
  170. int main(void) {
  171. int n;
  172. scanf("%d", &n);
  173. int** a; // matricea
  174. int* nr_elem; // dimensiunile liniilor
  175. int nr_total = 0, linie, index, valoare, contor = 0,
  176. k; // cate elemente ai in matrice
  177. nr_elem = calloc(n, sizeof(int));
  178. a = calloc(n, sizeof(int*));
  179. for (int i = 0; i < n; i++) {
  180. int j = 0;
  181. scanf("%d", &nr_elem[i]);
  182. nr_total = nr_total + nr_elem[i];
  183. a[i] = calloc(nr_elem[i], sizeof(int*));
  184. while (j < nr_elem[i]) {
  185. scanf("%x", &a[i][j]);
  186. j++;
  187. }
  188. }
  189. suma(a, nr_elem, n);
  190. char operatie, dimensiune;
  191. int zoinks;
  192. scanf("%d", &k);
  193. scanf("%d", &zoinks);
  194. for (int i = 0; i < k; i++) {
  195. scanf(" %c ", &operatie);
  196. if (operatie == 'M') {
  197. scanf(" %c%d%d%x", &dimensiune, &linie, &index, &valoare);
  198. task2_M(a, operatie, dimensiune, linie, index, valoare, nr_elem, &n);
  199. }
  200. if (operatie == 'D') {
  201. scanf(" %c%d%x", &dimensiune, &linie, &index);
  202. task2_D(a, dimensiune, linie, index);
  203. }
  204. if (operatie == 'S') {
  205. scanf(" %c%d%d", &dimensiune, &linie, &index);
  206. task2_S(a, dimensiune, linie, index);
  207. }
  208.  
  209. contor++;
  210. }
  211. printf("task 2 ");
  212. afisare(a, n, nr_elem);
  213. printf("\n");
  214. printf("task 3");
  215. /*int* contor2 = 0;
  216. for (int i = 0; i < n; ++i)
  217. {
  218. for(int j = 0; j < nr_elem[i];j++)
  219. task3((char**)a,nr_elem,i,j,n,contor2);
  220. } */
  221. free_matrice(a, n);
  222. free(nr_elem);
  223. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement