Ir ao conteúdo

Portugol Esperava encontrar ENTAO BubbleSort


Ir à solução Resolvido por Lucca Rodrigues,

Posts recomendados

Postado

Olá.

O VisualG parece ter uma grande dificuldade de interpretar condicionais ao ponto que 99% dos problemas com Portugol é esse tal "Esperava encontrar ENTAO" 😅

Sinceramente não sei o que poderia estar errado nesse pseudocódigo de bubblesort...

Var

val: vetor [0..49] de inteiro
i, j, k, op, ops, vals, orn, cond, ret: inteiro

funcao bubblesort(): inteiro
var
aux, indi, indj: inteiro
inicio
      para indi de 0 ate i faca
           para indj de (i - 1) ate indi passo (-1) faca
                se (val[indj] < val[indj-1]) entao
                  aux <- val[indj]
                  val[indj] <- val[indj-1]
                  val[indj-1] <- aux
               fimse
           fimpara
      fimpara
      retorne 0
fimfuncao

Ele acusa um problema justamente nessa linha:

se (val[indj] < val[indj-1]) entao

Esse pseudocódigo tirei daqui:

image.png.9409ee1cddb5fd4aa5e9420b614fe9e7.png

Inclusive ele só aceita mais de uma operação condicional em um SE caso elas estejam entre parênteses, fiquei uns 20 minutos quebrando a cabeça por isso já que o erro em si não é indicado pelo VisualG, uma palhaçada esse interpretador 🤡

  • Curtir 1
  • Solução
Postado

@Luccas Fernando indi começa em 0, e indj é decrementado até atingir o valor de indi.

Sua condição:

Em 26/10/2021 às 11:26, Luccas Fernando disse:
se (val[indj] < val[indj-1]) entao

Conclusão: não vai dar pra acessar o valor de índice -1 do vetor.

Pra solucionar, você pode fazer indj ser decrementado até atingir indi + 1.

  • Obrigado 1
  • Membro VIP
Postado

@Luccas Fernando, seu código aparentemente não tem erro de sintaxe... talvez apenas incompleto.

 

Qual versão do VisualG está utilizando.

Baixe novamente... sugiro utilizar a verão 3.6.0.5.
Exemplo de fonte: https://sourceforge.net/projects/visualg30/files/
Baixe o VISUALG3_REV60.rar

 

algoritmo "Exercício com BubbleSort"
var
   val: vetor [0..49] de inteiro
   i, j, k, op, ops, vals, orn, cond, ret: inteiro
   soParaReceberORetorno: inteiro
   
funcao bubblesort(): inteiro
var
   aux, indi, indj: inteiro
inicio
   para indi de 0 ate i faca
      para indj de (i - 1) ate indi passo (-1) faca
         se (val[indj] < val[indj-1]) entao
            aux <- val[indj]
            val[indj] <- val[indj-1]
            val[indj-1] <- aux
         fimse
      fimpara
   fimpara
   retorne 0
fimfuncao

inicio
   soParaReceberORetorno <- bubblesort() //é preciso de algum modo receber o retorno da função
fimAlgoritmo



Então, faz mais sentido:

- preencher o vetor com dados; (sugiro deixar valores fixos no próprio código)

- exibir na tela o vetor

- chamar a função para ordenar o vetor

- exibir novamente o vetor (para ver se ficou ordenado)

 

Adendo:

41 minutos atrás, Lucca Rodrigues disse:

@Luccas Fernando indi começa em 0, e indj é decrementado até atingir o valor de indi.

Sua condição:

Conclusão: não vai dar pra acessar o valor de índice -1 do vetor.

Pra solucionar, você pode fazer indj ser decrementado até atingir indi + 1.

 

Devido a esse erro de lógica (que seria diferente de erro de sintaxe), o VisuaG nem chega ao entao... logo, nem era para dar o erro informado no tópico.


O código poderia está assim, quem não daria erro algum.
 

algoritmo "Exercício com BubbleSort"
var
   val: vetor [0..49] de inteiro
   i, j, k, op, ops, vals, orn, cond, ret: inteiro
   soParaReceberORetorno: inteiro

funcao bubblesort(): inteiro
var
   aux, indi, indj: inteiro
inicio
   para indi de 0 ate i faca
      escreval("1")
      para indj de (i - 1) ate indi passo (-1) faca
         escreval("2")
         se (val[indj] < val[indj-1]) blablabla
            escreval("3")
            aux <- val[indj]
            val[indj] <- val[indj-1]
            val[indj-1] <- aux
         fimse
      fimpara
   fimpara
   retorne 0
fimfuncao

inicio
   soParaReceberORetorno <- bubblesort() //é preciso de algum modo receber o retorno da função
fimAlgoritmo

 

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!