Определить какой символ чаще других встречается в данном файле

Обновлено: 15.06.2024

Массивы. Часть 4. Примеры решения задач с использованием строк символов

Данная тема есть продолжением изучения тем: одномерные массивы и многомерные массивы .

Содержание

  • 1. Задачи на поиск символа в строке. Примеры
  • 2. Задачи на замену символов. Пример
  • 3. Задачи на определение позиции заданного символа. Примеры
  • 4. Задачи на преобразование текста. Примеры
  • 5. Задачи на подсчет числа символов в тексте. Примеры
  • 6. Сортировка строк символов методом вставки. Пример
  • Связанные темы

Поиск на других ресурсах:

1. Задачи на поиск символа в строке. Примеры

Пример 1. Задана строка символов. Определить, есть ли заданный символ c в этой строке символов.

В данном примере для определения длины строки S используется функция

Пример 2. Пусть задан некоторый текст. Вычислить, сколько раз повторяется наперед заданный символ a .

2. Задачи на замену символов. Примеры

Данная задача легко решается с помощью введения вспомогательного массива в текст программы.

В листинге используется функция strcpy() из библиотеки <string.h> (или cstring ), которая копирует одну строку в другую.

В другом случае, символ из исходного массива копируется в вспомогательный.

3. Задачи на определение позиции заданного символа. Примеры
4. Задачи на преобразование текста. Примеры

Пример 1. Задана некоторая строка символов. Создать новую строку, которая образована из данной чтением от конца до начала.

Пример 2. Задано слово. Проверить, читается ли это слово слева направо и наоборот.

Пример 3. Проверить, есть ли данные слова обратными между собой, то есть первое слово читается слева направо так же, как второе слово справа налево.

5. Задачи на подсчет числа символов в тексте. Примеры

В вышеприведенном примере с помощью вспомогательной переменной f определяется конец предшествующего слова. Если

значит был конец предшествующего слова. Иначе, начинается новое слово и счетчик k увеличивается на 1.

6. Сортировка строк символов методом вставки. Пример

Пример. Задано несколько строк символов. Отсортировать эти строки в алфавитном порядке.

Проверяемые элементы содержания: Умение создавать собственные программы (10–20 строк) для обработки символьной информации

Выполнение 24 задания ЕГЭ


Плейлист видеоразборов задания на YouTube:

Последовательности (цепочки) символов

24 задание. Демоверсия варианта ЕГЭ по информатике 2021, ФИПИ:


Задание выполняется с использованием прилагаемых файлов


Текстовый файл состоит не более чем из 106 символов X, Y и Z.
Определите максимальное количество идущих подряд символов, среди которых каждые два соседних различны.
Для выполнения этого задания следует написать программу.

var f: text; i, k, max: integer; s: string; begin assign(f, 'D:\24.txt'); reset(f); readln(f, s); max := 1; k := 1; // кол-во подряд идущих for i := 2 to length(s) do begin if s[i] <> s[i - 1] then begin inc(k); if k > max then max := k; end else k := 1; end; write(max) end.

f=open('D:/24.txt') s=f.readline() m=1 k=1 for i in range(1,len(s)): if s[i]!=s[i-1]: k+=1 m=max(k,m) else: k=1 print(m)

Видеоразбор:

24 задание с сайта К. Полякова, № 1:


Задание выполняется с использованием прилагаемых файлов


В текстовом файле k7-0.txt находится цепочка из символов латинского алфавита A, B, C.

Найдите длину самой длинной подцепочки, состоящей из символов C.

Ответ: 0

begin assign(input, 'k7-0.txt'); var s: string; var c: string; read(s); c := 'C'; while c in s do c := c + 'C'; print(length(c) - 1) end.

24 задание с сайта К. Полякова, № 21:


Задание выполняется с использованием прилагаемых файлов


В текстовом файле k7a-1.txt находится цепочка из символов латинского алфавита A, B, C, D, E.

Найдите длину самой длинной подцепочки, состоящей из символов A, B или C (в произвольном порядке).

Ответ: 16

begin assign(input, 'k7a-1.txt'); var s: string; read(s); var k := 0; var maxim := 0; for var i := 1 to length(s) do if s[i] in 'ABC' then begin k += 1; if k > maxim then maxim := k end else k := 0 ; write(maxim) end.

24 задание с сайта К. Полякова, № 26:


Задание выполняется с использованием прилагаемых файлов


В текстовом файле k7a-6.txt находится цепочка из символов латинского алфавита A, B, C, D, E, F.

Найдите длину самой длинной подцепочки, не содержащей гласных букв.

Ответ: 20

begin assign(input, 'k7a-6.txt'); var s: string; read(s); var k := 0; var maxim := 0; for var i := 1 to length(s) do if s[i] in 'BCDF' then begin k += 1; if k > maxim then maxim := k end else k := 0 ; write(maxim) end.

begin var s := readAllText('d:\k7a-6.txt').Trim; var (k, max) := (0, 0); foreach var c in s do if not (c in 'AE') then begin k += 1; if k > max then max := k; end else k := 0; print(max) end.

24 задание с сайта К. Полякова, № 27:


Задание выполняется с использованием прилагаемых файлов


В текстовом файле k7b-1.txt находится цепочка из символов латинского алфавита A, B, C, D, E.

begin assign(input, 'k7b-1.txt'); var s: string; read(s); var c := 'EAB'; while c in s do begin if c[length(c)] = 'B' then c += 'E' else if c[length(c)] = 'A' then c += 'B' else if c[length(c)] = 'E' then c += 'A'; end; print(length(c) - 1) end.

Постоянно повторяется фрагмент EAB, поэтому возможны 3 варианта окончания строки:

f=open('k7b-1.txt') s = f.readline() m = 0 i = 0 for char in s: if (char == 'E' and i%3 == 0) or \ (char == 'A' and i%3 == 1) or \ (char == 'B'and i%3 == 2): i += 1 m = max(i,m) elif char == 'E': i = 1 else: i = 0 print(m)

24 задание с сайта К. Полякова, № 33:


Задание выполняется с использованием прилагаемых файлов


В текстовом файле k7c-1.txt находится цепочка из символов латинского алфавита A, B, C, D, E.
Найдите количество цепочек длины 3, удовлетворяющих следующим условиям:

Ответ: 1280

begin assign(input, 'k7c-1.txt'); var s: string; read(s); // весь текст файла var k := 0; var c1 := 'BCD'; var c2 := 'BDE'; var c3 := 'BCE'; for var i := 1 to length(s) - 2 do begin if (s[i] in c1) and (s[i + 1] in c2) and (s[i + 2] in c3) and (s[i] <> s[i + 1]) and (s[i + 1] <> s[i + 2]) then k += 1 end; print(k) end.

24 задание с сайта К. Полякова, № 52:


Задание выполняется с использованием прилагаемых файлов

Ответ: 2 3

Видеоразбор:

24 задание с сайта К. Полякова, № 108:


Задание выполняется с использованием прилагаемых файлов


Текстовый файл 24.txt содержит последовательность из строчных и заглавных букв английского алфавита и цифр, всего не более 10 6 символов. Определите длину наибольшей убывающей подпоследовательности.

Ответ: 3

for var i := 2 to length(s) do begin if s[i] < s[i - 1] then

. if k > max then max := k;

begin assign(input, 'D:/24.txt'); var s: string; read(s); // весь текст файла var k := 1; //длина текущей бывающей последовательности символов var max := 0; // макс длина for var i := 2 to length(s) do begin if s[i] < s[i - 1] then begin k += 1; // увеличиваем счетчик длины последовательности if k > max then max := k; end else k := 1; // сбрасываем счетчик для работы со след. последовательностью end; print(max) end.

Работа с числами (цифрами) в текстовом файле

24 задание с сайта К. Полякова, № 87:


Задание выполняется с использованием прилагаемых файлов


Текстовый файл 24-1.txt состоит не более чем из 10 6 символов. Определите максимальное нечётное число, записанное в этом файле.

Ответ: 7642289

begin assign(input, '24-1.txt'); var s: string; var b:integer; read(s); // весь текст файла находится в s var max := 0; // для максимального нечётного числа var num:integer; var strnum:string; // накапливает строковое представление числа strnum:=''; for var i := 1 to length(s)-1 do begin if s[i].IsDigit() then // проверяем очередной символ - цифра ли это strnum += s[i] //добавляем очередную цифру в число else if (strnum <> '') then //если встретилась не цифра, а strnum не пустая строка begin Val(strnum, num, b); // переводим в число if (num mod 2 <> 0) and (num > max) then // условие для поиска макс четного max := num; strnum:=''; // сбрасываем на начальное значение, чтобы накапливать новое число end; end; // проверка на случай, если самое большое нечётное в самом конце строки if (s[length(s)].isdigit()) then begin Val(strnum, num, b); if (num mod 2 <> 0) and (num > max) then max:= num; end; print(max) end.

Работа с отдельными строками файла

24 задание с сайта К. Полякова, № 137:


Задание выполняется с использованием прилагаемых файлов


Текстовый файл 24-s1.txt состоит не более чем из 10 6 заглавных латинских букв ( A..Z ). Текст разбит на строки различной длины.
Определите количество строк, в которых буква J встречается чаще, чем буква E .

Ответ: 482

begin assign(input, '24-s1.txt'); var s: string; var k := 0; while true do // бесконечный цикл begin readln(s); // считываем очередную строку if s = '' then break; // если строка пустая (т.е. достигнут конец файла), выходим if s.Count(c -> c = 'J') > s.Count(c -> c = 'E') then k += 1; end; print(k) end.

Рубрики:

Yatogami


Привет! Сегодня будем учится решать 24 задание из ЕГЭ по информатике 2021.

Двадцать четвёртое задание из ЕГЭ по информатике нацелено на обработку символьной информации.

В этом уроке будем решать задачи 24 задания с помощью языка программирования Pascal.

Перейдём к Демонстрационному варианту из ЕГЭ по информатике 2021.


Задача (Задание 24, Демонстрационный вариант 2021)

Текстовый файл состоит не более чем из 10 6 символов X, Y и Z.

Определите максимальное количество идущих подряд символов, среди которых каждые два соседних различны.

Для выполнения этого задания следует написать программу.

В начале посмотрим, как считать посимвольно файл.

В данном примере сам текстовый файл должен находиться по адресу: "c:\24.txt".

В цикле while с помощью команды read(f, c) считывается из файла очередной символ в переменную c и распечатывается на экран с помощью команды writeln(c).

Т.к. количество символов большое в этом файле, убедившись, что считывание происходит нормально, можно нажать на кнопку "Завершить".

В данной задаче нужно посчитать, на сколько длинная цепочка символов есть в нашем файле, в которой не идут два подряд одинаковых символа.


ЕГЭ по информатике 2021 - задание 24 (Демонстрационная версия)

Алгоритм будет следующий: Берём символ, сравниваем его со следующим, если они разные, то добавляем к счётчику 1. Счётчик начинает работать с 1, чтобы засчитать самый первый символ. Если символы одинаковые, то сбрасываем счётчик на 1 (первоначальное значение).

Таким образом, у нас будет разная длина цепочек не повторяющихся символов в нашем файле. Но нам нужно в ответе написать наибольшую длину. Для этого мы будем использовать механизм для нахождения максимального значения, который был описан в статье по 17 заданию из ЕГЭ по информатике 2021.

Напишем программу на языке Pascal, которая решает нашу задачу.

После запуска программы на экране высветится число 35.

Следующая тренировочная задача из 24 задания ЕГЭ по информатике 2021.


Задача (Последовательность одного символа)

Текстовый файл состоит не более чем из 10 6 символов L, D и R. Определите длину самой длинной последовательности, состоящей из символов R. Хотя бы один символ R находится в последовательности.

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

Здесь логика следующая: В цикле считываем очередной символ. Если это символ R, то к счётчику прибавляем 1. Если встретили не символ R, то счётчик сбрасываем на ноль. Попутно в переменной max сохраняем максимальное значение для счётчика.

Ещё одна задача на понимание из 24 задания ЕГЭ по информатике 2021.


Задача (Последовательность трёх символов)

Текстовый файл состоит не более чем из 10 6 символов X, Y и Z. Определите максимальную длину цепочки вида XYZXYZXYZ. (составленной из фрагментов XYZ, последний фрагмент может быть неполным).

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

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

На рисунке представлен данный алгоритм. В нижней строке указано показание счётчика в момент анализа символа.


ЕГЭ по информатике 2021 - задание 24 (Цепочка символов)

На данном рисунке максимальная длина цепочки нужных символов равна 9.

Видим, что для символа X, когда он находится на своём месте, остаток от деления значения счётчика на 3 равен 0.

Для символа Y, когда данный символ находится на своём месте, остаток от деления значения счётчика на 3 равен 1.

Для символа Z, когда данный символ находится на своём месте, остаток от деления значения счётчика на 3 равен 2.

Мы смотрим остаток от деления на 3, потому что у нас длина звена равна трём (XYZ).

Таким образом, мы и наш анализ очередного символа привяжем к показанию счётчика:

Важный момент: Если нужную цепочку прервал символ X, то нужно счётчик сразу выставить в 1, иначе может произойти такая ошибка:


ЕГЭ по информатике 2021 - задание 24 (Цепочка символов 2)

Т.е. первые три нужных символа в цепочке алгоритм не засчитал.

Поэтому мы не просто сбрасываем счётчик в ноль, а прописываем условие:

Продолжаем набирать обороты в 24 задании из ЕГЭ по информатике 2021.


Задача (Проверяем соседей символа)

Текстовый файл состоит не более чем из 10 6 символов A, B и C.

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

Для выполнения этого задания следует написать программу.

Задача похожа на демонстрационный вариант. Здесь три символа участвуют в каждой итерации.

Посмотрим ещё не маловажные примеры из 24 задания ЕГЭ по информатике 2021.


Задача (Симметричные символы)

В файле хранится строка из символов. Длина строки не более 10 6 .

Сколько пар символов в строке являются симметричными? Симметричной парой называют такие два символа, которые расположены на одинаковом удалении от концов строки.

Например, в строке mdtdeeftkm три симметричных пары – mm, tt и ee.

Здесь удобнее использовать другой шаблон для считывания символов.

Здесь есть строка s, в которой находятся все символы из нашего файла. В цикле for можно перебрать каждый символ и проанализировать его.

Удобство данного метода состоит в том, что мы может сразу посмотреть, какие символы находятся в середине строки или в конце.

К строке можно обращаться, как к массиву. Тогда в a[1] - Будет первый символ строки, в a[2] - второй и т.д.

Чтобы посмотреть последний символ строки, нужно обратиться к элементу a[Length(s)].

Теперь легко написать программу для нашей задачи:

Проходим в цикле for до половины строки (Length(s) div 2) и анализируем симметричные символы с обеих концов строки.

Если символы равны, то прибавляем к счётчику 1.


Ответ: 19101

Текстовый файл состоит не более чем из 10 6 заглавных латинских букв (A..Z). Текст разбит на строки различной длины. Определите количество строк, в которых встречается комбинация F?O, где вопросительный знак обозначает один любой символ.

Чтобы считать файл построчно, можно использовать следующий шаблон:

Данный фрагмент кода будет печатать поочерёдно все строки из файла c:\24_5.txt.

Обратите внимание в данном шаблоне на тип данных переменной f.

Когда мы считывали по одному символу, для переменной f был тип данных file of char.

Когда мы считываем построчно, для переменной f тип данных выбираем text.

Так же команда для считывания строки становится readln(f, s);. Переменная s имеет тип string.

Напишем решение для данной задачи:

После считывания очередной строки, мы проверяем с помощью цикла for, есть ли комбинация указанных символов. Если есть, прибавляем к счётчику 1 и выходим из цикла for с помощью команды break.

Замечание: в задачах 7.13 – 7.21 содержимое файлов только анализируется; в остальных задачах этого раздела создается новый файл(ы) либо изменяется содержимое данного.

7.13. Программа. Определить, сколько раз в данном файле f встречается символ ‘A’.

7.14. Программа. Определить, сколько раз в данном файле g встречается строка UNIX.

7.15. Программа. Распечатать все строки данного файла, содержащие заданную строку в качестве подстроки. Имя файла и строка задаются в командной строке.

7.16. Написать программу, определяющую какой символ чаще других встречается в данном файле. Имя файла задается в командной строке.

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

7.18. Программа. Определить, какая строка является самой длинной в заданном файле. Если таких строк несколько, то в качестве результата выдать первую из них. Имя файла задается в командной строке.

7.20. Программа. В файле записана непустая последовательность целых чисел (целое число – это непустая последовательность десятичных цифр, возможно начинающаяся знаком + или - ). Имя файла задается в командной строке.

найти наибольшее из этих чисел;

определить, сколько четных чисел содержится в файле;

c) определить, составляют ли эти числа арифметическую прогрессию;

d) определить, образуют ли эти числа возрастающую последовательность;

e) определить, сколько чисел этой последовательности являются точными квадратами;

7.21. Написать программу, определяющую, какая из строк чаще других встречается в данном файле.

7.22. Написать программу, создающую файл - копию заданного файла. Имена файлов задаются в командной строке.

7.23. Программа. Создать файл, являющийся конкатенацией других файлов. Имена файлов задаются в командной строке: fres f1 f2 …, где fres - имя файла-результата, f1, f2, … - файлы, содержимое которых должно быть записано в файл-результат.

7.24. Программа. Дан файл f. Создать файл g, полученный из файла f заменой всех его прописных латинских букв соответствующими строчными.

7.25. Программа. Дан файл f. Создать два файла f1 и f2 следующим образом: в файл f1 записать в том же порядке все строки из файла f, состоящие только из латинских букв (прописных и строчных);в файл f2 – строки файла f, состоящие только из цифр; все остальные строки файла f не записываются ни в один из этих файлов.

7.26. Программа. В конец файла f приписать строку FINISH.

7.27. Программа. В конец файла f приписать содержимое файла g.

7.28. Программа. Даны два файла, строки в которых упорядочены по алфавиту. Написать программу, осуществляющую слияние этих двух файлов в третий, строки которого тоже упорядочены по алфавиту. Имена всех трех файлов задаются в командной строке.

7.29. Программа. Дан файл и две строки. Все вхождения первой строки в файл заменить второй строкой (вхождения первой строки в качестве подстроки не рассматривать). Имя файла и строки задаются в командной строке.

7.30. Программа. Дан файл и две строки. Все вхождения первой строки в файл (в том числе и в качестве подстроки) заменить второй строкой. Имя файла и строки задаются в командной строке.

7.31. Программа. В данном файле символы каждой строки упорядочить по алфавиту. Имя файла задается в командной строке.

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

7.33. Программа. В данном файле упорядочить все строки по возрастанию их длин. Имя файла и максимальная длина строки задаются в командной строке.

7.34. Программа. В файле записана непустая последовательность целых чисел, являющихся числами Фибоначчи (см. задачу 3.34). Приписать еще одно, очередное число Фибоначчи.

7.35..Программа. В файле записана непустая последовательность целых чисел ( целое число – это непустая последовательность десятичных цифр, возможно начинающаяся знаком + или - ). Создать новый файл, где

a) все отрицательные числа заменены нулем;

b) минимальный элемент последовательности поставлен в ее начало, а максимальный – в конец;

c) переставлены максимальный и минимальный элементы этой последовательности;

d) удалены все числа, являющиеся полными квадратами.

Имена файлов задаются в командной строке.

8.ИНТЕРФЕЙС С СИСТЕМОЙ UNIX

Низкоуровневый ввод-вывод

Замечание: во всех задачах этого раздела при вводе-выводе использовать низкоуровневые средства системы UNIX.

8.1. Верно ли решена задача: «написать версию функции
int getchar(void), которая осуществляет небуферизованный ввод, читая по одной литере из входного потока»

a) int getchar (void)

return ( read (0, &c, 1) == 1) ? c : EOF);

b) int getchar (void)

return ( read (0, &c, 1) == 1) ? c : EOF);

c) int getchar (void)

return ( read (0, &c, 1) == 1) ? (unsigned char)c : EOF);

d) int getchar (void)

return ( read (0, &c, 1) == 1) ? (int)c : EOF);

8.2. Написать буферизованный вариант функции int getchar(void), когда функция осуществляет ввод большими порциями, но при каждом обращении к ней выдает только одну литеру.

8.3. Используя низкоуровневый ввод-вывод, реализовать следующие функции:

a) int putchar ( int c)

b) char gets ( char s)

int puts ( const char s)

8.4. Написать программу, копирующую свой стандартный ввод в стандартный вывод.

8.5. Написать программу, создающую файл - копию заданного файла. Имена файлов задаются в командной строке.

a) копирование по одной литере;

b) копирование блоками;

8.6. Программа. Создать файл, являющийся конкатенацией других файлов. Имена файлов задаются в командной строке (см. задачу 7.23).

8.7. Описать функцию, удваивающую в заданном файле каждую очередную четверку байт.

8.8. Программа. В каждом из данных файлов удалить те N–ки байт, в которых первый байт равен коду символа s. Имена файлов, символ s и величина N задаются в командной строке.

8.9. Описать функцию, определяющую количество символов s в тексте, состоящем из нечетных N-ок байт заданного файла. Имя файла, символ s и величина N – параметры функции.

8.10. Программа. Создать файл, содержащий значения функции sin(x)cos(x)exp(x) на отрезке [a,b] в точках x i = a+ih, h = (b-a)/n, i = 0,1,…,n; имя файла и значения a, b, n задаются в командной строке.

8.11. Программа. В файле записана последовательность целых чисел. Создать файл, состоящий из чисел данного файла, значения которых меньше N. Имена файлов и величина N задаются в командной строке.

8.12. Программа. В конец файла f приписать

8.13. Программа. В конец файла f приписать содержимое файла g.

8.14. Написать программу, приписывающую в конец файла f его содержимое.

8.15. Описать функцию char get (char f, int n, int pos), читающую n байт из файла f, начиная с позиции pos.

8.16. Программа. Содержимое файлов, длина которых меньше N байт, переписать в новый файл-результат и удалить такие файлы. Файлы, длина которых больше либо равна N байт, не изменяются и не удаляются. Имена файлов и величина N задаются в командной строке: fres f1 f2 …, где fres - имя файла-результата, f1, f2, … - файлы, содержимое которых должно быть проанализировано.

8.17. Написать программу слияния двух файлов в третий. Файл -результат формируется чередованием N-ок символов первого и второго файлов (если один из файлов длиннее другого, то его оставшаяся часть приписывается в конец файла-результата). Имена файлов и величина N задаются в командной строке.

Процессы, сигналы

8.2.1 Конвейер, перенаправление ввода-вывода

8.18. Написать программу, моделирующую команду SHELL: (здесь pri - имена процессов, argj - аргументы процессов, f.dat - файл входных данных, f.res - файл результатов; в каждом из процессов pri использован стандартный ввод-вывод). Аргументы, необходимые этой программе, задаются в командной строке.

a) pr1 | pr2 | pr3

b) pr1 | pr2 > f.res

c) pr1 arg11 arg12 < f.dat | pr2 arg21 agr22

d) pr1 < f.dat > f.res

e) pr1 < f.dat | pr2 | pr3 > f.res

f) pr1 | pr2 >> f.res

g) pr1; pr2 | pr3 > f.res

h) ( (pr1 | pr2); pr3) | pr4

i) pr1 arg1 < f.dat; pr2 | pr3 >>f.res

j) pr1 arg1 < f.dat | pr2 | pr3 >f.res &

k) pr1 arg1 > f.res ; pr2 | pr3 >> f.res

l) pr1 < f.dat | pr2 arg2 ; pr3 > f.res

m) pr1; pr2; . ; prn

n) pr1; pr2; . ; prn &

o) pr1 | pr2 | . | prn

p) pr1 | pr2 | . | prn &

8.19. Написать программу, моделирующую команду SHELL pr1&&pr2 (выполнить pr1; в случае успешного завершения pr1 выполнить pr2, иначе завершить работу). Имена процессов задаются в командной строке.

8.20. Написать программу, моделирующую команду SHELL pr1 || pr2
(выполнить pr1; в случае неудачного завершения pr1 выполнить pr2, иначе завершить работу). Имена процессов задаются в командной строке.

8.21. Написать программу, моделирующую выполнение команды (pr1;pr2) | pr3 > f.res (конкатенация результатов работы процессов pr1 и pr2 передается в качестве входных данных процессу pr3; результаты его работы перенаправляются в файл f.res; в процессах pr1, pr2 и pr3 использован стандартный ввод-вывод).

a) аргументы задаются в командной строке в виде pr1 pr2 pr3 f.res

b) команда (pr1;pr2) | pr3>f.res вводится как строка во время работы программы.

Подсказка: для разбиения строки на лексемы удобно использовать функцию strtok из <string.h>

8.22. Написать программу, реализующую конвейер из n процессов. Информация, необходимая для запуска каждого процесса, задается в командной строке: имя_процесса количество_аргументов аргументы

Например, pr1 3 a1 a2 a3 pr2 0 pr3 2 b1 b2 означает, что программа должна выполнить команду pr1 a1 a2 a3 | pr2 | pr3 b1 b2.

8.23. Пусть есть исполняемый файл exp_x со стандартным вводом-выводом, вычисляющий значение exp(x). Результат работы exp_x - значения x и exp(x). Написать программу, использующую этот файл для нахождения таблицы значений exp(x i ) на отрезке [a,b] в точках x i =a+i*h, i = 0, 1, . n; h = (b-a)/n. Значения a, b и n вводятся с клавиатуры. Таблица выводится в стандартный поток вывода.

8.24. Пусть есть исполняемый файл func со стандартным вводом-выводом, вычисляющий значение функции f в точке x. Результат работы - значения x и f(x). Написать программу, использующую этот файл для нахождения таблицы значений f(x) на отрезке [a,b] в точках x i =a+ih, i = 0,1. n; h = ( b-a )/n. Значения a, b и n задаются в командной строке. Таблица записывается в файл f.tab.

8.25. Пусть есть исполняемый файл modify, который удаляет в текстовом файле все четные строки (строки нумеруются с единицы; пустые строки тоже анализируются). Имя файла задается в командной строке при вызове modify. Написать программу, использующую modify для обработки файлов, имена которых задаются в командной строке. Если первая строка файла совпадает со второй его строкой, то в файле оставить только нечетные строки; иначе файл не изменять. Анализ файлов выполняет основной процесс, изменения в фоновом режиме осуществляет modify (для каждого файла – свой экземпляр modify).

8.26. Пусть есть исполняемый файл modify, который удаляет в текстовом файле все четные строки (строки нумеруются с единицы; пустые строки тоже анализируются). Имя файла задается в командной строке при вызове modify. Написать программу, использующую modify для обработки файлов, имена которых задаются в командной строке. Если после сортировки файла, состоящего из нечетных строк исходного файла, оказалось, что каждая очередная строка начинается со следующей по алфавиту буквы (начиная с буквы ‘a’ до буквы ‘z’ и далее циклически), то имя этого файла выдать на экран, иначе - файл удалить. Для сортировки использовать команду sort.

8.27. Написать программу, определяющую количество литер, слов и строк в тексте, состоящем из нечетных N-ок байт заданного файла. Для подсчета количества литер, слов и строк использовать команду wc. Результаты поместить в файл. Имена файлов и величина N задаются в командной строке.

8.28. Написать программу, сортирующую по алфавиту строки текста, состоящего из четных строк данного файла. Для сортировки использовать команду sort. Результаты сортировки поместить в файл. Имена файлов задаются в командной строке.

8.29. Написать программу, определяющую количество литер, слов и строк в тексте, состоящем из тех строк заданного файла, которые содержат данную строку-шаблон в качестве подстроки. Используйте команды wc и grep. Результаты поместить в файл. Имена файлов и строка-шаблон задаются в командной строке.

8.30. Написать программу, которая выводит на экран имена файлов f k , содержащих не менее n k строк, включающих заданную строку str k в качестве подстроки. Имена файлов f k , величины n k и строки-шаблоны str k задаются в командной строке в виде f 1 n 1 str 1 f 2 n 2 str 2 . f k n k str k . Использовать команды grep и wc.

8.31. Пусть есть исполняемый файл file_dbl, который удваивает в обрабатываемом файле каждую очередную порцию из 128 байт. Имя файла задаётся в командной строке при запуске file_dbl. Написать программу, использующую file_dbl для обработки файлов, имена которых задаются в командной строке. Если длина файла меньше 1024 байт, то увеличить его размер с помощью file_dbl, иначе оставить без изменения. Анализ файлов выполняет основной процесс, изменения в фоновом режиме осуществляет file_dbl (для каждого файла свой экземпляр file_dbl).

8.32. Пусть файл содержит текст и команды форматирования. Эти команды располагаются на отдельных строках и начинаются символами ./ . Написать программу для подсчета символов в тексте (без учета символов форматирующих команд). Головной процесс анализирует содержимое файла и передает вспомогательному процессу текст без форматирующих команд. Вспомогательный процесс подсчитывает количество символов в получаемом тексте и возвращает полученный результат головному процессу. Имя файла головной процесс получает из командной строки.

Читайте также: