PDA

View Full Version : [C++]Parere sul listato


rnuzzo
10-10-2008, 19:27
Eccomi di nuovo per un vostro parere:) .Questo è un programma che verifica se un numero di 5 cifre sia palindromo o meno:#include<iostream>
using std::cout;
using std::cin;
using std::endl;

int main()
{
int a = 0;
int n1 = 0;
int n2 = 0;
int n3 = 0;
int n4 = 0;
int n5 = 0;


cout << "Inserire un numero a 5 cifre (-1 per uscire): ";
cin >> a;

while (a != -1)
{
if (a > 99999)
{
cout << "\nIL NUMERO SUPERA LE 5 CIFRE\n"<< endl;
}
else
{
n1 = ( a / 10000);
n2 = ( a % 10000) / 1000;
n3 = ( a % 1000) / 100;
n4 = ( a % 100) / 10;
n5 = ( a % 10);
}

if (n1 == n5)
{
if (n2 == n4)
cout << "\nIl numero e' palindromo\n" << endl;
else
cout << "\nIl numero non e' palindromo\n" << endl;
}
else
cout << "\nIl numero non e' palindromo\n" << endl;



cout << "Inserire un numero a 5 cifre (-1 per uscire): ";
cin >> a;
}
system("PAUSE");
return 0;
}

Usando solo gli if - if else c'e un modo per scrivere una sola volta "Il numero non è palindromo"?

Non mi dispiacerebbe nemmeno un giudizio sul listato...:rolleyes: .Grazie

17Qwerty71
10-10-2008, 19:50
Eviterei anche di ripetere le stesse istruzioni più volte :)
Ho anche sistemato la parte per quanto riguarda il numero maggiore di 99999, nel tuo caso il programma ti stampava che il numero era sempre palindromo se maggiore di 99999, questo perché n1 n2 n3 n4 n5 erano inizializzati tutti a 0 e con numero maggiore di 5 cifre il controllo di n1 n2 n3 n4 n5 veniva svolto uguale ;)


#include<iostream>
using std::cout;
using std::cin;
using std::endl;

int main()
{
bool exit = false;
int a = 0;
int n1 = 0;
int n2 = 0;
int n3 = 0;
int n4 = 0;
int n5 = 0;



while (!exit)
{
cout << "Inserire un numero a 5 cifre (-1 per uscire): ";
cin >> a;

if (a > 99999)
{
cout << "\nIL NUMERO SUPERA LE 5 CIFRE\n"<< endl;
}
else
{
if(a == -1)
exit = true;
else
{
n1 = ( a / 10000);
n2 = ( a % 10000) / 1000;
n3 = ( a % 1000) / 100;
n4 = ( a % 100) / 10;
n5 = ( a % 10);

if (n1 == n5 && n2 == n4)
cout << "\nIl numero e' palindromo\n" << endl;
else
cout << "\nIl numero non e' palindromo\n" << endl;
}
}

}
system("PAUSE");
return 0;
}

rnuzzo
10-10-2008, 19:53
Possibilmente senza operatori logici:D

rnuzzo
10-10-2008, 20:21
Sto studiando il libro della deitel c++ fondamenti di programmazione 2 ed.
Perciò devo seguirne " le lezioni " .Comunque grazie a tutti :cincin:

Tommo
12-10-2008, 12:25
Non era meglio una stringa controllata tramite for?
Oltre ad essere più elastico sarebbe anche più facile da fare. Oltre che terribilmente più corto.



while( true )
{
cout << "inserisci un numero/parola qualsiasi - exit per uscire." << endl;

std::string n;
cin >> n;

if( n == "exit" ) break;


bool palindromo = true;
size_t length = n.length();

for(unsigned int i = 0; i < (int)length/2; ++i)
{
if( n[i] != n[ length - i - 1 ] )
{
palindromo = false;
break;
}
}

cout << "La stringa immessa" << (palindromo ? " non" : " ") << " e' palindroma!" << endl;

}


Dovrebbe funzionare :D

OT E' tanto brutto while(true)? Lo uso spesso ma non l'ho visto da nessun'altra parte. :sofico: /OT

71104
12-10-2008, 18:06
io francamente "while(true)" in C non l'ho mai visto e mi sa tanto che mai lo vedrò :rolleyes:

Tommo
13-10-2008, 11:19
Bhe, io lo uso perchè trovo comodo non dover assegnare una varabile solo al while; per esempio, se avessi dovuto modificare n, sarei dovuto stare attento a ricreare alla fine un valore sensato per il prossimo controllo.

Invece così esco quando mi aggrada... però ammetto che così è difficile capire qual'è la condizione di uscita...:stordita: