Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodichka_tekhnologii_programmirovania(1).doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.4 Mб
Скачать

6.1. Примеры решения заданий

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

Решение: Алгоритм решения задачи представлен на рис. 6.1. Программа в Turbo Pascal будет иметь следующий вид:

Program max_diag;

Const Z: String='*?** * ? ?***';

ch: Char='?';

i: Byte=0;

Begin

WriteLn(Z);

While Pos(ch,Z)<>0 do

Begin

{вывод текущей позиции}

WriteLn(Pos(ch,Z)+i);

{удаление заданного символа}

Delete(Z,Pos(ch,Z),1);

{учет уменьшающейся длины}

Inc (i);

End;

WriteLn(Z);

ReadLn;

End.

Рис. 6.16. Блок-схема алгоритма решения задачи 1

Задача 2. Преобразовать строку, заменяя всякое вхождение одного данного символа: 1) на другой данный символ; 2) на данное слово.

Решение: Словами будем называть группы символов, разделённые пробелами (одним или несколькими) и не содержащие пробелов внутри себя.

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

Алгоритмы решения задачи представлены на рис. 6.2 и рис. 6.3.

Рис. 6.17. Блок-схема алгоритма решения задачи 2 (1)

Рис. 6.18. Блок-схема алгоритма решения задачи 2 (2)

1) Программа в Turbo Pascal будет иметь следующий вид:

Const z: String[24] = '\/\/\/\/\/\/\/\/\/\/';

old: Char='\'; new: Char='/';

Var i: Byte;

Begin

WriteLn('Исходная строка: ':22,z);

For i:=l to Length(z) do

If z[i]=old

then z[i]:=new;

Write('Строка после замены: ':22,z);

ReadLn;

End.

2) Программа в Turbo Pascal будет иметь следующий вид:

Const z: String='крутой сырой сухой';

old: String[1]='й';

new: String[3]='сть';

Var k,n: Byte;

Begin

n:=Length(old);

While Pos(old,z)<>0 do begin

k:=Pos(old,z);

Delete(z,k,n);

Insert(new,z,k);

end;

Write('Строка после замены: ',z);

ReadLn;

End.

Задача 3. Определить, является ли заданная строка (фраза) палиндромом. Палиндромом называется слово, фраза или стих, одинаково читающиеся слева направо и справа налево. Строку, последовательность символов z1,...,zn, будем называть палиндромом, если без учёта пробелов z1 = zn, z2=zn-1 и т.д.

Решение: Программа в Turbo Pascal будет иметь следующий вид:

Const z: String = 'ИСКАТЬ ТАКСИ';

Var i,q: Byte;

Begin

z:=Concat(' ''' ,z, ''' ');

Write ('Строка (фраза) ', z);

While Pos(' ',z)<>0 do

Delete(z,Pos(' ',z),l);

i:=l;

q:=Length(z);

While (i<=q div 2) and (z[i]=z[q+l-i]) do

Inc(i);

If i<=q div 2 then Write('не ');

Write('является палиндромом');

ReadLn;

End.

В первой программе из строки удаляются пробелы и после этого сравниваются пары симметричных символов: z1 и zn, z2 и zn-1 ,... Таких пар имеется q div 2, где q - количество символов в строке без учёта пробелов. Строка является палиндромом, если все пары просмотрены и совпадают.