Нет описания

diff_code.c 906B

    #include <stdio.h> #include <stdlib.h> int* diff_encode(int* values, int length) { if (length < 1) { return NULL; } int* result = malloc(sizeof(int) * length); int last = result[0] = values[0]; for (int i = 1; i < length; i++) { result[i] = values[i] - last; last = values[i]; } return result; } int* diff_decode(int* encoded, int length) { if (length < 1) { return NULL; } int* result = malloc(sizeof(int) * length); int last = result[0] = encoded[0]; for (int i = 1; i < length; i++) { result[i] = last + encoded[i]; last = result[i]; } return result; } int main() { int years[] = {1913, 2020, 1931, 1947, 1978, 1970, 2001, 2023, 1801, 2807}; int length = 10; int* encoded = diff_encode(years, length); int* decoded = diff_decode(encoded, length); for (int i = 0; i < length; i++) { printf("%d -> %d -> %d\n", years[i], encoded[i], decoded[i]); } return 0; }