Ir ao conteúdo
  • Cadastre-se

Achar maior sequência de um array


Posts recomendados

Olá pessoal, boa tarde!


 


Estou com uma dúvida sobre como achar a maior sequencia de um array...tenho o seguinte exercício:


Faça um programa em pascal que gere um vetor com dimensão 20 e tenha elementos variando entre 22 e 45, usando funções ramdomize e random. O programa deve escrever o vetor gerado. E identifique sua maior sequencia de valores adjacentes não decrescentes e escreva na tela, havendo empate escreva uma delas.


 


Consegui fazer parte da questão, mas na hora de montar a maior sequencia não estou conseguindo, alguém pode me ajudar ? Segue o código:



program questao6 (input{teclado},output{vídeo});

uses crt;

const

min =0;
max =19;

type
t_dominio = 22..45;
t_vetor = array[min..max] of t_dominio;

var

vetor:t_vetor;
i:integer;

procedure gera_vetor(var vetor:t_vetor);
begin
randomize;
for i:= min to max do
vetor [i]:= random(23)+ 22;
end;

procedure escreva_vetor(var vetor:t_vetor);
begin
write('A sequencia : ');
for i:= min to max do
write(vetor [i]:3);
writeln(output);
end;

procedure verifica_maior_sequencia(var vetor{e/s}:t_vetor);
begin
writeln('A maior sequencia e : ');
for i:= min to max do
if vetor[i] < vetor[i-1] then
write(vetor[i]:3);
end;

begin
gera_vetor(vetor);
escreva_vetor(vetor);
verifica_maior_sequencia(vetor);
readkey;
end.

Link para o comentário
Compartilhar em outros sites

@Kingflare

 

 

Passarei umas dicas para que você mesmo tente resolver esse exercício.

 

 

Antes de mais nada, sugiro declarar o vetor de forma simples, simplesmente fazendo:

Var  vetor : Array[1..20] Of Integer;

Não sei se alguém começou a fazer esse seu exercício, mas complicou demais.

 

 

Segundo, é necessário ajustar o valor passado para a função Random. No caso de 23, o valor aleatório gerado será de 0 a 22. Logo, você terá valores possíveis de 22 a 44, sendo que precisa ir até 45. Então, passe:

Random(23 + 1) + 22;

Ou seja, Random agora vai gerar possíveis valores de (0 a 23) + 22. Certo?

 

 

Recomendo remover a função Randomize de dentro daquela função. Coloque-a logo no início do seu programa, após o Begin. Essa função precisa ser chamada apenas uma vez dentro do seu programa.

 

 

Sobre o algoritmo. Vejo que você tenta realmente ver o valor anterior para verificá-lo se é menor. Isso mesmo. Sendo que, você precisa ter esse valor anterior armazenado em alguma variável para que possa ser testado com os valores seguintes do vetor. Se você não fizer isso, você não tem como saber se a sequência é válida, ou seja, se você está lidando com valores crescentes. Considere o seguinte. Exemplo:

 

vetor = 1, 2, 3, 4, 5, 6, 2, 3, 4, 1, 9, 10, 11, 12, 13, 14, 15, 15, 3, 0

 

Num laço FOR iniciando em 2 até 20:

valor = vetor[1]contador = 1maior_sequencia = 1Para i = 2 até 20 Faça   Se (vetor[i] > valor) Então      valor = vetor[i]      contador = contador + 1   Senão   ...   FimSe   valor = vetor[i]FimPara

Isso é apenas um esboço.

 

Sempre que for verdadeiro, você vai contar o número de vezes que isso acontece. Assim, você começa a saber o tamanho da sequência. Sendo falso, você verifica se o contador é maior que a maior sequência (maior_sequencia) vista até então. Sendo, atualiza e reinicia contador com 1 e continua a percorrer o vetor. A ideia geral é essa.

 

 

Se você conseguir identificar o tamanho da maior sequência, já é meio caminho andado para resolver a questão dos índices. Por isso, recomendo focar nisso primeiramente.

 

No caso do vetor acima, o tamanho da maior sequência é 8 (1, 9, 10, 11, 12, 13, 14, 15)

 

 

Veja que as dicas acima funcionam, cheguei a implementar:

 

 

sequence.png

 

 

[ ]'s

 

LNW

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...