Лабораторная работа 7. Работа с функциями ввода-вывода. Задание: Написать программу, выполняющую чтение текстового файла “input.in” и выполняющую его преобразование в соответствии с вашим вариантом задания. Результаты запишите в новый файл (Для удобства проверки правильности работы программы) “output.out”. Примечания: 1. 2. 3. 4. Имя файла, который подлежит обработке, должно быть входным параметром программы. Файл должен иметь не менее 5 строк текста. Допускается ограничить максимальную длину строки в тексте 80 символами. Допускается (если в индивидуальном задании не оговорено другое) считать, что слова разделяются пробелами, а знаки препинания рассматривать как буквы. 5. Программу следует разрабатывать, исходя из предположения, что весь текст из файла не может быть размещен в оперативной памяти. 6. Допускается создавать при выполнении программы временные файлы (кроме выходного), которые, однако, не должны сохраняться после окончания программы. Варианты заданий: 1 В выходной файл запишите строки из исходного в алфавитном порядке. Учитывайте только первый символ строки исходного файла. 2 Дан файл, в котором через пробел записаны натуральные числа. В выходной файл запишите суммы цифр каждого числа. Input.in: 23 53 987 239 Output.out: 7 8 24 15 3 В выходной файл запишите список, показывающий частоту встречаемости символов в исходном файле. Знаки препинания и пробелы считайте отдельно. Например: Output.out: a–4 b–6 … z–9 spaces – 23 signs – 5 4 В выходной файл запишите самое короткое и самое длинное слово каждой строки. Каждая строка выходного файла должна содержать пару <самое короткое слово> - <самое длинное слово> 5 В каждой строке исходного файла поменять местами первое и последнее слово и записать в выходной файл. Например: Input.in: Шла Саша по шоссе. Output.out: шоссе Шла Саша по. Подсказка: задание будет легко выполнить, если предварительно написать функцию, выделяющую из заданной строки подстроку определенной длины, начиная с заданной позиции. Например: Int substr(char *src_string, char *output_string, int offset, int length_of_substring); 6 В каждой строке все слова, длина которых превышает среднюю длину слов в строке, сократить до средней длины. 7 В каждом слове строки изменить порядок букв на противоположный. Подсказка: Аналогично с вариантом 5, это задание легко решается с помощью функции, возвращающей подстроку с заданной позиции 8 В выходной файл запишите самую длинную и самую короткую строку из исходного файла. 9 Во всем тексте вставить переход на новую строку там, где есть два или больше пробела подряд. Записать в выходной файл. 10 В каждой строке файла удалить лишние пробелы между словами и вставить после знаков препинания пробел, если их там нет. Дополнительно выведите на экран количество удаленных пробелов. 11 Напишите программу лексического анализа исходного текста программы на Си: программа должна проверять сбалансированность открывающих и закрывающих скобок – {, (, [. Текст в кавычках и в комментариях можете не проверять. В выходной файл запишите 0 при отсутствии ошибок, при наличии запишите номер строки и позицию в ней, в которой содержится ошибка. Подсказка: Это очень простое задание. Воспользуйтесь конструкцией switch-case и при встрече открывающей скобки увеличивайте счетчик, а при встрече закрывающей – уменьшайте. Соответственно, при отсутствии ошибок в файле счетчик должен быть равен нулю в результате работы. 12 В каждой строке входного файла находится натуральное число. В выходной файл запишите сумму чисел из исходного файла Input.in: 2478 349 831 56 Output.out: 3714 13 В выходной файл запишите сколько раз в исходном файле встречается каждое слово виде пары: Output.out: <слово 1> - k1 <слово2> - k2 <слово 3> - k3 .. <слово n> - kn 14 В выходной файл из входного записать только те строки, в которых первые три буквы совпадают с начальными буквами последнего слова строки. Например: Input.in: rose is so rose (1-е 3 буквы последнего слова – ros) but not a tulip (tul) jakk is not jarek (jar) jajaja jejeje jajaja (jaj) Output.out rose is so rose jajaja jejeje jajaja 15 В каждой строке исходного файла удалить слова, содержащие от трех до пяти символов. Обработанные строки запишите в выходной файл.