Алгоритмы. Работа с файлами и массивами - C (СИ)
Формулировка задачи:
Всем доброго здоровья!
Второй день ломаю голову над задачей не могу решить.
Кому интересно прошу поучаствовать.
Задача: Из файла А.тхт скопировать данные в массив, этот массив отсортировать и отсортированные данные записать в файл В.тхт.
Проблема в том, что данные в файле А расположены в столбик, и записаться в файл В тоже должны в столбик.
Пример работы программы:
А.тхт
9
3
1
5
В.тхт
1
3
5
9
Решение задачи: «Алгоритмы. Работа с файлами и массивами»
textual
Листинг программы
int sortFile(FILE *fIn, FILE *fOut, int *mas, size_t *size)//Только массив должна быть достаточной длины
{
int i = 0, j = 0;
while(fscanf(fIn, "%d", &mas[*size++])!=EOF)
*size++;
if(!feof(fIn)) { puts("Error!"); return 0; }
for(i = 0 ; i < *size - 1; i++) {
// сравниваем два соседних элемента.
for(j = 0 ; j < *size - i - 1 ; j++) {
if(mas[j] > mas[j+1]) {
// если они идут в неправильном порядке, то
// меняем их местами.
int tmp = mas[j];
mas[j] = mas[j+1];
mas[j+1] = tmp;
}
}
for(i = 0 ; i < *size; i++)
{
fprintf(fOut, "%d\n", mas[i])
}
return 1;
}
Объяснение кода листинга программы
- Входные данные:
fIn- файл, из которого считываются числа (не пуст).fOut- файл, в который записываются отсортированные числа.mas- массив, в который считываются числа.size- указатель на размер массиваmas.
- Создается два указателя:
iиj, которые будут использоваться в цикле. - Цикл
whileсчитывает числа из файлаfInв массивmasдо тех пор, пока не достигнет конца файла. Указательsizeувеличивается на количество считанных чисел. - Если при чтении файла произошла ошибка (достигнут конец файла), выводится сообщение об ошибке и возвращается 0.
- Цикл
forпроходит по всем элементам массиваmas, кроме последнего, и сортирует их методом пузырька. Для этого используется второй циклfor, который проходит по всем элементам, начиная с текущего, и сравнивает их. Если текущий элемент больше следующего, они меняются местами. - Цикл
forпроходит по всем элементам массиваmasи записывает их в файлfOut. - Возвращается 1, если все операции выполнены успешно.