AYUDA Ejercicio universidad


14 de Octubre del 2016

Hola, soy nuevo programando asique no os riais mucho de mí.

El caso esque tengo que entregar unas practicas para la universidad, con el enunciado siguiente:

1) Realiza el diseño de un programa que permita determinar todos los
números perfectos entre dos números enteros n1 y n2. Se debe
cumplir que n1<n2 y, además, que tanto n1 como n2 sean mayores
que 0. Definimos los números perfectos del siguiente modo:
· 1 es perfecto
· if N>1, N es perfecto si la suma de sus divisores (incluido el 1 y
excluido el propio número) da como resultado el mismo
número.
ACLARACIONES:
- El programa debe calcular y mostrar la cantidad de números
perfectos dentro del intervalo además de visualizar cuáles son.
- En el caso de que n1>n2 se intercambiarán los valores.
- En el caso de que n1 o n2 sean negativos o cero se repetirá la
entrada de datos hasta que sean valores correctos.
- La solución debe construirse empleando módulos.

He escrito mi código, que para mí aparantemente debería funcionar, compila pero al ejecutarlo solo me pide los dos números y cierra el programa. Si me pudierais decir donde se encuentra el fallo, o si el código esta mal escrito os lo agradecería. Un saludo y gracias de antemano.

El código es el siguiente:

#include
#include
using namespace std;

void cambio_numeros(int &numero1, int &numero2){
	int d;
	d=numero1;
	numero1=numero2;
	numero2=d;
}


bool es_perfecto(int a){
	int divisor, total;
	divisor=2;
	total=1;
	do{ 
		if (a/divisor==0)
			total = total+divisor;
		divisor++;
	}while (divisor<a);
        
        if (total==a)
            return true;
        else
            return false;
}



int main(){
	int num1, num2;
	do{
		cout << "Introduce el primer numero " << endl;
		cin >> num1;
		cout << "Introduce el segundo numero " << endl;
		cin >> num2;
		} while(num1num2)
		cambio_numeros(num1, num2);
	num1=num1+1;
	do{
            if (es_perfecto(num1)
                cout << num1 << endl;
            num1++;
          }while(num1<num2);

return 0;
}