Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-04-2017
Daniel2622 Daniel2622 is offline
Miembro
NULL
 
Registrado: abr 2017
Posts: 29
Poder: 0
Daniel2622 Va por buen camino
Número de divisores

Hola, disculpen soy nuevo en este club, no se bien como se usa.
Necesito ayuda con un problema en lazarus o delphi que creo que son programas muy similar.
Mi problema es:
Usando el procedimiento con paso de parámetros, calcular el número de divisores (n) que imprima la cantidad de divisores que tiene el numero entero n.
Por ejemplo, si n=16 el programa debe imprimir que tiene 5 divisores (que son 1,2,4,8 y 16).

Esperó y me puedan ayudar, por favor.
De antemano muchas gracias, saludos.
Responder Con Cita
  #2  
Antiguo 02-04-2017
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Hola, bienvenido, el método básico sería algo como lo siguiente:

Supongamos que no es una app de consola y tienes un TEdit llamado Edit1, entonces en el OnClick de un botón pones...


Código Delphi [-]
var
  vNumero, vI, vCantidad: NativeInt;
begin
  vNumero := StrToInt(Edit1.Text);

  for vI := 1 to vNumero do
    if (vNumero mod vI) = 0 then
      vCantidad := vCantidad + 1;

  ShowMessage(vCantidad.ToString);
end;

Ya, eso sería todo.

Sin embargo, si quieres usar parallels para lograr esto, se podría hacer algo así:

Agregar en el uses las unidades...
  • System.Threading
  • System.SyncObjs

Y escribir en aquél botón:

Código Delphi [-]
var
  vNumero, vCantidad: Int64;
begin
  vNumero := StrToInt(Edit1.Text);

  TParallel.&For(1, vNumero,
    procedure(vI: Int64)
    begin
      if (vNumero mod vI) = 0 then
        TInterlocked.Increment(vCantidad);
    end);

  ShowMessage(vCantidad.ToString);
end;

Espero te sirva, saludos.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/

Última edición por jhonny fecha: 02-04-2017 a las 07:37:33.
Responder Con Cita
  #3  
Antiguo 02-04-2017
Daniel2622 Daniel2622 is offline
Miembro
NULL
 
Registrado: abr 2017
Posts: 29
Poder: 0
Daniel2622 Va por buen camino
Número de divisores

Hola, disculpen soy nuevo en este club
Necesito ayuda con un problema en lazarus
Mi problema es:
Usando el procedimiento con paso de parámetros, calcular el número de divisores (n) que imprima la cantidad de divisores que tiene el numero entero n.
Por ejemplo, si n=16 el programa debe imprimir que tiene 5 divisores (que son 1,2,4,8 y 16).

Esperó y me puedan ayudar, por favor.
De antemano muchas gracias, saludos.
Responder Con Cita
  #4  
Antiguo 02-04-2017
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Hola,

¿No te sirvió lo que te respondí en el otro hilo que abriste para el mismo tema? http://www.clubdelphi.com/foros/showthread.php?t=91685

Por favor, en el futuro, no repitas hilos , te invito a leer la guía de estilo del club http://www.clubdelphi.com/foros/guiaestilo.php
__________________
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
  #5  
Antiguo 02-04-2017
Daniel2622 Daniel2622 is offline
Miembro
NULL
 
Registrado: abr 2017
Posts: 29
Poder: 0
Daniel2622 Va por buen camino
Lo siento mucho, en verdad no sabía que no se podía hacer eso.
Responder Con Cita
  #6  
Antiguo 02-04-2017
Daniel2622 Daniel2622 is offline
Miembro
NULL
 
Registrado: abr 2017
Posts: 29
Poder: 0
Daniel2622 Va por buen camino
Disculpa jhonny, vi la respuesta que le hiciste a mi pregunta en el foro varios
Siguí tus recomendaciones y el código me mostraba varios errores, trate de acomodarlo a lo que poco se, pero no me da e número de divisores sino el mismo numero que yo introduzco.
Este es mi código:
implementation

Código Delphi [-]
{$R *.lfm}

{ TForm1 }
Procedure cantidad_de_divisores(n:Integer);
var 
  c1,c2:Integer;
  s:Longint;
begin
  s:=0;
  c1:=1;
  c2:=1;
  for c1:=1 to n do
    if n mod c1=0 then
      s:=c1+c2;
  Form1.Edit2.Text:=FloatToStr(n);
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var 
  n:Integer; 
  codigo:Integer;
begin
  val(Edit1.Text,n,codigo);
  cantidad_de_divisores(n);
end;

Esperó y me puedas seguir ayudando.

Gracias y saludos.

Última edición por jhonny fecha: 02-04-2017 a las 21:19:52.
Responder Con Cita
  #7  
Antiguo 02-04-2017
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Hola, no te preocupes, lo importante es que ya sabes y lee la guía de estilo para que no suceda...

En cuanto a la duda y siguiendo el camino que tomaste, lo que sucede es que N es el número que ingresas, vCantidad es el número que debes mostrar, así:

Código Delphi [-]
function cantidad_de_divisores(n:Integer): Integer;
var
  vNumero, vI, vCantidad: Integer;
begin
  vCantidad := 0;
  vNumero := StrToInt(Edit1.Text);

  for vI := 1 to vNumero do
    if (vNumero mod vI) = 0 then
      vCantidad := vCantidad + 1;

  Result := vCantidad;
end;

Código Delphi [-]
procedure TForm1.BitBtn1Click(Sender: TObject);
var 
  n:Integer; 
  codigo:Integer;
begin
  val(Edit1.Text,n,codigo);
  Form1.Edit2.Text := FloatToStr(cantidad_de_divisores(n));
end;

Saludos.
__________________
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
  #8  
Antiguo 02-04-2017
Daniel2622 Daniel2622 is offline
Miembro
NULL
 
Registrado: abr 2017
Posts: 29
Poder: 0
Daniel2622 Va por buen camino
Hola Jhonny, siguiendo tu código me lanza tres errores en la ventana de mensajes los cuales son:
unit1.pas(46,28) Error: Identifier not found "Edit1"
unit1.pas(52,9) Error: identifier idents no member "Result"
unit1.pas(74, "BEGIN" expected but "end of file" found

Me parece que son errores de identificación, pero no se como resolverlo; por favor me podrías decir como resolverlos.
De antemano gracias y saludos.
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
Numero de Semana y Numero de Mes nefore OOP 10 03-09-2013 06:23:19
Imprimir numero de hoja desde numero X rruffino Impresión 1 28-08-2012 08:33:49
Yo soy la numero 3 mamcx Noticias 15 28-05-2011 06:06:39
La número 46.415 marcoszorrilla La Taberna 0 30-03-2008 21:59:26


La franja horaria es GMT +2. Ahora son las 23:13:31.


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