Поменять слова местами

Задача: 

Поменять местами слова в строках, состоящих из двух слов.

Описание переменных: 

s – массив введенных строк;
f_word, s_word – первое и второе слово в каждой строке;
k – позиция пробела-разделителя слов в строке.

Алгоритм решения задачи: 
  1. Считывается очередная строка в текущий элемент массива.
  2. Определяется позиция пробела с помощью функции pos.
  3. В переменную f_word копируется часть строки с первого символа до пробела.
  4. В переменную s_word копируется часть строки от пробела (не включая его) до ее конца.
  5. В текущий элемент массива записывается строка, состоящая сначала из второго слова, пробела и затем первого слова.
Программа на языке Паскаль: 

var
    s: array[1..5] of string;
    f_word, s_word: string;
    k,i: byte;
begin
    writeln('Введите пять строк с двумя словами в каждой.');
    for i:=1 to 5 do begin
        readln(s[i]);
        k:= pos(' ',s[i]);
        f_word:= copy(s[i],1,k-1);
        s_word:= copy(s[i],k+1,length(s[i]));
        s[i]:= concat(s_word,' ',f_word)
    end;
    for i:=1 to 5 do
        writeln(s[i]);
readln
end.

Комментарии

построить текст из первых букв слова

в данной программе удаляет превую букву слова, как изменить на моё задание?

program lab8lr;
const
  WordChars:set of Char =['А'..'Я','а'..'я','A'..'Z','a'..'z','0'..'9','-']; // символы из которыйх состоит слово
 
var
   s:string;
Function Text1(s:string):string;
 var start,y,x:integer;
     s2:string;
     ch:char;
begin
  y:=0;
  s2:='';
  start:=x;
  for X:=1 to length(s) do begin
    if  (s[x] in WordChars) then begin
    if s2='' then start:=x;
       s2:=s2+s[x];
    end
     else begin
       y:=y+1;
       if length(s2)>=2 then begin
       s[start]:=' ';
       end;
       start:=x;
      s2:='';
    end
  end;
  if s2<>'' then Y:=y+1;
  Text1:=s;
end;
   begin
    s:='удалить первую букву каждого слова.';
    Writeln(Text1(s));
   end.

с учетом знаков препинания

Как сделать так, чтобы выводились слова в обратном порядке, но с учетом знаков препинания. Например: Ввод: Магистр. я ваш, спитчер. Вывод: Спитчер, я ваш. Магистр

Дана строка символов. Группы

Дана строка символов. Группы символов, разделенные пробелами и не содержащие пробелов внутри себя, будем называть словами. Требуется второе слово переписать задом наперед. Написать две программы без использования функции и с двумя функциями. Первая определяет количество слов в строке, вторая возвращает n-ое слово в строке.

в итоге должно получиться три программы

а как сделат для несколько

а как сделат для несколько слов как там поменят 1 слово с последним? толко 1 и последное

Как поменять первое слово с последним

Вот тебе код. Может, нерационально, но работает.

var
a,s,b:string;
i:integer;
begin
readln (s);
for i:=1 to Length(s) do
if s[i]=' ' then
begin
a:=(copy(s,1,i));
delete (s,1,i);
break;
end;
for i:=Length(s) downto 1 do
if s[i]=' ' then
begin
b:=(copy(s,i,Length(s)));
delete(s,i, Length(s));
break;
end;
s:=b+' '+s+' '+a;
writeln (s);
end.

Вот возник вопрос...

Есть задача:
"Задано предложение без предлогов, слова в котором разделены одним или несколькими пробелами. Напечатать все возможные перестановки слов в этом предложении, разделив их одним пробелом. Например, «Он учит уроки», «Он уроки учит», «Уроки он учит», «Уроки учит он», «Учит он уроки», «Учит уроки он». Результат вывести на экран."
Я понимаю что нужно поделить данное предложение на слова, тоесть из большой строки сделать маленькие строки, но вот каким образом это длается нигде не нашел, если можете то подскажите пожалуйста, заранее благодарен...

а я немного по другому решила.... это правильно?

var
 s,s2:string;
 nomer,kol_vo, i:integer;
begin
s:='Luba Drjanina';
for i:=1 to length(s) do
    begin
    if copy(s,i,1)=' ' then
       begin
        nomer:= i;
        break;
       end;
    end;
s2:=copy (s,1,nomer);
delete (s,1,nomer);
writeln (s,' ' + s2);
 
{insert (s2,s,255);
writeln(s);}
 
readln;
end.

Правильно, но ...

var
    s,s2: string;
    nomer, i: integer;
begin
    s := 'one two';
    for i:=1 to length(s) do
        if s[i] = ' ' then begin {к символам строки можно обращаться как к элементам массива}
            nomer:=i;
            break
        end;
    s2 := copy(s,1,nomer-1); {Надо избавиться от пробела в конце...}
    delete(s,1,nomer);
    s := s + ' ' + s2;
    writeln(s);
    writeln(length(s));
 
readln
end.

а как будет выглядеть

Как будет выглядеть задача, когда у нас не два слова, а больше?
Допустим, в строке n-слов и нужно их вывести в обратном порядке

решение

В таком случае, например,

В таком случае, например, можно вырезать слова с начала строки и помещать их в массив. Затем вывести массив, начиная с конца.