SHOW:
|
|
- or go back to the newest paste.
1 | /* В файле лежит целое число N и далее ещё N целых чисел, | |
2 | * образующих массив. | |
3 | * Переставить элементы массива циклически на одну поицию влево. */ | |
4 | ||
5 | #include <stdio.h> | |
6 | #include <stdlib.h> | |
7 | ||
8 | ||
9 | /* Функция считывает count элементов типа int из файла | |
10 | * fin в аранее выделенный массив data достаточного рамера. | |
11 | * Функция вовращает 0 в случае успеха и -1 в случае ошибки. | |
12 | */ | |
13 | ||
14 | int ReadArray(FILE* fin, int* data, int count); | |
15 | ||
16 | int ReadArray(FILE* fin, int* data, int count) { | |
17 | for (int k = 0; k < count; k++) { | |
18 | if (fscanf(fin, "%d", data + k) != 1) | |
19 | return -1; | |
20 | } | |
21 | ||
22 | return 0; | |
23 | } | |
24 | ||
25 | ||
26 | /* Функция выводит элементы массива в файл. */ | |
27 | void PrintArray(FILE* fout, int* data, int count); | |
28 | ||
29 | void PrintArray(FILE* fout, int* data, int count) { | |
30 | for (int k = 0; k < count; k++) | |
31 | fprintf(fout, "%d ", data[k]); | |
32 | } | |
33 | ||
34 | void Process(int* data, int count); | |
35 | ||
36 | void Process(int* data, int count) { | |
37 | int value = data[0]; | |
38 | ||
39 | for (int k = 1; k < count; k++) | |
40 | data[k - 1] = data[k]; | |
41 | ||
42 | data[count - 1] = value; | |
43 | } | |
44 | ||
45 | int main(void) { | |
46 | FILE* file; | |
47 | int* data; | |
48 | int count; | |
49 | ||
50 | if ((file = fopen("in.txt", "rt")) == NULL) { | |
51 | printf("Can't open input file!\n"); | |
52 | return -1; | |
53 | } | |
54 | ||
55 | if (fscanf(file, "%d", &count) != 1) { | |
56 | printf("Can't read count!\n"); | |
57 | fclose(file); | |
58 | return -1; | |
59 | } | |
60 | ||
61 | if (count < 1) { | |
62 | printf("Invalid count!\n"); | |
63 | fclose(file); | |
64 | return -1; | |
65 | } | |
66 | ||
67 | if ((data = (int*) malloc(count * sizeof(int))) == NULL) { | |
68 | printf("Can't allocate memory!\n"); | |
69 | fclose(file); | |
70 | return -1; | |
71 | } | |
72 | ||
73 | if (ReadArray(file, data, count) < 0) { | |
74 | printf("Can't read array!\n"); | |
75 | fclose(file); | |
76 | free(data); | |
77 | } | |
78 | ||
79 | fclose(file); | |
80 | ||
81 | Process(data, count); | |
82 | ||
83 | if ((file = fopen("out.txt", "wt")) == NULL) { | |
84 | printf("Can't open output file!\n"); | |
85 | free(data); | |
86 | return -1; | |
87 | } | |
88 | ||
89 | PrintArray(file, data, count); | |
90 | ||
91 | fclose(file); | |
92 | free(data); | |
93 | ||
94 | return 0; | |
95 | } | |
96 |