codice:
#include <stdlib.h> /* librerie standard */
#include <stdio.h> /* funzioni printf, scanf */
#include <string.h> /* librerie delle string */
#define lunghezza 20 /* lunghezza massima vettore */
/* Dichiarazioni Funzioni */
void inseriscistringa(int i, int n, char *vettore); /*legge in input una stringa*/
void toglispazi(int i, int n, char *nuovo, char vecchio[]); /*toglie spazi in una stringa*/
int palindromapari(int i, int n, char parola[]); /*verifica se la stringa è palindroma se la lunghezza della stringa è pari*/
int palindromadispari(int i, int n, char parola[]); /*verifica se la stringa è palindroma se la lunghezza della stringa è dispari*/
void mostrainformazioni( int dimensione, char vettore[]); /*stampa a video i risultati*/
/* Inizio del Main */
int
main (void)
{
char vettore_input[lunghezza];/*input, vettore inserito dall utente che può comprendere spazi*/
char parola[lunghezza]; /*variabile di programma, il contenuto è copiato da vettore_input senza gli spazi*/
int i=0; /*programma, indice della posizione del vettore*/
int dim; /*programma, dimensione effettiva del vettore*/
char k; /*programma, viene usato in vari modi, per leggere un carattere alla volta*/
int soluzione; /*se vera la parola o frase è palindroma, altrimenti non lo è*/
char risposta;
printf("<***********************************************>\n");
printf("<* *>\n");
printf("<*---------------- PALINDROMO ---------------*>\n");
printf("<* *>\n");
printf("<***********************************************>\n\n");
inseriscistringa(i=0, lunghezza, vettore_input); /*chiamata funzione - inserisci una frase o parola nel vettore*/
i=0; /*azzera contatore*/
dim= strlen(vettore_input);
printf("\nLa stringa inserita e'->\n");
mostrainformazioni(dim, vettore_input); /* chiamata funzione - mostra i dettagli su dimensione e contenuto della stringa, per verificare se è corretto*/
toglispazi(i, dim, parola, vettore_input); /* chiamata funzione - toglie eventuali spazi nella stringa*/
dim=strlen(parola); /*calcola lunghezza della parola digitata senza spazi*/
printf("\nLa stringa senza spazi e'->\n");
mostrainformazioni(dim, parola); /* chiamata funzione - mostra contenuto e dimensione del nuovo vettore, verifica che tutto sia andato come previsto*/
i=0; /*azzeriamo contatore*/
if ((dim%2)==0) /*se la dimensione della stringa è pari allora...*/
{dim=dim-1; /*perché gli indici del vettore vanno da 0 a dim-1*/
soluzione=palindromapari(i, dim, parola);}
else
{dim=dim-1;
soluzione=palindromadispari(i, dim, parola);}
if (soluzione) /* istruzione if per il confronto delle funzioni */
printf("\nLa parola digitata e' palindroma\n"); /* stampa a video risultato */
else
printf("\nLa parola digitata non e' palindroma\n"); /* stampa a video risultato */
system("pause");
return(0); /* fine del main */
}
/* funzione input - leggi stringa */
void inseriscistringa(int i, int n, char *vettore)
{
int k; /* varibile di confronto nel ciclo for */
printf("Inserisci una parola o una frase senza usare segni di punteggiatura:\n\n---> "); /* inserimento */
k=getchar(); /* confronto stringa-varibile */
for(i=0; (i<n)&&(k!='\n')&&(k!=EOF);i++) /* ciclo for per la memorizzazione dei caratteri in vettore */
{vettore[i] = k;
k=getchar();
}
vettore[i]='\0';
}
/* funzione calcola - togli spazi */
void toglispazi(int i, int n, char *nuovo, char vecchio[])
{
int j=0; /* ciclo di conteggio */
for (i=0; i<n; ++i)
{
if (vecchio[i]!=' ') /* confronto con l'inserimento - blank */
{nuovo[j]=vecchio[i];
j=j+1;} /* incremento */
}
nuovo[j]='\0';
}
/* funzione confronto - verifica dispari */
int palindromadispari(int i, int n, char parola[])
{
int risultato; /* variabile risultato */
if(i==n) /* confronto */
{/*carattere sicuramente uguale, risultato vero*/
risultato=1;
return(risultato); /* restituisce il valore 1 */
}
else
{
if(parola[i]==parola[n])
risultato=palindromadispari(i+1, n-1, parola);
else /*lettere non uguali, risultato falso*/
{ risultato=0;
return(risultato); /* restituisce il valore 0 */
}
}
}
/* funzione confronto - verifica pari */
int palindromapari(int i, int n, char parola[])
{
int risultato; /* variabile risultato */
if(i>n) /* confronto */
{
if (parola[i]==parola[n]) /* confronto */
{risultato=1;
return(risultato); /* restituisce il valore 1 */
}
else
{risultato=0;
return(risultato); /* restituisce il valore 0 */
}
}
else /* condizione risultante */
{
if (parola[i]==parola[n])
risultato=palindromapari(i+1, n-1, parola); /* richiamo alla funzione */
else
{risultato=0;
return (risultato); /* restituisce il valore 0 */
}
}
}
/* funzione output - stampa a video */
void mostrainformazioni(int dimensione, char vettore[])
{
printf("%s\n", vettore); /* stampa a video */
}