Упражнение 5

Создадим программу, которая обращает введенное слово, т. е. переставляет символы в слове в обратном порядке, например: Петя – ятеП, мама – амам, программа – аммаргорп.

Алгоритм обращения слова можно представить в виде следующей циклической процедуры обмена соответствующих символов: значение первого символа слова запоминается в некоторой переменной символьного типа 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.

Добавить комментарий