Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-04-2015
agustin_uni agustin_uni is offline
Registrado
NULL
 
Registrado: abr 2015
Posts: 6
Poder: 0
agustin_uni Va por buen camino
Verificar si un número es primo

Hola que tal, soy estudiante de ingeniería, y es mi primer año de principios de computadoras. Es mi primera experiencia programando, así que me esta costando considerablemente, pero espero que con un poco de esfuerzo se pueda mejorar jaja.
Mi primera pregunta en el foro es un ejercicio que me pide que cree un programa en donde me muestre si un numero es primo o no, ya estuve leyendo varias publicaciones e intente hacer el programa pero con algunos errores.
Código Delphi [-]
var
a,i:integer;
begin
a:=strtoint(edit1.Text);
for i:=2 to a-1 do
if a mod i =0 then
begin
edit2.text:='no es primo'
end
else
edit2.text:='es primo'

end;
De esta manera creo que el error, es que al tener un for, el programa me va a evaluar al numero con cada división desde i:=2 a a-1. Osea que en la mayoría de los números, el resultado va a ser primo pero a la vez no primo.. de que otra manera lo podria restringir esto? lo pense de esta manera porque no me di cuenta que el programa lo iba a evaluar en varias divisiones, sepan entender jaja.
Perdon por las molestias, sldos.

Última edición por nlsgarcia fecha: 07-04-2015 a las 00:20:39. Razón: Sintaxis Delphi
Responder Con Cita
  #2  
Antiguo 07-04-2015
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
La verdad no he reparado el algoritmo, pero parece que por acá lo han resuelto:

http://www.clubdelphi.com/foros/show...0&postcount=14
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #3  
Antiguo 07-04-2015
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
agustin_uni,

¡Bienvenido al Club Delphi!

Te sugiero revisar la Guía de estilo de los foros, recomendada a todos los nuevos ingresos al Club Delphi.

¡Gracias por tu cooperación!

Saludos,

Nelson.
Responder Con Cita
  #4  
Antiguo 07-04-2015
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
agustin_uni,

Cita:
Empezado por agustin_uni
...Mi primera pregunta en el foro es un ejercicio que me pide que cree un programa en donde me muestre si un numero es primo o no...


Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// Verifica si un número es primo ó compuesto
function CheckPrime(Number : LongWord) : Boolean;
var
   NumberSqrt, i : Integer;

begin

   Result := True;

   NumberSqrt := Trunc(Sqrt(Number));

   for i := 2 to NumberSqrt do
   begin
      if (Number mod i) = 0 then
      begin
         Result := False;
         Exit;
      end;
   end;

end;

// Permite solo entrada de datos númericos
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
   if not (Key  in ['0'..'9',#8]) then
      Key := #0;
end;

// Valida el rango de un número y verifica si es primo ó compuesto
procedure TForm1.Button1Click(Sender: TObject);
var
   Number : LongWord;

begin

   if (StrToInt64(Edit1.Text) >  High(LongWord)) then
   begin
      MessageDlg('El Número Máximo Permitido para Chequeo de Primo es : ' + IntToStr(High(LongWord)),mtInformation,[mbOk],0);
      Exit;
   end;

   Number := StrToInt64(Edit1.Text);

   if CheckPrime(Number) then
      MessageDlg('El número ' + IntToStr(Number) + ' es Primo',mtInformation,[mbOk],0)
   else
      MessageDlg('El número ' + IntToStr(Number) + ' es Compuesto',mtInformation,[mbOk],0);

end;

end.
El código anterior en Delphi 7 sobre Windows 7 Professional x32, Verifica si un número es Primo o Compuesto.

Revisa esta información relacionada:
Espero sea útil

Nelson.
Responder Con Cita
  #5  
Antiguo 07-04-2015
engranaje engranaje is offline
Miembro
 
Registrado: may 2011
Posts: 163
Poder: 13
engranaje Va por buen camino
Si entendí bien tu problema, te sucede que en algunos caso vas a obtener un
monton de mensajes 'no es primo', 'es primo'. Quedando en el edit 2 al final solo
el resultado obtenido al dividir un número justo por su anterior. O sea que nunca sera primo,
fijate lo que pasa si introduces un 2 o el 1 en el edit1 en tu algoritmo.
Lo normal en estos casos sería tener una variable booleana que comenzara a true y se
pusiera a false en el momento de encontrar un caso que elimine la posibilidad de
que sea primo, rompiendo el bucle en ese momento.

Un sencillo ejemplo modificando tu código sería asi
Código Delphi [-]
var   a,i:integer;
  bEsPrimo: boolean;
begin
  bEsPrimo := True; 
  a:=strtoint(edit1.Text);
 
  for i:=2 to a-1 do    
    if a mod i =0  then 
    begin
      bEsPrimo := False;
      break;
    end;
  
  if bEsPrimo    
    edit2.text:='es primo'  
  else  
    edit2.text:='no es primo';  
end;

Otra posiblidad podría ser esta:
Código Delphi [-]
var   a,i:integer;
  resultado: string;
begin
  resultado := 'no es primo'; 
 
  a:=strtoint(edit1.Text);
 
  for i:=2 to a-1 do     if a mod i =0  then 
    begin
      resultado := 'es primo';       
      break;
    end;

  edit2.text:= resultado;  
end;

Última edición por engranaje fecha: 07-04-2015 a las 10:35:32.
Responder Con Cita
  #6  
Antiguo 07-04-2015
agustin_uni agustin_uni is offline
Registrado
NULL
 
Registrado: abr 2015
Posts: 6
Poder: 0
agustin_uni Va por buen camino
Perfecto! con el boolean puedo solucionar el problema, al programa le doy la condicion de que si sale un a mod i =0 directamente que se haga false, muchas gracias!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ejercicio- numero primo Laurogriffin Varios 3 05-02-2012 22:28:06
¡Extra, extra! Encontrado el primo hermano del "niño loco alemán" dec Humor 10 29-11-2006 19:42:17
El número primo más alto conocido Investment Noticias 6 03-03-2005 20:55:09
Verificar si el valor introducido en un edit1.text es un numero o una cadena ctronx Varios 6 26-06-2004 03:14:18
Que Molleja Primo !!!! Ambar Humor 1 17-06-2004 00:56:35


La franja horaria es GMT +2. Ahora son las 02:21:59.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi