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 Buscar Temas de Hoy Marcar Foros Como Leídos

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: 29
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 08: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: 29
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 22: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: 29
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
  #9  
Antiguo 02-04-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
A ver, pon todo tu código.
Responder Con Cita
  #10  
Antiguo 02-04-2017
Daniel2622 Daniel2622 is offline
Miembro
NULL
 
Registrado: abr 2017
Posts: 29
Poder: 0
Daniel2622 Va por buen camino
Hola Casimiri Noveti, este es el código que hice con ayuda de Jhonny:

Código Delphi [-]

implementation

{$R *.lfm}

{ TForm1 }
Procedure cantidad_de_divisores(n: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;
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  n:Integer;
  codigo:Integer;
begin
  val(Edit1.Text,n,codigo);
  cantidad_de_divisores(n);
end;
De antemano gracias por tu ayuda.

Última edición por Neftali [Germán.Estévez] fecha: 03-04-2017 a las 13:27:00. Razón: Añadir TAG's
Responder Con Cita
  #11  
Antiguo 02-04-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Eso no es TODO tu código, Dinial6222

Y recuerda poner los tags al código fuente, ejemplo:



Gracias
Responder Con Cita
  #12  
Antiguo 02-04-2017
Daniel2622 Daniel2622 is offline
Miembro
NULL
 
Registrado: abr 2017
Posts: 29
Poder: 0
Daniel2622 Va por buen camino
Perdón, este es todo mi código; esta construido en el programa Lazarus

Código Delphi [-]
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  Buttons;

type

  { TForm1 }

  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }
Procedure cantidad_de_divisores(n: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;
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  n:Integer;
  codigo:Integer;
begin
  val(Edit1.Text,n,codigo);
  cantidad_de_divisores(n);
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
  Edit1.Clear;Edit2.Clear;
end;

procedure TForm1.BitBtn3Click(Sender: TObject);
begin
  Close;
end;

end.
Responder Con Cita
  #13  
Antiguo 03-04-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Eso pasa porque el procedimiento cantidad_de_divisores esta declarado "fuera" del form. Prueba de este modo:

Código Delphi [-]

  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
  private
    procedure cantidad_de_divisores(n: Integer); // agregas esto aca
  public
  end;

implementation

//agregas lo que esta en negrita
procedure TForm1.cantidad_de_divisores(n: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;
  // los procedimientos no devuelven resultados, no existe la variable implicita "Result"
  // supongo que lo que queres es mostrar el resultado en el Edit2
  Edit2.Text := IntToStr(vCantidad);
end;
Responder Con Cita
  #14  
Antiguo 03-04-2017
Daniel2622 Daniel2622 is offline
Miembro
NULL
 
Registrado: abr 2017
Posts: 29
Poder: 0
Daniel2622 Va por buen camino
Gracias por tu ayuda [AgustinOrtu].
Ya me da el resultado.
Nuevamente gracias, saludos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 07:23:19
Imprimir numero de hoja desde numero X rruffino Impresión 1 28-08-2012 09:33:49
Yo soy la numero 3 mamcx Noticias 15 28-05-2011 07:06:39
La número 46.415 marcoszorrilla La Taberna 0 30-03-2008 22:59:26


La franja horaria es GMT +2. Ahora son las 15:42:44.


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