Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика 2 семестр (2).doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
136.7 Кб
Скачать

Задание 3. Строковой тип

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

2. Выясните, имеются ли среди вводимых символов все буквы, входящие в слово «змея».

3. Для большинства существительных, оканчивающихся на -онок и -енок, множественное число образуется от другой основы. Как правило, это происходит по образцу: цыпленок - цыплята, мышонок - мышата и т. д. (в новой основе перед последней буквой m пишется а или я в зависимости от предыдущей буквы: если это шипящая, то а, иначе - я). Имеются слова-исключения, из которых укажем следующие: ребенок (дети), бесенок (бесенята), опенок (опята), звонок (звонки), позвонок (позвонки), подонок (подонки), колонок (колонки), жаворонок (жаворонки), бочонок (бочонки). Есть еще ряд малоупотребительных слов-исключений, которые мы не рассматриваем. Пусть дан текст, среди символов которого имеется пробел. Группа символов, предшествующая первому пробелу, представляет собой русское слово, оканчивающееся на -онок или -енок. Получите это слово во множественном числе.

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

5. Вводится строка. Если она является записью римского числа, то преобразуйте ее в целое число.

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

7. Пусть вводится 10 произвольных имен. Необходимо распечатать их в алфавитном порядке. Попытайтесь решить задачу, не сортируя сами имена. Поскольку требуется просто распечатать их в алфавитном порядке, заведите массив, содержащий порядковые номера имен. При необходимости перестановки переставляйте не сами имена, а их порядковые номера. Такой подход особенно удобен, когда приходится сортировать сложные и «громоздкие» объекты.

8. Напишите функцию revpositn, которая получает два параметра strl и str2 типа string и возвращает позицию начала первого появления в strl текста, содержащего литеры str2 в обратном порядке. Например, revpositn (“внешность”, “сон”) должно возвратить 5, потому что подстрока “нос” (перевернутое “сон”) содержится в слове 'внешность' начиная с 5-й позиции. Заметим также, что revpositn (“внешность”, “нос”) дает 0.

9. Напишите функцию rightposition, которая получает два параметра strl и str2 типа string и возвращает позицию начала последнего появления str2 в strl. Например, rightposition (“Миссисипи”, “си”) дает значение 6.

10. Напишите функцию count, которая получает два параметра strl и str2 типа string и возвращает число, указывающее, сколько раз str2 встречается в strl. Функция не должна изменять свои параметры. Кроме того, любая литера в strl может учитываться не более чем в одном вхождении str2. Например, count (“балалайка”, “ала”) должна возвращать 1, а не 2.

11. Напишите функцию nonalpha, которая получает параметр str типа string и возвращает позицию его первой литеры, не являющейся буквой (как латинского, так и русского алфавитов) строчной или прописной. Например, nonalpha (“stev7n”) дает 5.

12. Напишите функцию splite (name As string, first As string, last As string), которая из параметра name, хранящего имя и фамилию человека, извлекает их в переменные first (имя) и last (фамилия). Имя и фамилия разделены некоторым числом пробелов. Например, после обращения splite (“Вася Иванов”, strl, str2) в strl должно оказаться слово “Вася”, а в str2 – “Иванов”. Необходимо также предусмотреть обнаружение и обработку некорректных данных. В частности, если в name вообще не окажется ни одного пробела, процедура должна установить в обоих выходных параметрах специальное значение “error” (ошибка). Какие еще ошибочные ситуации следует учесть?

13. Пусть даны две строки strl и str2. Выясните, можно ли из strl путем перестановки литер получить строку str2. Напишите подпрограмму, которая решала бы указанную задачу.

14. Напишите процедуру sortmid, которая сортировала бы ряд из n строк в алфавитном порядке, основываясь на k-й литере каждой строки, где k является параметром, передаваемым процедуре sortmid. Например, если k = 3, то элементы ряда должны быть отсортированы по возрастанию значения в третьей литере каждой строки. Если длина строки меньше k, то будем предполагать, что его k-й литерой, реально не существующей, служит пробел.

15. Напишите процедуру сортировки строк в обратном алфавитном порядке.

16. Напишите подпрограммы encode (зашифровать) и decode (расшифровать), которые получают два параметра str и alpha типа string. В первом параметре задается слово, подлежащее шифрованию (дешифровке), второй представляет собой некоторую перестановку 26 латинских букв алфавита. Принцип преобразования для шифрации состоит в следующем. Если некоторая буква в str является k-й буквой в обычном алфавите, то вместо нее должна быть взята буква из k-й позиции «нового» алфавита alpha. Для подпрограммы дешифровки используется обратный принцип.

17. Расширим предыдущую задачу. Напишите программу для тестирования подпрограмм encode и decode. Она должна начинаться с ввода ключа для шифрования и дешифровки - 26-буквенной строки. Затем вводится серия строк, подлежащих обработке. Над каждой строкой применяется сначала операция шифрования, а затем дешифровки. При этом необходимо контролировать некоторые ошибочные ситуации. Например, каждая содержащаяся в ключе буква должна быть представлена только один раз.

18. Напишите программу, которая будет вводить значения типа string и определять, является ли каждое из них правильным идентификатором, удовлетворяющем требованиям языка Basic. Напомним вкратце правила построения имен. Всякое имя может содержать от 1 до 127 литер; первой литерой должна быть латинская буква (строчная или прописная); любая другая литера (начиная со второй) может быть буквой, цифрой (от 0 до 9) или

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

19. Усовершенствуйте программу из предыдущей задачи, чтобы она умела распознавать служебные слова языка Basic и отвергать попытки их предъявления. Для простоты ограничьте набор служебных слов, взяв за основу только некоторые из них.

20. Усовершенствуйте программу из задачи 18, сделав возможным автоматическое преобразование неправильных идентификаторов в синтаксически допустимые. Если исходная строка имеет слишком большую длину, укоротите ее до допустимого размера путем отбрасывания избыточных литер; если она пуста, добавьте букву х. Если первая литера не является буквой, то вставьте перед ней букву х. Если в строке присутствуют какие-то «незаконные» литеры, удалите их.

21. Напишите процедуру convert (преобразовать), получающую один параметр date (дата) типа string, содержащий значение календарной даты в форме мм/дд/гг (месяц/день/год). Например, 14 декабря 1960 г. будет изображено как 12/14/60. Задача процедуры convert состоит в преобразовании полученного значения к форме “Месяц день, год”. Так, результатом преобразования только что приведенной даты должно стать “Декабрь 14, I960” (предполагается, что все даты относятся к XX веку).

22. Усовершенствуйте процедуру convert из задачи 21 так, чтобы месяц и (или) день в параметре date могли быть изображены не только двумя, но и при необходимости одной цифрой. Например, 17 мая 1929 г. может быть с одинаковым успехом представлено как 05/17/29 или как 5/17/29. Усовершенствуйте процедуру convert из задачи 21 так, чтобы любое некорректное значение даты отвергалось. В каких случаях исходную строку, определяющую дату, можно считать некорректной?

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

25. Пусть задан текст, представляющий собой последовательность строк. Признак конца текста вводится пользователем. Выведите на печать заданный текст в порядке возрастания длин строк.

26. Пусть текст представляет собой последовательность строк. На каждой строке находится имя, фамилия и отчество. Распечатайте все отчества по алфавиту, а также текст, содержащий строки, состоящие только из имен и фамилий.

27. Пусть задано десять русских имен. Проверьте, все ли эти имена написаны с прописной буквы; если нет, то исправьте ситуацию.

28. Напишите подпрограммы encode (зашифровать) и decode (расшифровать), которые получают два параметра str и alpha типа string. В первом параметре задается слово, подлежащее шифрованию (дешифровке), второй представляет собой некоторую перестановку 26 латинских букв алфавита. Принцип преобразования для шифрации состоит в следующем. Если некоторая буква в str является k-й буквой в обычном алфавите, то вместо нее должна быть взята буква из k-й позиции «нового» алфавита alpha. Для подпрограммы дешифровки используется обратный принцип.

29. Расширим предыдущую задачу. Напишите программу для тестирования подпрограмм encode и decode. Она должна начинаться с ввода ключа для шифрования и дешифровки - 26-буквенной строки. Затем вводится серия строк, подлежащих обработке. Над каждой строкой применяется сначала операция шифрования, а затем дешифровки. При этом необходимо контролировать некоторые ошибочные ситуации. Например, каждая содержащаяся в ключе буква должна быть представлена только один раз.

30. Напишите программу, которая будет вводить значения типа string и определять, является ли каждое из них правильным идентификатором, удовлетворяющем требованиям языка Basic. Напомним вкратце правила построения имен. Всякое имя может содержать от 1 до 127 литер; первой литерой должна быть латинская буква (строчная или прописная); любая другая литера (начиная со второй) может быть буквой, цифрой (от 0 до 9) или

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

31. Усовершенствуйте программу из предыдущей задачи, чтобы она умела распознавать служебные слова языка Basic и отвергать попытки их предъявления. Для простоты ограничьте набор служебных слов, взяв за основу только некоторые из них.

32. Усовершенствуйте программу из задачи 18, сделав возможным автоматическое преобразование неправильных идентификаторов в синтаксически допустимые. Если исходная строка имеет слишком большую длину, укоротите ее до допустимого размера путем отбрасывания избыточных литер; если она пуста, добавьте букву х. Если первая литера не является буквой, то вставьте перед ней букву х. Если в строке присутствуют какие-то «незаконные» литеры, удалите их.