
Como funciona un Funcion
#1
Escrito 11 diciembre 2008 - 06:38
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
#2
Escrito 11 diciembre 2008 - 06:42
//Funcion que regresa un valor verdadero o false function HacerAlgo(dato:string):Bool; begin if dato = 'SI' then result := true else result = false; end; //Funcion que regresa un valor entero function HacerAlgo(dato:bool):Integer; begin if dato = true then result := 1 else result = 0; end;
Salud OS
#3
Escrito 11 diciembre 2008 - 06:49
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:
function HacerAlgo(dato:Integer):Integer; begin if dato = 1 then result := 1 else result = 0; end;
No lo entiendo amigo
Saludos
#4
Escrito 11 diciembre 2008 - 06:58
Incluso podrias hacer esto
function suma(dato1,dato2:Integer):Integer; begin result := dato1+dato2; end; procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(inttostr(Suma(3,5))); end;
El asunto es lo que puedes hacer muchas cosas con las funciones.
Salud OS
#5
Escrito 11 diciembre 2008 - 07:09
Todo lo que haga dentro de la funcion me lo devuelve Result, es asi?.
Si es asi, como podria interpretarse algo asi:
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
#6
Escrito 11 diciembre 2008 - 07:12
function suma(dato1,dato2:Integer,dato3:bool):Integer;
function suma(dato1,dato2:Integer,dato3:bool)Bool;
Salud OS
#7
Escrito 11 diciembre 2008 - 07:16
Perdon amigo pero sigo sin entender.Que yo sepa amigo, eso no se puede, una funcion solo tiene la posibilidad de tener un tipo de dato.
delphi
function suma(dato1,dato2:Integer,dato3:bool):Integer;
delphi
function suma(dato1,dato2:Integer,dato3:bool)Bool;
Salud OS
Entiendo que el resultado solo puede ser de un tipo, en este caso boleano.
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
#8
Escrito 11 diciembre 2008 - 07:19
function suma(dato1,dato2:Integer,dato3:bool):Bool; begin if (dato1+dato2 = 10) and (dato3 = true) then result = true else result = false; end;
Salud OS
#9
Escrito 11 diciembre 2008 - 07:25
Tiene logica, con un condicionante.
Pero entonces la funcion debe tener un dato exacto, osea:
dato1+dato2=10
O puedo decir:
function suma(dato1,dato2:Integer,dato3:bool):Bool; var A:integer; begin if (dato1+dato2 = A) and (dato3 = true) then result = true else result = false; 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
#10
Escrito 11 diciembre 2008 - 07:27
Salud OS
#11
Escrito 11 diciembre 2008 - 07:30
:^)


Saludos
#12
Escrito 11 diciembre 2008 - 07:31
Hola
:^)![]()
Saludos
Ahora que, no fui claro ?????
Salud OS
#13
Escrito 11 diciembre 2008 - 07:35
No te bastaron las tres expresiones.

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
#14
Escrito 11 diciembre 2008 - 07:40
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; VariableGlobal: integer; implementation {$R *.DFM} function suma(dato1,dato2:Integer;dato3:bool):bool; begin if (dato1+dato2 = VariableGlobal) and (dato3 = true) then result := true else result := false; end; procedure TForm1.Button1Click(Sender: TObject); begin VariableGlobal := strtoint(Edit1.Text); if Suma(3,5,true) then ShowMessage('El resultado es '+Edit1.Text); end; end.
Salud OS
#15
Escrito 11 diciembre 2008 - 07:42
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:
function Nombre(...): tipo_dato; var variable: tipo; ....
"variable" sólo existirá en memoria en cuando se haga uso de la función. Fuera de dicha función, "variable" no existe.
Saludos,
#16
Escrito 11 diciembre 2008 - 07:52
Muchas gracias, voy captando la idea.
Hice esta comparacion:
procedure TForm1.Button1Click(Sender: TObject); begin VariableGlobal := strtoint(Edit1.Text); if Suma(StrToInt(Edit2.Text),StrToInt(Edit3.Text),true) then ShowMessage('El resultado es '+Edit1.Text); 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.
#17
Escrito 11 diciembre 2008 - 07:54

Salud OS
#18
Escrito 11 diciembre 2008 - 07:59
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
#19
Escrito 11 diciembre 2008 - 08:01

Salud OS
#20
Escrito 11 diciembre 2008 - 08:04
Que bueno, eso si me da mucha mas claridad en el asunto.
Hombre, Maestro, como me ayudas.
Gracias amigo.
Saludos