Bueno, estoy empezando (volviendo) a programar en C++, y acabo de terminar una aplicacion
hecha en Borland C++ Builder 6. Es una pavada, pero la comparto con ustedes.

Es para averiguar si un numero (de hasta 15 dígitos (tipo double) es primo o no)

Se aceptan críticas (no me hablen de la portabilidad, gracias)

1 TForm que contiene
(1 TEdit +2 TButtons)
Source:

Código: Seleccionar todo

#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include <cmath>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
bool EsPrimo(double);
bool EsImpar(double);
TFesp *Fesp;
//---------------------------------------------------------------------------
__fastcall TFesp::TFesp(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TFesp::BsalClick(TObject *Sender)
{
exit (1);
}
//---------------------------------------------------------------------------
void __fastcall TFesp::BespClick(TObject *Sender)
{
double ingreso;
AnsiString salida;
ingreso= (Eent->Text).ToDouble();

if (ingreso==0)
        ShowMessage("No Es Primo !!");
else
{
if (EsPrimo(ingreso))
        ShowMessage("Es Primo !!");
else
        ShowMessage("No es Primo !!");
}


}
//---------------------------------------------------------------------------

bool EsPrimo(double ingreso)
{
  double medio;
  int resto;
  double inicio=2;
  bool sip=true;

  if (EsImpar(ingreso))
   medio=(ingreso-1)/2;
   else
    medio=ingreso/2;
   while ((inicio<=medio) && (sip==true))
   {
   resto = std::fmod(ingreso,inicio);
   if (resto==0)
        sip=false;
   else
        inicio+=1;

   }

   return  sip;
}

bool EsImpar(double numerito)
{
  int resto = std::fmod( numerito, 2);
  if (resto==1)
  return true;
  else
  return false;

}



void __fastcall TFesp::EentKeyPress(TObject *Sender, char &Key)
{

 if (!((Key >= '0' && Key <= '9') || Key == '\b'))
        Key = 0;

}
//---------------------------------------------------------------------------
Ejecutable:
[Enlace externo eliminado para invitados]
Para qué defines

Código: Seleccionar todo

bool sip=true;
?, me parece que te lías un poco con la función se puede hacer de otra forma más fácil y sin usar la funcion "Esimpar", aunque bueno yo lo he hecho con tipo int, no con double pero voy a probar para ver si se puede simplificar la función
//mHmm..
linkgl escribió:Para qué defines

Código: Seleccionar todo

bool sip=true;
?, me parece que te lías un poco con la función se puede hacer de otra forma más fácil y sin usar la funcion "Esimpar", aunque bueno yo lo he hecho con tipo int, no con double pero voy a probar para ver si se puede simplificar la función
Con "unsigned int" es mas sencillo, pero el máximo valor es 4.294.967.295
(mucho menor que el double (15 digitos) )
Saludos
Responder

Volver a “Fuentes”