Лабораторная работа 5


Теоретический материал Справочник по процедурам и функциям


Цель работы: познакомить с понятием "стринг" и выработать навыки работы с символьной информацией в языке программирования Pascal научиться использовать строки символов и множества при решении задач.

Общие сведения

Переменные типа String аналогичны массивам типа Char. Их отличием является то, что число символов (длина строки) может динамически меняться в интервале от единицы до заданного верхнего значения.
Перед выполнением работы необходимо ознакомиться с правилами описания и использования строк, допустимых операций над ними, соответствующими стандартными процедурами и функциями.

Примеры

Пример1. Дан текст, слова в котором, могут разделяться пробелами, запятыми, точками и т.д. Требуется напечатать все слова с удвоенной буквой "н".
Этапы решения задачи:
  1. Разобьем задачу на несколько блоков
    а) Формирование тела программы, объявление переменных;
    б) Ввод текста;
    в) Очистка текста от "ненужных" символов до первого слова;
    г) Вычисление длины первого слова;
    д) Поиск в слове буквы "н";
    е) Подсчет стоящих рядом букв "н";
    ж) Печать найденного слова;
    з) Удаление первого слова;
    и) Если текст не закончился возвращение к пункту (в).
  2. Реализуем эти блоки на Паскале
a)
program example1; var st, st1:string; i,j,k,n:integer; flag:boolean; const znak=[' ','.',',',':',';','!','?']; begin end. Назначение переменных: t- содержит введенный текст st1 - хранит первое слово текста i,j,k,n - вспомогательные переменные flag - указывает, что данное слово искомое б) writeln('Введите текст'); readln(st); в) repeat while st[1] in znak do delete(st,1,1); г) i:=1 while (not (st[i] in znak)) and (i<=length(st)) do inc(i); st1:=copy(st,1,i-1); flag:= false; д) while (pos('н',st1)>0) and (not flag) do begin е) j:=pos('н',st1); n:=j; k:=0; while st1[n]='н' do begin inc(n); inc(k); end; if k=2 then flag:= true; delete(st1,j,k) end; ж) if flag then writeln(copy(st,1,i-1)); з) delete(st,1,i); и) until st=''; Приведем программу целиком: program example1; var st, st1:string; i,j,k,n:integer; flag:boolean; const znak=[' ','.',',',':',';','!','?']; begin writeln('Введите текст'); readln(st); repeat while st[1] in znak do delete(st,1,1); i:=1; while (not (st[i] in znak)) and (i<=length(st)) do inc(i); st1:=copy(st,1,i-1); flag:= false; while (pos('н',st1)>0) and (not flag) do begin j:=pos('н',st1); n:=j; k:=0; while st1[n]='н' do begin inc(n); inc(k); end; if k=2 then flag:= true; delete(st1,j,k) end; if flag then writeln(copy(st,1,i-1)); delete(st,1,i); until st=''; readln; end.

Контрольные вопросы

  1. Как описываются строковые переменные?
  2. Какая максимальная длина строки допустима в Pascal?
  3. Какие операции допустимы над строковыми данными?
  4. В чем отличие строковой переменной от массива символов?
  5. Какие стандартные процедуры и функции для работы со строками вы знаете?
  6. Что выведет функция Copy(x,Pos(' ',x)+1,18), если x='Сила есть - ума не надо'?
  7. Чему равно значение x[0] после присваивания x:='вопрос'?

Задания

Обработка текста: В следующих заданиях под словом "текст" понимается строка символов, слова в которой, разделены пробелами, ",",".","!","?",";",":" (одним или несколькими).
  1. Дан текст. а) Подсчитать количество слов в данной строке. б) Подсчитать количество букв а в последнем слове данной строки. в) Найти количество слов, начинающихся с буквы б. г) Найти количество слов, у которых первый и последний символы совпадают между собой. д) Найти длину самого короткого слова.
  2. Составить программу циклической перестановки букв в словах текста так, что i-я буква слова становится i+1-ой, а последняя - первой.
  3. В каждом слове текста замените "а" на букву "е", если "а" стоит на четном месте, и заменить букву "б" на сочетание "ак", если "б" стоит на нечетном месте.
  4. Гжатск получил новое название - город Гагарин. А в рязанской областной типографии еще не просохли гранки небольшой книги о родине первого космонавта. Конечно, книгу нужно было переделать... Написать программу, осуществляющую в некотором тексте замену слова "Гжатск" словом "Гагарин" (учесть, что слова имеют разную длину!)
  5. Дан текст, содержащий от 2 до 30 слов, в каждом из которых от 2 до 10 латинских букв; между соседними словами - не менее одного пробела. Напечатать все слова, отличные от последнего слова, предварительно преобразовав каждое из них по следующему правилу: 1) перенести первую букву в конец слова; 2) перенести последнюю букву в начало слова.
  6. Отредактировать заданное предложения текста, удаляя из него все слова с нечетными номерами и переворачивая слова с четными номерами. Например, HOW DO YOU DO -> OD OD
  7. Дан текст. Напечатать все слова, отличные от последнего слова, предварительно преобразовав каждое из них по следующему правилу: 1) оставить в слове только первые вхождения каждой буквы; 2) если слово нечетной длины, то удалить его среднюю букву
  8. Написать программу для подсчета суммы мест, на которых в словах текста стоит заданная буква.
  9. Составить таблицу слов данного текста, начинающихся с буквы "А", с указанием числа повторений каждого слова.
  10. Составить программу для вычеркивания из слов текста всех букв, стоящих на нечетных местах после буквы "а". Задачи на смекалку
  11. Составить программы для перевода арабских чисел в римские и для обратной операции. Например, 255 = CCLV = сто + сто + пятьдесят + пять Замечание. Подобными алгоритмами перевода чисел из одной системы в другую мы пользуемся по нескольку раз на дню, когда ведем денежные расчеты. Сумма денег - это арабское число, которому соответствует определенный набор банкнот и монет (аналоги римских цифр).
  12. Автоморфными называются числа, которые содержатся в последних разрядах их квадрата. Например:, 52=25, 252=625. Составить программу для нахождения нескольких автоморфных чисел.
  13. Подсчитать, сколько букв надо исправить в слове Х, чтобы получилось слово Y (Х,Y - слова одинаковой длины).
  14. Какое минимальное число букв необходимо заменить в слове X с тем, чтобы оно стало перевертышем?
  15. Составить программу для подсчета числа одинаковых букв в словах X и Y равной длины, стоящих на одних и тех же местах.
  16. Задано определенное количество конкретных сочетаний букв (например, УЩ, ЮЩ и др.). Определить, сколько таких групп символов содержится в тексте, вводимом с клавиатуры.
  17. С клавиатуры вводится текст. Подсчитать и вывести на печать количество слов текста, начинающихся с гласной.
  18. Для запоминания числа p иногда используют "магические" фразы, например: "это я знаю и помню прекрасно Пи многие знаки мне лишни напрасны" или "кто и шутя и скоро пожелаетъ Пи узнать число ужъ знаетъ". Число букв в каждом слове любой из данных фраз представляет собою некоторую цифру числа : "это"-3, "я"-1, "знаю"-4 и т.д. Составить программу, которая по указанному алгоритму будет выводить на печать число, используя любой текст.
  19. Для заданного текста определить длину содержащейся в нем максимальной серии символов, отличных от латинских букв.
  20. Записать программу, выясняющую, можно ли из букв слова X составить слово Y.

Задачи повышенной сложности

  1. Зашифровать введенную с клавиатуры строку, поменяв местами первый символ со вторым, третий с четвертым и т. д. Затем провести дополнительную шифровку результата смещением кода. Провести дешифровку.
  2. Составить процедуру создания текстового окна, окаймленного рамкой из псевдографических символов. В параметры процедуры ввести координаты левого верхнего угла, размеры и цвет окна, а также цвет рамки.
  3. Составить программу, организующую перемещение текстового окна 8х8 по экрану. См. задачу 2. Движение начинается по нажатию клавиши и заканчивается либо по нажатию клавиши, либо при достижении окном края экрана. Варианты движения: а) из левого верхнего угла в правый нижний угол. При неточном "попадании" в нижний угол смещать окно по одной из сторон до точной остановки в углу. б)из левого нижнего угла в правый верхний. в) из центра экрана к одной из боковых сторон. При достижении края размер окна по направлению движения должен уменьшаться до минимального.

Назад
На главную
    Учебник по языку Pascal          Лабораторные работы по программированию          Справочник