Top.Mail.Ru
Ответы
Аватар пользователя
Изменено
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

Форматный файловый ввода-вывод (Работа с файлами) - Си (C)

Здравствуйте! Помогите составить программу на СИ, которая читает текстовый файл и выполняет такое преобразование его, какое задано в задании.

Примечания:
1. Имя файла, который подлежит обработке, должно быть параметром программы.
2. Файл должен иметь не менее 10-15 строк текста.
3. Допускается ограничить максимальную длину строки в тексте 80 символами.
4. Допускается (если в индивидуальном задании не оговорено второе) считать, что слова разделяются пробелами, а знаки препинания рассматривать как буквы.
5. Программу следует разрабатывать, исходя из предположения, что весь текст из файла неможет быть размещен в оперативной памяти.
6. Допускается создавать при выполнении программы временные файлы, которые, однако, не должны сохранятся после окончания программы.

Условия задания требуют выровнять все строки до размера самой длинной строки во всем файле. Следовательно, для решения задачи придется прочитать файл, как минимум, дважды - при первом чтении (первая фаза программы) определить максимальную длину строки, а при втором (вторая фаза программы) - выполнять заданные преобразования.

В строке могут быть лишние пробелы, которые при выравнивании будут удалены, так что простого определения длины (например, при помощи функции strlen()) недостаточно - следует при определении длины принять во внимание и пробелы, что будет требовать посимвольного просмотра всей строки. Если в первой фазе будем только подсчитывать лишние пробелы, то во второй фазе нам в значительной степени придется повторить эту работу, чтоб избавиться от этих лишних пробелов - так почему бы не выполнить всю эту работу в первой фазе? Выравнивание во второй фазе будет выполняться добавлением пробелов между словами, так что нам нужно будет знать количество слов В каждой строке - его можно определить в том же просмотре строки, когда удаляем лишние пробелы, т.е. в первой фазе.

Таким образом, приходим к двухфазной схеме программы, когда в первой фазе выполняется какая-то часть обработки и получается промежуточный результат. Этот промежуточный результат является входными данными для второй фазы, которая выполняет окончательную обработку и формирует конечный результат.

Промежуточный результат первой фазы состоит из:
- максимальной длины строки в файле;
- всех строк файла, из которых удалены лишние пробелы;
- количества слов для каждого строки файла.

Если первая составная часть промежуточного результата - одно число, которое может сохраняться в переменной программы и через нее передаваться от первой фазы во вторую, то остальные составляющие требуют для своего сохранения файл.

Общий алгоритм выполнения программы (без детализации выполнения первой и второй фаз). Алгоритм программы, достаточно понятен из приведенной схемы, обратим внимание только на некоторые особенности, которые не были упомянуты ране или не детализированы на схеме алгоритма. Отметим, что на схеме приняты такие обозначения для переменных алгоритма: inf и outf - файловые переменные, которые представляют входной и выходной файлы соответственно; l - длина текущей строки, lmax - длина самой длинной строки в файле; nw - количество слов в текущей строке.

Принимаю любой вид программы, главное, чтобы полноценно работал! Спасибо!

По дате
По рейтингу
Аватар пользователя
Просветленный

Это задание уровня курсовой работы.
Сделать можно.
Но делай сам.
Иначе какого xpeнa там учишься?!

Я такое задание сделал много лет назад, на 2-м курсе. Сдал на 5. Писал на Паскале. Делал пол дня.
На Си можно быстрей написать.