Verificare se un array è palindromo (C++)

di il
14 risposte

Verificare se un array è palindromo (C++)

L'array inserito viene considerato sempre un palindromo. Ho fatto un po' di prove e l'errore dovrebbe riguardare la variabile cont del secondo for però potrei sbagliarmi.

#include<iostream>
using namespace std;
int main()
//Leggere un array di interi di 10 posizioni e verificare se è palindromo
// (ovvero se non cambia ad essere letto dalla prima cella all’ultima o viceversa).
{
int a[10];
int b[10];
int cont=9;
int chiave=0;
cout<<" inserisci 10 numeri interi uno alla volta "<<endl;
for (int i = 0; i < 10; i++)
{
cout<<"Inserisci un numero intero:";
cin>>a[i];
b[cont]=a[i];
cont--;
}
cont=9;
cout<<endl<<"Numeri inseriti"<<endl;
for (int i = 0; i < 10; i++)
{

cout<<a[i]<<endl;
cout<<b[cont]<<endl;

if (a[i]==b[cont])
{
chiave++;

}
cont--;


}
if (chiave==10)
{
cout<<"L' array è palindromo ";
}
else
{
cout<<"L' array non è palindromo ";
}









return 0;
}

14 Risposte

  • Re: Verificare se un array è palindromo (C++)

    Scusa, ma che metodo hai usato?

    Non mi pare sia adatto… anzi sbagliato

    Spiegami qui con un esempio cosa fai con 10 numeri e dicci a cosa ti serve b perché non ha molto senso

    Tu devi usare solo a

  • Re: Verificare se un array è palindromo (C++)

    14/04/2023 - oregon ha scritto:


    Scusa, ma che metodo hai usato?

    Non mi pare sia adatto… anzi sbagliato

    Spiegami qui con un esempio cosa fai con 10 numeri e dicci a cosa ti serve b perché non ha molto senso

    Tu devi usare solo a

    Nel primo for inserisco gli input nell'array di a e contestualmente li metto nell'array b in posizioni inverse (se per i=0 l'input è 9, allora l' input sarà copiato  nella decima cella (cont=9) dell'array b).
    il cout b del secondo for l ho usato per fare i test (fai finta che non ci sia). All'interno del secondo for l'idea era verificare se l array a era palindromo confrontandolo con l'array “specchio” b, per farlo ho assegnato di nuovo  il valore di 9 cont e ho confrontato il primo elemento di a con l ultimo di b e cosi via (l'intenzione era quella) .
    Si ho visto che si poteva anche usare solo l'array a però ormai la frittata era fatta e voglio capire cosa c'è che non va. 
    Se provo a stampare b dopo il primo for assegna correttamente i valori di a nelle celle volute, all'interno del secondo for si limita solo a copiare l array a.

  • Re: Verificare se un array è palindromo (C++)

    Ma non ha senso quello che fai con b. Con i due vettori in quel modo è proprio sbagliato. Se copi un elemento e poi lo confronti sarà senore uguale!

    Sicuro di aver capito cosa significa controllare se a è palindromo?   Devi confrontare metà del vettore a con l'altra metà nel senso inverso

    Ripeto, mi fai un esempio? 

  • Re: Verificare se un array è palindromo (C++)

    14/04/2023 - oregon ha scritto:


    Ma non ha senso quello che fai con b. Con i due vettori in quel modo è proprio sbagliato. Se copi un elemento e poi lo confronti sarà senore uguale!

    Sicuro di aver capito cosa significa controllare se a è palindromo?   Devi confrontare metà del vettore a con l'altra metà nel senso inverso

    Ripeto, mi fai un esempio? 

    Si hai ragione, ho fatto una prova al volo  e il codice così funziona. Grazie dell'aiuto.
    #include<iostream>
    using namespace std;
    int main()
    //Leggere un array di interi di 10 posizioni e verificare se è palindromo
    // (ovvero se non cambia ad essere letto dalla prima cella all’ultima o viceversa).
    {
    int a[10];
    int b[10];
    int cont=9;
    int chiave=0;
    cout<<" inserisci 10 numeri interi uno alla volta "<<endl;
    for (int i = 0; i < 10; i++)
    {
    cout<<"Inserisci un numero intero:";
    cin>>a[i];
    b[cont]=a[i];
    cont--;
    }
    cont=0;
    cout<<endl<<"Numeri inseriti"<<endl;
    for (int i = 0; i < 10; i++)
    {
    
    cout<<a[i]<<endl;
    
    
    if (a[i]==b[cont])
    {
    chiave++;
    
    }
    cont++;
    
    
    }
    if (chiave==10)
    {
    cout<<"L' array è palindromo ";
    }
    else
    {
    cout<<"L' array non è palindromo ";
    }
    
    
    
    
    
    
    
    
    
    return 0;
    }
  • Re: Verificare se un array è palindromo (C++)

    Scusa che prova hai fatto? Vedo ancora due vettori…

  • Re: Verificare se un array è palindromo (C++)

    14/04/2023 - oregon ha scritto:


    Scusa che prova hai fatto? Vedo ancora due vettori…

    La prova che ho fatto è inserire degli array palindromi come ad es.(1,2,3,4,5,5,4,3,2,1) e alcuni array non palindromi ed il programma ha saputo riconoscere quali lo erano e quali non. So che si può fare in maniera più efficiente utilizzando solo un array , però volevo capire cosa c'era che non andava nel mio codice. il problema nel primo codice derivava dal fatto che nel 2' ciclo for l'indice cont doveva essere inizializzato a 0, cosi che il primo elemento di b (che è uguale all'ultimo di a grazie al 1'ciclo for) venisse messo a confronto con il primo elemento di a,  il construtto if verifica se i 2 elementi sono uguali (ovviamente il codice si può migliorare ).

  • Re: Verificare se un array è palindromo (C++)

    Ora fallo solo con il vettore a

  • Re: Verificare se un array è palindromo (C++)

    Volendo “strafare” si potrebbe fare anche con un solo array di dimensione “dimezzata”, in questo caso solo 5 elementi

  • Re: Verificare se un array è palindromo (C++)

    15/04/2023 - oregon ha scritto:


    Ora fallo solo con il vettore a

    #include<iostream>
    using namespace std;
    int main()
    //Leggere un array di interi di 10 posizioni e verificare se è palindromo
    // (ovvero se non cambia ad essere letto dalla prima cella all’ultima o viceversa).
    {
    int a[10];
    int b=9;
    int equal=0;
    bool palindromo=false;
    
    
    cout<<" inserisci 10 numeri interi uno alla volta "<<endl;
    
    
    for (int i = 0; i < 10; i++)
    {
    cout<<"Inserisci un numero intero:"<<endl;
    cin>>a[i];
    }
    
    cout<<"numeri inseriti:"<<endl;
    for (int i = 0; i < 10; i++) // nella condizione si poteva scrivere(i<5), ho preferito lasciare 10 per far stampare l'intero array
    {
    
    cout<<a[i]<<endl;
    if (a[i]==a[b])
    {
    equal++;
    if (equal==5)
    {
    palindromo=true;
    
    }
    
    
    
    }
    b--;
    
    
    }
    if (palindromo)
    {
    cout<<" l'array è palindromo ";
    }
    else
    {
    cout<<" l'array non è palindromo ";
    }
    
    
    
    
    
    return 0;
    }
  • Re: Verificare se un array è palindromo (C++)

    15/04/2023 - StandardOil ha scritto:


    Volendo “strafare” si potrebbe fare anche con un solo array di dimensione “dimezzata”, in questo caso solo 5 elementi

    Ora sono curioso, un modo per farlo mi era venuto in mente però ne risulterebbe un codice poco efficiente(creazione di altri variabili, + construtti…).

  • Re: Verificare se un array è palindromo (C++)

    No, pensa ad una cosa semplice

    Devi confrontare i primi 5 caratteri di a con gli ultimi 5 

    Il primo con l'ultimo, il secondo con il penultimo…

  • Re: Verificare se un array è palindromo (C++)

    15/04/2023 - oregon ha scritto:


    No, pensa ad una cosa semplice

    Devi confrontare i primi 5 caratteri di a con gli ultimi 5 

    Il primo con l'ultimo, il secondo con il penultimo…

    lo potrei fare mettendo i<5 nella condizione del secondo for (però cosi non stamperei tutti i numeri, nel mio codice confronto i primi 10 con gli ultimi 10 che dà gli stessi risultati (riesce a capire la presenza di palindromi o meno) ma in più tempo). Se intendi altro non riesco a capire. 

    Sul sito dove prendo gli esercizi danno questo codice come risposta, che è sicuramente migliore del mio( si creano 2 variabilo in meno e l'if funziona in modo tale da far uscire da for appena riscontri che l array non è palindromo).

    #include <iostream>
    using namespace std;
    int main()
    {
       int a[10];
       for (int i=0;i<10;i++)
       {
           cout<<"inserisci il contenuto per la cella "<<i<<" ";
           cin>>a[i];
       }
      bool palindromo=true;
       for(int i=0;i<5;i++)
       {
           if(a[i]!=a[9-i])
           {
               palindromo=false;
           }
       }
       if(palindromo)
       {
           cout<<"l'array e' palindromo";
       }
       else
       {
           cout<<"l'array NON e' palindromo";
       }
    }
    
  • Re: Verificare se un array è palindromo (C++)

    Posto un numero pari di elementi

    I numeri fino a metà li memorizzo nello array, indice a salire

    Dalla metà li confronto, indice a scendere

    Al primo confronto errato abortisco il ciclo

    Stampare l'ingresso non faceva parte delle specifiche originali

    Prossima volta dirai subito tutte le prescrizioni 

  • Re: Verificare se un array è palindromo (C++)

    15/04/2023 - StandardOil ha scritto:


    Posto un numero pari di elementi

    I numeri fino a metà li memorizzo nello array, indice a salire

    Dalla metà li confronto, indice a scendere

    Al primo confronto errato abortisco il ciclo

    Stampare l'ingresso non faceva parte delle specifiche originali

    Prossima volta dirai subito tutte le prescrizioni 

    Grazie della risposta(in effetti ci potevo arrivare…).
    #include<iostream>
    using namespace std;
    int main()
    {
    int a[5];
    int x;
    bool palindromo=true;
    cout<<" inserisci 10 numeri interi uno alla volta "<<endl;
    for (int i = 0; i < 5; i++)
    {
    cin>>a[i];
    }
    for (int i = 4; i > -1; i--)
    {
    cin>>x;
    if (x!=a[i])
    {
    palindromo=false;
    cout<<" l'array che si stava inserendo non è palindromo ";
    break;
    }
    
    }
    if (palindromo)
    {
    cout<<" l'array è palindromo ";
    }
    
    
    
    
    
    
    
    return 0;
    }
Devi accedere o registrarti per scrivere nel forum
14 risposte