Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2011, 20:47   #1
luybeznov
 
Регистрация: 07.12.2011
Сообщений: 6
По умолчанию перестановка слов в предложении

надо вывести все возможные перестановки слов в предложении исключая повторения т.е. перестановки не должны повторяться, одинаковые перестановки не выводить.
Эта программа пока работает так:
Если ввести предложение из одинаковых слов, например: лимон лимон лимон
перестановки будут такие:
лимон лимон лимон
лимон лимон лимон
лимон лимон лимон


а надо вывести только лимон лимон лимон (так как одинаковые перестановки не выводить)

вот сама задача ее надо доделать правильно

Код:
uses 
SysUtils; 

type Combination=array [1..100] of integer; 
var N: byte;S:string;p:integer; 
j,i:integer; 
x: combination; 
var a:array[0..100] of string; 

// Перевод из строки 
procedure Print; 
begin 

for i:=1 to n do 
write(' ',a[x]); 
writeln; 
end; 

procedure swap(var d,j:integer); 
var x:integer; 
begin 
x:=d; 
d:=j; 
j:=x; 
end; 

procedure generate(k:byte); 
var j:integer; 
begin 
if k=N then 
print 
else 
for j:=k+1 to n do begin 
swap (x[k+1],x[j]); 
generate(k+1); 
swap (x[k+1],x[j]); 
end; 
end; 
begin 

write('vvedite predlogenie: ');readln(s); 
s:=s+' '; j:=0; 
while copy (s,1,1)=' ' do delete(s,1,1); 
while s<>'' do begin 
j:=j+1; 
while copy (s,1,1)<>' ' do begin 
a[j]:=a[j]+copy (s,1,1); 
delete (s,1,1); 
end; 
while copy (s,1,1)=' ' do delete(s,1,1); 
end; 

N:=j; 
for i:=1 to N do x:=i; 
generate(0); 
readln; 
end.
___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 13.12.2011 в 09:47.
luybeznov вне форума Ответить с цитированием
Старый 13.12.2011, 09:59   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

во-первых, как это у Вас работало?!?! Тут же явные синтаксические ошибки в коде!

нужно
Цитата:
Код:
procedure Print;
var i: integer;
begin
  for i := 1 to n do
    write(' ', a[x[i]]);
....
  N := j;
  for i := 1 to N do x[i] := i;
  generate(0);
во-вторых, любое решение проблемы является допустимым?
просто я бы решил "в лоб" - завёл TStringList и добавлял все комбинации в этот список. Но добавлял (и выводил на экран) только в том случае, если такой комбинации в списке ещё нет..
Доработка кода займёт пять минут.
Недостаток - при достаточно большом количестве членов предложения - программа будет проворно "кушать" память, да и на быстродействие програмы такой подход явно не скажется положительно!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разбить строку на предложения, посчитать количество слов в предложении, вывести предложения, удовлетворяющие условию. Си woot Помощь студентам 2 18.10.2011 16:19
В предложении подсчитать количество слов. Delphi King21 Помощь студентам 4 16.03.2011 14:26
упорядочение слов в предложении 534 Помощь студентам 2 11.03.2010 12:47
Подсчет количества слов предложении Милашка000 Общие вопросы C/C++ 2 24.04.2009 20:02