Пример1. Дан текст, слова в котором, могут разделяться пробелами, запятыми, точками и т.д. Требуется напечатать все слова с удвоенной буквой "н".
Этапы решения задачи:
- Разобьем задачу на несколько блоков 
а) Формирование тела программы, объявление переменных;
б) Ввод текста;
в) Очистка текста от "ненужных" символов до первого слова;
г) Вычисление длины первого слова;
д) Поиск в слове буквы "н";
е) Подсчет стоящих рядом букв "н";
ж) Печать найденного слова;
з) Удаление первого слова;
и) Если текст не закончился возвращение к пункту (в).
 - Реализуем эти блоки на Паскале
 
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.
Контрольные вопросы
- Как описываются строковые переменные?
 - Какая максимальная длина строки допустима в Pascal?
 - Какие операции допустимы над строковыми данными?
 - В чем отличие строковой переменной от массива символов?
 - Какие стандартные процедуры и функции для работы со строками вы знаете?
 - Что выведет функция Copy(x,Pos(' ',x)+1,18), если x='Сила есть - ума не надо'?
 - Чему равно значение x[0] после присваивания x:='вопрос'?
 
Задания
Обработка текста:
В следующих заданиях под словом "текст" понимается строка символов, слова в которой, разделены пробелами, ",",".","!","?",";",":" (одним или несколькими).
- Дан текст. а) Подсчитать количество слов в данной строке. б) Подсчитать количество букв а в последнем слове данной строки. в) Найти количество слов, начинающихся с буквы б. г) Найти количество слов, у которых первый и последний символы совпадают между собой. д) Найти длину самого короткого слова.
 - Составить программу циклической перестановки букв в словах текста так, что i-я буква слова становится i+1-ой, а последняя - первой. 
 - В каждом слове текста замените "а" на букву "е", если "а" стоит на четном месте, и заменить букву "б" на сочетание "ак", если "б" стоит на нечетном месте. 
 - Гжатск получил новое название - город Гагарин. А в рязанской областной типографии еще не просохли гранки небольшой книги о родине первого космонавта. Конечно, книгу нужно было переделать... Написать программу, осуществляющую в некотором тексте замену слова "Гжатск" словом "Гагарин" (учесть, что слова имеют разную длину!) 
 - Дан текст, содержащий от 2 до 30 слов, в каждом из которых от 2 до 10 латинских букв; между соседними словами - не менее одного пробела. Напечатать все слова, отличные от последнего слова, предварительно преобразовав каждое из них по следующему правилу: 1) перенести первую букву в конец слова; 2) перенести последнюю букву в начало слова. 
 - Отредактировать заданное предложения текста, удаляя из него все слова с нечетными номерами и переворачивая слова с четными номерами. Например,  HOW DO YOU DO ->  OD OD
 - Дан  текст. Напечатать все слова, отличные от последнего слова, предварительно преобразовав каждое из них по следующему правилу: 1) оставить в слове только первые вхождения каждой буквы; 2) если слово нечетной длины, то удалить его среднюю букву
 - Написать программу для подсчета суммы мест, на которых в словах текста стоит заданная буква. 
 - Составить таблицу слов данного текста, начинающихся с буквы "А", с указанием числа повторений каждого слова. 
 - Составить программу для вычеркивания из слов текста всех букв, стоящих на нечетных местах после буквы "а".
Задачи на смекалку
 - Составить программы для перевода арабских чисел в римские и для обратной операции. 
Например, 255 = CCLV = сто + сто + пятьдесят + пять 
Замечание.  Подобными алгоритмами перевода чисел из одной системы в другую мы пользуемся по нескольку раз на дню, когда ведем денежные расчеты. Сумма денег - это арабское число, которому соответствует определенный набор банкнот и монет (аналоги римских цифр). 
 - Автоморфными называются числа, которые содержатся в последних разрядах их квадрата. Например:, 52=25, 252=625. Составить программу для нахождения нескольких автоморфных чисел. 
 - Подсчитать, сколько букв надо исправить в слове Х, чтобы получилось слово Y (Х,Y - слова одинаковой длины). 
 - Какое минимальное число букв необходимо заменить в слове X с тем, чтобы оно стало перевертышем? 
 - Составить программу для подсчета числа одинаковых букв в словах X и Y равной длины, стоящих на одних и тех же местах. 
 - Задано определенное количество конкретных сочетаний букв (например, УЩ, ЮЩ и др.). Определить, сколько таких групп символов содержится в тексте, вводимом с клавиатуры. 
 - С клавиатуры вводится текст. Подсчитать и вывести на печать количество слов текста, начинающихся с гласной. 
 - Для запоминания числа p иногда используют "магические" фразы, например: "это я знаю и помню прекрасно Пи многие знаки мне лишни  напрасны" или "кто и шутя и скоро пожелаетъ Пи узнать число ужъ знаетъ". Число букв в каждом слове любой из данных фраз представляет собою некоторую цифру числа  : "это"-3, "я"-1, "знаю"-4 и т.д. 
Составить программу, которая по указанному алгоритму будет выводить на печать число, используя любой текст. 
 - Для заданного текста определить длину содержащейся в нем максимальной серии символов, отличных от латинских букв. 
 - Записать программу, выясняющую, можно ли из букв слова X составить слово Y. 
 
Задачи повышенной сложности
- Зашифровать введенную с клавиатуры строку,  поменяв местами первый символ со вторым,  третий с четвертым и т. д. Затем провести дополнительную шифровку результата смещением кода. Провести дешифровку.
 - Составить процедуру создания текстового окна, окаймленного рамкой из псевдографических символов. В параметры процедуры ввести координаты левого верхнего угла, размеры и цвет окна, а также цвет рамки.
 - Составить программу, организующую перемещение текстового окна 8х8 по экрану. См. задачу 2. Движение начинается по нажатию клавиши и заканчивается либо по нажатию клавиши, либо при достижении окном края экрана. Варианты движения:
а) из левого верхнего угла в правый нижний угол. При неточном "попадании" в нижний угол смещать окно по одной из сторон до точной остановки в углу.
б)из левого нижнего угла в правый верхний.
в) из центра экрана к одной из боковых сторон. При достижении края размер окна по направлению движения должен уменьшаться до минимального.
 
Назад
На главную
 Нет комментариев. 
  
 
Оставить комментарий:
 |