Алгоритмы. Работа с файлами и массивами - 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;
}

Объяснение кода листинга программы

  1. Входные данные:
    • fIn - файл, из которого считываются числа (не пуст).
    • fOut - файл, в который записываются отсортированные числа.
    • mas - массив, в который считываются числа.
    • size - указатель на размер массива mas.
  2. Создается два указателя: i и j, которые будут использоваться в цикле.
  3. Цикл while считывает числа из файла fIn в массив mas до тех пор, пока не достигнет конца файла. Указатель size увеличивается на количество считанных чисел.
  4. Если при чтении файла произошла ошибка (достигнут конец файла), выводится сообщение об ошибке и возвращается 0.
  5. Цикл for проходит по всем элементам массива mas, кроме последнего, и сортирует их методом пузырька. Для этого используется второй цикл for, который проходит по всем элементам, начиная с текущего, и сравнивает их. Если текущий элемент больше следующего, они меняются местами.
  6. Цикл for проходит по всем элементам массива mas и записывает их в файл fOut.
  7. Возвращается 1, если все операции выполнены успешно.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5
Похожие ответы