aula 133

Dúvida | Como descobrir se uma FRASE é PALÍNDROMA com a linguagem Portugol?

Vamos a mais uma dúvida? E na aula de hoje vamos aprender como identificar uma frase palíndroma com a linguagem Portugol.

Na aula anterior nós aprendemos como identificar uma palavra palíndroma. Para identificar uma frase palíndroma a ideia é muito parecida. Contudo, precisamos fazer uma espécie de limpeza na frase que iremos verificar. Isso é necessário porque qualquer espaço, pontuação, vírgula, ou outro caracter pode atrapalhar a verificação.

Observe a frase a seguir:

O lobo ama o bolo.

Ao fazemos a comparação do primeiro caracter com o último, vamos comparar a letra O com um ponto final ( . ). Mesmo que o ponto final seja removido, ainda assim iremos comparar um espaço ( o segundo caracter ) com um l (letra L – penúltimo caracter). Por isso precisamos remover ou fazer uma cópia da string retirando todo e qualquer caracter que não seja uma letra.

No trecho de código a seguir a frase original é percorrida e copiada para outra cadeia chamada nova. São copiados apenas os caracteres que não são:
– espaço ( ),
– vírgula ( , ),
– exclamação ( ! ),
– interrogação ( ? ),
– ponto ( . )

		/*
		   Fazendo uma cópia da frase (apenas as letras, sem pontuação)
		*/
		para(i = 0; i < tam; i++){
			letra = Texto.obter_caracter(frase, i)
			//escreva(i + " : " + letra + "\n")
			se(letra != ' ' e letra != ',' e letra != '!' e letra != '?' e letra != '.'){
				nova = nova + letra
			}
		}

Outros caracteres poderiam ser adicionados à lista de exclusão conforme a necessidade.

Também precisamos converter toda a string para maiúsculo ou minúsculo. Assim como muitas linguagens de programação, portugol é case-sensitive, ou seja, é sensível ao case (maiúsculo e minúsculo são diferentes). Isso é feito com apenas uma linha como mostrado abaixo, neste caso convertendo toda a string para minúsculo.

                /*
                   convertendo toda a string para minúsculo 
                */
		nova = Texto.caixa_baixa(nova)

Por fim, precisamos percorrer a string em dois sentidos, do início para o meio e do fim para o meio, comparando os caracteres e contando os pares que forem diferentes. Ao final, se a quantidade de valores diferentes for maior que zero, então NÃO temos uma frase palíndroma.

                /*
                    Comparando os caracteres das extremidades em direção ao meio.
                */
		para(i = 0; i < fim; i++){
			se(Texto.obter_caracter(nova, i) != Texto.obter_caracter(nova, fim)){
				diferente++
			}
			fim--
		}

Código completo em Portugol para verificar se uma frase é palíndroma ou não

/*
                 Código escrito por Wagner Gaspar
                 Julho de 2021

		 O lobo ama o bolo.
	         Eva, asse essa ave!
		 Amor a Roma.
*/

programa{
	
        inclua biblioteca Texto

	funcao inicio(){
		
		cadeia frase = "Eva, asse essas aves!"
		cadeia nova = ""
		caracter letra
		inteiro i, fim, tam = Texto.numero_caracteres(frase)
		inteiro diferente = 0

		para(i = 0; i < tam; i++){
			letra = Texto.obter_caracter(frase, i)
			//escreva(i + " : " + letra + "\n")
			se(letra != ' ' e letra != ',' e letra != '!' e letra != '?' e letra != '.'){
				nova = nova + letra
			}
		}
		//escreva(nova)
		nova = Texto.caixa_baixa(nova)
		escreva(nova + "\n")

		fim = Texto.numero_caracteres(nova) - 1
		para(i = 0; i < fim; i++){
			se(Texto.obter_caracter(nova, i) != Texto.obter_caracter(nova, fim)){
				diferente++
			}
			fim--
		}

		se(diferente > 0)
			escreva("A frase (" + frase + ") NÃO é palíndroma!\n")
		senao
			escreva("A frase (" + frase + ") É palíndroma!\n")
	}
}

Deixe um comentário

11 + 8 =

Wagner Gaspar

Capixaba de São Gabriel da Palha, Espírito Santo. Bacharel em Ciência da Computação pela Universidade Federal do Amazonas e mestre em informática pela Universidade Federal do Espírito Santo.