Oppure

Loading
06/09/10 21:00
ElCobra91
ciao a tutti,sto studiando il c++ su un libro che mi chiede in un esercizio di fare un programma che prende in input un numero di cinque cifre e verifica se esso sia palindromo. Io ho scritto il mio programmino che funziona però vorrei chiedere a voi che siete più esperti se sia possibile scriverne uno più corto senza usare for,and,or, solo con if..else e while.
Se si potete dirmi come abbreviare il mio codice?grazie a tutti...



//programma che verifica se un numero di 5 cifre inserito è palindromo
#include<iostream>
using namespace std;

int main()

{
	system("color f0");
	int n; //variabile per il numero da inserire
	int r;//serve a memorizzare il resto
	int a;//serve a memorizzare l'ultima cifra del numero inserito
	int b;//serve a memorizzare  la seconda cifra del numero inserito
	int c;//serve a memorizzare la quarta cifra del numero inserito
	int counter=1;

	cout<<"Inserisci un numero di 5 cifre per stabilire se è un palindromo:\n";
	cin>>n;
	cout<<endl;
	cout<<"Ecco il numero scritto al contrario:\n";
	


	while(counter<=5)//cicla 5 volte in quanto effettuo la verifica su un numero di 5 cifre
	{
		

		
		r = n%10;//resto che al termine del ciclo rappresenta la prima cifra del numero scritto
		n/= 10;
        if(counter==1)
			a=r;//memorizza l'ultima cifra del numero inserito
		if(counter==2)
			b=r;//memorizza la seconda cifra del numero inserito
		if (counter==4)
			c=r;//memorizza la quarta cifra del numero inserito
		cout<<r	;  //visualizza il numero al contrario  
	    counter++;
    }
	cout<<endl;
	if(r==a){//verifica se il numero è palindromo
		if(c==b)
			cout<<"Il numero è palindromo"<<endl;
	}
		else
			cout<<"Il numero NON è palindromo"<<endl;
	cout<<endl;
	
	system("pause");
		return 0;
}
aaa
06/09/10 21:57
Poggi Marco
Ciao!

Ho letto il tuo programma, e posso consigliarti di memorizzareil numero su stringa anzichè un int.
Ultima modifica effettuata da Poggi Marco 06/09/10 22:00
aaa
07/09/10 1:54
ElCobra91
scusa ma sono poco esperto,se lo memorizzassi su stringa poi come potrei cambiare il programma?grazie
aaa
07/09/10 7:55
Il Totem
Il metodo che segue funziona con numeri di tutte le dimensioni. Devi includere le librerie di matematica (le funzioni le ho riprese da math.h, non so che libreria ci sia in c++).
int a, b, n, dec;
bool palindromo;
//...
palindromo = true;
do
{
   dec = (int)floor(log10(n));
   a = (int)floor(n / pow(10, dec));
   b = n % 10;
   n -= a * (int)pow(10, dec);
   n /= 10;
   if (a != b)
      palindromo = false;
} while (n > 0 && palindromo);
aaa
07/09/10 9:07
gigisoft
Salve,
se devi limitarti al caso di numeri di 5 cifre puoi semplicemente verificare che:

- (n >= 10000) &&
- (n <= 99999) &&
- ((ceil(n / 10000)) == (n % 10)) &&
- (((ceil(n / 1000)) % 10) == (ceil((n % 100) / 10)))

le prime due verificano che il numero sia effettivamente di 5 cifre
la seconda verifica che siano uguali la prima e l'ultima cifra
la terza verifica che siano uguali la seconda e la quarta cifra.

Se invece vuoi generalizzare al caso di k cifre devi verificare che:

- (n >= 10^(k - 1)) &&
- (n < 10^k)

e poi verificare ciclicamente che:

(((ceil(n / 10^(k - i))) % 10) == (ceil((n % (10^i)) / (10^(i - 1)))));

con i: 1..ceil(k/2)

naturalmente per semplicita' ho indicato col ^ l'elevazione a potenza.

:ot:e poi c'e' ancora chi pensa che la matematica sia separata dall'informatica... :-| :ot:

naturalmente risulta tutto piu' semplice se prima converti il numero in stringa, ma usi piu' memoria; a te la scelta.
Ciao.

aaa
07/09/10 14:05
ElCobra91
grazie a tutti,mi avete aiutato molto,terrò a mente tutti i consigli però lascio il programma in quel modo perchè devo farlo senza utilizzare i connettivi logici o il do...while in quanto il libro che studio è diviso in capitoli e a quelli non ci sono ancora arrivato,cmq grazie mille...:k:
aaa
07/09/10 19:23
Poggi Marco
Postato originariamente da ElCobra91:

scusa ma sono poco esperto,se lo memorizzassi su stringa poi come potrei cambiare il programma?grazie


In realtà è molto semplice: basta confrontare i caratteri, in questo modo:

#include <cstdlib>
#include <iostream>
#include <string.h>

using namespace std;

int main(int argc, char *argv[])
{
    char numero[6]="";
    cout<<"Verifica sui numeri palindromi\n\nNumero: ";
    cin.getline(numero, 6); 
    int i=0;
    bool palindromo=true;
    while (i<strlen(numero)/2)
    {
        if (numero[i] != numero[strlen(numero)-1-i])
        {
            palindromo=false; // il numero non è palindromo
            break;
        }
        i++;  
    }
    if (palindromo) cout<<"\nIl numero e' palindromo\n";
    else cout<<"\nIl numero non e' palindromo\n";
    cin.ignore();
    return 0;
}
aaa