Salve a tutti, mi sto esercitando con alcuni esercizi proposti da un libro per un esame di C++, dato che non ho trovato un thread ufficiale di questo linguaggio di programmazione vi chiedo qualche aiuto da qui.
Ho appena finito di leggere la teoria e sto cominciando a cimentarmi con un po' di esercizi.
In questo esercizio devo leggere un numero intero da tastiera e determinare se si tratta di un
numero perfetto. Questo è quello che sono riuscito a combinare fino ad ora
Codice:
#include <iostream>
#include <math.h>
using namespace std;
bool perf (int a)
{
int i=1;
double p;
vero: return true;
while (i==a)
{
p = pow(2,i)*(pow(2,(i+1))-1);
if (p==a) goto vero; break;
i++;
}
}
int main ()
{
int n;
bool v;
cout << "Inserire un numero intero: ";
cin >> n;
v = perf(n);
if (v == true) cout << "Il numero " << n << " e' un numero perfetto!\n";
if (v == false) cout << "Il numero " << n << " NON e' un numero perfetto\n";
system ("pause");
return 0;
}
Ovviamente manca la parte in cui il programma avverte che la stringa digitata non è un numero (nel caso in cui si digitasse per sbaglio una lettera) e il return false nel caso non si riesca a trovare un valore 2^n · (2^(n+1) - 1) corrispondente.
Il programma restituisce come output "Il numero n e' un numero perfetto!" anche se questo non lo è.
Quali errori logici e di programmazione ho fatto?