Задачи по теме "Строковые величины"
Известно, что мотивация учения возрастает, если рассматриваемые учебные задачи носят практический, прикладной характер. Это наталкивает на мысль, что при решении задач на программирование по теме "Литеры, строки" целесообразно предлагать те задачи, которые очень часто встречаются в жизни пользователя компьютера и потому не вызывают отторжения их учеником (обычно это случается, если задача является искусственной, так сказать, "притянутой за уши").
Приведенные здесь задачи были составлены Волковым К.В. во время прохождения педагогической практики в ЦИТО г. Перми (ПЛ №1) и предлагались учащимся на практических и лабораторных занятиях. В большинстве своем они носят прикладной характер и, с этой точки зрения, лишены указанных выше недостатков.
Градация задач проводится по уровню сложности, и в соответствии с ним выделено три раздела: в первом - наиболее простые; во втором - среднего уровня сложности и в третьем - максимального уровня сложности.
I раздел
1. Байты. Дана строка символов. Определить, является ли она последовательностью байтов. Байт — две идущие подряд шестнадцатеричные цифры. Примечание. Незначащие нули, если они имеются, также указываются при записи байтов.
Примеры
Введите строку: FF0976
Ответ: является
Введите строку: 567FA
Ответ: не является
2. С/Pascal. Дана строка символов. Заменить все вхождения символа '{' на 'begin', а каждое вхождение символа '}' — на 'end'.
3. FTP-Connection. Пользователю, зарегистрированному на FTP-сервере, для получения доступа к файлам на нем нужно набрать в FTP-браузере команду вида: ftp://логин:пароль@адрес_сервера. Написать программу, которая из введенной строки выделяет логин, пароль и адрес FTP-сервера и печатает эту информацию.
Пример
Входная строка: ftp://CoolUser:parol@ftp.erunda.ru
Вывод:
Адрес сервера: ftp.erunda.ru
Логин: CoolUser
Пароль: parol
4. Ваше "машинное" имя. Вводится строка символов. Требуется вывести на экран последовательность из ASCII-кодов ее символов в десятичной системе счисления. Поинтересуйтесь, как будет выглядеть кодировка Вашего имени.
Пример
Входные данные: ДОМ
Вывод на экран: 132 142 140
5. Визуализация неотображаемых символов. Вводится строка символов. Преобразуйте ее следующим образом: каждый пробел замените символом с ASCII-кодом 249, а в конце строки поставьте символ с ASCII-кодом 254.
6. Создание шаблона электронного письма. Некая почтовая программа при создании письма использует следующую технологию. Она берет имя получателя и помещает его после приветствия. Затем следует место для текста сообщения, после него — подпись отправителя. Имена получателя и отправителя программа берет из их электронных адресов. Напишите программу, реализующую данное действие.
Входные данные:
электронный адрес адресата;
электронный адрес отправителя.
Выходные данные: шаблон сообщения.
Пример
Входные данные:
Кому: Bilbo@valinor.er
От кого: Gandalf@valinor.er
Текст сообщения:
Поздравляю тебя со стаодиннадцатилетием!
Желаю здоровья и долголетия.
Вывод на экран:
Здравствуй, Bilbo!
Поздравляю тебя со стаодиннадцатилетием!
Желаю здоровья и долголетия.
С уважением, Gandalf.
7. "Что в имени тебе моем...". Есть некая простейшая многопользовательская операционная система и список зарегистрированных в ней пользователей. При входе у пользователя запрашивается его имя. Если этого имени нет в списке, то доступ к системе запрещается и выводится соответствующее сообщение, иначе — приглашение к работе. Напишите программу, моделирующую работу такой системы.
8. ANSI C & Borland C. Согласно стандарту ANSI С, при задании пути к файлу в программе на языке С, каталоги разделяются символом "/", а в стандарте фирмы Borland для разделения каталогов используется последовательность символов "\". Написать программу, которая переводит строку, содержащую путь к файлу в стандарте ANSI С, в строку, содержащую путь к файлу в стандарте фирмы Borland.
Пример
Путь в ANSIC > C:/MYDOCS/TEX/DOC1.TEX
Путьв Borland C > C:\MYDOCS\TEX\DOC1.TEX
9. Расстановка длинных тире. Символ — в HTML-документе представляет собой длинное тире, которое при просмотре страницы выглядит гораздо привлекательней обычного "-". Поэтому эстеты Веб-дизайна предпочитают использовать именно его. Дан текст, содержащий последовательности символов "-". Заменить их на последовательность символов "—".
10. DOS-Unix. Дана строка, содержащая путь к файлу или каталогу, записанный по соглашениям, принятым в ОС MS DOS. Преобразовать данную строку таким образом, чтобы она содержала путь в формате ОС Unix, то есть заменить каждый символ "\" на символ "/".
Пример
Путь DOS: С:\WINDOWS\SYSTEM
Путь Unix: C:/WINDOWS/SYSTEM
11. Полезные функции для работы с символами. Напишите функцию, определяющую, является ли введенный символ (функция возвращает число 1, если является, и 0 — в противном случае)
а) буквой латиницы или кириллицы;
б) цифрой от 0 до 9;
в) строчной буквой латиницы или кириллицы;
г) прописной буквой латиницы или кириллицы;
д) шестнадцатеричной цифрой;
е) пробелом, то есть символом с кодом из диапазона 0..32.
12. Полезные функции для работы со строками символов
1) Напишите функцию, осуществляющую перевод строки, состоящей из символов латиницы и/или кириллицы, в нижний регистр. Функция должна возвращать строку, где буквы записаны в нижнем регистре.
2) Напишите функцию, осуществляющую перевод строки, состоящей из символов латиницы и/или кириллицы, в верхний регистр. Функция должна возвращать строку, где буквы записаны в верхнем регистре.
II раздел
1. Шифрация. Один из методов шифрации называется наложением гаммы. Делается это следующим образом: берется некоторое случайное число в диапазоне от 127 до 255 — гамма, и код каждого символа строки заменяется кодом, получающимся в результате операции: новый код=старый код XOR гамма. Написать программу, реализующую а) данный метод шифрации; б) дешифрацию строки при заданной гамме.
Входные данные: шифруемая строка.
Выходные данные:
гамма
зашифрованная строка.
2. Кодировщик. Написать программу, перекодирующую строку в кодировке KOI в строку в кодировке Windows-1251 и обратно.
3. Тэг курсива. Дан текст, в котором встречаются структуры "<i>" и "</i>". Заменить каждое вхождение "<i>" на "<курсив>", а каждое вхождение "</i>" на "<конец курсив>". Замечание. В программе следует учесть, что буква "i" может быть как строчной, так и прописной.
4. Форматирование текста. Дан текст, состоящий из предложений, разделяемых точками. Напишите программу, производящую следующее форматирование: после каждой точки в конце предложения должен стоять хотя бы один пробел; первое слово в предложении должно начинаться с прописной буквы. Замечание. Текст может быть как на русском, так и на английском языке.
5. Статистика. Дан текст. Напишите программу, определяющую процентное отношение строчных и прописных букв к общему числу символов в нем.
6. Статистика-2. Дан текст. Определите, каких букв (строчных или прописных) в нем больше, и преобразуйте следующим образом: если больше прописных букв, чем строчных, то все буквы преобразуются в прописные; если больше строчных, то все буквы преобразуются в строчные; если поровну и тех и других — текст остается без изменения.
7. Частота появления букв в словах. Дан текст, содержащий слова на латинице, разделенные пробелами. Определить, какие буквы в словах совпадают чаще: первые, последние или средние. Позиция средней буквы в слове определяется по формуле:
поз_средн_буквы = длина_слова div 2 + 1,
где div — операция целочисленного деления.
8. Лишние пробелы. Дана строка, состоящая из слов, разделенных пробелами. Напишите программу, удаляющую лишние пробелы. Пробел считается лишним, если он
стоит в начале строки;
стоит в конце строки;
следует за пробелом.
9. Три кита — 2, 8, 16...
a) Вводится строка символов. Если она является изображением целого числа в восьмеричной системе счисления, то перевести ее в целое число в десятичной системе счисления, иначе выдать сообщение о некорректном вводе.
б) Вводится строка символов. Если она является изображением целого числа в шестнадцатеричной системе счисления, то перевести ее в целое число в десятичной системе счисления, иначе выдать сообщение о некорректном вводе.
в) Вводится строка символов. Если она является изображением целого числа в двоичной системе счисления, то перевести ее в целое число в десятичной системе счисления, иначе выдать сообщение о некорректном вводе.
г) Вводится строка символов. Если она является изображением целого числа в двоичной системе счисления, то вывести его шестнадцатеричное и восьмеричное представление, иначе выдать сообщение о некорректном вводе. Примечание. Использовать промежуточный перевод в десятичную систему счисления не разрешено.
10. Форматный вывод числа. С клавиатуры вводится целое число в десятичной системе счисления. Написать программу, реализующую вывод его представления с разделением на триады цифр.
Пример
Число: 100000
Форматированный вывод: 100 000
Число: 1000000
Форматированный вывод: 1 000 000
11. Вычисление арифметического выражения. Арифметическое выражение вводится в виде строки вида
A op B,
где А и В — целые числа, а op — знак арифметической операции: +, -, *, /. Написать программу, вычисляющую значение выражения. Обеспечить проверку корректности ввода выражения.
III раздел
1. Функция BIN$. Известно, что в реализации QBasic языка Basic отсутствует функция BIN$ для вывода двоичного представления числа. Напишите такую функцию, не используя при этом операцию деления. Функции в качестве параметра передается целое число в десятичной системе счисления, результат — строка, являющаяся двоичным представлением данного числа.
2. Удаление комментариев. Дан массив строк, представляющий собой текст программы на языке Си. Требуется написать программу удаления комментариев. Комментарий — последовательность символов, заключенная между "/*" и "*/". Комментарий может быть многострочным, т.е. начинаться в одной строке, а заканчиваться в другой.