Adaptado de C++, desarrollado en lenguaje D, este programa nos permite determinar si un número introducido por el teclado es perfecto o no. Los números perfectos son aquellos en el que la suma de sus divisores es el mismo número sin incluirse a si mismo, para más detalles sobre el algoritmo/definición visite: http://es.wikipedia.org/wiki/Número_perfecto
Problema: Construir un programa que dado un número x por el usuario determine si es perfecto o no.
Bien partiendo del problema, se quiere saber si un número introducido desde el teclado es perfecto o no.
Declaración del Programa usando Lenguaje D:
Librerías a utilizar:
import std.conv;
import std.cstream;
import std.stdio;
Al igual que C o C++, un programa en D suele comenzar con el método principal main.
void main()
{
Declaración de las variables que vamos a utilizar.
int i, sum=0,num, op=1;
string n;
Bucle While, con OP!=0 entrara al programa mientras OP sea diferente de 0
while (op!=0)
{
Pedimos la información al usuario con writef y la procesamos con din.readLine(); en una cadena .
writef("Digite un numero entero: ");
n = din.readLine();
Se realiza la conversión necesaria de la variable recibida usando toTipo_Dato().
num = toInt(n);
Finalmente entramos al ciclo que nos permitirá determinar si el número introducido es perfecto o no.
for (i=1; i<num; i++)
{
if((num%i)==0)
{
sum+=i;
}
}
Dado la suma y el residuo de debe ser 0 hacemos las comparaciones necesarias y determina si el número es perfecto o no.
if(sum==num)
{
writefln("El numero es perfecto");
}
else
{
writefln("El numero no es perfecto");
}
Finalizamos con un mensaje al usuario si quiere seguir calculando más números o no.
writefln ("Desea continuar: [0] No | [1|] Si");
n=din.readLine();
op=toInt(n);}
Fin del programa (cerramos con llave).
}
El código fuente es como sigue:
import std.conv;
import std.cstream;
import std.stdio;void main()
{
int i, sum=0,num, op=1;
string n;
while (op!=0)
{
writef("Digite un numero entero: ");
n = din.readLine();
num = toInt(n);
for (i=1; i<num; i++)
{
if((num%i)==0)
{
sum+=i;
}
}
if(sum==num)
{
writefln("El numero es perfecto");
}
else
{
writefln("El numero no es perfecto");
}
writefln ("Desea continuar: [0] No | [1|] Si");
n=din.readLine();
op=toInt(n);
}
}
Programa Funcionando.