Hello World in C, Ansi-style / Plaindrome

How to write a C Program to Hello World in C, Ansi-style in C Programming Language ?


Solution For C Program:
/*Hello World in C, Ansi-style*/

/*
 ============================================================================
 Name        : palindromos.c
 Author      : Naim Hashmi
 Copyright   : Made for studies
 Description : Hello World in C, Ansi-style
 ============================================================================
 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int palindromo(char[], int);

int main(void) {

char str[100] = "arara";

int r = palindromo(str, strlen(str)); /*
Chamada da função passando como parametro a str com a palavra a ser
analisada e o tamanho dela (usei strlen para facilitar pegar esse tamanho
se eu quiser mudar de palavra */

printf("Palindromo? %i", r); //impressão do resultado
return EXIT_SUCCESS;
}

int palindromo(char str[100], int tam){

int tamanhoOriginal = strlen(str);
/* antes de mais nada eu preciso guardar o tamanho da string original,
* portanto ja guardei em uma variavel chamada tamanhoOriginal, esse valor
*/

if(tam <= 1){
/* Essa variavel tam, vai ser diferente a cada chamada da função nas
* recursões, portanto eu comparo ela se for menor ou igual a um, a
* palavra seria um palindromo, exemplo:
* AR A RA, ao chegar no A, o valor do tam vai ser 1, no caso da palavra
* OS SO o tam vai ser 0 pois tem um numero par de letras, caso essa
* parte nao tenha ficado clara, no proximo else, talvez explique melhor*/
return 1;
}
else if(str[tamanhoOriginal - tam] == str[tam-1]){
/*
* aqui é o core da coisa: analisando esse if vemos o pq de guardar o
* tamanho original da string. Sempre passamos durante as chamadas das
* recursões, a mesma string, variando somente a variavel tam que é passada
* como parametro. Observe (coloquei no papel pra enxergar) que se voce
* subtrair o tamanho original da string com o tam passado como parametro
* voce tem exatamente a letra a ser analisada com a posicao tam-1 da string
* exemplo:
* na iteracao 0 temos:
* str = "ARARA"
*
* tamanhoOriginal = 5
* tam = 5
*
* if(str[tamanhoOriginal - tam] == str[tam - 1]
* if(str[5-5] == str[5-1]
* if(str[0] == str[4]) OK pois A = A (lembrando que a string começa
* a contar da posiçao 0
*
* se ele entrar no laço ele chama o metodo de novo
* palindromo(str, tam-1)
*
* repare que eu passei a mesma string sem modificar
*
* entao fica: palindromo(str, 5-1) = palindromo(str, 4)
*
* mudei a variavel tam, continuando a recursão
*
* str = "ARARA"
*
* tamanhoOriginal = 5 (esse valor é calculado em cima de str (ver no
* começo do método)
*
* tam = 4 (valor que eu passei como parametro no metodo)
*
* if(str[tamanhoOriginal - tam] == str[tam - 1]
* if(str[5 - 4 == str[4 - 1]
* if(str[1] == str[3] OK pois R == R
*
* e assim vai
*
*/
return palindromo(str, tam-1);
}
else{
/*
* caso os ifs acima sao sejam satisfeitos entraremos aqui imediatamente
* e retornamos zero ja constatando que nao é palindromo
*/
return 0;
}
}


Learn More :