Nesta aula vamos fazer um programa para descobrir se uma palavra é palíndroma ou não com a linguagem de programação C.
Uma palavra é dita palíndroma quando possui o mesmo significado se lida da esquerda para a direita ou da direita para a esquerda.
Veja alguns exemplos de palavras palíndromas:
ama
osso
arara
radar
reviver
Lembre-se que estamos falando de um algoritmo para identificar uma palavra palíndroma. Há diversas formas possíveis e corretas para a elaboração desse algoritmo. Nos trechos de código abaixo são apresentadas duas versões diferentes.
Algoritmo para descobrir se uma palavra é palíndroma – versão 1
Na primeira versão a ideia desenvolvida é comparar os caracteres da string das bordas para o meio. Tomemos como exemplo a palavra “osso”. Comparamos a primeira letra com a última, são dois ós, Comparamos a segunda com a penúltima, são dois ss.
Para isso precisamos de duas variáveis contadoras, uma que inicia em zero e outra que inicia com tamanho da string – 1 e o objetivo é contar os caracteres diferentes.
Ao final do processo de comparação, se a quantidade de caracteres diferentes for igual a zero, então temos uma palavra palíndroma.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char palavra[30];
int i, tam, diferentes = 0;
printf("Digite uma palavra: ");
scanf("%s", palavra);
// ------- PRIMEIRA VERSÃO --------------------
tam = strlen(palavra);
tam--;// último índice válido da string (vetor)
i = 0; // primeiro índice válido da string (vetor)
while(tam >= i){
if(palavra[i] != palavra[tam]) // conta as letras diferentes
diferentes ++;
i++;
tam--;
}
if(diferentes == 0)
printf("\nEh palindroma...\n");
else
printf("\nNao eh palindroma...\n");
return 0;
}
Algoritmo para descobrir se uma palavra é palíndroma – versão 2
Esta segunda versão faz uso de uma estratégia diferente para obter o mesmo resultado, descobrir se uma palavra é palíndroma ou não.
O primeiro passo aqui é fazer uma cópia invertida da string que desejamos avaliar, invertendo os caracteres da string. Como exemplo imagine a palavra “amor”. A cópia invertida desta palavra é “roma”.
Agora que temos duas strings, precisamos apenas comparar e descobrir se são iguais. Isso pode ser feito com uma repetição, comparando cada caracter das strings, ou ainda usando a função strcmp que retorna zero se as duas strings forem iguais.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char palavra[30], copia[30];
int i, tam, iguais = 0;
printf("Digite uma palavra: ");
scanf("%s", palavra);
// ------- SEGUNDA VERSÃO --------------------
tam = strlen(palavra);
for(i = 0; i < strlen(palavra); i++){
copia[i] = palavra[tam - 1];
tam--;
}
copia[i] = '\0';
tam = strlen(palavra);
printf("Original: %s\nCopia: %s\n", palavra, copia);
for(i = 0; i < tam; i++){
if(palavra[i] == copia[i])
iguais++;
}
if(tam == iguais)
printf("\nEh palindroma...\n");
else
printf("\nNao eh palindroma...\n");
return 0;
}

Quero aprender a programar em C