Parola palindroma

di il
6 risposte

Parola palindroma

Salve. Devo svolgere questo esercizio: Verifica se un vettore di caratteri è palindromo (cioè se risulta uguale partendo da sinistra o da destra). Questo è il codice:

#include <iostream>
#include <stdlib.h>
using namespace std;
void crea_vett(char [],int);
void scrivi_vett(char [],int,int);
int main()
{
    char v[50],q[50];
    int i,n,x,c;
    bool pal=false;
    do
    {
        cout<<"Quanto e\' grande la parola da verificare?"<<endl;
        cin>>n;
    } while (n<2 || n>50);
    crea_vett(v,n);
    cout<<"        "<<endl;
    for (i=0,x=n-1;i<x && pal==true;i++,x--)
    {
        
        if(v[i]==v[x])
             pal=true;
        else 
             pal=false;
	}
    if(pal=true)
                cout<<"La parola e\' palindroma"<<endl; 
    else
                cout<<"La parola non e\' palindroma"<<endl; 
    scrivi_vett(v,i,n);
    system("pause");
    return 0;
}

void crea_vett(char a[50],int y)
{
     int h;
     for(h=0;h<y;h++)
     {
                    cin>>a[h];
     }
}

void scrivi_vett(char a[50],int l,int n)
{
     for(l=0;l<n;l++)
     {
                    cout<<a[l]<<"        "<<endl;
     }
}
L'errore è che scrive sempre che la parola è palindroma anche quando non lo è. Grazie. Ciao

6 Risposte

  • Re: Parola palindroma

    Fai attenzione a questa

    if(pal=true)
  • Re: Parola palindroma

    Infatti ho modificato e al posto dell'else ho messo if (pal==false) e ora funziona! Grazie ancora. Ciao
  • Re: Parola palindroma

    Ciao, prova a guardare anche questo esempio che sfrutta il tipo string...
    
    #include <iostream>
    #include <stdlib.h>
    #include <string>
    using namespace std;
    
    bool controllaPalindroma(char caratteri[], int dimensione);	/* prototipo della funzione */
    
    int main(int argc, char * argv[])
    {
    	string parola;
    	cout<<"Inserire parola: ";
    	cin>>parola;		/* lettura (molto semplice) della parola inserita */
    	
    	int lunghezza = parola.size();
    	char caratteri[lunghezza];
    	
    	for(int i=0; i<lunghezza; i++)	/* "trasformo" la stringa in un array di caratteri */
    	{
    		caratteri[i] = parola[i];
    	}
    	
    	bool isPalindroma = controllaPalindroma(caratteri, lunghezza);	/* eseguo il controllo... */
    	
    	if(isPalindroma == true) cout<<"La parola e' palindroma."<<endl;	/* ... e stampo il risultato */
    	else cout<<"La parola non e' palindroma."<<endl;
    	
    	return 0;
    }
    
    /* controlla se una parola (array di caratteri) e' palindroma */
    bool controllaPalindroma(char caratteri[], int dimensione)
    {
    	for(int i=0; i<dimensione; i++)	/* in realta' ci si potrebbe fermare a meta' parola... */
    	{
    		if(caratteri[i] != caratteri[dimensione-1-i]) return false;
    	}
    	return true;	/* se sono arrivato fino a qui significa che la parola e' palindroma */
    }
    
    La trasformazione della stringa in array si poteva fare anche all'interno della funzione controllaPalindroma, che sarebbe quindi diventata del tipo
    bool controllaPalindroma(string parola) {...}
    Se ti va puoi provare, tanto è praticamente tutto fatto!

  • Re: Parola palindroma

    tomrecensioni ha scritto:


    Infatti ho modificato e al posto dell'else ho messo if (pal==false) e ora funziona! Grazie ancora. Ciao
    Non ho capito ... hai modificato l'else invece della if che ti ho indicato?
  • Re: Parola palindroma

    No ho modificato gli if così:
    
    if(pal==true)
                    cout<<"La parola e\' palindroma"<<endl; 
        if(pal==false)
                    cout<<"La parola non e\' palindroma"<<endl; 
    
  • Re: Parola palindroma

    Scusa, mi spieghi a cosa serve un'altra if dato che la condizione è la medesima ?

    Basta
    
    if(pal==true)
       cout<<"La parola e\' palindroma"<<endl; 
    else
       cout<<"La parola non e\' palindroma"<<endl; 
    
    o addirittura
    
    if(pal)
       cout<<"La parola e\' palindroma"<<endl; 
    else
       cout<<"La parola non e\' palindroma"<<endl; 
    
    o se ci pensi un attimo, basterebbe una linea
    
    cout << "La parola" << (pal ? "" : " non") << " e\' palindroma" << endl;
    
Devi accedere o registrarti per scrivere nel forum
6 risposte