Ir ao conteúdo
  • Cadastre-se
GKuze

VisualG RESOLVIDO Verificador de Palíndromos - melhora na lógica

Recommended Posts

Bom dia amigos, eu desenvolvi ontem esse algoritmo que faz a verificação se uma palavra é um Palíndromo ou não, no VisualG e gostaria de saber se alguém tem alguma ideia de como eu poderia melhorar essa lógica. O VisualG não tem muitos métodos para manipulação de strings, então fica difícil o negócio! :tw_confused:

Algoritmo "Verificador de palíndromos"
// Disciplina  :  [Algoritmos e Lógica de Programação]
// Descrição   : Este programa verifica se uma palavra, quando tem suas
//letras invertidas, acaba se tornando a mesma palavra. Ex: Arara.
// Autor(a)    : GKuze
// Data atual  : 12/06/2018


Var

   PalavraEscolhida: caractere //string
   vetPalavraInvertida : vetor [1..50] de caractere //armazena os caracteres da palavra escolhida em ordem contrária
   vetPalavraEscolhida : vetor [1..50] de caractere // caracteres da palavra escolhida
   indiceInverso: inteiro
   contador: inteiro
   n: inteiro
   palindrome: logico

Inicio
   contador <-  50;
   palindrome <- verdadeiro //"palindrome" por padrão
   escreva("Digite a palavra para verificar se ela é palindrome: ")
   leia(palavraEscolhida)

   contador <- compr(palavraEscolhida)

   para n de 1 ate contador faca
      indiceInverso <- (compr(palavraEscolhida) - n) + 1

      vetPalavraInvertida[indiceInverso] <- copia(palavraEscolhida, indiceInverso, 1)
      vetPalavraEscolhida[n] <- copia(palavraEscolhida, n, 1)

      se (vetPalavraEscolhida[n] <> vetPalavraInvertida[indiceInverso]) então
         //caso alguma letra da palavra invertida seja diferente da letra na
         //mesma posição, da palavra escolhida,
         //a variavel palindrome vira falso
         palindrome <- falso
      fimse

   fimpara

   se palindrome = verdadeiro então
      escreva("A palavra é palíndromo!")
   senao
      escreva("A palavra não é palíndromo...")
   fimse

Fimalgoritmo

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

1#

É para verificar uma palavra ou para verificar uma frase?... palíndromo geralmente se refere à última.

 

 

 

2#

Pelo que eu vi, você está comparando os caracteres de um posição, com a posição "oposta". Nesse caso, poderia fazer direto...

Ex.:

se copia(palavraEscolhida,n,1) <> copia(palavraEscolhida,((compr(palavraEscolhida)-n)+1) ,1) ENTÃO

 

Mesmo se fosse usar um vetor, poderia usar um vetor só... ou seja, compararia uma posição nesse vetor, com a posição oposta deste mesmo vetor.

 

 

 

2#

O que você está fazendo NÃO é verificar se é palíndromo, está apenas verificando se invertida fica igual. São coisas distintas... palíndromo não é só isso, ou seja, toda palavra que invertida fica igual é palíndromo, mas existem palavras que quando invertida não fica igual, e mesmo assim é palíndromo...  Ex: anã. Ele é palíndromo.

 

Se for usando frases, teríamos: Socorram-me, subi no ônibus em Marrocos. É palíndromo, mas se invertida não fica igual...

 

 

***

 

Em fim. Dê uma pesquisa sobe o que é palíndromo. Entenda melhor o problema e tente aplicar os conceitos.

 

No aguardo.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Simon Viegas Obrigado pela resposta! Eu tenho 2 meses pra dominar VisualG e Portugol, e me sair bem nas provas da faculdade, então estou pesquisando por problemas e exercícios pra ver se consigo desenvolver uma boa lógica com essas tecnologias.

Compartilhar este post


Link para o post
Compartilhar em outros sites
18 minutos atrás, GKuze disse:

@Simon Viegas Obrigado pela resposta! Eu tenho 2 meses pra dominar VisualG e Portugol, e me sair bem nas provas da faculdade, então estou pesquisando por problemas e exercícios pra ver se consigo desenvolver uma boa lógica com essas tecnologias.

 

De certo modo, você precisa ir aprendendo sobre técnicas de programação em geral... Visualg é apenas uma ferramenta, ou seja, estaria aprendendo técnicas utilizando Portugol. Se for utilizar outra linguagem de programação, as técnicas são parecidas, apenas precisará adequar as sintaxes da linguagem ("as regras"). A lógica envolvida para verificar se é palíndromo ou não independe da linguagem... por exemplo:

 

1 hora atrás, Simon Viegas disse:

se copia(palavraEscolhida,n,1) <> copia(palavraEscolhida,((compr(palavraEscolhida)-n)+1) ,1) ENTÃO

 

Estou verificando "se o caractere de uma posição é igual ao caractere da posição 'invertida'", ou seja, era preciso fazer isso... devido as característica do Visualg, foi imaginado utilizando o copiar() para ter acesso as letras específicas da palavra. A parte mais interessante é essa: sabe O QUE precisa fazer. O "COMO FAZER o que precisa" é só pesquisar um pouco sobre a sintaxe (o que inclui tirar dúvidas em fóruns, rs). A experiência com a linguagem vai se acumulando... por ai vai..

 

No Pascal, poderia ser algo como:

if copy(palavraEscolhida,n,1) <> copy(palavraEscolhida,((length(palavraEscolhida)-n)+1) ,1) then 

Entende? é a mais lógica, apenas usando a sintaxe da linguagem.

 

Mas aí, cada linguagem tem suas características especiais ou limitações... no Pascal mesmo, com a experiência do dia-a-dia e/ou sugestão de alguém etc, já saberia que numa string (análogo ao caractere) é possível acessar uma caractere de determinada posição usando o []. Se não soubesse ainda, num outro programa que precisasse acessar caracteres de uma string, lembraria dessa funcionalidade. A string aqui é como se fosse um vetor de char (também análogo ao caractere, mas este só cabe um caractere). Aí poderia fazer assim:

if (PalavraEscolhida[n] <> PalavraEscolhida[indiceInverso]) then

Não precisaria gerar um vetor, para depois comparar as posições... no Pascal, a lógica seria mais simples... não seria necessário ter que pensar em ter quer criar uma vetor...

 

 

Então, supondo que eu só tenha experiência em Pascal, a primeira coisa que eu fiz foi tentar acessar um caractere assim com os []. Não funcionou... dei uma leve pesquisada e me parece que esse recurso não está disponível no Visualg (apesar de usar uma linguagem irmã). Aí, teria que verificar outra forma de ter acesso a um posição... possivelmente encontraria essa tal de copia()......

adicionado 4 minutos depois

Só um adendo:

repeticao.png

 

kkkkkkk

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Simon Viegas  Sim, eu já entendo um pouco de C# e Java, pois, desde 2016 venho estudando por conta própria, e faria de maneira mais simples a mesma lógica, em uma dessas linguagens. O problema é que como estou agora no começo da faculdade de ADS, preciso aprender algoritmos e essa "sintaxe" do pseudo-código. Após sua sugestão eu limpei o código e reformulei seu propósito para "verificador de palavras palindrômicas", o que resolve a confusão de tentar checar por frases palindromes completas, o que o programa não faz. Agora meu código está assim:

Algoritmo "Verificador de palavras palindrômicas 2.0"
// Disciplina  :  [Algoritmos e Lógica de Programação]
// Descrição   : Este programa verifica se uma palavra, quando tem suas
//letras invertidas, acaba se tornando a mesma palavra. Ex: Arara.
// Autor(a)    : GKuze
// Data atual  : 12/06/2018

Var
   PalavraEscolhida: caractere //string
   contador: inteiro
   n: inteiro
   palindrome: logico

Inicio
   contador <-  50;
   palindrome <- verdadeiro
   escreva("Digite a palavra sem acentos para verificar se ela é palindrômica: ")
   leia(palavraEscolhida)

   contador <- compr(palavraEscolhida)

   para n de 1 ate contador faca

      se (copia(palavraEscolhida, n, 1) <> copia(palavraEscolhida, (compr(palavraEscolhida)-n)+1, 1)) então
          palindrome <- falso
      fimse

   fimpara

   se palindrome = verdadeiro então
      escreva("A palavra é palindrômica!")
   senao
      escreva("A palavra não é palindrômica...")
   fimse
Fimalgoritmo

 

Agradeço seu tempo e esforço ao me ajudar!

Compartilhar este post


Link para o post
Compartilhar em outros sites

1#

2 horas atrás, Simon Viegas disse:

1#

É para verificar uma palavra ou para verificar uma frase?... palíndromo geralmente se refere à última.

 

Era uma pergunta... esqueci da "?", rs   (obs.: editei a postagem)

 

 

 

2#

É... para uma palavra não muda muita coisa, creio que basicamente seria essa parte dos acentos. A questão principal é com frases.

 

***

 

Então, qual o enunciado completo dessa questão?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×