Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
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 10-09-2006
cheguidesing cheguidesing is offline
Registrado
NULL
 
Registrado: sep 2006
Posts: 1
Poder: 0
cheguidesing Va por buen camino
Lightbulb crear funciones en delphi

hola a todos soy estudiante de informatica soy nuevo en el foro apenas tengo 20 minutos aqui. y quisiera saber si alguien me ayuda a entender un poco las funciones y me un da un ejemplo de algunas...
a ver si entiendo
Responder Con Cita
  #2  
Antiguo 10-09-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.714
Poder: 28
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Una función no es más que un bloque de código que puede utilizarse en repetidas ocasiones sin que haya necesidad de duplicarlo, de "rescribirlo": para eso usamos la función. En Delphi tenemos procedimientos y funciones y estas últimas se distingen de aquellos en que las funciones devuelven un resultado.

No es que los procedimientos no puedan "devolver" resultados, pero, las funciones cuentan con una forma "natural" de hacerlo. ¿Un ejemplo de función? Claro, hombre, no faltaba más. Vamos con una que nos sumará dos Integer (que se pasan como parámetros) y nos devolverá el resultado de dicha suma:

Código Delphi [-]
function Sumar(a, b: integer) : integer;
begin
  Result := a + b;
end;

Como se ve utilizamos la palabra reservada "Result", siempre del tipo del valor de retorno de la función, para asignarle, justamente, el resultado que al cabo ofrecerá la función. ¿Cómo podemos utilizar la función de arriba, sin ir más lejos? Pues, por ejemplo:

Código Delphi [-]
var
  a,b,c: integer;
begin
  a := 5;
  b := 2;
  c := Sumar(a, b);
  // Muestra 7
  ShowMessage( IntToStr(c) );
end;

Como ves para usar la función no tenemos sino ceñirnos a su prototipo, esto es, pasarle los parámetros apropiados en número y tipo. En este caso se trata de "Integers" y, en fin, declaramos tres "Integer", "a", "b" y "c". A los primeros les damos un valor nosotros mismos, directamente, y, "c", tomará el valor devuelto por la función "Sumar", que en este caso es 7, puesto que se suma el valor de "a" y "b" que son los enteros que se pasan como parámetros a la función.

¿Porqué no echas un vistazo en el buscador de los Foros? Si buscas por "tutorial Delphi", "libros Delphi", etc., a buen seguro encontrarás información que será de tu interés.

En todo caso bienvenido al ClubDelphi. No dejes de pegar un repaso a la guía de estilo de los Foros.
__________________
David Esperalta
www.davidesperalta.com

Última edición por dec fecha: 10-09-2006 a las 07:24:03.
Responder Con Cita
  #3  
Antiguo 14-07-2010
sonymix sonymix is offline
Miembro
NULL
 
Registrado: jul 2010
Posts: 12
Poder: 0
sonymix cantidad desconocida en este momento
utiizar funciones

saludo todos. tengo un funcion que puede traducir en letras, los numero que introdusco en un campo de moneda. Ahora bien necesito saber como puedo emplealo para que cuando dijite el numero en un edit al salir para despliegue su valor en letra en otro edit.



gracias
Responder Con Cita
  #4  
Antiguo 14-07-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.211
Poder: 31
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola sonymix.

Suponiendo que la función sea:
Código:
function NumALetras(const Num: string): string;
Y el TEdit donde escribís los números se llame Edit1, podés usar el evento OnExit de Edit1 para llamar a la función y asignar el resultado a EDit2.
( Supongamos que así se llama el otro edit ).


Estando seleccionado Edit1, en el Object inspector, events, haciendo doble click sobre el evento OnExit:
Código:
procedure TForm1.Edit1Exit(Sender: TObject);
begin
  Edit2.Text:= NumALetras(Edit1.Text);
end;
No dudes en poner cualquier duda.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 14-07-2010
Avatar de Jac fcc
Jac fcc Jac fcc is offline
Miembro
NULL
 
Registrado: ene 2010
Posts: 33
Poder: 0
Jac fcc Va por buen camino
cambio de numero a letras

Espero entender tu comentario :
quieres usar tu funcion para que lo escrito en un edit se pase a otro pero con las palabras, por ejemplo 115 se pasará como: ciento quince.
¿En el edit que ingresas números ya tienes el filtro para no aceptar caracteres?
Parto del hecho de que hasta que cierres el edit donde ingresas datos numericos se copien los caracteres al edit de caracteres (¿a eso te refieres con: 'al salir'?) .
hay varias formas, se me ocurre:
procedure TForm_Turno.Button1Click(Sender: TObject);
var
cadena:string;
begin
{uso input, podria ser cualquier otra funcion que devuelva una cadena
y que tenga filtro para aceptar solo digitos
}
cadena := InputBox('Titulo', 'Nombre', '');
{uso tu funcion para convertir la cadena de numeros a letras
y se asigna al campo text
}
EdtDescripcion.Text:=TraduceALetras(cadena);
{siempre y cuando sea una funcion que regrese la cadena convertida.
Si es un procedimiento se necesita crear una variable tipo String para ser pasada por parámetros y asi conservar el valor cambiado:
TraduceALetras(CadenaOriginal,CadenaEnLetra)}
end;
si no es la idea, sorry
Responder Con Cita
  #6  
Antiguo 15-07-2010
sonymix sonymix is offline
Miembro
NULL
 
Registrado: jul 2010
Posts: 12
Poder: 0
sonymix cantidad desconocida en este momento
bueno si este puede funcionar pero mi funcion se declaro asi
Form1: TForm1;
function extenso (valor: real): string;
implementation
asi que tengo un problema de compatibilidad de type y trate de poner lo asi
edit2.text:=extenso(floattotext(edit1.text)); no me resulto
Responder Con Cita
  #7  
Antiguo 15-07-2010
sonymix sonymix is offline
Miembro
NULL
 
Registrado: jul 2010
Posts: 12
Poder: 0
sonymix cantidad desconocida en este momento
bueno si este puede funcionar pero mi funcion se declaro asi
Form1: TForm1;
function extenso (valor: real): string;
implementation
asi que tengo un problema de compatibilidad de type y trate de poner lo asi
edit2.text:=extenso(floattotext(edit1.text)); no me resulto
Responder Con Cita
  #8  
Antiguo 15-07-2010
Avatar de Jac fcc
Jac fcc Jac fcc is offline
Miembro
NULL
 
Registrado: ene 2010
Posts: 33
Poder: 0
Jac fcc Va por buen camino
y asi:

claro, la idea que haces sería:

procedure TForm1.Button1Click(Sender: TObject);
var
valorReal:Real;
begin
try
valorReal:=StrToFloat(Edit1.Text);
Edit2.Text:=extenso(valorReal);
except
MessageDlg('Ingrese un numero ',mtError,[mbOk], 0);
end;
end;


o más simple:

try
Edit2.Text:=extenso(StrToFloat(Edit1.Text));
except
MessageDlg('Ingrese un numero ',mtError,[mbOk], 0);
end;
Responder Con Cita
  #9  
Antiguo 16-07-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.211
Poder: 31
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por sonymix Ver Mensaje
bueno si este puede funcionar pero mi funcion se declaro asi
Form1: TForm1;
function extenso (valor: real): string;
implementation
asi que tengo un problema de compatibilidad de type y trate de poner lo asi
edit2.text:=extenso(floattotext(edit1.text)); no me resulto
Perdón por la demora.

El problema de tipos te lo dá el manejo que haces del parámetro en la llamada a función.

La función extenso espera un número real como parámetro y vos le estás enviando un string al usar FloatToText.

Si la función está así declarada, lo correcto sería usarla así:
Código Delphi [-]
  Edit2.Text:= extenso(StrToFloat(Edit1.Text));

Tal como puso en su código el amigo Jac.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #10  
Antiguo 08-01-2011
Avatar de delphi
delphi delphi is offline
Miembro
NULL
 
Registrado: ago 2010
Ubicación: Centro América
Posts: 17
Poder: 0
delphi Va por buen camino
¿Cómo puedo transformar una función FDEX a un procedimiento?
Responder Con Cita
  #11  
Antiguo 08-01-2011
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 745
Poder: 17
cloayza Va camino a la fama
Amigo Jac Fcc, le aconsejo que utilize las etiquetas que corresponda, ya que facilita la lectura y comprension del codigo que escribe.

Cita:
Empezado por Jac fcc Ver Mensaje
procedure TForm_Turno.Button1Click(Sender: TObject);
var
cadena:string;
begin
{uso input, podria ser cualquier otra funcion que devuelva una cadena
y que tenga filtro para aceptar solo digitos
}
cadena := InputBox('Titulo', 'Nombre', '');
{uso tu funcion para convertir la cadena de numeros a letras
y se asigna al campo text
}
EdtDescripcion.Text:=TraduceALetras(cadena);
{siempre y cuando sea una funcion que regrese la cadena convertida.
Si es un procedimiento se necesita crear una variable tipo String para ser pasada por parámetros y asi conservar el valor cambiado:
TraduceALetras(CadenaOriginal,CadenaEnLetra)}
end;
si no es la idea, sorry
Cual se ve y comprende mejor?...

Código Delphi [-]
procedure TForm_Turno.Button1Click(Sender: TObject);
var
  cadena:string;
begin
 {uso input, podria ser cualquier otra funcion que devuelva una cadena
 y que tenga filtro para aceptar solo digitos
 }
 cadena := InputBox('Titulo', 'Nombre', '');
 {uso tu funcion para convertir la cadena de numeros a letras
 y se asigna al campo text
 }
 EdtDescripcion.Text:=TraduceALetras(cadena);
{siempre y cuando sea una funcion que regrese la cadena convertida.
Si es un procedimiento se necesita crear una variable tipo String para ser pasada por parámetros y asi conservar el valor cambiado:
      TraduceALetras(CadenaOriginal,CadenaEnLetra)}
end;

Saludos cordiales
Responder Con Cita
  #12  
Antiguo 09-06-2019
juanje juanje is offline
Miembro
 
Registrado: may 2019
Posts: 3
Poder: 0
juanje Va por buen camino
Funcion

Gracias por el ejemplo que publicaste , estoy muy agradecido , un saludo
Responder Con Cita
  #13  
Antiguo 09-06-2019
juanje juanje is offline
Miembro
 
Registrado: may 2019
Posts: 3
Poder: 0
juanje Va por buen camino
Angry Funciones

Aqui te envio una rutina sencillasuma.txt
Responder Con Cita
  #14  
Antiguo 09-06-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 29.274
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por juanje Ver Mensaje
Aqui te envio una rutina sencillaArchivo Adjunto 3751
Por favor, lee nuestra guía de estilo, gracias.
Responder Con Cita
  #15  
Antiguo 11-06-2019
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 5.809
Poder: 20
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Hola juanje:

En el código que has adjuntado, hay algo que no está claro en esta línea:
Código Delphi [-]
  IF a OR b > 255 THEN Exit;
Lo que estás expresando es "Si el resultado de f(a∨b) es mayor que 255...", es decir, "aplica la función OR a los valores y compara el resultado con 255...". Si lo que quieres expresar es "Si el valor de a o el valor de b es mayor que 255...", debería ser así:
Código Delphi [-]
  IF (a > 255) OR (b > 255) THEN Exit; { Los paréntesis son obligatorios en este caso. }
Ahora bien, si realmente quieres aplicar la función OR, entonces te recomiendo la siguiente nomenclatura:
Código Delphi [-]
  IF (a OR b) > 255 THEN Exit;
Aquí los paréntesis no son obligatorios, pero ayudan a explicar que no es un error, sino que realmente quieres realizar la operación.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
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
Crear Unit como repositorio de Procedimientos y funciones Mauro® Varios 3 19-02-2009 19:15:24
Crear funciones almacenadas en SQL SERVER sitrico MS SQL Server 9 02-10-2008 18:30:34
Como puedo crear funciones? THACKER Varios 2 27-09-2008 20:51:22
Funciones en delphi Monxy Varios 2 10-04-2007 07:36:18
Funciones en delphi fmtidona Varios 2 05-04-2006 14:41:55


La franja horaria es GMT +2. Ahora son las 05:17:39.


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