Заменить исходное расположение элементов массива на заданное - C (СИ)
Формулировка задачи:
обьясните код программы
Дан файл целых чисел с элементами A1, A2, …, AN (N — количество элементов в файле). Заменить исходное расположение его элементов на следующее:
A1, AN, A2, AN–1, A3, … .
#include <conio.h> #include <math.h> #include <stdio.h> #include <malloc.h> #include <string.h> #include <stdlib.h> void main() { int size=0,buf,i,len; int *num; FILE *yes; if ((yes = fopen("n.txt","r+"))==NULL) puts("Error!"); else { while (fscanf(yes, "%d", &buf) != EOF) size++; fseek(yes, 0, SEEK_SET); num=(int*)malloc(size*sizeof(int)); i=0; while (fscanf(yes, "%d", &num[i]) != EOF) i++; fseek(yes, 0, SEEK_SET); if (size % 2 == 0) len = size/2; else len = size/2 +1; for(i=0;i<len;i++) { if (num[i]!=num[size-i-1]) { fprintf(yes, "%d\t", num[i]); fprintf(yes, "%d\t", num[size-i-1]); } else fprintf(yes, "%d\n", num[i]); } } fclose(yes); }
Решение задачи: «Заменить исходное расположение элементов массива на заданное»
textual
Листинг программы
#include <conio.h> #include <math.h> #include <stdio.h> #include <malloc.h> #include <string.h> #include <stdlib.h> void main() { int size=0,buf,i,len; int *num; FILE *yes; if ((yes = fopen("n.txt","r+"))==NULL) // открываем файл n.txt для чтения и записи puts("Error!"); // если файл не открылся, то сообщаем пользователю else { while (fscanf(yes, "%d", &buf) != EOF) // получаем кол-во чисел в файле. size++; fseek(yes, 0, SEEK_SET); // возвращаем указатель в начало файла num=(int*)malloc(size*sizeof(int)); // выделяем память для массива значения int i=0; while (fscanf(yes, "%d", &num[i]) != EOF) // теперь считиываем чила в массив i++; fseek(yes, 0, SEEK_SET); // возвращаемся в начало файла if (size % 2 == 0) // вычисляем центральный элемент len = size/2; // для четного кол-ва элементов else len = size/2 +1; // нечетного for(i=0;i<len;i++) // записываем числа в другом порядке { if (num[i]!=num[size-i-1]) { fprintf(yes, "%d\t", num[i]); fprintf(yes, "%d\t", num[size-i-1]); } else fprintf(yes, "%d\n", num[i]); } } fclose(yes); // закрываем файл }
Объяснение кода листинга программы
Код открывает файл n.txt
для чтения и записи, считывает из него количество чисел (размер массива), выделяет память под массив и считывает числа в массив. Затем вычисляется центральный элемент и записывается в файл в обратном порядке. Если размер массива четный, то в середине будет два элемента, если нечетный - один. Код записывает элементы в файл в обратном порядке. Если элементы исходного массива повторяются, то в файл выводится только одно значение. После выполнения всех операций файл закрывается.