Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК_ОАиП.doc
Скачиваний:
5
Добавлен:
10.01.2020
Размер:
5.06 Mб
Скачать

Лабораторная работа №21.

Тема: Строки.

Цель: Освоить на практике новый тип данных – строка, научиться работать с текстом.

Описание строки.

  1. I способ

Type <название типа 1> = string[10];

<название типа 2> = string;

(до 255)

Var <идентификатор>:<название типа>;

II способ

Var <идентификатор>: string[ ];

зарезерв длина

Замечание. Если две строки А и В описаны одинаково, то разрешено присвоение A:=B. Однако сравнение двух строк разрешается посимвольно. Обращение к каждому символу в строке аналогично доступу к каждому элементу в массиве.

Var A:string;

A[1] – первый символ

A[2 – второй символ

A[i – I – ый символ

Составить программу, позволяющую сформировать массив из слов данного предложения. Подсчитать количество слов, начинающихся с буквы Т.

uses crt;

var

s:string;

x:char;

n,i,m:byte;

mas:array[1..10] of string;

begin clrscr;

s:='Уж небо осенью дышало';

n:=length(s);m:=1; mas[m]:=' '; {Обнуление нового слова}

for i:=1 to n do

if s[i]=' ' then begin

m:=m+1;

mas[m]:=' ';

end

else mas[m]:=mas[m]+s[i];

n:=0;

for i:=1 to m do

begin

writeln(mas[i]);

if mas[i,1] in ['T','t'] then inc(n)

end;

writeln('Количество слов, начин-ся с c T=',n);

readln;

end.

Индивидуальное задание:

  1. Записать все слова строки T в одномерный массив. Подсчитать количество слов, количество букв в которых нечетно.

uses crt;

const raz=[' ',',','.',';','-',':','!','?'];

var t:string;

mas:array[1..15] of string;

i,n,m:byte;

begin clrscr;

writeln('Vvedite stroku');

readln(t);

n:=length(t); m:=1;

mas[m]:='';

for i:=1 to n do

if t[i] in raz then begin

while(t[i] in raz) do inc(i);

inc(m);mas[m]:=t[i];

end

else mas[m]:=mas[m]+t[i];

writeln;

writeln;

writeln('Massiv:');

for i:=1 to m do writeln(mas[i],' ',length(mas[i]));

n:=0;

for i:=1 to m do

if odd(length(mas[i])) then inc(n);

writeln('Kol-vo netetn slov=',n);

readln;

end.

  1. Ввести строку A: string с клавиатуры. Заменить все встретившиеся строчные буквы на такие же прописные и вывести строку А после изменения.

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

Тема 7.3. Процедуры и функции работы со строками.

Цель: познакомить студентов с функциями обработки строк, научить использовать эти функции при решении задач.

  • развивать умения выделять главное в изученном материале, сравнивать, обобщать, логически излагать свои мысли.

  • привить интерес к дисциплине через прикладные программы.

План урока.

  1. Проверка домашнего задания.

  2. Актуализация знаний.

  3. Объяснение нового материала.

  4. Решение задач.

  5. Домашнее задание

Объяснение нового материала.

Встроенная функция Length (длина) позволяет определить фактическую длину текстовой строки, хранящейся в указанной переменной (а не величину предельного размера строки, установленную при декларации):

Program DemoFunctionLength;

Var

Word : string;

Begin

write (‘Введите слово :’);

readln(Word);

writeln(‘Это слово состоит из ‘,Length (Word),’ букв’);

End.

Примечание. При подсчете фактической длины строки учитываются все входящие в нее символы, в том числе и пробелы.

Функция Upcase

Функция Upcase позволяет преобразовывать символ любой литеры из строчного в прописной. Эта функция рассчитана на обработку отдельного символа. Поэтому для обработки строки символов с помощью этой функции приходится организовывать цикл.

Program DemoFunctionUpcase;

Var

Word : string;

i : Byte;

Begin

Word := ‘фирма Microsoft’;

for i := 1 to Length (Word) do

Word[i] := UpCase (Word[i]);

writeln(Word); {выводится текст ‘фирма MICROSOFT’}

End.

В результате работы программы на терминал выдается строка, содержащая большие английские буквы и маленькие русские.

Примечание. Русские литеры не могут обрабатываться этой функцией.

Для того, чтобы преобразовать в заглавные строчные буквы русского алфавита, применяют оператор выбора Case:

. . .

case Word[i] of

‘a’ : Word[i] := ‘A’;

‘б’ : Word[i] := ‘Б’;

‘в’ : Word[i] := ‘В’;

. . .

end;

. . .

Функция Copy позволяет копировать фрагмент некоторой строки из одной переменной в другую. Вызывая эту функцию нужно указать следующие параметры:

• имя строки, из которой должен извлекаться копируемый фрагмент,

• позицию в строке, начиная с которой будет копироваться фрагмент,

• число копируемых символов.

Program DemoFunctionCopy;

Var

Word : string;

Word1 : string[20];

Begin

Word := ‘фирма Microsoft’;

writeln(Word); {выводится текст ‘фирма MICROSOFT’}

Word1 := Copy (Word,1,5);

writeln(Word1); {выводится текст ‘фирма’}

End.

Примечание. Если начальная или конечная позиции копируемого текста находятся вне пределов исходной строки символов, то сообщение об ошибке не выдается. Результатом выполнения операции в первом случае будет строка нулевой длины, во втором - фрагмент от начальной позиции копирования до конца исходной строки.

C помощью функции Pos Вы можете осуществить поиск некоторого фрагмента в строке. Если заданный фрагмент в строке присутствует, то функция возвращает номер позиции, с которой он начинается. Если фрагмент не найден, то функция возвращает нуль.

Program DemoFunctionPos;

Var

Word : string;

SearchWord : string[20];

Position : Byte;

Begin

Word := ‘фирма Microsoft’;

writeln(Word); {выводится текст ‘фирма MICROSOFT’}

writeln (‘Введите искомый текст ‘);

readln (SearchWord);

Position := Pos(SearchWord, Word);

if Position <> 0

then

begin

write (‘Фрагмент <‘,SearchWord,’> содержится в строке <‘,Word);

writeln (‘>, начиная с позиции ‘,Position );

end

else

writeln(‘Фрагмент <‘,SearchWord,’> не содержится в строке <‘,Word); End.

Примечание. Функция Pos требует полного совпадения искомого фрагмента и фрагмента строки, в которой производится поиск. Причем большие и маленькие буквы считаются различными символами.

Функция Concat (Str1,Str2,...,StrN) выполняет конкатенацию (или сцепление) строк Str1,Str2,...,StrN в том порядке, в каком они указаны в списке параметров. Сумма символов всех сцепленных строк не должна превышать 255.

Program DemoFunctionConcat;

Var

Word : string;

Word1, Word2 : string[20];

Begin

Word1 := ‘фирмы ‘;

Word2 := ‘Microsoft’;

Word := Concat(‘Компьютеры ‘,Word1,Word2);

writeln(Word); {выводится текст ‘Компьютеры фирмы Microsoft’}

End.

Практическая часть. Решение задач.

1. В тексте слово SL1 заменить на слово SL2. Обозначение: р – позиция вхождения слова SL1 в строку t.

var t:string; SL1, SL2:string[20];

p :byte; L1, L2:byte;

begin writeln(′ввод текста′); readln(t);

writeln(′SL1′); readln(SL1);

L1:=length(SL1);

writeln(′SL2′); readln(SL2);

L2:=length(SL2);

p:=pos(SL1,t);

while p<>0 do begin delete(t,p,L1);

{удаляем слово SL1 из текста}

insert(SL2,t,p); {вст. слово SL2 в текст}

p:=pos(SL1,t);

end;

writeln(t); end.

  1. Распечатать текст по предложениям. В тексте предложения разделяются *.

var t:string; L, p:byte;

begin readln(t);

t:= t + ′*′; L:= length(t);

p:= pos(′*′, t);

w hile p<>0 do

begin writeln(copy(t, 1, p-1);

delete(t, 1, p);

{ или t:=copy(t, p+1, l-p)};

p:=pos(′*′, t);

end; end.

  1. Посчитать сколько слов в тексте начинается на букву «а». Слова в тексте разделены пробелами.

var a:string; t:char; p,k,L:byte;

begin writeln(′ввод текста′);

readln(a); a:= a+′_′;

k:=0; p:= pos(′_′,a); {ищем позицию конца слова}

while p<>0 do

begin

L:=length(a); {определяем длину текста}

t:= copy(a,1,1); {t - первая буква слова}

if t =′a′ then k:= k+1;

a:=copy(a,p+1,L-p); {удаляем слово}

p:= pos(′_′,a);

end

1. Определить сколько раз в тексте встречается буква А.

2. В заданном тексте удалить часть текста, заключённую в скобки (вместе со скобками).

3. Определить количество слов в тексте.

4. Указать минимальное количество первых букв, по которым можно различить слова из заданного набора (слова разделены запятыми).

5. Текст задан следующим образом: первый символ – цифра, указывающая длину первого слова, за первым словом – вновь цифра, указывающая длину второго слова (длина каждого слова <=9) и т.д. Выписать k–е слово из текста.

6. Напечатать самое длинное (короткое) слово из заданного текста.

7. Определить, какой процент слов в тексте содержит удвоенную согласную (слова разделены пробелами).

8. Сколько раз в тексте встречается заданное слово (слова разделены пробелами).

9. В тексте убрать лишние пробелы между словами, оставив по одному.

10. В тексте вставить между словами вместо одного пробела запятую и пробел.

11. Определить, какой процент слов в тексте начинается на букву К (слова разделены пробелами).

12. Сколько раз в тексте встречается заданное слово (в качестве разделителей могут употребляться пробелы, знаки препинания и т.п.).

13. Ученики зашифровывают свои записи, записывая все слова наоборот. Составить программу, зашифровывающую и расшифровывающую

сообщение.