
- •Технологии программирования
- •Содержание
- •Линейные алгоритмы
- •1.1. Примеры решения заданий
- •1.2. Задания для самостоятельного решения
- •1.3. Задания для контрольной работы
- •Алгоритмы с разветвлениями
- •2.1. Примеры решения заданий
- •2.2. Задания для самостоятельного решения
- •2.3. Задания для контрольной работы
- •Алгоритмы с циклами
- •3.1. Примеры решения заданий
- •3.2. Задания для самостоятельного решения
- •3.3. Задания для контрольной работы
- •Одномерные массивы
- •4.1. Примеры решения заданий
- •4.2. Задания для самостоятельного решения
- •4.3. Задания для контрольной работы
- •Двумерные массивы
- •5.1. Примеры решения заданий
- •5.2. Задания для самостоятельного решения
- •5.3. Задания для контрольной работы
- •6.1. Примеры решения заданий
- •6.2. Задания для самостоятельного решения
- •6.3. Задания для контрольной работы
- •7.1. Примеры решения заданий
- •7.2. Задания для самостоятельного решения
- •7.3. Задания для контрольной работы
- •8.1. Примеры решения заданий
- •8.2. Задания для самостоятельного решения
- •8.3. Задания для контрольной работы
- •Контрольная работа
- •Список использованных источников
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 - количество символов в строке без учёта пробелов. Строка является палиндромом, если все пары просмотрены и совпадают.