Newsgroup: it.comp.lang.c++
Titolo: prog. per riconoscere numeri palindromi

Sto facendo un esercizio che si trova sul Deitel, l'es. 2.29
Chiede di fare un programma  che chiede l'inserimento di un intero e
verifica se questo è un palindromo (es. 12321, 76267, 84348).
Sono ancora al Cap. 2 e non si è parlato di manipolatori di stringhe, il
libro suggerisce di usare l'operatore modulo e divisione per suddividere il
numero nei singoli componenti, ma sinceramente non riesco a capire come
risolvere il problema.
-- 
Frodo Baggins
Webmaster di Arrampicata.net 
http://www.arrampicata.net
Webmaster di Neverwinter Nights Italia 
http://bebbbo.altervista.org

 risolvere il problema.
non fai prima a convertirli in stringhe itoa() e poi confrontare l'array di
char vedendo se hai la stessa serie di caratteri invertiti ???
ciao

 di char vedendo se hai la stessa serie di caratteri invertiti ???
Forse non ci siamo capiti...
Sto leggendo il libro "corso di programmazione in C++" di Deitel & Deitel e
ho finito il capitolo 2 e devo risolvere questo esercizio applicando
esclusivamente (anche perchè non conosco altro) quello che ho imparato in
questi primi due capitoli.


 quello che ho imparato in questi primi due capitoli.
Ok, vediamo come procedere prima:
come numero usiamo:
12321
bene, %10 restituisce la cifra sulla destra, quindi:
12321 % 10 restituisce 1
se poi dividiamo per 10 riusciamo a sbarazzarci di questo 1....
12321 / 10 = 1232
ora possiamo leggere la seconda cifra:
1232 % 10 restituisce 2
etc... con questo sistema possiamo leggere il numero, una cifra alla volta
da destra a sinistra.
ogni cifra che togliamo la mettiamo da un'altra parte per comporre un numero
speculare. Alle fine se i due numeri sono uguali il numero e' "palindromo",
altrimenti no!
quindi vediamo come fare in pseudo codice C:
<PSEUDOCODE>
int numero = 12321;
int n1 = numero;
int n2 = 0;
while(n1>0){
     n2 =  (n2 * 10) + (n1 % 10);
     n1 /= 10;
}
if(numero == n2){
     scrivi("Il numero e' palindromo!");
}else{
     scrivi("Il numero non e' palindromo!");
}
</PSEUDOCODE>
ecco srotolando il ciclo come procede il programma:
12321 % 10 = 1
n2 ora vale -> 1
12321  / 10 = 1232
1232 % 10 = 2
n2 ora vale -> 12
12321 / 10 = 123
123 % 10 = 3
n2 ora vale -> 123
123 / 10 = 12
12 % 10 = 2
n2 ora vale -> 1232
12 / 10 = 1
1 % 10 = 1
n2 ora vale -> 12321
1 / 10 = 0
STOP
12321 == n2 -> TRUE quindi palindromo!
12345 non e' palindromo in quanto 12345 != 54321, mentre invece prima 12321
== 12321. (con tutto quel ciclo (che ora abbiamo srotolato) costruiamo
semplicemente un numero speculare, se questo e' uguale, allora il numero e'
palindromo!).
Attenzione a 0123210 che non e' palindromo in quanto equivale a: 123210. Per
vederlo come palindromo devi usare una stringa e non un int!
Quindi 12321 e' palindromo, cosi' come 123321; anche 88888 e' palindromo.
Anche 80008 e' palindromo!
123123 ad esempio NON e' palindromo, 123456 ovviamente NON e' palindromo.
Infine, sempre per il motivo che usi gli int e non una stringa, attenzione a
12345677654321 che nonostante dovrebbe essere palindromo, purtroppo su degli
int32 non lo sara' !!!!
(quindi non puoi usare numeri grandi a piacere, oppure, come suggerito da
Goul_duKat passi ad utilizzare stringhe, ma ..... capisco che l'esercizio
sia' cosi' ....!)
Ok, spero l'algoritmo ti vada bene e ti piaccia (non vedo molta alternativa
pero' usando int e operatore di modulo!).
Tommy

 12321 / 10 = 1232
Capperi!!!
Ma ci sei arrivato da solo?
Secondo me il difficile della programmazione è proprio questo, trovare
l'algoritmo che ti risolve il problema.
Io non ci sarei mai arrivato...


 Io non ci sarei mai arrivato...
io ho solo letto che problema avevi e ti ho dato la soluzione piu' rapida e
meno dispendiosa ;-) scusa

 l'algoritmo che ti risolve il problema.
E' vero, conoscere un linguaggio di programmazione e' utile quando una
persona e' in grado di risolvere i vari problemi, altrimenti rimane uno
strumento poco utile!
Ti assicuro pero' che come si impara un linguaggio di programmazione si
impara anche a risolvere i problemi!
Segui questa strada che hai intrapreso:  prova a risolvere dei problemi,
studiati degli algoritmi noti e anche delle strutture dati conosci e non
smettere mai di fare esperimenti e di provare a risolvere vari problemi o
"inventarti" algoritmi. Se fai cio' ti accorgerai che presto sarai in grado
di risolvere problemi ben piu' complessi......
Sono convinto che presto riuscirai con poco sforzo a risolvere problemi ben
piu' complicati di questo, non ti preoccupare ;-)
Tommy

 studiati degli algoritmi noti 
C'è qualche sito   (magari in italiano) dove trovare gli algoritmi più noti
per poterli studiare?
