Шереметев Информатика. Сборник домашних заданий 2009
.pdfстроки, начинающейся символом "@". На выходе формируется следующая информация:
(c) <имя автора, версия и название |
задачи> |
||
Входной текст: |
|
|
|
(последовательность входных |
строк) |
||
Введено N1 строк, всего N2 символов, |
|||
Минимальная длина строки N3 |
символов, |
||
Максимальная длина строки N4 |
символов. |
||
Обнаружено N5 |
ключевых слов языка |
Си: |
|
"for" |
встретилось |
N5 раз |
|
"if" |
встретилось |
N6 раз |
|
... |
|
|
|
(ключевые слова в алфавитном порядке) |
|||
Чаще всех встретилось ключевое |
слово "while": N16 раз |
УКАЗАНИЯ: Предусмотреть обработку ошибочных ситуаций и легкую замену в тексте программы числовых и символьных констант. Обратите внимание на функции из <STRING.H>. Хорошим тестом является исходный текст самой этой программы.
РАЗВИТИЕ:
1.Предусмотреть режимы ввода/вывода: только экран и клавиатура, ввод из текстового файла и вывод в текстовый файл с отображением диалога на экране.
2.Предусмотреть ввод символа-признака окончания входного текста и числовых констант из текстового файла.
Задача 1.44. "ЧИСЛА В СИ". Написать программу, осуществляющую отбор из входного текста последовательностей символов, удовлетворяющих правилам задания числовой константы типа int в языке Си (отбор лексем-чисел типа int). Вводится последовательность не более 7 строк длиной не более 57 символов. Окончание входного текста - ввод строки, начинающейся символом "/". На выходе формируется следующая информация:
(c) <имя автора, версия и название задачи> Входной текст:
(последовательность входных строк)
Введено N1 строк, всего N2 символов,
Минимальная длина строки N3 символов,
Максимальная длина строки N4 символов.
Выходной текст (с выделенными другим цветом лексемами-
числами):
31
Строка |
1: физика 123 |
матан |
0x1FDA информатика |
||
|
--- |
|
------ |
<-- |
выделено цветом |
Строка |
К: фикус 0794 |
while |
-945 end of text |
||
|
|
|
---- |
<-- |
выделено цветом |
Чаще |
всех встретилась лексема-число "123": N6 раз |
УКАЗАНИЯ: Предусмотреть обработку ошибочных ситуаций и легкую замену в тексте программы числовых и символьных констант. Обратите внимание на функции из <STRING.H>.
РАЗВИТИЕ:
1.Предусмотреть режимы ввода/вывода: только экран и клавиату-
ра, ввод из текстового файла и вывод в текстовые файлы (входной текст с удаленными лексемами-числами и файл с лексема- ми-числами с указанием номера строки, где они были обнаружены) с отображением диалога на экране.
2.Предусмотреть ввод символа-признака окончания входного текста и числовых констант из текстового файла.
Задача 1.45. "СКОБКИ В СИ". Написать программу, осуществляющую подсчет количества пар круглых и фигурных скобок, а также минимальной и максимальной вложенности скобок каждого типа в текстовом файле, содержащем синтаксически правильную программу на Си. Вводится имя входного файла, затем после обработки на экране и в выходном файле OUTFILE.DAT формируется следующая информация:
(c) <имя автора, версия |
и |
название |
задачи> |
|
Входной файл: INFILEN.AME содержит К1 |
строк, К2 символов. |
|||
Пар круглых скобок |
= |
N1, |
минимальная вложенность = N2, |
|
максимальная вложенность |
= N3 |
|
|
Пар фигурных скобок = N4, минимальная вложенность = N5,
максимальная вложенность = N6
УКАЗАНИЯ: Предусмотреть обработку ошибочных ситуаций. Обратите внимание на функции из <STRING.H>. Хорошим тестом является исходный текст самой этой программы.
РАЗВИТИЕ:
1.Расширить эту задачу формированием дополнительного выходного файла SMART.FIL, содержащего текст исходной программы, НО с удаленной избыточностью фигурных скобок.
32
Задача 1.46. "КОММЕНТАРИИ В СИ". Написать про-
грамму, осуществляющую подсчет количества комментариев и строк с комментариями, а также минимальной и максимальной длины комментария (в строках) в текстовом файле, содержащем синтаксически правильную программу на Си. Вводится имя входного файла, затем после обработки на экране и в выходном файле OUTFILE.DAT формируется следующая информация:
(c) <имя автора, версия и название задачи>
Входной файл: INFILEN.AME содержит К1 строк, К2 символов.
Комментариев = N1, мин. длина, строк = N2,
макс. длина, строк = N3
Строк с комментариями = N4, мин. длина, символов = N5,
макс. длина, символов = N6
УКАЗАНИЯ: Предусмотреть обработку ошибочных ситуаций. Обратите внимание на функции из <STRING.H>. Хорошим тестом является исходный текст самой этой программы.
РАЗВИТИЕ:
1.Расширить эту задачу подсчетом общего количества строк, содержащих только комментарии, а также их минимальной и максимальной длины в строках и символах.
Задача 1.47. "ВЕДОМОСТЬ УСПЕВАЕМОСТИ". Напи-
сать программу, обрабатывающую успеваемость студентов академической группы. Вводятся одна за другой пары значений - Фамилия И.О. студента и индекс его оценки на экзамене (0 - академический отпуск, 1 - неявка по неизвестной причине, 2 - неудовлетворительно, 3 - удовлетворительно, 4 - хорошо, 5 - отлично, 6 - не допущен, 7 - нет в группе, 8 - сессия продлена, 9 - неявка по уважительной причине). Процедура ввода завершается при вводе индекса оценки меньше 0 или больше 9. Затем после обработки выводятся средний балл по группе (учитываются только индексы 2, 3, 4, 5), для каждого индекса оценки с его названием общее количество студентов, их относительная доля в процентах и их Фамилии И.О., а в конце общее количество студентов.
УКАЗАНИЯ: Предусмотреть обработку ошибочных ситуаций и наглядную форму диалога.
33
РАЗВИТИЕ:
1.Предусмотреть режимы ввода/вывода: только экран и клавиатура, ввод из текстового файла и вывод в текстовый файл с отображением диалога на экране.
2.Расширить эту задачу для составления отчетов успеваемости с указанием академической группы и названия сдаваемого предмета.
Задача 1.48. “ТЕЛЕФОННЫЙ СПРАВОЧНИК". Написать программу электронного телефонного справочника. Вводятся одна за другой пары значений - Фамилия И.О. знакомого и номер его телефона. Процедура ввода завершается при вводе пустой строки. Затем после обработки выводится бщее количество записей, предлагается ввести имя файла, после чего все записи переписываются в текстовый файл. Предусмотреть также режимы загрузки файласправочника, его просмотра, добавления записи в конец, поиска телефона по Фамилия И.О.
УКАЗАНИЯ: Предусмотреть обработку ошибочных ситуаций, особенно при файловых операциях и наглядную форму диалога с пользователем.
РАЗВИТИЕ:
1.Расширить возможности записи, добавив в нее поля "домашний телефон", "рабочий телефон", "адрес" и реализовать это в программе.
2.Расширить эту задачу введением режимов удаления указанной записи и сортировки справочника по Фамилия И.О. и реализовать это в программе.
Задача 1.49. "ЗАПИСНАЯ КНИЖКА". Написать програм-
му, в основу которой положен список дней рождений (число, месяц, год) своих родных и друзей. Программа должна работать в следующих режимах:
1)пополнение списка;
2)поиск дня рождения по имени;
3)определение всех именинников, родившихся в заданном месяце (поиск по месяцу).
34
Выводимая информация кроме имени и даты должна содержать количество лет, исполняющихся имениннику в данном году. Записная книжка хранится в текстовом файле.
УКАЗАНИЯ: Предусмотреть обработку ошибочных ситуаций и наглядную форму диалога. Обратите внимание на функции из <STRING.H>.
РАЗВИТИЕ:
1.Расширить возможности записи, добавив в нее поля "любимые подарки", "телефон", "адрес" и реализовать это в программе.
2.Расширить эту задачу введением режимов удаления указанной записи и сортировки списка по имени и реализовать это в программе.
Задача 1.50. "СЛОВАРЬ СОКРАЩЕНИЙ". Написать про-
грамму, в основу которой положен текстовый файл со следующим форматом:
/* 1-я строка - сокращение */ МАТАН
/* 2-я строка - полное название */
МАТЕМАТИЧЕСКИЙ АНАЛИЗ
Программа должна работать в следующих режимах:
1)загрузка файла-словаря;
2)пополнение словаря;
3)поиск названия по его сокращению;
4)сохранение файла-словаря.
Если точное сокращение не найдено, то должно выводится ближайшее к нему с предупреждением об этом.
УКАЗАНИЯ: Предусмотреть обработку ошибочных ситуаций и наглядную форму диалога. Обратите внимание на функции из <STRING.H>.
РАЗВИТИЕ:
1.Расширить эту задачу введением режимов удаления указанной записи и сортировки словаря по сокращению и реализовать это в программе.
35
Задачи для групп А2-04, 05
Задача 2.1. Написать тестирующую main() и следующую функцию
int TStrRunXR( int |
y, |
/* номер строки показа на экране */ |
|
char |
*text, |
/* текст строки сообщения |
*/ |
int |
sa, |
/* атрибут строки сообщения |
*/ |
int |
ba |
/* атрибут чистого экрана |
*/ |
); |
|
|
|
/* В текстовом режиме показывает строку, бегущую справа налево, до нажатия любой клавиши, после чего возвращает код нажатой клавиши. При ошибке во входных параметрах возвращает -1, -2,...
по типу ошибки (доопределить самостоятельно). */
Задача 2.2. Написать тестирующую main() и следующую функцию
int TStrRunXL( int |
y, |
/* номер строки показа на экране */ |
|
char |
*text, |
/* текст строки сообщения |
*/ |
int |
sa, |
/* атрибут строки сообщения |
*/ |
int |
ba |
/* атрибут чистого экрана |
*/ |
); |
|
|
|
/* В текстовом режиме показывает строку, бегущую слева направо, до нажатия любой клавиши, после чего возвращает код нажатой клавиши. При ошибке во входных параметрах возвращает -1, -2,...
по типу ошибки (доопределить самостоятельно). */
Задача 2.3. Написать тестирующую main() и следующую функцию
int TStrRunYD( int |
x, |
/* номер столбца показа на экране */ |
|
char |
*text, |
/* текст строки сообщения |
*/ |
int |
sa, |
/* атрибут строки сообщения |
*/ |
int |
ba |
/* атрибут чистого экрана |
*/ |
); |
|
|
|
/* В текстовом режиме показывает строку, бегущую снизу вверх, до нажатия любой клавиши, после чего возвращает ее код. При ошибке во входных параметрах возвращает -1, -2,... по типу ошибки (доопределить самостоятельно). */
Задача 2.4. Написать тестирующую main() и следующую функцию
36
int TStrRunYU( int |
x, |
/* номер столбца показа на экране */ |
|
char |
*text, |
/* текст строки сообщения |
*/ |
int |
sa, |
/* атрибут строки сообщения |
*/ |
int |
ba |
/* атрибут чистого экрана |
*/ |
); |
|
|
|
/* В текстовом режиме показывает строку, бегущую сверху вниз, до нажатия любой клавиши, после чего возвращает ее код. При ошибке во входных параметрах возвращает -1, -2,... по типу ошибки (доопределить самостоятельно). */
Задача 2.5. Написать тестирующую main() и следующую функцию
int TStrRunAR( int |
y, |
/* номер строки показа на экране |
*/ |
char |
*text, |
/* текст строки сообщения |
*/ |
int |
sa, |
/* атрибут строки сообщения |
*/ |
int |
ba |
/* атрибут выделения символа строки */ |
|
); |
|
|
|
/* В текстовом режиме показывает строку, по которой справа налево пробегает атрибут ba, до нажатия любой клавиши, после чего возвращает ее код. При ошибке во входных параметрах возвращает -1,-2,... по типу ошибки (доопределить самостоятельно). */
Задача 2.6. Написать тестирующую main() и следующую функцию
int TStrRunAL( int |
y, |
/* номер строки показа на экране |
*/ |
char |
*text, |
/* текст строки сообщения |
*/ |
int |
sa |
/* атрибут строки сообщения |
*/ |
int |
ba |
/* атрибут выделения символа строки */ |
|
); |
|
|
|
/* В текстовом режиме показывает строку, по которой слева направо пробегает атрибут ba, до нажатия любой клавиши, после чего возвращает ее код. При ошибке во входных параметрах воз-
вращает -1, -2,... по типу ошибки (доопределить самостоятельно).
*/
Задача 2.7. Написать тестирующую main() и следующую функцию
int TStrRunAD( int |
x, |
/* номер столбца показа на экране |
*/ |
char |
*text, |
/* текст строки сообщения |
*/ |
int |
sa, |
/* атрибут строки сообщения |
*/ |
int |
ba |
/* атрибут выделения символа строки */ |
|
); |
|
|
|
|
|
37 |
|
/* В текстовом режиме показывает строку, по которой сверху вниз пробегает атрибут ba, до нажатия любой клавиши, после чего возвращает ее код. При ошибке во входных параметрах возвращает -1, -2,... по типу ошибки (доопределить самостоятельно). */
Задача 2.8. Написать тестирующую main() и следующую функцию
int TStrRunAU( int |
x, |
/* номер столбца показа на экране |
*/ |
char |
*text, |
/* текст строки сообщения |
*/ |
int |
sa, |
/* атрибут строки сообщения |
*/ |
int |
ba |
/* атрибут выделения символа строки */ |
|
); |
|
|
|
/* В текстовом режиме показывает строку, по которой снизу вверх пробегает атрибут ba, до нажатия любой клавиши, после чего возвращает ее код. При ошибке во входных параметрах возвращает - 1,-2,... по типу ошибки (доопределить самостоятельно). */
Задача 2.9. Написать тестирующую main() и следующую функцию
BOOL BitStrFind( char |
*str, |
/* текст строки - области поиска |
*/ |
int |
eol, |
/* код концевого маркера строки |
*/ |
BOOL |
bitval, |
/* значение искомого бита |
*/ |
int |
*nbyte, |
/* номер байта с найденным битом |
*/ |
int |
*nbit |
/* номер найденного бита в байте |
*/ |
); |
|
|
|
/* В строке str, рассматриваемой как строка битов, ищет бит со значением bitval и возвращает при успехе TRUE и координаты найденного бита в *nbyte, *nbit, иначе FALSE. В main() предусмотреть вывод времени исполнения функции в тиках. */
Задача 2.10. Написать тестирующую main() и следующую функцию
int BitChFind( char |
arr[], |
/* массив байтов - область поиска */ |
|
int |
len, |
/* длина массива байтов |
*/ |
BOOL |
bitval, |
/* значение искомого бита |
*/ |
int |
*nbyte, |
/* номер байта с найденным битом */ |
|
int |
*nbit |
/* номер найденного бита в байте |
*/ |
); |
|
|
|
/* В массиве arr[], рассматриваемом как последовательность битов длиной 8*len, ищет бит со значением bitval и возвращает при успехе 1 и координаты найденного бита в *nbyte, *nbit, иначе 0. При ошибке во входных параметрах возвращает -1, -2,... по типу ошиб-
38
ки (доопределить самостоятельно). В main() предусмотреть вывод времени исполнения функции в тиках. */
Задача 2.11. Написать тестирующую main() и следующую функцию
int BitIntFind( int |
arr[], |
/* массив целых - область поиска |
*/ |
int |
len, |
/* длина массива целых |
*/ |
BOOL |
bitval, |
/* значение искомого бита |
*/ |
int |
*nbyte, |
/* номер байта с найденным битом */ |
|
int |
*nbit |
/* номер найденного бита в байте |
*/ |
); |
|
|
|
/* В массиве arr[], рассматриваемом как последовательность битов длиной 16*len, ищет бит со значением bitval и возвращает при успехе 1 и координаты найденного бита в *nbyte, *nbit, иначе 0. При ошибке во входных параметрах возвращает -1, -2,... по типу ошибки (доопределить самостоятельно). В main() предусмотреть вывод времени исполнения функции в тиках. */
Задача 2.12. Написать тестирующую main() и следующую функцию
int BitLongFind( |
|
|
|
long |
arr[], |
/* массив длинных целых - область поиска |
*/ |
int |
len, |
/* длина этого массива |
*/ |
BOOL |
bitval, |
/* значение искомого бита |
*/ |
long |
*nbyte, |
/* номер байта с найденным битом |
*/ |
long |
*nbit |
/* номер найденного бита в байте |
*/ |
|
); |
|
|
/* В массиве arr[], рассматриваемом как последовательность битов длиной 32*len, ищет бит со значением bitval и возвращает при успехе 1 и координаты найденного бита в *nbyte, *nbit, иначе 0. При ошибке во входных параметрах возвращает -1, -2,... по типу ошибки (доопределить самостоятельно). В main() предусмотреть вывод времени исполнения функции в тиках. */
Задача 2.13. Написать тестирующую main() и следующую функцию
int BitFileFind( char |
*fn, |
/* имя файла - области поиска |
*/ |
BOOL |
bitval, |
/* значение искомого бита |
*/ |
long |
*nbyte, |
/* номер байта с найденным битом */ |
|
char |
*nbit |
/* номер найденного бита в байте |
*/ |
); |
|
|
|
/* В файле fn, рассматриваемом как строка битов, ищет бит со значением bitval и возвращает при успехе 1 и координаты найденного
39
бита в *nbyte, *nbit, иначе 0. При ошибке во входных параметрах возвращает -1, -2,... по типу ошибки (доопределить самостоятельно). В main() предусмотреть вывод времени исполнения функции в тиках. */
Задача 2.14. Написать тестирующую main() и следующую функцию
int BitStrCnt( char |
*str, |
/* текст строки - области подсчета */ |
|
int |
*ones, |
/* количество 1-битов в строке |
*/ |
int |
*zeros |
/* количество 0-битов в строке |
*/ |
); |
|
|
|
/* В строке str, рассматриваемой как строка битов, подсчитывает количество 0/1-битов, сообщая их в *zeros, *ones и возвращает длину строки в байтах. В main() предусмотреть вывод времени исполнения функции в тиках. */
Задача 2.15. Написать тестирующую main() и следующую функцию
int BitChCnt( char |
arr[], |
/* массив байтов - области подсчета */ |
|
int |
len, |
/* длина массива байтов |
*/ |
int |
*ones, |
/* число 1-битов в массиве |
*/ |
int |
*zeros |
/* число 0-битов в массиве |
*/ |
); |
|
|
|
/* В массиве arr[], рассматриваемом как последовательность битов длиной 8*len, подсчитывает количество 0/1 битов, сообщая их в *zeros, *ones и возвращает 0. При ошибке во входных параметрах возвращает -1, -2,... по типу ошибки (доопределить самостоятельно). В main() предусмотреть вывод времени исполнения функции в тиках. */
Задача 2.16. Написать тестирующую main() и следующую функцию
int BitIntCnt( int |
arr[], |
/* массив целых - области подсчета */ |
|
int |
len, |
/* длина массива целых |
*/ |
int |
*ones, |
/* количество 1-битов в массиве |
*/ |
int |
*zeros |
/* количество 0-битов в массиве |
*/ |
); |
|
|
|
/* В массиве arr[], рассматриваемом как последовательность битов длиной 16*len, подсчитывает количество 0/1 битов, сообщая их в *zeros, *ones и возвращает 0. При ошибке во входных параметрах возвращает -1,-2,... по типу ошибки (доопределить самостоя-
40