Создадим программу, которая обращает введенное слово, т. е. переставляет символы в слове в обратном порядке, например: Петя – ятеП, мама – амам, программа – аммаргорп.
Алгоритм обращения слова можно представить в виде следующей циклической процедуры обмена соответствующих символов: значение первого символа слова запоминается в некоторой переменной символьного типа Ch, затем на место первого символа записывается значение последнего символа, а на его место записывается значение первого символа, хранимое в переменной Ch, после этого аналогично выполняется обмен второго и предпоследнего символа, третьего и предпредпоследнего и т.д., пока мы не дойдем до середины слова. Далее обмен продолжать не нужно, иначе символы опять займут прежние места.
Исходя из этих рассуждений, введем следующие переменные: для хранения слова Word типа string с максимальным размером слов 30 символов и переменную I целого типа, указывающую номер позиции сравниваемого символа от начала строки, а также символьную переменную Ch для временного хранения значения символа при обмене. Заголовок программы можно будет записать следующим образом:
program Obr_Word;
var I : byte;
Ch : char;
Word : string[30];
Аналогично предыдущей программе, сначала выведем на экран запрос о вводе слова и считаем с клавиатуры значение слова в переменную Word. Этот фрагмент программы можно записать следующим образом:
Write(‘введите слово ‘);
Readln(Word);
После ввода слова следует выполнение циклической процедуры обмена значений соответствующих символов (первого и последнего, второго и предпоследнего символов, третьего и предпредпоследнего и т. д. до середины слова), которое мы запишем в виде цикла for, параметр которого, изменяясь от 1 до середины слова, значение которого определяется результатом выражения Trunc(Length(Word)/2), указывает на позицию очередного символа в слове.
Перестановку соответствующих символов в слове с использованием символьной переменной Ch осуществим следующим образом:
Ch:=Word[I];{переменной Ch присвоили значение 1-го символа от начала слова}
Word[I]:=Word[l_ength(Word)-I+l]; {в 1-ю позицию записали значение 1-го символа
от конца (Length(Word)-I+l-ro от начала) слова}
Word[length(Word)-I+l]:=Ch; {в LengthCWorcD-I+1-ю позицию от начала слова записали значение 1-го символа, временно хранимое в переменной Ch}
В заключительной части программы выведем значение «обращенного» слова на экран с помощью стандартной процедуры вывода:
Write (‘Получилось слово ‘,Word);
Полный текст этой программы будет таким:
program 0br_Word;
var I : byte;
Ch : char;
Word : string[30];
begin
Write(‘введите слово ‘);
Readln(Word);
for I:=l to Trunc(Length(Word)/2) do {Перебирая символы поочередно от начала до середины слова}
begin {Обмениваем соответствующие символы}
Ch:=Word[I];
Word[I]:=Word[l_ength(Word)-I+l];
Word[Length(Word)-I+l]:=Ch;
end;
Write(‘Получилось елово ‘,Word);
end.
Запустите интегрированную среду программирования. Введите текст программы Obr_Word и запишите файл на диск под соответствующим именем, а затем откомпилируйте его. После успешного завершения компиляции проверьте работу программы с отладкой в пошаговом режиме, отслеживая значения переменных Word, I, Word[I], Ch, Word[length(Word) -1+1]. Задачу реверсирования (обращения текста) можно решить и с помощью программы с рекурсивным вызовом подпрограммы-функции, например:
program Rever_Str;
type stroka = string[30];
var
S, Rev_S : stroka;
function Reverse(Str:stroka) : stroka;
var FirstChar : char; {Первый символ в строке}
OstatokStr : stroka; {Остаток строки после удаления первого символа}
begin
if Length(Str)=l then Reverse := Str {Завершение рекурсии}
else
begin
FirstChar:=Str[l];
Delete(Str,l,l):
OstatokStr:=Reverse(Str); {Рекурсивные вызовы функции}
Reverse:=Concat(OstatokStr,FirstChar); end;
end;
begin {Начало основной программы}
Write(‘Введите любой текст’);
Readln(S);
Rev_S:=Reverse(S); {Вызов функции с параметром-значением S}
Writeln(Rev_S,’ есть перевернутое ‘,S);
end.