Ir al contenido


Foto

Como funciona un Funcion


  • Por favor identifícate para responder
39 respuestas en este tema

#1 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 11 diciembre 2008 - 06:38

Hola
Se que parece que no deberia de hacer estas preguntas, pero es eso, parece, sigo siendo novato.
He visto innumerable cantidad de funciones, unas ya hechas y otras hechas para un proposito determinado.
Pero siempre me quedo corto, no termino de entender su funcionamiento.
Alguno me podria explicar como funciona?.
Si es posible me dais algunos ejemplos?.
Saludos


  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 11 diciembre 2008 - 06:42

Hola amigo, a diferencia de los procedimientos, las funciones tienen la caracteristica de regresar un valor como respuesta a algo que haces dentro de ella, por ejemplo:



delphi
  1. //Funcion que regresa un valor verdadero o false
  2. function HacerAlgo(dato:string):Bool;
  3. begin
  4.   if dato = 'SI' then
  5.     result := true
  6.   else result = false;
  7. end;
  8.  
  9. //Funcion que regresa un valor entero
  10. function HacerAlgo(dato:bool):Integer;
  11. begin
  12.   if dato = true then
  13.     result := 1
  14.   else result = 0;
  15. end;



Salud OS

  • 0

#3 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 11 diciembre 2008 - 06:49

Hola
Ves, me dejas con dudas y eso que parece sencillo.
Veamos, la primera esta mas o menos logica.
(Dato: String):Bool
El dato es string y el resultado es boleano.
Pero la segunda por que haces esto:
(Dato:Bool): Integer
El dato boleano y el resultado integer.
No lo entiendo, que pasaria con esto:


delphi
  1. function HacerAlgo(dato:Integer):Integer;
  2. begin
  3. if dato = 1 then
  4.     result := 1
  5. else result = 0;
  6. end;


No lo entiendo amigo
Saludos
  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 11 diciembre 2008 - 06:58

Eso esta bien, igual funciona, la idea no es lo que le ingresas a la funcion sino lo que te va a regresar, el tipo de la funcion es lo que te dice que debes de regresar, un Bool, un entero, un real, un string, etc.

Incluso podrias hacer esto



delphi
  1. function suma(dato1,dato2:Integer):Integer;
  2. begin
  3. result := dato1+dato2;
  4. end;
  5.  
  6. procedure TForm1.Button1Click(Sender: TObject);
  7. begin
  8.   ShowMessage(inttostr(Suma(3,5)));
  9. end;



El asunto es lo que puedes hacer muchas cosas con las funciones.

Salud OS
  • 0

#5 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 11 diciembre 2008 - 07:09

Hola
Todo lo que haga dentro de la funcion me lo devuelve Result, es asi?.
Si es asi, como podria interpretarse algo asi:


delphi
  1. function suma(dato1,dato2:Integer, dato3:bool):Integer,bool;


No se si estara bien, pero he visto funciones que tienen varios parametros, no todos son iguales.
Como se hace algo asi?.
Saludos
  • 0

#6 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 11 diciembre 2008 - 07:12

Que yo sepa amigo, eso no se puede, una funcion solo tiene la posibilidad de tener un tipo de dato.



delphi
  1. function suma(dato1,dato2:Integer,dato3:bool):Integer;




delphi
  1. function suma(dato1,dato2:Integer,dato3:bool)Bool;



Salud OS
  • 0

#7 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 11 diciembre 2008 - 07:16

Hola

Que yo sepa amigo, eso no se puede, una funcion solo tiene la posibilidad de tener un tipo de dato.



delphi
  1. function suma(dato1,dato2:Integer,dato3:bool):Integer;




delphi
  1. function suma(dato1,dato2:Integer,dato3:bool)Bool;



Salud OS

Perdon amigo pero sigo sin entender.
Entiendo que el resultado solo puede ser de un tipo, en este caso boleano.


delphi
  1. function suma(dato1,dato2:Integer,dato3:bool)Bool;


Pero como harias una funcion con dos datos integer uno boleano y que devuelva boleano?.
No lo capto.
Saludos
  • 0

#8 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 11 diciembre 2008 - 07:19

A ver



delphi
  1. function suma(dato1,dato2:Integer,dato3:bool):Bool;
  2. begin
  3.   if (dato1+dato2 = 10) and (dato3 = true) then
  4.     result = true
  5.   else result = false;
  6. end;



Salud OS
  • 0

#9 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 11 diciembre 2008 - 07:25

Hola
Tiene logica, con un condicionante.
Pero entonces la funcion debe tener un dato exacto, osea:
dato1+dato2=10
O puedo decir:
     

delphi
  1.     function suma(dato1,dato2:Integer,dato3:bool):Bool;
  2.   var A:integer; 
  3.   begin
  4.       if (dato1+dato2 = A) and (dato3 = true) then
  5.           result = true
  6.       else result = false;
  7.     end;


Con esto teoricamente podria darle el valor que quiera a la variable A
Si puedo hacer eso, como llamaria a esa funcion, como me devuelve el valor True?.
Saludos
  • 0

#10 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 11 diciembre 2008 - 07:27

Ahora el que no entiende soy yo, A la colocas como una variable local, de esa forma solo puedes asignarle un valor dentro de la funcion, si la pones como global entonces esa variable puede tomar el valor desde otro lugar del programa y asi hacer la comparación.

Salud OS
  • 0

#11 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 11 diciembre 2008 - 07:30

Hola
:^) :s :
Saludos
  • 0

#12 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 11 diciembre 2008 - 07:31

Hola
:^) :s :
Saludos


Ahora que, no fui claro ?????

Salud OS
  • 0

#13 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 11 diciembre 2008 - 07:35

Hola
No te bastaron las tres expresiones. :D
Seguro que fuiste claro, pero no entendi nada jajajaj.
Amigo, me puedes poner un ejemplo de uso:
Pon esa funcion y luego llamala, no se.
Por eso te digo, las funciones me parten, no he logrado entenderlas nunca.
Saludos

  • 0

#14 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 11 diciembre 2008 - 07:40

A ver amigo:



delphi
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   StdCtrls;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     Button1: TButton;
  12.     Edit1: TEdit;
  13.     procedure Button1Click(Sender: TObject);
  14.   private
  15.     { Private declarations }
  16.   public
  17.     { Public declarations }
  18.   end;
  19.  
  20. var
  21.   Form1: TForm1;
  22.   VariableGlobal: integer;
  23.  
  24. implementation
  25.  
  26. {$R *.DFM}
  27.  
  28. function suma(dato1,dato2:Integer;dato3:bool):bool;
  29. begin
  30.   if (dato1+dato2 = VariableGlobal) and (dato3 = true) then
  31.       result := true
  32.   else result := false;
  33. end;
  34.  
  35. procedure TForm1.Button1Click(Sender: TObject);
  36. begin
  37.   VariableGlobal := strtoint(Edit1.Text);
  38.   if Suma(3,5,true) then
  39.     ShowMessage('El resultado es '+Edit1.Text);
  40. end;
  41.  
  42. end.



Salud OS
  • 0

#15 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 11 diciembre 2008 - 07:42

Hola Carlos,
Veamos si me salen las palabras:
Una función es una pequeña porción de código que al final de todas sus sentencias va a devolver un dato, de un tipo determinado.
Una función puede tener tantos parámetros de entrada como necesite.
Toda variable declarada dentro de una función (o procedimiento) es de alcance local. Es decir que una vez que se ejecuta el código, se pierde dicha variable (mejor dicho, se libera la memoria).

Cuando haces:


delphi
  1. function Nombre(...): tipo_dato;
  2. var variable: tipo;
  3. ....



"variable" sólo existirá en memoria en cuando se haga uso de la función. Fuera de dicha función, "variable" no existe.

Saludos,
  • 0

#16 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 11 diciembre 2008 - 07:52

Hola
Muchas gracias, voy captando la idea.
Hice esta comparacion:


delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3. VariableGlobal := strtoint(Edit1.Text);
  4. if Suma(StrToInt(Edit2.Text),StrToInt(Edit3.Text),true) then
  5. ShowMessage('El resultado es '+Edit1.Text);
  6. end;


Me ayudo a entender que se la suma de los dos edit 2 y 3, es igual que el edit 1 entonces el valor de la funcion es verdadero y devuelve el mensaje.
Muchas Gracias, no puedo decir que este totalmente entrenado, pero ya es un comienzo.
Gracias por tu tiempo amigo.
saludos
PD: Delphius, gracias por la explicacion, ahora la siento mas clara.

  • 0

#17 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 11 diciembre 2008 - 07:54

Que bien amigo, me alegra que se haya logrado el objetivo :D

Salud OS
  • 0

#18 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 11 diciembre 2008 - 07:59

Hola
Siguiendo con esto me imagino que entonces al igual que se puede hacer un condicional IF, Then ,else, que devuelve un result.
Se podria hacer un Case OF, dentro de la funcion, supongo?.
Saludos
  • 0

#19 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 11 diciembre 2008 - 08:01

Asi es amigo, la única condición es que al final esa función regrese el valor asignado a la misma, por lo demas, puedes hacer lo que gustes y mandes ;)

Salud OS
  • 0

#20 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 11 diciembre 2008 - 08:04

Hola
Que bueno, eso si me da mucha mas claridad en el asunto.
Hombre, Maestro, como me ayudas.
Gracias amigo.
Saludos
  • 0




IP.Board spam blocked by CleanTalk.