Ir ao conteúdo
  • Cadastre-se

Portugol - Problema ao ordenar vetor


Posts recomendados

Boa noite

 

O algorimo dá erro na hora de testar a condição "se (v [ i ] > v[i+1]) então". Alguém sabe como corrigir?

Escreva um algoritmo que leia um vetor de 15 números inteiros e ordene esses valores de acordo com o seguinte critério:
Percorra o vetor várias vezes. Na primeira passagem compare vet com vet[i+1] para todo i ímpar. Na segunda passagem compare vet com vet[i+1] para todo i par. Toda vez que vet > vet[i+1] troque os dois. Continue alternando dessa maneira até que o vetor esteja ordenado.

 

 

Algoritmo "semnome"
Var
v : vetor[1..15] de inteiro
i, j, aux : inteiro


Inicio
aleatorio on
para i de 1 ate 15 faca
     leia(v[i])
fimpara
aleatorio off
limpatela
para i de 1 ate 15 faca
     escreva(v[i])
fimpara

escreval
para i de 1 ate 15 passo 2 faca
     se (v[i] > v[i+1]) então
        aux <- v[i]
        v[i] <- v[i+1]
        v[i+1] <- aux
     fimse
fimpara

para i de 2 ate 14 passo 2 faca
     se (v[i] > v[i+1]) então
        aux <- v[i]
        v[i] <- v[i+1]
        v[i+1] <- aux
     fimse
fimpara

para i de 1 ate 15 faca
     escreva(v[i])
fimpara
Fimalgoritmo

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@neo8     Esse erro que está dando é porque ali no loop que vai de um até 15 ele está pegando a posição 15+1 que é igual a 16 e não existe essa posição no vetor, então para não dar esse erro basta colocar o vetor para ir de 1..16  assim

v : vetor[1..16] de inteiro

mas esse código não consegue ordenar os número em ordem crescente não para isso é preciso uma melhor organização.    seria assim

para i de 1 ate 14 faca
  para j de i+1 ate 15 faca
    aux:=v[i]
    se v[j]< v[i] ENTÃO
      v[i] := v[j]
      v[j] := aux
    fimse
  fimpara
fimpara

e seu código completo ficaria assim :

Algoritmo "ordenação"
Var
v : vetor[1..16] de inteiro
i, j, aux : inteiro


Inicio
aleatorio on
para i de 1 ate 15 faca
     leia(v[i])
fimpara
aleatorio off
limpatela
para i de 1 ate 15 faca
     escreva(v[i])
fimpara

escreval
para i de 1 ate 15 passo 2 faca
     se (v[i] > v[i+1]) ENTÃO
        aux <- v[i]
        v[i] <- v[i+1]
        v[i+1] <- aux
     fimse
fimpara

para i de 2 ate 14 passo 2 faca
     se (v[i] > v[i+1]) ENTÃO
        aux <- v[i]
        v[i] <- v[i+1]
        v[i+1] <- aux
     fimse
fimpara
para i de 1 ate 14 faca
  para j de i+1 ate 15 faca
    aux:=v[i]
    se v[j]< v[i] ENTÃO
      v[i] := v[j]
      v[j] := aux
    fimse
  fimpara
fimpara
para i de 1 ate 15 faca
     escreva(v[i])
fimpara
Fimalgoritmo

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá a todos..

 

Algumas considerações:

 

1) AJUSTAR O QUE DEVE SER AJUSTADO

20 horas atrás, devair1010 disse:

Esse erro que está dando é porque ali no loop que vai de um até 15 ele está pegando a posição 15+1 que é igual a 16 e não existe essa posição no vetor, então para não dar esse erro basta colocar o vetor para ir de 1..16  assim

Acho que não seria bem assim... o vetor é de 15 posições, não 16.  O problema de "tentar acessar a 16º posição está na lógica utilizada, e não no vetor em si, ou seja, o que precisaria ser verificado é a codificação da lógica, não o vetor (que "necessariamente" deverá ter 15 posições).

 

Se tá indo ao 16, verifiquem onde está acontecendo isso e por qual motivo... ai tenta ajustar.

 

 

 

2) FAZER O QUE DEVE SER FEITO

Em outras palavras: "seguir o enunciado".

 

Esse contexto é análogo ao primeiro, ou seja, se a codificação do algoritmo (de ordenação) não está funcionando, o que deve ser revisado é código, e não apenas substituí-lo... :).   Ou a implementação está errada, ou o enunciado é inválido...

 

20 horas atrás, devair1010 disse:

mas esse código não consegue ordenar os número em ordem crescente não para isso é preciso uma melhor organização.    seria assim

Então, existem N métodos de ordenações já prontos, como visto aqui. Entretanto, o enunciado é bem específico no qual o seu programa deverá funcionar.

 

21 horas atrás, neo8 disse:

Escreva um algoritmo que leia um vetor de 15 números inteiros e ordene esses valores de acordo com o seguinte critério:
Percorra o vetor várias vezes. Na primeira passagem compare vet com vet[i+1] para todo i ímpar. Na segunda passagem compare vet com vet[i+1] para todo i par. Toda vez que vet > vet[i+1] troque os dois. Continue alternando dessa maneira até que o vetor esteja ordenado.

Logo, o programa necessariamente (dessa vez sem aspas) deverá ser feito assim... o "patrão mandou, nós obedecemos", entendem?

 

Ou seja: ou o código vai funcionar assim! ou vai ficar assim e informado que não funciona ao solicitante.

 

Obs.: claro que num mundo real, não é apenas "ah! pediu assim, então vou fazer". Após análise e experiência do programador, poderá ser discutido o requisito!!!

 

Revisem o que está sendo pedido... tentem entender o seu funcionamento...

 

 

No aguardo.

 

  • Curtir 1
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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!