Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Модуль 1.






unit op;

Interface

Type

tSetChar= set of char;

Const

n=20; // в строке модет быть не более чем n слов

Razdelit: tSetChar=[’ ’, ’, ’, ’.’, ’! ’, ’? ’, ’: ’, ’; ’]; // символы—разделители слов

Type

tLstSlovo= array [1..n] of string;

 

Implementation

End.

Модуль 2.

unit obrabotka;

Interface

uses op;

 

function VidelitSlova(st: string; var SS: tLstSlovo): integer;

procedure DeleteBukva(var SS: tLstSlovo);

procedure PrintSlova(SS: tLstSlovo);

Implementation

function Nachalo(st: string; nach: byte): byte;

{функция поиска начала слова в строке текста начиная с указанной позиции

st – заданная строка текста

nach – начальная позиция для поиска начала слова

}

Begin

while (st[nach] in Razdelit) do // символ nach относится к разделителям слов

nach: =nach+1;

Nachalo: =nach // вернули номер символа, не относящегося к разделителям

End;

function Konec(st: string; kon: byte): byte;

{функция поиска конца слова строке текста начиная с указанной позиции

st – заданная строка текста

kon – начальная позиция для поиска начала слова

}

Begin

while (not (st[kon] in Razdelit)) and // символ kon не относится к разделителям слов и

(kon< Length(st)) do // не конец строки

kon: = kon+1;

Konec: =kon-1 // вернули номер символа, относящегося к разделителям

End;

function VidelitSlova(st: string; var SS: tLstSlovo): integer;

Var

i: integer;

kol: byte; // количество слов в тексте

nach, // начало слова

kon // конец слова

: byte;

Begin

nach: =1; // начинаем искать первое слово в первого символа

while (nach< Length(st) do begin

nach: =Nachalo(st, nach); // найдем начало слова

kon: =Konec(st, nach+1); // найдем конец слова слова

kol: =kol+1; // стало на одно слово больше

SS[kol]: =copy(st, nach, con-nach+1); // записали найденное слово в массив слов

nach: =con+1 // начало следующего слова будем искать за концом предыдущего

end;

VidelitSlova: =kol // всего слов

End;

procedure DeleteBukva(var SS: tLstSlovo; kol: byte);

Var

i: integer;

Begin

for i: =2 to kol do // для каждого слова из списка начиная со второго

delete(SS[i], 1, 1) // удаляем первую букву в слове

End;

procedure PrintSlova(SS: tLstSlovo; kol: byte);

Var

i: integer;

Begin

for i: =1 to kol do // для каждого слова из списка

if SS[i]= SS[1] then // если слово совпадает с первым

WriteLn(SS[i]) // выводим его

End;

End.

Основная программа.

Uses

op, obrabotka;

Var

str: string; // строка текста

LstSlovo: tLstSlovo; // список слов

KolSlov: byte; // количество слов в тексте

Begin

// ввод исходной строки

WriteLn(’Введите строку текста’);

ReadLn(str);

// обработка строки

KolSlov: =VidelitSlova(str, LstSlovo);

DeleteBukva(LstSlovo, KolSlov);

// вывод найденных слов

PrintSlova(LstSlovo, KolSlov)

End.

 

Задания для самостоятельного решения.

Вариант 1.

1. Напишите программу подсчета суммарного числа букв ’а’ и ’б’ в заданном тексте. Вывести на экран сообщение, каких букв больше.

2. Дан текст. Преобразовать его следующим образом: если нет символа ’*’, то оставить его без изменений, иначе заменить каждый символ ’*’, встречающийся после первого его вхождения, на символ ’-’.

3. Дана строка в виде предложения, причем известно, что слова отделены друг от друга пробелами. Посчитать, сколько слов начинается с буквы ’T ’.

Вариант 2.

1. Написать программу, удаляющую из данного текста все буквы ’л’.

2. Выяснить, является ли введенное слово перевертышем.

3.Задано предложение Y, состоящее из слов. Проверить, встречается
ли данное слово X в предложении Y.

Вариант 3.

1. Написать программу, которая каждую букву ’б’ заменяет сочетанием ’ку ’.

2. Дана последовательность символов. Преобразовать ее следующим образом: удалить каждый символ ’*’ и повторить каждый символ, отличный от символа ’*’.

3. Дан текст. Преобразовать его следующим образом: удалить группы пробелов, которыми начинается и заканчивается последовательность, а также заменить каждую внутреннюю группу пробелов одним пробелом. Если указанных групп нет в данном тексте, то оставить его без изменений.

Вариант 4.

1. Дан текст. Определить число вхождений в строку, группы букв ’aвс’.

2. Написать программу, подсчитывающую, сколько раз в данном слове X встречается (в качестве его части) слово Y.

3. Дан текст. Написать программу, которая подсчитывает количество слов в тексте учитывая, что между словами может быть по несколько пробелов.

Вариант 5.

1. Дан текст. Выяснить, верно, ли, что в тексте имеется пять идущих подряд букв ’е’.

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

3. Дан текст. Написать программу, которая находит самое длинное слово, встречающееся в тексте.

Вариант 6.

1. Дан текст, заменить все вхождения буквы ’а’ на ’о’.

2. Выяснить, является ли введенное слово симметричным.

3. Дана последовательность символов. Преобразовать ее следующим образом: удалить из слов этого текста все предыдущие вхождения последней буквы каждого слова.

Вариант 7.

1. Дан текст, заменить все вхождения заданного слога (сочетания 2-х символов) на заданный символ.

2. Выяснить, сколько в тексте слов перевертышей.

3. Дана последовательность символов. Преобразовать ее следующим образом: удалить из слов этого текста все последующие вхождения первой буквы каждого слова.

Вариант 8.

1. Пусть задано слово длиной не менее 10 символов. Если слово нечетной длины, то удалить его первую букву, если слово четной длины, то удалить его последнюю букву.

2. Дан текст, заканчивающийся точкой (это необходимо в задачах, когда нужно выделить последний символ слова). Подсчитать кол-во слов, у которых первый и последний символы совпадают.

3. Дана последовательность, содержащая от 2 до 30 слов, в каждом из которых от 1 до 5 букв латинского или русского алфавита; между соседними словами - запятая, за последним словом - точка. Напечатать все слова, которые встречаются в последовательности по одному разу.

Вариант 9.

1. В заданном слове перенести последнюю букву в начало слова.

2. Дан текст. Удалить самое короткое слово из текста, учитывая, что все слова разной длины.

3. Дана последовательность слов. Написать программу, которая выведет на печать эту же последовательность слов, но в обратном порядке.

Вариант 10.

1. В заданном слове перенести первую букву в конец слова.

2. Написать программу, которая удалит из заданного слова все повторяющиеся символы.

3. Дана последовательность, содержащая от 2 до 30 слов, в каждом из которых от 1 до 5 букв латинского или русского алфавита; между соседними словами - запятая, за последним словом - точка. Напечатать эту же последовательность слов, но удалив из нее повторные вхождения слов.

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

1. Какие существуют способы моделирования строк?

2. Если строка описана как массив символов, можно ли использовать процедуры и функции обработки строки?

3. Какое моделирование строк позволяет использовать для ее обработки, типовые алгоритмы обработки массивов?

4. Можно ли из строки удалить символ (или группу символов), если да, то каким образом и что при этом происходит со строкой?

5. Укажите тип переменной х в операторе присваивания: x: =" видео" +" адаптер.

6. Пусть задана программа

Var

st, st1, st2: string;

Begin

st1: = ’инфо’;

st2: =’мати’;

st: =st1+’р’+st2+’ка’;

WriteLn(st);

End.

Чему будет равно значение переменной st=___________

7. Строка а “аромат’, строка b равна “финик’. Известны алгоритмы образования строк a и b из строки n:

a: =n[11]+n[5]+n[4]+n[6: 8]

b: =n[3]+n[1: 2]+n[9]+n[10]

Строка n=______________________

8. Пусть задана программа

Var

st, subst: string;

k: integer;

Begin

st: =‘Мама мыла раму’;

subst: =’ма’;

k: =pos(subst, st);

WriteLn(k);

end.

Чему будет равно значение переменной k=__________________

9. Пусть задана программа

Var

st: string;

k: integer;

Begin

st: = ’Динамическое программирование.’;

k: =Length(st);

WriteLn(k);

end.

Чему будет равно значение переменной k=__________________

10. Пусть задана программа

Var

st: string;

k, i: integer;

Begin

st: = ’Программирование’;

k: =Length(st);

i: =1;

while i< =k do

if st[i]=’р’ then

Delete(st, i, 1)

Else

i: =i+1;

WriteLn(st)

end.

Чему будет равно значение переменной st=__________________


 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.