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") } }