Ñîçäàäèì ïðîãðàììó, êîòîðàÿ îáðàùàåò ââåäåííîå ñëîâî, ò. å. ïåðåñòàâëÿåò ñèìâîëû â ñëîâå â îáðàòíîì ïîðÿäêå, íàïðèìåð: Ïåòÿ – ÿòåÏ, ìàìà – àìàì, ïðîãðàììà – àììàðãîðï.
Àëãîðèòì îáðàùåíèÿ ñëîâà ìîæíî ïðåäñòàâèòü â âèäå ñëåäóþùåé öèêëè÷åñêîé ïðîöåäóðû îáìåíà ñîîòâåòñòâóþùèõ ñèìâîëîâ: çíà÷åíèå ïåðâîãî ñèìâîëà ñëîâà çàïîìèíàåòñÿ â íåêîòîðîé ïåðåìåííîé ñèìâîëüíîãî òèïà 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.
|