Задачи по теме "Строковые величины"
Известно, что мотивация учения возрастает, если рассматриваемые учебные задачи носят практический, прикладной характер. Это наталкивает на мысль, что при решении задач на программирование по теме "Литеры, строки" целесообразно предлагать те задачи, которые очень часто встречаются в жизни пользователя компьютера и потому не вызывают отторжения их учеником (обычно это случается, если задача является искусственной, так сказать, "притянутой за уши").
Приведенные здесь задачи были составлены Волковым К.В. во время прохождения педагогической практики в ЦИТО г. Перми (ПЛ №1) и предлагались учащимся на практических и лабораторных занятиях. В большинстве своем они носят прикладной характер и, с этой точки зрения, лишены указанных выше недостатков.
Градация задач проводится по уровню сложности, и в соответствии с ним выделено три раздела: в первом - наиболее простые; во втором - среднего уровня сложности и в третьем - максимального уровня сложности.
I раздел
1. Байты. Дана строка символов. Определить, является ли она последовательностью байтов. Байт — две идущие подряд шестнадцатеричные цифры. Примечание. Незначащие нули, если они имеются, также указываются при записи байтов.
Примеры
Введите строку: FF0976
Ответ: является
Введите строку: 567FA
Ответ: не является
2. С/Pascal. Дана строка символов. Заменить все вхождения символа '{' на 'begin', а каждое вхождение символа '}' — на 'end'.
3. FTP-Connection. Пользователю, зарегистрированному на FTP-сервере, для получения доступа к файлам на нем нужно набрать в FTP-браузере команду вида: ftp://логин:пароль@адрес_сервера. Написать программу, которая из введенной строки выделяет логин, пароль и адрес FTP-сервера и печатает эту информацию.
Пример
Входная строка: ftp://CoolUser:[email protected]
Вывод:
Адрес сервера: ftp.erunda.ru
Логин: CoolUser
Пароль: parol
4. Ваше "машинное" имя. Вводится строка символов. Требуется вывести на экран последовательность из ASCII-кодов ее символов в десятичной системе счисления. Поинтересуйтесь, как будет выглядеть кодировка Вашего имени.
Пример
Входные данные: ДОМ
Вывод на экран: 132 142 140
5. Визуализация неотображаемых символов. Вводится строка символов. Преобразуйте ее следующим образом: каждый пробел замените символом с ASCII-кодом 249, а в конце строки поставьте символ с ASCII-кодом 254.
6. Создание шаблона электронного письма. Некая почтовая программа при создании письма использует следующую технологию. Она берет имя получателя и помещает его после приветствия. Затем следует место для текста сообщения, после него — подпись отправителя. Имена получателя и отправителя программа берет из их электронных адресов. Напишите программу, реализующую данное действие.
Входные данные:
электронный адрес адресата;
электронный адрес отправителя.
Выходные данные: шаблон сообщения.
Пример
Входные данные:
Кому: [email protected]
От кого: [email protected]
Текст сообщения:
Поздравляю тебя со стаодиннадцатилетием!
Желаю здоровья и долголетия.
Вывод на экран:
Здравствуй, 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. Удаление комментариев. Дан массив строк, представляющий собой текст программы на языке Си. Требуется написать программу удаления комментариев. Комментарий — последовательность символов, заключенная между "/*" и "*/". Комментарий может быть многострочным, т.е. начинаться в одной строке, а заканчиваться в другой.
3. "Поставил begin — поставь и end." (из высказываний студентов). Дан массив строк, представляющий собой фрагмент программы на языке Pascal. Напишите программу, проверяющую правильность вложения операторных скобок begin ... end — каждому begin должен соответствовать end.
4. "Доверяй, но проверяй" (известная русская поговорка). Дано некоторое число 1<К<33. Определить, является ли введенная строка символов изображением числа в К-ичной системе счисления.
Входные данные:
К
строка
Выходные данные:
"является", если строка есть изображение числа в К-ичной системе счисления, и "не является", если не является изображением.
Пример
К = 2
Строка: 10011
Ответ: является
К = 2
Строка: 10210
Ответ: не является
5. Оптимизатор исходного кода. Для увеличения/уменьшения значения целочисленной переменной на1 в языках программирования можно использовать операции сложения/вычитания, а можно операции инкремент/декремент. Известно, что операции инкремент/декремент выполняется гораздо быстрей, чем сложение/вычитание, поэтому их использование часто предпочтительней.
Дан массив строк, представляющий фрагмент текста программы на языке Паскаль. Известно, что данный фрагмент оперирует только с целочисленными переменными. В каждой строке — одна команда. Преобразовать данный текст, заменив каждую строку вида: переменная:=переменная+1; на строку вида: Inc(переменная); а каждую строку вида: переменная:=переменная-1; на строку вида: Dec(переменная);
Пример
Исходный текст:
Begin
ReadLn(a, b);
a := a + 1;
c := b + 1;
b := b — 1;
WriteLn('a =', a);
WriteLn('b =', b)
End.
Преобразованный текст:
Begin
ReadLn(a, b);
Inc(a);
c := b + 1;
Dec(b);
WriteLn('a =', a);
WriteLn('b =', b)
End.
6. Падежи. Вводится строка символов, представляющая собой фамилию на русском языке. Написать программу, склоняющую эту фамилию по падежам.
7. Дизассемблер. Некая ЭВМ имеет 8 регистров (R0-R7) и умеет выполнять три операции — останов, сложение и пересылку из регистра в регистр.
Команда останова: 00 00 00.
Формат команд сложения и пересылки: КОП РегИ, РегН
КОП: код операции — 1 для пересылки и 2 для сложения
РегИ — регистр-источник — из него данные извлекаются при выполнении операции;
РегН — регистр-назначение — в него записывается результат выполнения операции.
Машинная команда записывается в восьмеричном виде, где:
первые две цифры - КОП;
3-4 цифры - РегИ (0-7)
5-6 цифры - РегН (0-7)
Дан массив, содержащий команды на машинном языке в восьмеричном коде. В каждой строке массива — одна команда. Написать программу-дизассемблер, которая для каждой команды, введенной в машинном коде, выводит ее изображение в мнемокоде. Для команды останова использовать мнемонику HALT; для пересылки — мнемонику MOV, а для команды сложения — ADD. Дизассемблирование продолжается до первой встреченной команды останова. Если введена некорректная машинная команда, то должно выдаваться соответствующее сообщение об ошибке.
|