Дана строка, состоящая из русских слов, разделенных пробелами (одним или несколькими). Вывести строку, содержащую эти же слова (разделенные одним пробелом), но расположенные в обратном порядке. Создать собственный модуль, содержащий рекурсивную процедуру — Pascal(Паскаль)

Модуль

unit RevStr;
interface
type mas=array[1..100] of string;
procedure Revers(var a:mas;k:byte);
implementation
procedure Revers;
var buf:string;
    i,j:byte;
begin
i:=1;j:=k;{начало и конец массива}
buf:=a[i];
a[i]:=a[j];{меняем симметрично от начала и конца}
a[j]:=buf;
inc(i);
dec(j);
if i<j then Revers(a,k);{пока не встретимся}
end;
end.

Программа

uses Crt,RevStr;{подключаем модуль}
var s,s1:string;
    a:mas;
    i,k,p:byte;
begin
clrscr;
repeat
writeln('Введите строку из русских слов, разделенных пробелами:');
readln(s);
k:=0;p:=0;
for i:=1 to length(s) do
 begin
  if not (s[i] in ['А'..'п','р'..'ё',' ']) then k:=1;
  if (s[i]<>' ')and(s[i-1]=' ') then p:=1;
 end;
if k=1 then writeln('Введены недопустимые символы');
if p=0 then writeln('Строка пустая или из 1 слова');
if(k=1)or(p=0) then writeln('Повторите ввод');
until(k=0)and(p=1);
s:=s+' ';{добавим пробел в конец}
while pos('  ',s)>0 do delete(s,pos('  ',s),1);{пока есть 2 пробела рядом, 1 удаляем
                                                в апострофах по 2 пробела}
k:=0;
while pos(' ',s)>0 do{пока есть пробел}
 begin
  k:=k+1;{считаем слова}
  a[k]:=copy(s,1,pos(' ',s));{первое слово пишем в массив}
  delete(s,1,pos(' ',s));{удаляем, следующее-первое}
 end;
Revers(a,k);{переворачиваем массив}
for i:=1 to k do
write(a[i]);{выводим}
readln
end.

Leave a Comment

5 + 1 =