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