#include #include char *get_text_file(int argc, char **argv) { if (argc == 1) return "data/text.txt"; else return argv[1]; } void print_array(int *array, int length) { if (length == 0) { printf("\n"); return; } printf("|"); for (int i = 0; i < length; ++i) { printf("%d|", array[i]); } printf("\n"); } void apply_shift(int shift, int *array, int size) { for (int i = 0; i < size; ++i) { array[i] += shift; } } int sum_array(int *array, int size) { int sum = 0; for (int i = 0; i < size; ++i) { sum += array[i]; } return sum; } char *read_file(char *filepath, int *len) { FILE *f = fopen(filepath, "r"); fseek(f, 0, SEEK_END); *len = ftell(f); fseek(f, 0, SEEK_SET); char *content = (char *) malloc(sizeof(char) * (*len)); fread(content, 1, *len, f); *len = *len - 1; content[*len] = '\0'; fclose(f); return content; } char *read_file_portion(char *filepath, int size, int rank, int *portion_len, int *remain) { FILE *f = fopen(filepath, "r"); fseek(f, 0, SEEK_END); int total_len = ftell(f) - 1; int len = total_len / size; int start_point = rank * len; int end_point = start_point + len; if (rank + 1 == size) *remain = total_len % size; end_point += *remain; *portion_len = end_point - start_point; char *content = (char *) malloc(sizeof(char) * (*portion_len)); fseek(f, start_point, SEEK_SET); fread(content, 1, *portion_len, f); fclose(f); content[*portion_len] = '\0'; return content; }