Ir ao conteúdo
  • Cadastre-se

Algoritmo de troca


Posts recomendados

esse algoritmo eu analisei e vi que é de troca mas n ordena só troca, mas fique  na dúvida no código dele como comentei sobre ele abaixo;

 

 

No pseudo-código, podemos ver duas estruturas de repetição (linha 03 e 10). O primeiro controla a variável x, a variável que indica qual posição está sendo analisada. O segundo controla a variável x[i+1] que faz a procura de um valor que possa ser substituído, que neste caso (troca).

 

 ou seja , são quaisquer números que sejam menores que o número da posição x. Note que o valor de x[i+1]sempre será maior que o x, isso porque todas as posições anteriores de x já estarão com seus valores encontrado.

como mencionado anteriormente, neste caso é que se o número que está na posição x for menor que o número da posição x[i+1] então esses números deve ser trocados.

Para realizar a troca, precisaremos de uma variável auxiliar (aux) para armazenar temporariamente o valor que está na posição x. Uma vez feito isso, podemos sobrescrever a posição x com o valor da posição x[i+1]. Por último, sobrescrevemos a posição x[i+1]para guardar o valor que está na variável auxiliar, efetuando a troca de posição.

 

No caso não sei se essas duas estruturas de repetição estão certas descritas e  a parte quando ele compara 

 

1. algoritmo

2. declare X[10], n, i, aux, flag numérico

3. para i ← 1 até 10 faça

4. leia X

5. n ← 1

6. flag ← 1

7. enquanto (n ≤ 10 E flag = 1) faça

8. inicio

9. flag ← 0

10. para i ← 1 até 9 faça

11. inicio

12. se (X < X[i+1]) então

13. inicio

14. flag ← 1

15. aux ← X

16. X ← X[i+1]

17. X[i+1] ← aux

18. fim_se

19. fim_para

20. n ← n + 1

21. fim_enquanto

22. para i ← 1 até 10 faça

23. escreva X

24. fim_algoritmo

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

  • Moderador

Caro usuário,

 

Seja bem-vindo ao Fórum do Clube do Hardware.

 

No intuito de servir como fonte de pesquisa no caso de instituições de ensino, informamos que incorrer no resolvimento por completo de questões relacionadas a disciplinas escolares de cursos técnicos e faculdades podem ser revistas e removidas pela Equipe de Moderação do Clube do Hardware.

 

Para sanar dúvidas sobre esse tipo de problema, por gentileza, publique o passo a passo do desenvolvimento da questão, projeto, monografia ou conteúdo em dúvida para que possamos analisar se a resposta está correta ou não, ou para que possa ser auxiliado com a dúvida no desenvolvimento do exercício.

 

Infelizmente, não há como resolver os trabalhos pelos usuários. O objetivo do Fórum do Clube do Hardware é auxiliar seus usuários a encontrar soluções para que possam sanar suas dúvidas, e não de trazer soluções prontas para seus usuários.. Além disso, copiar e colar respostas que não são de autoria própria do qualquer usuário é considerado plágio, o que é ilegal.

 

Esperamos que compreenda.

 

Atenciosamente,

Equipe Clube do Hardware

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

esse algoritmo cheguei a falar com professor q parecia o bolha, mas n é ele  entendo como está funcionando só nessa parte mesmo que queria tentar entender com funciona essa parte mesmo posi a questão está praticamente pronta ,esse pedaço do programa q n entendi mt mas entendo o que você diz estou querendo aprender mesmo 

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

  • Membro VIP

Olá. Em qual parte está com dúvidas?

 

Esse código foi você quem fez ou está tentando entender um código de outra pessoa???

 

 

1 hora atrás, anonymouatour disse:

esse algoritmo cheguei a falar com professor q parecia o bolha, mas n é ele  entendo como está funcionando só nessa parte mesmo que queria tentar entender com funciona essa parte mesmo posi a questão está praticamente pronta ,esse pedaço do programa q n entendi mt mas entendo o que você diz estou querendo aprender mesmo 

 

Então, não consegui compreender as suas explicações... tanto esse, tanto o texto inicial estão um pouco confusos para mim.. Por favor, tente descrever de uma forma mais clara e menos coloquial. (tente usar um linguagem mais formal)

 

Mas então, vamos lá:

 

1) POSTAGEM DE CÓDIGOS NO FÓRUM

Para analisarmos um código, é necessário que a sua estrutura de indentação (espaçamento horizontal) esteja intacta, ou seja, seu código está apenas uma linha em baixo da outra. Além disso, está faltando algumas partes, como as coordenadas do X em alguns trechos.

 

Por favor, edite sua postagem, apague seu código e poste novamente utilizando a tag CODE.

 

Veja o link:

 

 

2) ESTRUTURA DE ORDENAÇÃO

De fato o código está meio que utilizando a base do Bubble Sort... mas talvez precise de alguns ajustes.

 

 

8 horas atrás, anonymouatour disse:

esse algoritmo eu analisei e vi que é de troca mas n ordena só troca, mas fique  na dúvida no código dele como comentei sobre ele abaixo;

Então, como já comentei, eu não consegui entender muito bem o que quis dizer, mas poderíamos dizer ele não é um algoritmo de trocas em si... ele está mais para um algoritmo de ordenação... trocas é apenas uma consequência dessa operação de ordenar... entende?

 

E creio que ele está sim ordenando (em ordem decrescente)... talvez precise apenas de pequenos ajustes, ou seja, a base dele se assemelha ao Bubble Sort, mas precisa dar uma otimizada.

 

 

***

 

No aguardo.

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

@Simon Viegas é mais uma questão de concurso publico que achei na net e parei pra esutdar ela mas n entendi como funciona algumas partes do pseudocodigo vamos dizer assim

adicionado 1 minuto depois

ele me disse que não está ordendando apenas trocando isso que fiquei confuso porque ele parece o buble como você falou

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

  • Membro VIP

Olá @anonymouatour.
 

Como citado:

Em 30/05/2017 às 19:32, Simon Viegas disse:

não é um algoritmo de trocas em si... ele está mais para um algoritmo de ordenação... trocas é apenas uma consequência dessa operação de ordenar

 

 

Abaixo tentei reorganizar e deixei alguns comentários:

algoritmo "questão concurso"
declare X[10], n, i, aux, flag numérico //declara as variáves
//ESTRUTURA PARA LEITURA DE DADOS VIA USUÁRIO
para i<-1 até 10 faça //para ler um números via teclado de cada posição do vetor
   leia(X[i])

//ESTRUTURA QUE ORDENARÁ O VETOR EM ORDEM DECRESCENTE
n<-1 //inicializa o contador que controla a posição do vetor
flag<-1 //inicializa marcando como "houve troca"
enquanto (n <= 10 E flag = 1) faca //enquanto não for o fim do vetor e houve troacas
   inicio
   flag<-0 //marca como "não houve troca"  (veja, se não houver permancerá com esse valor, se houver, será marcado baixo)
   para i<-1 ate 9 faca //da primeira até a penultima posição (já que a penultima compara com a última)
      inicio
      se (X[i] < X[i+1]) então //se posição atual é MENOR que a posição posterior
         inicio //faz a permuta deles
         flag<-1 //marca como "houve troca"
         aux<-X[i]
         X[i]<-X[i+1]
         X[i+1]<-aux
         fim_se
      fim_para
   n<-n+1 //atualiza o contador que controla a posição do vetor
   fim_enquanto

//ESTRUTURA PARA EXIBIR O RESULTADO
para i<-1 até 10 faca //para exibir cada posição do vetor ordenado
   escreva(X[i])
fim_algoritmo

 

Resumindo:

É uma espécie de Bubble Sort (otimizada), que ordenará o vetor em ordem DECRESCENTE.   (1-ler os números para preencher o vetor. 2-ordena o vetor em ordem decrescente 3-exibe o vetor ordenado)

 

 

Código em VisuAlg

algoritmo "questão concurso"
var
  X :vetor [1..10] de inteiro //declara as variáves
  n, i, aux, flag :inteiro
  
INICIO
ALEATORIO ON //comando para gerar números automaticamente (para ler pelo teclado, remova essa linha e a outra mais abaixo)
para i de 1 ate 10 faca
   leia(X[i])
fimPara
ALEATORIO OFF

n<-1
flag<-1
enquanto (n<=10) E (flag=1) faca
   flag<-0
   para i de 1 ate 9 faca
      se (X[i] < X[i+1]) então
         flag<-1
         aux<-X[i]
         X[i]<-X[i+1]
         X[i+1]<-aux
      fimSe
   fimPara
n<-n+1
fimEnquanto
   
para i de 1 ate 10 faca //para exibir cada posição do vetor ordenado
   escreva(X[i])
fimPara
fimAlgoritmo

 

PS: download do VisuAlg:
http://antonionicolodi.blogspot.com.br/2015/06/visualg-30-revisao-4-em-25062015.html

 

 

No aguardo.

Link para o comentário
Compartilhar em outros sites

  • 4 semanas depois...
Em 05/06/2017 às 07:56, Simon Viegas disse:

Olá @anonymouatour.
 

Como citado:

 

 

Abaixo tentei reorganizar e deixei alguns comentários:


algoritmo "questão concurso"
declare X[10], n, i, aux, flag numérico //declara as variáves
//ESTRUTURA PARA LEITURA DE DADOS VIA USUÁRIO
para i<-1 até 10 faça //para ler um números via teclado de cada posição do vetor
   leia(X[i])

//ESTRUTURA QUE ORDENARÁ O VETOR EM ORDEM DECRESCENTE
n<-1 //inicializa o contador que controla a posição do vetor
flag<-1 //inicializa marcando como "houve troca"
enquanto (n <= 10 E flag = 1) faca //enquanto não for o fim do vetor e houve troacas
   inicio
   flag<-0 //marca como "não houve troca"  (veja, se não houver permancerá com esse valor, se houver, será marcado baixo)
   para i<-1 ate 9 faca //da primeira até a penultima posição (já que a penultima compara com a última)
      inicio
      se (X[i] < X[i+1]) então //se posição atual é MENOR que a posição posterior
         inicio //faz a permuta deles
         flag<-1 //marca como "houve troca"
         aux<-X[i]
         X[i]<-X[i+1]
         X[i+1]<-aux
         fim_se
      fim_para
   n<-n+1 //atualiza o contador que controla a posição do vetor
   fim_enquanto

//ESTRUTURA PARA EXIBIR O RESULTADO
para i<-1 até 10 faca //para exibir cada posição do vetor ordenado
   escreva(X[i])
fim_algoritmo

 

Resumindo:

É uma espécie de Bubble Sort (otimizada), que ordenará o vetor em ordem DECRESCENTE.   (1-ler os números para preencher o vetor. 2-ordena o vetor em ordem decrescente 3-exibe o vetor ordenado)

 

 

Código em VisuAlg


algoritmo "questão concurso"
var
  X :vetor [1..10] de inteiro //declara as variáves
  n, i, aux, flag :inteiro
  
INICIO
ALEATORIO ON //comando para gerar números automaticamente (para ler pelo teclado, remova essa linha e a outra mais abaixo)
para i de 1 ate 10 faca
   leia(X[i])
fimPara
ALEATORIO OFF

n<-1
flag<-1
enquanto (n<=10) E (flag=1) faca
   flag<-0
   para i de 1 ate 9 faca
      se (X[i] < X[i+1]) então
         flag<-1
         aux<-X[i]
         X[i]<-X[i+1]
         X[i+1]<-aux
      fimSe
   fimPara
n<-n+1
fimEnquanto
   
para i de 1 ate 10 faca //para exibir cada posição do vetor ordenado
   escreva(X[i])
fimPara
fimAlgoritmo

 

PS: download do VisuAlg:
http://antonionicolodi.blogspot.com.br/2015/06/visualg-30-revisao-4-em-25062015.html

 

 

No aguardo.

ele disse que é inserção professor é doido man na verdade só queria saber mesmo o funcionamento dele ajudou bastante man 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @anonymouatour.

 

Quem sou eu para discordar..., mas para mim está mais para Bubble Sort, entendo assim:

 

Em 05/06/2017 às 07:56, Simon Viegas disse:

n<-1
trocado<-1
enquanto (n<=10) E (trocado=1) faca
   trocado<-0
   para i de 1 ate 9 faca
      se (X[i] < X[i+1]) ENTÃO
         trocado<-1
         aux<-X[i]
         X[i]<-X[i+1]
         X[i+1]<-aux
      fimSe
   fimPara
   n<-n+1
fimEnquanto

 

A cada loop do laço externo o menor (por que usou "<") valor irá "flutuar como uma BOLHA" para o fim do vetor. Vai sendo comparado de dois em dois ("posição atual com a posição posterior"), daí, o menor entre eles ficará a direita, e o menor a esquerda (troca quando necessário)... no final, por consequência, o menor valor de todos estará na extrema direita (pois a cada comparação, o menor ficará a direita, e como é comparada com o próximo, continuará ficando a direita até chegar na última posição).

 

Pelo que eu entendi também, esse algoritmo está incompleto (para não dizer falho), pois como a cada loop as últimas posições ficaram ordenadas, não fará mais sentido continuar comparando lá... ou seja, após o primeiro loop, a último posição estará ordenada, na próxima a penúltima, na próxima a antepenúltima... já no código do jeito que está, ele continuará comparando (sem necessidade) essas posições que já estão ordenadas!

 

 

Já no Insert Sort, pelo que eu entendi, a cada loop, é selecionado uma posição (seu valor), e vai verificando e "empurrando os valores para o lado" para assim INSERIR, esse valor selecionado, na posição específica.

 

RESUMINDO:

Tomando-se como base uma ordenação em ordem decrescente:

 

No Bubble Sort, os menores flutuam como uma bolha para o fim a cada loop. O foco aqui é flutuar como uma bolha os menores valores para o fim.

Bubble-sort-example-300px.gif

 

 

No Insert Sort, a cada posição do vetor, todas as posições anteriores e que são menores que ele (posição atual) são "jogados" para direita, após isso, a posição atual é inserida na posição que sobrou (última a ser jogada para direita), ou seja, a base lógica aqui é ir inserindo as maiores posições a esquerda.

 

Insertion-sort-example-300px.gif

 

 

Para mim, o código que foi postado se assemelha ao Bubble Sort!

 

 

Mas a depender, qualquer coisa peça para explicar o funcionamento e qual seria a justificativa para ser o Insert... ou qualquer outra coisa pertinente.

 

No aguardo.

 

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!