Problema comprensione algoritmo palindromo

di il
19 risposte

Problema comprensione algoritmo palindromo

Ho iniziato a studiare il ciclo for e gli array e dopo aver visto la parte teorica(abbastanza semplice) mi son messo a cercare esercizi e ho inziato con quello che chiede una parola o una frase e controlla se questa è palindroma. Concettualmente ho sviluppato l'algoritmo ma non son riuscito a tradurlo in c++: Dunque ho trovato questo codice in rete che permette questo l'unico problema è che non riesco a capirne il funzionamento.Potreste aiutarmi per favore ad analizzarlo e capirlo.Grazie in anticipo. Coomento il codice che non ho capito.

#include <cstdlib>
#include <iostream>         
using namespace std;

int main()

char A[20];      
int i=0, cont=0;

cout<<"Immetti una frase per verificare se e' palindroma\n";
cin>>A;

while(A[cont]!='\0')                    //Non mi è chiaro cosa fà questo ciclo
{
    cont++;                              
}

while(i<cont&&A[i]==A[(cont-1)-i])]
{
    i++;                                         //Qui non capisco proprio come individua che la parola è palindroma
} 
if(i==cont)
    cout<<"La frase e' palindroma\n";
else
    cout<<"La frase non e' palindroma\n";

system("pause");
return 0;                  
}


19 Risposte

  • Re: Problema comprensione algoritmo palindromo

    Forse non lo capisci perchè non lo hai scritto tu?
    Ti consiglio di lasciar stare il "copia-incolla", ricerche google e così via, non imparerai nulla o quasi
  • Re: Problema comprensione algoritmo palindromo

    Bhe in parte è vero ma come potrei fare altrimenti? Almeno chiedere a voi di spiegarmi due righe di codice per me alieno poi il resto lo capisco.
  • Re: Problema comprensione algoritmo palindromo

    No, sbagli. E' come dice +m2+ e come ti ho detto in ogni risposta.

    Devi provarci tu e comprendere tu dagli errori.

    Se dici " Concettualmente ho sviluppato l'algoritmo " prova a scrivere il codice e proponilo.
    Se il codice è tuo, anche con degli errori, si corregge e lo comprendi meglio.


    P.S. Il codice che non comprendi è semplicissimo ... devi provare ad "eseguirlo" su carta. Prova a scrivere su carta i valori delle variabili ad ogni giro dei cicli ...
    P.P.S. Perché hai detto di aver studiato il ciclo for se poi non c'entra con l'esercizio?
  • Re: Problema comprensione algoritmo palindromo

    Da dove studi?
  • Re: Problema comprensione algoritmo palindromo

    Io ho sviluppato a mente una mezza idea ma per programmarlo non saprei come fare quindi piutosto che scrivere una stupidaggine non scrivo niente, comunque il codice che non capisco riguardo al primo while è perchè c'è quel '\0' rigurado invece al secondo while la riga che non capisco è questa: while(i<cont&&A==A[(cont-1)-i])] dove appunto c'è l'array e non mi è chiaro cosa succeda. Riguardo al for, non in questo esercizio non c'è ma ne ho visti altri dello stesso tipo dove veniva usato e in generale sò che viene spesso usato con gli array, anche per questo li sto studiando insieme, purtroppo gli esercizi non sono tanto semplici. Io sono partito direttamnte con l'imparare un linguaggio di programmazione cioè il c++, non è che ho saltato un passo preliminare che mi avrebbe dato delle basi che ora mi servirebbero. forse per questo che trovo difficoltà a passare dal modello mentale/matematico a quello informatico.

    Ps: voglio far notare un errore: volevo scrivere la frase ai lati d'italia ma per sbaglio ho scritto i lati d'italia che mi ha segnato palindroma, invece non lo è, quando mi ho corretto la frase che stavolta era palindroma mi ha detto che non lo era.Cosa comporta a questo errore? Vorrei anche capire come fà ad ignorare gli spazi se metto una frase.
  • Re: Problema comprensione algoritmo palindromo

    Che dirti ... stai sbagliando metodo di studio.

    Sicuramente hai saltato le basi dato che chiedi cosa sia \0

    Se usi le stringhe (gli array di char del C in questo caso) devi saper come sono trattate da questo linguaggio. Altrimenti come fai a scrivere e capire codice che le tratta?

    Il carattere \0 è il carattere terminatore che viene aggiunto alla fine del vettore per indicare che la stringa è terminata. Ma questo E' SCRITTO nel tuo libro. Quale stai usando? Se non ne stai usando, è tutto tempo perso, il tuo e il nostro.

    Per il secondo while, ti ho già detto ... scrivi su carta quello che succede in modo da capire come funziona. Non te lo ripeterò più.

    P.S. Devi inserire la frase SENZA spazi e SENZA apostrofi .... ailatiditalia
  • Re: Problema comprensione algoritmo palindromo

    Ok allora riguarderò il codice di quel while, effettivamente nel libro c'è quando parla di ascii ma se quello termina una stringa c'è un modo per poter inserire una frase normalmente ovvero mettendo gli spazi ed eventuali apostrofi?
  • Re: Problema comprensione algoritmo palindromo

    Non essere frettoloso, prima pensa a fare ciò che ha detto oregon in modo che tu possa capire per bene l'algoritmo e il codice.
  • Re: Problema comprensione algoritmo palindromo

    Il codice è molto semplice: il primo while serve semplicemente a contare il numero di caratteri inseriti in input, così da poter sviluppare un altro ciclo while che incrementa un'altra variabile se questa è minore della lunghezza del vettore di caratteri ( in modo tale da continuare ad incrementarla per arrivare a "controllare" tutti i caratteri del vettore ) e se il carattere in posizione i (quindi il primo del vettore che si sposta progressivamente verso l'ultimo carattere) è uguale al carattere a partire dall'ultima posizione (escluso lo '\0') fino ad arrivare al primo carattere... spero di essere stato chiaro!

    EDIT: ovviamente mi sono modificato di spiegare l'ultimo if
    Semplicemente: se la seconda variabile è uguale alla prima allora vuol dire che il secondo while è stato eseguito per tutta la lunghezza del vettore rispettando le due condizioni e quindi la parola è palindroma, mentre invece basta semplicemente che non siano uguali anche di 1 che la parola non è palindroma!1
  • Re: Problema comprensione algoritmo palindromo

    @olegfresi ... prima di tutto fai quello che ti ho detto, compreso studiare le stringhe del C (su cui non hai risposto a quanto ti ho detto). E poi si vede di affrontare altri problemi.

    Come detto giustamente da @Tommu, se hai fretta, non imparerai mai nulla. Fra l'altro hai parecchie carenze di base, ma proprio tante, e questo fatto non va bene per continuare a studiare il linguaggio. Il C (e a maggior ragione il C++ !) non sono linguaggi che si imparano se si studia in maniera superficiale come fai tu.
  • Re: Problema comprensione algoritmo palindromo

    Ok, un'ultima domanda questo esercizio poteva essere svolto senza array/vettori?
  • Re: Problema comprensione algoritmo palindromo

    Vedi che non hai chiare le basi?

    Per definizione, una stringa C è rappresentata da un array di char. Quindi, se devi operare su una stringa C ... a te la risposta.
  • Re: Problema comprensione algoritmo palindromo

    Ok, ma il tipo stringa è nativo del c++ o fà parte di qualche libreria?
  • Re: Problema comprensione algoritmo palindromo

    Pi c'è un altro punto che non capisco: A[20] A è il nome dell'array di 20 char ma con il cin>>A io in pratica sto inserendo il nome dell'array?
Devi accedere o registrarti per scrivere nel forum
19 risposte