Advertisement
Guest User

Untitled

a guest
Nov 19th, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.21 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. char get_byte(int a, int p) {
  5.     return (a >> 8 * p) & 0x000000ff;
  6. }
  7.  
  8. int main() {
  9.     int n, m;
  10.     int *sizes;
  11.     char **map;
  12.  
  13.     scanf("%d", &n);
  14.  
  15.     map   = (char **)malloc(n * sizeof(char *));
  16.     sizes = (int *)  calloc(n,  sizeof(int));
  17.  
  18.     for (int i = 0; i < n; i++) {
  19.         scanf("%d", &m);
  20.  
  21.         sizes[i] = m * 4;
  22.         map[i]   = (char *)malloc(m * 4);
  23.  
  24.         for (int j = 0; j < m; j++) {
  25.             int a;
  26.  
  27.             scanf("%x", &a);
  28.  
  29.             for (int z = 0; z < 4; z++) {
  30.                 map[i][j * 4 + z] = get_byte(a, z);
  31.             }
  32.         }
  33.     }
  34.  
  35.     //Se calculeaza suma de pe marginea hartii
  36.     int suma = 0, count = 0;
  37.    
  38.     for (int i = 0; i < sizes[0]; i++) {
  39.         suma += map[0][i];
  40.         count++;
  41.     }
  42.    
  43.     for (int i = 0; i < sizes[n - 1]; i++) {
  44.         suma += map[n - 1][i];
  45.         count++;
  46.     }
  47.    
  48.     for (int i = 1; i < n - 1; i++) {
  49.         int l = sizes[i];
  50.        
  51.         suma  += map[i][0] + map[i][l - 1];
  52.         count += 2;
  53.     }
  54.  
  55.     printf("task 1\n%.7f\n", (double)suma / count);
  56.  
  57.     int k;
  58.     scanf("%d", &k);
  59.  
  60.     for (int i = 0; i < k; i++) {
  61.         char operation,
  62.              type;
  63.    
  64.         int line,
  65.             index;
  66.            
  67.         int len = 0;
  68.        
  69.         scanf("\n%c %c %d %d", &operation, &type, &line, &index);
  70.        
  71.         switch (type) {
  72.             case 'C':
  73.                 len = sizeof(char);
  74.             break;
  75.             case 'S':
  76.                 len = sizeof(short);
  77.             break;
  78.             case 'I':
  79.                 len = sizeof(int);
  80.             break;
  81.         }
  82.        
  83.         if (index * len > sizes[line]) {
  84.             if (len != 4)
  85.                 sizes[line] += ((index * len - sizes[line]) / 4 + 1) * 4;
  86.             if (len == 4)
  87.                 sizes[line] += ((index * len - sizes[line]) / 4) * 4;
  88.             realloc(map[line], sizes[line]);
  89.         }
  90.        
  91.         int a;
  92.         switch (operation) {
  93.             case 'M':
  94.                 scanf("%x", &a);
  95.                
  96.                 for (int j = 0; j < len; j++) {
  97.                     map[line][(index - 1) * len + j] = get_byte(a, j);
  98.                 }
  99.                
  100.             break;
  101.             case 'D':
  102.                 for (int j = 0; j < len; j++) {
  103.                     map[line][(index - 1) * len + j] = 0x00;
  104.                 }
  105.             break;
  106.             case 'S':
  107.                 char *tmp = (char *)malloc(4);
  108.                
  109.                 for (int j = 0; j < len; j++) {
  110.                     tmp[j] = map[line][(index) * len + j];
  111.                 }
  112.                
  113.                 for (int j = 0; j < len; j++) {
  114.                     map[line][(index) * len + j] = tmp[len - j - 1];
  115.                 }
  116.                
  117.                 free(tmp);
  118.             break;
  119.         }
  120.     }
  121.    
  122.     printf("task 2\n");
  123.     for (int i = 0; i < n; i++) {
  124.         for (int j = 0; j < sizes[i] / 4; j++) {
  125.             for (int z = 0; z < 4; z++) {
  126.                 printf("%02hhX", map[i][j * 4 + 3 - z]);
  127.             }      
  128.             printf(" ");
  129.         }
  130.         printf("\n");
  131.     }
  132.  
  133.     return 0;
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement