Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- //((char*)(&(a[i][j])))[0]pentru ultimele 2 cifre ale numarului pe biti
- /*
- 4
- 4 1 2 3 4
- 3 100 101 102
- 1 FFFFFFFF
- 2 FF 100
- */
- /*double suma(int ** a, int * nr_elem, int n) {
- double s = 0;
- int contor = nr_elem[0] * 4 + nr_elem[n - 1] * 4;
- for (int i = 0; i < nr_elem[0]; i++) {
- s = s + ((char * )( & (a[0][i])))[0];
- } // suma primei linii
- for (int i = 0; i < nr_elem[n - 1]; i++) {
- s = s + ((char * )( & (a[n - 1][i])))[3];
- } // suma ultimei linii
- for (int i = 0; i < n; i++) {
- s = s + ((char * )( & (a[i][0])))[0] + ((char * )( & (a[i][nr_elem[i] -
- 1])))[3]; contor = contor + 2; } // suma primei si ultimei coloane
- // s = s - a[0][0] - a[n-1][0] - a[0][nr_elem[0]-1] - a[n-1][nr_elem[n-1]-1];
- contor = contor - 4;
- double rezultat = s / contor * 1.0;
- printf("%lf\n",s / contor );
- return rezultat;
- }*/
- void afisare(int** a, int n, int* nr_elem) {
- for (int i = 0; i < n; ++i) {
- printf("\n");
- for (int j = 0; j < nr_elem[i]; j++) printf("%.8X ", a[i][j]);
- }
- }
- void free_matrice(int** a, int n) {
- for (int i = 0; i < n; i++) free(a[i]);
- free(a);
- }
- void suma(int** a, int* nr_elem, int n) {
- char** matrice = (char**)a;
- int s = 0;
- int contor = 0;
- for (int i = 0; i < nr_elem[0] * 4; i++) // prima linie
- {
- s = s + matrice[0][i];
- contor++;
- }
- for (int i = 1; i < n - 1; i++) // prima coloana
- {
- s = s + matrice[i][0];
- contor++;
- }
- for (int i = 0; i < nr_elem[n - 1] * 4; i++) // ultima linie
- {
- s = s + matrice[n - 1][i];
- contor++;
- }
- for (int i = 1; i < n - 1; i++) // ultima coloana
- {
- s = s + matrice[i][4 * nr_elem[i] - 1];
- contor++;
- }
- printf("task 1\n");
- printf("%.8lf\n", (double) s / (double)contor * 1.0);
- }
- void task2_M(int** a, char operatie, char dimensiune, int linie, int index,
- int valoare, int* nr_elem, int* n) {
- if (linie > *n) { // daca linia depaseste realochez pe lungime si schimb
- // valoarea lui n
- a = realloc(a, linie * sizeof(int*));
- nr_elem = realloc(nr_elem,1+ linie * sizeof(int*));
- for (int i = *n; i < linie; i++) {
- a[i][0] = 0;
- nr_elem[i] = 0;
- }
- *n = linie;
- }
- if (dimensiune == 'I') {
- if (index > nr_elem[linie]) {
- a[linie] = realloc(
- a[linie],
- index * sizeof(int*)); // chiar daca mi se da index care e mai mare
- // ca val mea, la mn se numara de la 0;
- a[linie][index - 1] = valoare; // index se da cu 1 mai mult
- nr_elem[linie] = index - 1;
- }
- a[linie][index - 1] = valoare;
- }
- if (dimensiune ==
- 'S') { // iau ultimele 4cifre si le fac primele 4 short[0] = short[1]
- if (index > nr_elem[linie] * 2) {
- a[linie] = realloc(a[linie], (index / 2 + 1) * sizeof(int*));
- a[linie][index - 1] = valoare;
- nr_elem[linie] = index / 2 + 1;
- }
- ((short*)a[linie])[index - 1] = (short)valoare;
- }
- if (dimensiune == 'C') {
- if (index > nr_elem[linie] * 4) {
- a[linie] = realloc(a[linie], (index / 4 + 1) * sizeof(int*));
- a[linie][index - 1] = valoare;
- nr_elem[linie] = index / 4 + 1;
- }
- ((char*)a[linie])[index - 1] = (char)valoare;
- }
- }
- void task2_D(int** a, char dimensiune, int linie, int index) {
- if (dimensiune == 'I') {
- a[linie][index - 1] = 0;
- }
- if (dimensiune == 'S') {
- ((short*)a[linie])[index - 1] = 0;
- }
- if (dimensiune == 'C') {
- ((char*)a[linie])[index - 1] = 0; // aici am bulit o
- }
- }
- void task2_S(int** a, char dimensiune,int linie,int index) {
- if (dimensiune == 'I') {
- /*char aux =((char*)(&a[linie][index]))[0];
- ((char*)(&a[linie][index]))[0] = ((char*)(&a[linie][index]))[3];
- ((char*)(&a[linie][index]))[3] = aux;
- char aux =((char*)(&a[linie][index]))[1];
- ((char*)(&(a[linie][index])))[1] = ((char*)(&a[linie][index]))[2];
- ((char*)(&(a[linie][index]))[2] = aux;*/
- char** matrice = (char**)a;
- int index2 = index * 4;
- char aux = matrice[linie][index2];
- matrice[linie][index2] = matrice[linie][index2 + 2];
- matrice[linie][index2 + 2] = aux;
- aux = matrice[linie][index2 + 1];
- matrice[linie][index2 + 1] = matrice[linie][index2 + 3];
- matrice[linie][index2 + 3] = aux;
- }
- if (dimensiune = 'S') {
- short** matrice = (short**)a;
- int index2 = index * 2;
- char aux = matrice[linie][index2];
- }
- }
- /*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
- char** b = (char**)(&a);
- printf("%d\n",*contor);
- (int*)contor++; //b[linie-1][coloana] -->elementul de sus
- if((linie -1 < n && linie -1 > -1) && coloana <nr_elem[linie-1] && coloana > -1 && b[linie-1][coloana] == 0)
- task3(b,nr_elem,linie-1,coloana,n,*contor);
- //b[linie][coloana-1]--> precedent
- if(linie < n && linie > -1 && coloana -1 < nr_elem[linie] && coloana-1 > -1 && b[linie][coloana-1] == 0)
- task3(b,nr_elem,linie,coloana - 1,n,*contor);
- //b[linie][coloana+1]-->urmatorul
- if(linie < n && linie > -1 && coloana + 1 < nr_elem[linie] && coloana + 1 > -1 && b[linie][coloana+1] == 0)
- task3(b,nr_elem,linie,coloana + 1,n,*contor);
- //b[linie+1][coloane]-->elementul de jos
- if(linie+1 < n && linie + 1 > -1 && coloana < nr_elem[linie + 1] && coloana > -1 && b[linie+1][coloana] == 0)
- task3(b,nr_elem,linie + 1,coloana,n,*(contor));
- }*/
- int main(void) {
- int n;
- scanf("%d", &n);
- int** a; // matricea
- int* nr_elem; // dimensiunile liniilor
- int nr_total = 0, linie, index, valoare, contor = 0,
- k; // cate elemente ai in matrice
- nr_elem = calloc(n, sizeof(int));
- a = calloc(n, sizeof(int*));
- for (int i = 0; i < n; i++) {
- int j = 0;
- scanf("%d", &nr_elem[i]);
- nr_total = nr_total + nr_elem[i];
- a[i] = calloc(nr_elem[i], sizeof(int*));
- while (j < nr_elem[i]) {
- scanf("%x", &a[i][j]);
- j++;
- }
- }
- suma(a, nr_elem, n);
- char operatie, dimensiune;
- int zoinks;
- scanf("%d", &k);
- scanf("%d", &zoinks);
- for (int i = 0; i < k; i++) {
- scanf(" %c ", &operatie);
- if (operatie == 'M') {
- scanf(" %c%d%d%x", &dimensiune, &linie, &index, &valoare);
- task2_M(a, operatie, dimensiune, linie, index, valoare, nr_elem, &n);
- }
- if (operatie == 'D') {
- scanf(" %c%d%x", &dimensiune, &linie, &index);
- task2_D(a, dimensiune, linie, index);
- }
- if (operatie == 'S') {
- scanf(" %c%d%d", &dimensiune, &linie, &index);
- task2_S(a, dimensiune, linie, index);
- }
- contor++;
- }
- printf("task 2 ");
- afisare(a, n, nr_elem);
- printf("\n");
- printf("task 3");
- /*int* contor2 = 0;
- for (int i = 0; i < n; ++i)
- {
- for(int j = 0; j < nr_elem[i];j++)
- task3((char**)a,nr_elem,i,j,n,contor2);
- } */
- free_matrice(a, n);
- free(nr_elem);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement