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

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

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

строки, начинающейся символом "@". На выходе формируется следующая информация:

(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