Помощь - Поиск - Пользователи - Календарь
Полная версия: обратный порядок слов
Форум «Всё о Паскале» > Разработка ПО, алгоритмы, общие вопросы > Алгоритмы
18192123
Преобразовать строку, изменив порядок следования слов на обратный.

А каков алгоритм такого преобразования?
arhimag
пункт 1.
бьешь на массив слов и пробегаешь в обратном порядке.
пункт 2
поиск
Lapp
В цикле находишь следующее слово в строке s1 и вставляешь его в строку s2 на первую позицию (процедура Insert).

тема переезжаетв алгоритмы..
klem4
Ну во первых наверняка тебе опять ничем нельзя пользоваться ? Pos, Delete, Insert ... Написать ты об этом забыла ?
18192123
Цитата(klem4 @ 6.01.2007 14:02) *

Ну во первых наверняка тебе опять ничем нельзя пользоваться ? Pos, Delete, Insert ... Написать ты об этом забыла ?

Прощу прощения, ты абсолютно прав.
Lapp
Цитата(18192123 @ 6.01.2007 15:29) *

Прощу прощения, ты абсолютно прав.

Ха.
А чем можно?
arhimag
А чем не устраивает мой способ с помощью массива?
volvo
18192123, давай ты будешь определять задания ПОЛНОСТЬЮ, договорились?

Разделители между словами? Должен ли их порядок и количество сохраняться в строке - результате (arhimag, если ответ на предыдущий вопрос - "Да", то твой способ идет лесом)? Доступные средства для реализации... Почему надо все клещами вытягивать постоянно?
arhimag
делая аналогию с предыдущими заданиями 18192123, то разделитель - только пробел.
вывод сделан из
Цитата

у меня получилось разбить на слова первую строку, больше ничего не могу сделать...
не пойму, как сравнить со второй...( даже с использованием функции function _Pos(const subS, s: String): Integer)

Код

Function slovo ( const s : string; var i : byte) : string;
var
w : string;
begin
w := '';
while ( i <= length (s) ) and ( s[i] <> ' ' ) do
      begin
           w := w + s[i];
           i := i+1;
      end;
slovo := w;
end;

18192123
Цитата(volvo @ 6.01.2007 15:08) *

18192123, давай ты будешь определять задания ПОЛНОСТЬЮ, договорились?

Разделители между словами? Должен ли их порядок и количество сохраняться в строке - результате (arhimag, если ответ на предыдущий вопрос - "Да", то твой способ идет лесом)? Доступные средства для реализации... Почему надо все клещами вытягивать постоянно?


Слова могут разделяться только пробелами. Их количество в строке результате не меняется, порядок следования символов в словах остаётся неизменным ( например, исходная строка acs dfr, результат dfr acs)
Для строк использовать только length, chr, ord.


Lapp
18192123 (и все уважаемые участники беседы), я несколько обескуражен.
Мне кажется, начальное задание было поставлено довольно четко. Деталей не было, поскольку спрашивался алгоритм. В соответствии с этим я перенес тему в более подходящий раздел и описал агоритм в общих чертах (упоминание Insert'а было факультативным, в скобках). arhimag также привел свой вариант. Конкретная реализация могла быть различной.. Если требуются дальнейшие уточнения алгоритма - пожалуйста, тема к услугам всех. Что касается реализации - склонен считать флудом. Так что рекомендую 18192123 создать новую тему с правильным и полным условием на этот раз..
steet
Не хочется создавать новую тему, но можно увидеть работающий код для этой задачи с использованием pos, insert, delete?

Благодарю всех за любую помощь.
мисс_граффити
Безусловно, можно.
Для этого (если Вас не затруднит) выполните несложный ряд действий:
1. Прочитайте, пожалуйста, то, что здесь уже написали.
2. Воспользуйтесь поиском или изучите прикрепленную в Задачах тему "Разбиение на слова".
3. Соберите все воедино и напишите работающий код для этой задачи (с использованием pos, insert, delete).

Надеюсь, что ни один из пунктов не противоречит Вашим принципам.
Альтернативный путь:
Создайте тему в Задачах на заказ.

-steet-
Всем кому нужно:

program slova;
uses crt;
var
x,k,len : byte;
str,buf : string;
procedure PrintString(var buf : string ; var k : byte);
var
i : byte;
begin
if k=1 then begin
write(' ');
buf:='';
end
else
begin
i:=k;
while i>=1 do begin
write(buf[i]);
i:=i-1;
end;
write(' ');
buf:='';
end;
end;
begin
clrscr;
writeln('Vvedite slova:');
readln(str);
writeln;
writeln('Resultat:');
k := 1;
x := length(str);
if length(str)=1 then writeln(str);
while x>=1 do begin
if (str[x]=' ') or (x=1) then
begin
if x=1 then else k:=k-1;
PrintString(buf,k);
k:=1;
end
else
begin
buf[k]:=str[x];
if x=2 then buf[k+1]:=str[x-1];
k:=k+1;
end;
x:=x-1;
end;
writeln;writeln;
write('Press any key to quit...');
readkey;
end.


М
Теги, господа, теги!! Это требование правил! И здравого смысла.. Lapp

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.