Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Шереметев Информатика. Сборник домашних заданий 2009

.pdf
Скачиваний:
29
Добавлен:
16.08.2013
Размер:
944.56 Кб
Скачать

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

Задача 1.26. "ЧАСТОТНЫЙ АНАЛИЗ ТЕКСТА". Вводят-

ся имя текстового файла произвольного содержания не длиннее 32 Кбайт и число k (k = 1...9) - см. ниже. Затем проводится подсчет сколько раз в этом файле встретилась каждая русская буква и ее относительных доля в процентах от общего числа таких букв в файле. Принять формат каждого счетчика unsigned int. Определить также k наиболее частых и k наименее частых русских букв. В качестве выходных данных сформировать текстовый файл TEXTPROB.OUT со следующим содержимым (шаблон):

(c) <имя автора, версия и название задачи>

Обработано XXXXX

байтов из файла <INFILEN.AME>

Русская буква

Повторилась, раз

Что составляет, %

"А"

YYY

KK.LLL

...

 

 

"Я"

XX

QQ.PPP

k наиболее частых кода (в порядке снижения повторяемости)

Русская буква

Повторилась, раз

Что составляет, %

"П"

YYY

KK.LLL

...

 

 

"Л"

XX

QQ.PPP

k наименее частых кода (в порядке снижения повторяемости)

Русская

буква

Повторилась, раз

Что составляет, %

"Ю"

 

YYY

KK.LLL

УКАЗАНИЯ: Предусмотреть обработку ошибочных ситуаций, особенно при файловых операциях, а также вывод на экран процента выполнения во время подсчета в качестве индикатора процесса. Хорошим тестом является сам текстовый файл этого задания.

РАЗВИТИЕ:

1.Расширить эту задачу на файлы длиной до 2...4 Гбайт и реализовать в программе.

2.Предусмотреть при обработке каждых 64 Кбайт вывод промежу-

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

21

Задача 1.27. "ПОДСЧЕТ ЭЛЕМЕНТОВ ТЕКСТА". Вво-

дятся имя текстового файла произвольного содержания не длиннее 32 Кбайт. Затем проводится подсчет сколько в нем символов, пробелов, табуляторов, русских и латинских букв, слов, предложений, минимальное и максимальное количество слов в предложении. Принять формат каждого счетчика unsigned int. В качестве выходных данных сформировать текстовый файл LEXPROB.OUT со следующим содержимым (шаблон):

(c) <

имя автора, версия и название задачи>

Обработано XXXXX байтов из файла <INFILEN.AME>

 

Встретилось, раз

Что составляет, %

Всего

символов:

9999

100.000

из

них пробелов

99

99.999

из

них табуляторов

9

99.999

из

них латинских букв

888

99.999

из

них русских букв

777

99.999

из

них иных

666

99.999

В тексте обнаружено:

слов

= 4444

 

предложений

=

333

мин. количество слов

в предложении

=

1

макс. количество слов

в предложении

=

22

УКАЗАНИЯ: Предусмотреть обработку ошибочных ситуаций, особенно при файловых операциях, а также вывод на экран процента выполнения во время подсчета в качестве индикатора процесса. Хорошим тестом является сам текстовый файл этого задания.

РАЗВИТИЕ:

1.Расширить эту задачу на категории символов "знаки препинания", "цифры", "гласные", "согласные" и реализовать в программе.

Задача 1.28. "ЧАСТОТНЫЙ АНАЛИЗ БАЙТОВ ФАЙ-

ЛА". Вводятся имя файла произвольного содержания не длиннее 32 Кбайт и число k (k = 1...9) - см. ниже. Затем проводится подсчет количества байтов с одинаковым кодом и их относительных долей в процентах. Всего может быть 256 различных кодов. Принять формат каждого счетчика unsigned int. Определить также k наиболее частых и k наименее частых байтовых кодов. В качестве выходных данных сформировать текстовый файл CHARPROB.OUT со следующим содержимым (шаблон):

22

(c) <имя автора, версия и название задачи> Обработано XXXXX байтов из файла <INFILEN.AME>

Значение байта

Повторилось, раз

Что

составляет, %

0x0000

000

YYY

 

KK.LLL

...

 

 

 

 

0x00FF

255

XX

 

QQ.PPP

k наиболее

частых кода (в порядке снижения

повторяемости)

Значение

байта

Повторилось, раз

Что

составляет, %

0x0090

999

MMM

 

AA.BBB

0x00A1

999

LL

 

CC.EEE

...

 

 

 

 

0x0056

999

RRRR

 

DD.FFF

k наименее

частых кода (в порядке снижения

повторяемости)

Значение

байта

Повторилось, раз

Что составляет, %

0x001B

999

GGG

 

AA.BBB

0x0039

999

NN

 

CC.EEE

...

 

 

 

 

0x00F1

999

PPPP

 

DD.FFF

УКАЗАНИЯ: Предусмотреть обработку ошибочных ситуаций, особенно при файловых операциях, а также вывод на экран процента выполнения во время подсчета в качестве индикатора процесса.

РАЗВИТИЕ:

1.Расширить эту задачу на файлы длиной до 2...4 Гбайт и реализовать в программе.

2.Предусмотреть при обработке каждых 64 Кбайт вывод промежу-

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

Задача 1.29. "СОКРАЩЕНИЯ СЛОВ". Вводится последо-

вательность строк символов не длиннее 40 символов. Допустимые символы в строке - русские буквы и пробел. Окончание входного потока - ввод строки, начинающейся с символа "*". Максимальное количество строк равно 5. Затем выделяются отдельные слова - последовательности букв, разделенных пробелами. Из исходных слов формируются их сокращения путем удаления гласных букв, например: "ПРОЦЕНТ" -> "ПРЦНТ". Формируется также статистическая информация. Примерный вид выходной информации:

Входной текст:

(последовательность входных строк, в каждой строке

удалены все лишние пробелы)

23

Введено К строк, максимальная длина слова М символов. Получены сокращения:

(последовательность строк с сокращениями, в каждой

строке удалены все лишние пробелы). Максимальная длина сокращения С символов.

Встретилось "а" N1 раз.

...

Встретилось "я" N9 раз.

УКАЗАНИЯ: Предусмотреть обработку ошибочных ситуаций и легкую замену в тексте программы числовых и символьных констант. Вывод входных и выходных строк проводить ЗАГЛАВНЫМИ буквами.

РАЗВИТИЕ:

1.Предусмотреть режимы ввода/вывода: только экран и клавиатура, ввод из текстового файла и вывод в текстовый файл с отображением диалога на экране.

2.Предусмотреть два режима работы: РУССКИЙ и АНГЛИЙСКИЙ. В начале пользователь выбирает язык входных и выходных строк. В режиме РУССКИЙ работа описана выше. В режиме АНГЛИЙСКИЙ используются латинские буквы и соответствующие гласные.

Задача 1.30. "КОНТЕКСТНЫЙ ПОИСК". Написать про-

грамму, осуществляющую поиск образца в текстовых строках. Вводится последовательность не более 5 строк длиной не более 67 символов. Окончание входного текста - ввод строки, начинающейся символом ";". После этого вводится строка-образец для поиска в тексте. Затем осуществляется обработка - поиск образца в строках текста. При этом на экран выводится очередная строка текста для поиска, в случае неудачи поиска - на следующей строке сообщение об этом, начинающееся с символов "*****". В случае успеха найденный в строке текста образец закрашивается другим цветом и пользователь запрашивается о продолжении поиска в той же строке или переходе к поиску в следующей строке текста. Указанная процедура повторяется для всех строк текста.

УКАЗАНИЯ: Предусмотреть обработку ошибочных ситуаций и наглядную форму диалога с пользователем.

РАЗВИТИЕ:

1.Предусмотреть режимы ввода/вывода: только экран и клавиатура, ввод из текстового файла и вывод в текстовый файл (най-

24

денный в строке текста образец подчеркивается в следующей строке файла символом "^") с отображением диалога на экране.

2.Расширить эту задачу применением алгоритма поиска образца и заменой его вхождения в текст другим образцом с предварительным запросом у пользователя разрешения на замену, пропуск или прекращение процедуры поиска и замены образца.

Задача 1.31. "РАЗБИЕНИЕ ТЕКСТА". Написать програм-

му, осуществляющую разбиение текста на отдельные строки. Вводится последовательность не более 6 строк длиной не более 52 символов. Окончание входного текста - ввод строки, начинающейся символом "!". После этого вводится символ-разделитель текста на отдельные строки. Затем осуществляется обработка: при обнаружении в очередной строке символа-разделителя последовательность символов строки от начала строки (от предыдущего символаразделителя) до обнаруженного символа разделителя (до конца строки текста) выводится как отдельная строка экрана. Указанная процедура повторяется для всех строк текста.

УКАЗАНИЯ: Предусмотреть обработку ошибочных ситуаций, легкую замену в тексте программы числовых и символьных констант и наглядную форму диалога с пользователем.

РАЗВИТИЕ:

1.Предусмотреть режимы ввода/вывода: только экран и клавиатура, ввод из текстового файла и вывод в текстовый файл с отображением диалога на экране.

Задача 1.32. “ПЕРСОНЫ”. Написать программу, которая, запросив у пользователя максимально 7 строк, в каждой из которых содержится информация вида:

Фамилия Имя Отчество

ирежим преобразования строки (выбор из меню):

1.Имя Отчество Фамилия

2.И. О. Фамилия

3.Фамилия И. О.

осуществляет указанное преобразование и выводит на экран соответствующие выходные строки.

25

УКАЗАНИЯ: Предусмотреть обработку ошибочных ситуаций, легкую смену числовых констант в тексте программы и продумать наглядный диалог с пользователем. Обратите внимание на функции из <STRING.H>.

РАЗВИТИЕ:

1.Предусмотреть режимы ввода/вывода: только экран и клавиатура, ввод из текстового файла и вывод в текстовый файл с отображением диалога на экране.

2.Расширить задачу п. 1, добавив режим сортировки выходных строк по “Фамилия”.

Задача 1.33. “БЕЗ ЛИШНИХ ПРОБЕЛОВ”. Написать про-

грамму, которая, запросив у пользователя максимально 9 строк длиной до 72 символов каждая, анализирует их и выводит на экран выходные строки с удаленными лишними пробелами: 2 и более пробелов заменяются одним.

УКАЗАНИЯ: Предусмотреть обработку ошибочных ситуаций, легкую смену числовых констант в тексте программы и продумать наглядный диалог с пользователем. Обратите внимание на функции из <STRING.H>.

РАЗВИТИЕ:

1.Предусмотреть режимы ввода/вывода: только экран и клавиатура, ввод из текстового файла и вывод в текстовый файл с отображением диалога на экране.

2.Расширить задачу п.1, добавив режим вызова программы из командной строки с указанием имен входного и выходного файлов.

Задача 1.34. “ПРОБЕЛЫ И ТАБУЛЯТОРЫ”. Структури-

рованные отступами тексты программ содержат много символов “пробел”. Написать программу, которая, запросив у пользователя имя входного текстового файла и цену символа “HTгоризонтальный табулятор” (2...8 символьных позиций) формирует выходной текстовый файл HTFILE.OUT, в котором все допустимые последовательности пробелов заменены символом табулятора.

УКАЗАНИЯ: Предусмотреть обработку ошибочных ситуаций, легкую смену числовых констант в тексте программы и продумать наглядный диалог с пользователем. Сначала найдите алго-

26

ритм замены для одной строки. Обратите внимание на функции из <STRING.H>.

РАЗВИТИЕ:

1.Расширить эту задачу добавлением режима обратной замены табуляторов на пробелы.

2.Расширить задачу п. 1, добавив режим вызова программы из командной строки с указанием необходимых параметров.

Задача 1.35. ”НАЙТИ ВСЕ СИМВОЛЫ”. Написать про-

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

Входная строка: qwerty1230asdf345

Символ для поиска = 3, символ-указатель = ^

Обнаружено вхождений: 2 qwerty1230asdf345

^^

УКАЗАНИЯ: Предусмотреть обработку ошибочных ситуаций, легкую смену числовых констант в тексте программы и продумать наглядный диалог с пользователем. Обратите внимание на функции из <STRING.H>.

РАЗВИТИЕ:

1.Предусмотреть режимы ввода/вывода: только экран и клавиатура, ввод из текстового файла и вывод в текстовый файл с отображением диалога на экране.

2.Расширить задачу п. 1, заменив указание вхождений символа в строку раскраской этого символа в строке другим цветом.

Задача 1.36. “ПАЛИНДРОМЫ”. Палиндромом называют слово, которое читается одинаково как слева направо, так и справа налево, например, “ABBA” и “1991” - палиндромы. Написать программу, которая, запросив у пользователя максимально 5 строк, в каждой из которых содержится до 3 слов длиной до 13 символов каждое, анализирует их и выводит на экран сообщение палиндром ли каждое слово.

УКАЗАНИЯ: Предусмотреть обработку ошибочных ситуаций, легкую смену числовых констант в тексте программы и про-

27

думать наглядный диалог с пользователем. Обратите внимание на функции из <STRING.H>.

РАЗВИТИЕ:

1.Предусмотреть режимы ввода/вывода: только экран и клавиатура, ввод из текстового файла и вывод в текстовый файл с отображением диалога на экране.

2.Расширить задачу п.1, добавив раскраску палиндромов и других слов разными цветами на экране, а также ввод максимальной длины палиндрома для поиска.

Задача 1.37. "КРУПНЫМИ БУКВАМИ". Написать про-

грамму, осуществляющую вывод в центре экрана короткой текстовой строки большими буквами. Каждая буква должна занимать 7 горизонтальных и 9 вертикальных символьных позиций на экране. Текст строки и символ рисования букв задается пользователем. Например, если введена строка "СИТО" и символ рисования "*", то в центре экрана должно появиться следующее изображение:

*****

*

* *******

 

*****

*

* *

**

*

*

*

*

*

* *

*

*

*

*

*

* *

*

*

*

*

* *

*

*

*

*

*

**

*

*

*

*

*

*

*

*

*

*

*

* *

*

*

*

*

****** * * *****

УКАЗАНИЯ: Ограничиться русскими буквами. Предусмотреть обработку ошибочных ситуаций и продумать удобный диалог с пользователем.

РАЗВИТИЕ:

1.Предусмотреть режимы ввода/вывода: только экран и клавиатура, ввод из текстового файла и вывод в текстовый файл с отображением диалога на экране.

2.Предусмотреть режим рисования каждой буквы строки символом самой этой буквы.

Задача 1.38. "БЕГУЩИЙ СИМВОЛ". Написать програм-

му, которая запросив у пользователя один символ, номер строки

28

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

УКАЗАНИЯ: Диапазон констант скорости движения символа подобрать экспериментально. Предусмотреть обработку ошибочных ситуаций и наглядную форму диалога с пользователем.

РАЗВИТИЕ:

1.Предусмотреть режимы ввода: с клавиатуры и из текстового файла.

2.Осуществить расширение задачи: задание цветов экрана и символа, направления движения (слева направо, сверху вниз, по диагонали и др.) и реализовать это в программе.

Задача 1.39. "ВЫВОД СТРОКИ ПО ВЫБОРУ". Написать программу, которая, запросив у пользователя строку символов и вариант ее вывода на экран (1. вертикально; 2. по диагонали с правого угла; 3. по диагонали с левого угла), выводит строку на экран указанным образом.

УКАЗАНИЯ: Предусмотреть обработку ошибочных ситуаций и наглядную форму диалога с пользователем.

РАЗВИТИЕ:

1.Предусмотреть режимы ввода: с клавиатуры и из текстового файла.

2.Осуществить расширение задачи: задание цветов экрана и строки, ее движение по экрану (скорость движения подобрать экспериментально) и реализовать это в программе.

Задача 1.40. ”ЦИФРЫ НА КОНВЕРТЕ”. Написать про-

грамму, которая, запросив у пользователя число N (0 < N < 999999), символ для рисования и координаты строки и колонки для показа, выводит полученное число (почтовый индекс) в виде стилизованных цифр как на почтовом конверте, используя для изображения каждой цифры матрицу 4 х 8 символьных позиций и межцифровое расстояние в 2 символа.

УКАЗАНИЯ: Предусмотреть обработку ошибочных ситуаций и продумать наглядный диалог с пользователем.

РАЗВИТИЕ:

1.Расширить эту задачу режимом вывода каждой стилизованной цифры символом самой этой цифры.

29

2.Расширить задачу п. 1, добавив задание цветов экрана и символа рисования.

Задача 1.41. ”ШЕСТНАДЦАТЕРИЧНЫЕ ЦИФРЫ”. На-

писать программу, которая, запросив у пользователя число X (0x00000000 < X < 0xFFFFFFFF), символ для рисования и коорди-

наты строки и колонки для показа, выводит полученное число в виде стилизованных шестнадцатеричных цифр 7-сегментного электронного индикатора, используя для каждой цифры матрицу 8 х 16 символьных позиций и межцифровое расстояние в 1 символ. При вводе допустимы символы 0...9, a...f, A...F.

УКАЗАНИЯ: Предусмотреть обработку ошибочных ситуаций и продумать наглядный диалог с пользователем. Обратите внимание на функции из <STRING.H>.

РАЗВИТИЕ:

1.Расширить эту задачу, добавив задание цветов экрана и символа рисования и режимом вывода каждой стилизованной цифры символом самой этой цифры.

2.Расширить задачу п. 1, добавив ввод изменяемой длины числа (2, 4, 8 цифр).

Задача 1.42. "СИМВОЛ ПО СПИРАЛИ". Написать про-

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

УКАЗАНИЯ: Диапазон констант скорости движения символа подобрать экспериментально. Предусмотреть обработку ошибочных ситуаций и наглядную форму диалога с пользователем.

РАЗВИТИЕ:

1.Предусмотреть режимы ввода: с клавиатуры и из текстового файла.

2.Осуществить расширение задачи: задание цветов экрана и символа, направления движения (расручивающаяся и скручивающаяся спираль) и реализовать это в программе.

Задача 1.43. "КЛЮЧЕВЫЕ СЛОВА СИ". Написать про-

грамму, осуществляющую подсчет ключевых слов языка Си во входном тексте. Вводится последовательность не более 5 строк длиной не более 75 символов. Окончание входного текста - ввод

30