Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- char get_byte(int a, int p) {
- return (a >> 8 * p) & 0x000000ff;
- }
- int main() {
- int n, m;
- int *sizes;
- char **map;
- scanf("%d", &n);
- map = (char **)malloc(n * sizeof(char *));
- sizes = (int *) calloc(n, sizeof(int));
- for (int i = 0; i < n; i++) {
- scanf("%d", &m);
- sizes[i] = m * 4;
- map[i] = (char *)malloc(m * 4);
- for (int j = 0; j < m; j++) {
- int a;
- scanf("%x", &a);
- for (int z = 0; z < 4; z++) {
- map[i][j * 4 + z] = get_byte(a, z);
- }
- }
- }
- //Se calculeaza suma de pe marginea hartii
- int suma = 0, count = 0;
- for (int i = 0; i < sizes[0]; i++) {
- suma += map[0][i];
- count++;
- }
- for (int i = 0; i < sizes[n - 1]; i++) {
- suma += map[n - 1][i];
- count++;
- }
- for (int i = 1; i < n - 1; i++) {
- int l = sizes[i];
- suma += map[i][0] + map[i][l - 1];
- count += 2;
- }
- printf("task 1\n%.7f\n", (double)suma / count);
- int k;
- scanf("%d", &k);
- for (int i = 0; i < k; i++) {
- char operation,
- type;
- int line,
- index;
- int len = 0;
- scanf("\n%c %c %d %d", &operation, &type, &line, &index);
- switch (type) {
- case 'C':
- len = sizeof(char);
- break;
- case 'S':
- len = sizeof(short);
- break;
- case 'I':
- len = sizeof(int);
- break;
- }
- if (index * len > sizes[line]) {
- if (len != 4)
- sizes[line] += ((index * len - sizes[line]) / 4 + 1) * 4;
- if (len == 4)
- sizes[line] += ((index * len - sizes[line]) / 4) * 4;
- realloc(map[line], sizes[line]);
- }
- int a;
- switch (operation) {
- case 'M':
- scanf("%x", &a);
- for (int j = 0; j < len; j++) {
- map[line][(index - 1) * len + j] = get_byte(a, j);
- }
- break;
- case 'D':
- for (int j = 0; j < len; j++) {
- map[line][(index - 1) * len + j] = 0x00;
- }
- break;
- case 'S':
- char *tmp = (char *)malloc(4);
- for (int j = 0; j < len; j++) {
- tmp[j] = map[line][(index) * len + j];
- }
- for (int j = 0; j < len; j++) {
- map[line][(index) * len + j] = tmp[len - j - 1];
- }
- free(tmp);
- break;
- }
- }
- printf("task 2\n");
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < sizes[i] / 4; j++) {
- for (int z = 0; z < 4; z++) {
- printf("%02hhX", map[i][j * 4 + 3 - z]);
- }
- printf(" ");
- }
- printf("\n");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement