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