sábado, 26 de diciembre de 2009

Programa: Determinar número perfecto.

 

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.

image

1 comentario: