Fórum Subsequencia em Delphi #509412
03/02/2015
0
Considere alguma sequência de elementos (difere de um mero conjunto de elementos por
denir uma ordem entre os seus membros). a) Enumere, ent~ao, todas as subsequ^encias n~aocont
nuas de uma dada sequ^encia. b) Liste todas as permutac~oes do conjunto de elementos
da sequência.
1. Uma subsequência sempre contem algum subconjunto de elementos da sequência, na
mesma ordem.
2. Uma subsequência contínua e aquela em que nenhum elemento esta faltando, entre o
primeiro e o ultimo elemento da subsequência.
3. Exemplo de subsequ^encias n~ao contnuas:
(1,2,3,4) ) [[1, 2, 4], [1, 3, 4], [1, 3], [1, 4], [2, 4]]
4. Exemplo de permutacão:
(1,2,3,4) ) [[1, 2, 3, 4], [2, 1, 3, 4], [2, 3, 1, 4], [2, 3, 4, 1]]
Não estou pedindo resposta, só quero uma ideia para clarear o racicínio. Como posso fazer para montar cada subsequência com os números digitados ? Não sei como poderia fazer com que os números digitados dentrdo TEdit sejam "separados" e dessa forma montar a sequência?
Não tenho experiência em Delphi, comecei a aprende a pouco tempo, mais uma vez, não estou pedindo resposta, só quer uma ideia para o raciocínio. Desde já, agradeço!
Roberto
Curtir tópico
+ 0Posts
05/02/2015
Cauê Nishijima
Gostei + 0
05/02/2015
Roberto
Gostei + 0
05/02/2015
Cauê Nishijima
1 - No primeiro caso de sequencia não continua, não é continua a numeração ou a posição dos números?
Ex.:
Ao invés dos números [1234] do exemplo...se eu digita-se os números [1235], 1235 já seria uma numeração já não continua já que falta o 4?
2 - No exemplo da permutação, a permutação é só com o primeiro número? Pois no seu exemplo ficou faltando algumas permutações:
(1,2,3,4)
[[1, 2, 3, 4]]
[[2, 1, 3, 4], [2, 3, 1, 4], [2, 3, 4, 1]]
[[1, 3, 2, 4], [1, 3, 4, 2]]
[[3, 1, 2, 4], [1, 2, 4, 3]]
[[4, 1, 2, 3], [1, 4, 2, 3]]
Gostei + 0
05/02/2015
Roberto
E no segundo caso, são todas as permutações, no exemplo dado só mostrado com o número 1, mas o certo seria com o resto também. Eu fiz até um código em Pascal para ele permutar, mas o algoritmo não dá todas as permutações. Se você quiser dar uma olhada, segue o código:
pROGRAM LE;
uses crt;
VAR
j,I:INTEGER;
avanca,seq:string;
aux:string[1];
begin
writeln('Digite abaixo a sequencia para trocar');
read(seq);
for i:= 1 to length(seq) do
begin
if seq[i] <> ',' then
avanca:=avanca + seq[i]
end;
for i:=1 to length(avanca) do
begin
for j:=i+1 to length(avanca) do
begin
aux[0]:=avanca[i];
avanca[i]:=avanca[j];
avanca[j]:=aux[0];
writeln(avanca);
end;
end;
readkey;
end.
E obrigado pela atenção, Cauê!
Gostei + 0
05/02/2015
Cauê Nishijima
- Crie um novo projeto, deixei o formulario com o nome padrão Form1
- Adicione um Edit (eu chamei de edtSequencia)
- Adicione 2 ListBox, para receber o resultado da sequencia não continua e da permuta (eu chamei de lstSubSequenciaNaoContinua e de lstPermutacao)
- Adicione 2 Buttons, para efetuar os cálculos da sequencia não continua e da permuta (eu chamei de btnCalcularSubSequenciaNaoContinua e de btnCalcularPermuta
Vamos começar pela Permutação por ser mais simples, segue código do evento onClick do btnCalcularPermuta:
procedure TForm1.btnCalcularPermutaClick(Sender: TObject);
var
caracterSelecionado: string;
stringSemCaracterSelecionado: string;
prefixo, sufixo: string;
I: Integer;
begin
caracterSelecionado := Copy(edtSequencia.Text, 1, 1);
stringSemCaracterSelecionado := Copy(edtSequencia.Text, 2,
length(edtSequencia.Text));
for I := 0 to Length(stringSemCaracterSelecionado) do
begin
prefixo := Copy(stringSemCaracterSelecionado,0,I);
sufixo := Copy(stringSemCaracterSelecionado,I+1, length(stringSemCaracterSelecionado));
lstPermutacao.Items.Add(prefixo + caracterSelecionado + sufixo);
end;
end;
Agora para o calculo da sequencia não continua crie 2 procedures, uma chamada calcularNumeros e outra verificaSeNumeroEntraNaLista
Código do calcularNumeros
procedure TForm1.calcularNumeros(numeros: string);
var
tamanho, J, I: Integer;
substring: string;
sequencia: Boolean;
begin
tamanho := length(numeros);
for I := tamanho downto 3 do
begin
for J := 0 to I - 1 do
begin
substring := Copy(numeros, 0, I);
substring := Copy(substring, 0, J) + Copy(substring, J + 2,
length(substring));
verificaSeNumeroEntraNaLista(substring);
if length(substring) >= 3 then
calcularNumeros(substring);
end;
end;
end;
Código do verificaSeNumeroEntraNaLista
procedure TForm1.verificaSeNumeroEntraNaLista(substring: string);
var
numeroAtual, numeroAnterior, I: Integer;
begin
numeroAnterior := StrToInt(Copy(substring, 1, 1));
for I := 2 to length(substring) do
begin
numeroAtual := StrToInt(Copy(substring, I, 1));
if numeroAnterior + 1 <> numeroAtual then
begin
if lstSubSequenciaNaoContinua.Items.IndexOf(substring) < 0 then
lstSubSequenciaNaoContinua.Items.Add(substring);
Break;
end
else
numeroAnterior := numeroAtual;
end;
end;
E finalmente no evento onClick do button btnCalcularSubSequenciaNaoContinua:
procedure TForm1.btnCalcularSubSequenciaNaoContinuaClick(Sender: TObject); begin calcularNumeros(edtSequencia.Text); end;
Qualquer dúvida, ou se entendi algo erroneamente me avise.
Espero ter ajudado, abraços
Att.Cauê Nishijima
Gostei + 0
05/02/2015
Cauê Nishijima
Gostei + 0
05/02/2015
Cauê Nishijima
- Crie a seguinte procedure :
procedure TForm1.permutar(posicao: integer);
var
I: integer;
prefixo, sufixo, novaString: string;
caracterSelecionado, stringSemCaracterSelecionado: string;
begin
caracterSelecionado := Copy(edtSequencia.Text, posicao, 1);
stringSemCaracterSelecionado := Copy(edtSequencia.Text, 1, posicao - 1) +
Copy(edtSequencia.Text, posicao + 1, Length(edtSequencia.Text));
for I := 0 to Length(stringSemCaracterSelecionado) do
begin
prefixo := Copy(stringSemCaracterSelecionado, 0, I);
sufixo := Copy(stringSemCaracterSelecionado, I + 1,
Length(stringSemCaracterSelecionado));
novaString := prefixo + caracterSelecionado + sufixo;
if lstPermutacao.Items.IndexOf(novaString) < 0 then
lstPermutacao.Items.Add(novaString);
end;
end;
E no onClick do btnCalcularPermuta :
procedure TForm1.btnCalcularPermutaClick(Sender: TObject);
var
I: integer;
begin
for I := 1 to Length(edtSequencia.Text) do
permutar(I);
end;
Agora acho que esta certo, e vai te ajuda. Abraços!
Att. Cauê Nishijima
Gostei + 0
05/02/2015
Roberto
Gostei + 0
07/02/2015
Roberto
Gostei + 0
09/02/2015
Cauê Nishijima
Então eu testei aqui e aparentemente faz todas as permutas e todas as subsequencias, qual seu email pra eu te mandar o fonte do meu
Gostei + 0
09/02/2015
Roberto
Gostei + 0
04/03/2015
Fabricio
Boa tarde.
Estou com problemas com o código de permutação. Você poderia mandar o fonte para meu e-mail - fabricioronaldo@globo.com?
Agradeço pela ajuda..
Obrigado.
Gostei + 0
09/03/2015
Priscila
Boa tarde.
Também estou com problemas com o código de permutação. Você poderia mandar o fonte para meu e-mail - pricalper@gmail.com?
Agradeço pela ajuda..
Obrigado
Gostei + 0
12/03/2015
Cauê Nishijima
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)