IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> чередование слов в строке
сообщение
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Даны две строки, состоящие из слов. Получить строку, в которой чередуются слова первой и второй строки. Если в одной из строк слов больше, чем в другой, то оставшиеся слова этой строки дописать подряд в строку-результат.

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

????????? wacko.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


разбиваешь на слова, получаешь 2 массива. потом из каждого берешь по одному слову-элементу и записываешь в результирующую строку, пока в одном не закончатся элементы.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Можно и без дополнительной строки rolleyes.gif


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






18192123, чем могут разделяться слова в строках?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Цитата(klem4 @ 20.12.2006 19:32) *

Можно и без дополнительной строки rolleyes.gif

то есть? я где-то сказала, что у нас будет три строки?
результирующей может выступать и одна из исходных...
просто воспользовалась терминологией задачи:
Цитата
Даны две строки, состоящие из слов. Получить строку, в которой чередуются слова первой и второй строки. Если в одной из строк слов больше, чем в другой, то оставшиеся слова этой строки дописать подряд в строку-результат.


или ты о каком-то принципиально ином способе решения?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Юля, я как раз о принципиально ином способе - без массивов... smile.gif Только мне для этого надо знать, могут ли слова разделяться чем-то кроме пробелов, или нет...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Цитата(volvo @ 20.12.2006 19:55) *

Юля, я как раз о принципиально ином способе - без массивов... smile.gif Только мне для этого надо знать, могут ли слова разделяться чем-то кроме пробелов, или нет...

Да я после таких вопросов ничего, кроме оригинально-интересного способа и не жду.
Кажется, даже есть подозрение: вырезать слова из одной строки (в смысле, копировать и удалять), и вставлять на место пробела (если только пробелы - разделители) во вторую?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Цитата
вырезать слова из одной строки (в смысле, копировать и удалять), и вставлять на место пробела (если только пробелы - разделители) во вторую?


Я вот это и имел в виду (только удалять правда не обязательно) под своим вариантом без третьей строки, а ты как хотела сдалать ?


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


слова могут разделяться только пробелом. А как решать мою задачу без массивов?
Кстати, нужно без copy, delete.

Сообщение отредактировано: 18192123 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Цитата(klem4 @ 20.12.2006 20:12) *

Я вот это и имел в виду (только удалять правда не обязательно) под своим вариантом без третьей строки, а ты как хотела сдалать ?

просто после того, как мы раскидали слова по массивам, нам не нужны старые строки, поэтому можем записывать в одну из них.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Эм, ну массивы в принципе тоже не нужны smile.gif

Ладно ждем что скажет автор темы smile.gif

Упс автор уже сказал smile.gif


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


без copy и delete хуже sad.gif
insert можно?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(мисс_граффити @ 20.12.2006 20:34) *

без copy и delete хуже sad.gif
insert можно?

увы, нельзя...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


можно еще так: заводим новую строку, посимвольно прибавляем к ней слово первой строки, пока не наткнемся на пробел (или не кончится строка). после этого посимвольно копируем кусочек второй... если первая не кончилась - возвращаемся к ней...


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Гость






Цитата(18192123 @ 20.12.2006 19:18) *
Кстати, нужно без copy, delete.

В принципе, не очень-то и хотелось smile.gif

Вполне реально обойтись БЕЗ них...

var
s, T, s1, s2: string;
i, j: integer;
res: string;

did_it: boolean;
b: boolean;

begin
s1 := 'one two three four five';
{ s2 := 'raz dva tri chetire pyat shest sem'; }
s2 := 'raz dva tri';
res := '';

s := s1;
T := s2 + ' ';

i := 1; j := 1;
did_it := false;
repeat

for b := false to true do
while (i <= length(s)) and ((s[i] = ' ') = b) do begin
res := res + s[i]; inc(i);
end;

if (i > length(s)) then begin
if not did_it then begin
res := res + ' ';
did_it := true;
end;
end;

for b := false to true do
while (j <= length(T)) and ((T[j] = ' ') = b) do begin
res := res + T[j]; inc(j);
end;

until (i > length(s)) and (j > length(T));
writeln('result = ', res);

end.
(дополнительные строки - только для того, чтобы НЕ портить исходные... Так было бы достаточно трех строк)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(volvo @ 20.12.2006 20:59) *



var
s, T, s1, s2: string;
i, j: integer;
res: string;

did_it: boolean;
b: boolean;

begin
s1 := 'one two three four five';
{ s2 := 'raz dva tri chetire pyat shest sem'; }
s2 := 'raz dva tri';
res := '';

s := s1;
T := s2 + ' ';

i := 1; j := 1;
did_it := false;
repeat

for b := false to true do
while (i <= length(s)) and ((s[i] = ' ') = b) do begin
res := res + s[i]; inc(i);
end;

if (i > length(s)) then begin
if not did_it then begin
res := res + ' ';
did_it := true;
end;
end;

for b := false to true do
while (j <= length(T)) and ((T[j] = ' ') = b) do begin
res := res + T[j]; inc(j);
end;

until (i > length(s)) and (j > length(T));
writeln('result = ', res);

end.




Объясни пожалуйста некоторые моменты:

for b := false to true do


Для чего эта операция? И за что отвечают b и did_it ?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Гость






А тебе что, удобнее делать Copy+Paste? Сначала - обрабатывать НЕпробелы, а потом - пробелы между словами? Тогда делай Copy+Paste... Я предпочитаю сделать один доп. цикл: сначала переменная B равна False, благодаря чему (s[i] = ' ') = b выполняется для НЕпробелов, при втором проходе B становится равно True, и в ЭТОМ ЖЕ цикле обрабатываются только пробелы между словами...

А did_it - дополнительная переменная, чобы не потерять нужный пробел между словами, и в то же время не добавлять лишние пробелы... Попробуй, убери ее, увидишь, что будет...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Я не поняла, за счёт чего чередуются слова, ведь у нас в цикле repeat два цикла, отдельно по каждой строке

???
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Гость






Цитата
за счёт чего чередуются слова, ведь у нас в цикле repeat два цикла, отдельно по каждой строке
Угу... Вот именно за счет этих двух циклов и чередуются... Ты не заметила, что циклы вызываются последовательно для двух строк (для первой - для второй, потом срабатывает Repeat/Until, опять, для первой - для второй)... Вот тебе и чередование.
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 24.11.2020 0:24
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name