Trabajo de Computacion 8-8-16

También podría gustarte

Está en la página 1de 30

Repblica Bolivariana de Venezuela

Ministerio del Poder Popular Para la Educacin


Instituto Universitario Politcnico
Santiago Mario

Integrantes
Escuela: 47
Seccin: A
Llamadas de una funcin en el programa
principal
Las funciones, para poder ser ejecutadas, han de
ser llamadas o invocadas. Cualquier expresin puede
contener una llamada a una funcin que redirigir el
control del programa a la funcin nombrada. Normalmente
la llamada a una funcion se realizar desde la funcin
principal main ( ), aunque naturalmente tambin podr ser
desde otra funcin.
Se debe tener en cuenta que la funcin que llama a otra
funcin se denomina funcin llamadora y la funcin
controlada se denomina funcin llamada.
La funcin llamada que recibe el control del programa se
ejecuta desde el principio y cuando termina (se alcanza la
sentencia return, o la llave de cierre (}) si se omite return)
el control del programa vuelve y retorna a la funcin main (
) o a la funcin llamadora si no es main.
#include <iostream.h>
void func1 (void)
{
cout<<"segunda funcin /n" ;
return;
}
void func2 (void)
{
cout << " Tercera funcin/ n";
return;
}
main()
{
cout<<"Primera funcin llamada main()/n ";
func1(); //segunda funcin llamada
func2(); //tercera funcin llamada
cout<<"main se termina ";
return0; // Se devuelve el control a DOS
}
La salida de este programa es:
Primera funcin llamada main()
Segunda funcin
Tercera funicio
main se termina

se puede llamar una funcin y no utiliza el valor que se


devuelve. En el ejemplo
Func();
el valor de retorno no se no se considera. El formato func()
sin argumentos es el ms simple. Para indicar que la
llamada a una funcin no tiene argumentos se sita
Una palabra reservada void entre parntesis en la
declaracin de la funcin y, posteriormente, en lo que se
denomina prototipo.

Llamadas de un procedimiento en el
programa principal
La llamada desde el programa est dada por: P(a,b,c) x,y,z
son los parmetros formales del procedimiento, a,b,c son
los parmetros reales para el procedimiento y 2 y 5 son los
valores de los argumentos de a y b, respectivamente, antes
de la ejecucin de las instrucciones del procedimiento.
Tenemos entonces que x es un parmetro formal de
entrada que le corresponde el valor de a=2, y es un
parmetro formal de entrada/salida que le corresponde b=5
y z es un parmetro formal de salida, inicializado en la
declaracin, cuyo valor al final de la ejecucin del
procedimiento ser copiado por el parmetro real c. Es,
entonces, x,y,z un parmetro por valor, por referencia y por
valor resultado, respectivamente. Para ilustrar mejor los
valores iniciales y finales de los parmetros del
procedimiento, veremos como se encuentran asignados en
memoria, como cambian y cual es su estado final. Cada
cuadro representa una direccin de memoria, las flechas
son las referencias a las direcciones de memoria.
1. Momento de la llamada: a = 2 b = 5 c = 0 a -----> 2 b
-----> 5 c -----> 0 P(a,b,c) a -----> 2 b -----> 5 <----- y c -
----> 0 2 <----- x 0 <----- z Vemos que: [x, y := a,b]
Durante la ejecucin del procedimiento:
a -----> 2
b -----> 7 <----- y
c -----> 0
2 <----- x
3 <----- z
Vemos que los parmetros formales se modifican
3. Final de la ejecucin del procedimiento (vuelta al
programa llamador):
a -----> 2
b -----> 7 <----- y
c -----> 3
Vemos que [b,c := y,z]
Vemos que como x y z son parmetros por valor, lo que se
copia en el parmetro correspondiente es
el valor a y c, es decir, se pasa el valor y no la direccin de
memoria. y es un parmetro por
referencia, por lo que se pasa la direccin de memoria de
b.
Utilizaremos estos conceptos para analizar las reglas de
correctitud de procedimientos. Es
importante notar las sustituciones textuales que se hacen
en el momento de la llamada y al momento
de finalizar la ejecucin del procedimiento.

Ambito de una Variable


El mbito de una variable (llamado "scope" en ingls) es la
zona del programa en la que se define la variable.
JavaScript define dos mbitos para las variables: global y
local.
El siguiente ejemplo ilustra el comportamiento de los
mbitos:

function creaMensaje() {
var mensaje = Mensaje de prueba;
}
creaMensaje();
alert(mensaje);
El ejemplo anterior define en primer lugar una funcin
llamada creaMensaje que crea una variable llamada
mensaje. A continuacin, se ejecuta la funcin mediante la
llamada creaMensaje(); y seguidamente, se muestra
mediante la funcin alert() el valor de una variable
llamada mensaje.

Sin embargo, al ejecutar el cdigo anterior no se muestra


ningn mensaje por pantalla. La razn es que la variable
mensaje se ha definido dentro de la funcin creaMensaje()
y por tanto, es una variable local que solamente est
definida dentro de la funcin.

Cualquier instruccin que se encuentre dentro de la


funcin puede hacer uso de esa variable, pero todas las
instrucciones que se encuentren en otras funciones o fuera
de cualquier funcin no tendrn definida la variable
mensaje. De esta forma, para mostrar el mensaje en el
cdigo anterior, la funcin alert() debe llamarse desde
dentro de la funcin creaMensaje():

function creaMensaje() {
var mensaje = Mensaje de prueba;
alert(mensaje);
}
creaMensaje();
Adems de variables locales, tambin existe el concepto
de variable global, que est definida en cualquier punto
del programa (incluso dentro de cualquier funcin).

var mensaje = Mensaje de prueba;

function muestraMensaje() {
alert(mensaje);
}
El cdigo anterior es el ejemplo inverso al mostrado
anteriormente. Dentro de la funcin muestraMensaje() se
quiere hacer uso de una variable llamada mensaje y que
no ha sido definida dentro de la propia funcin. Sin
embargo, si se ejecuta el cdigo anterior, s que se muestra
el mensaje definido por la variable mensaje.

El motivo es que en el cdigo JavaScript anterior, la


variable mensaje se ha definido fuera de cualquier
funcin. Este tipo de variables automticamente se
transforman en variables globales y estn disponibles en
cualquier punto del programa (incluso dentro de cualquier
funcin).

De esta forma, aunque en el interior de la funcin no se ha


definido ninguna variable llamada mensaje, la variable
global creada anteriormente permite que la instruccin
alert() dentro de la funcin muestre el mensaje
correctamente.

Si una variable se declara fuera de cualquier funcin,


automticamente se transforma en variable global
independientemente de si se define utilizando la palabra
reservada var o no. Sin embargo, las variables definidas
dentro de una funcin pueden ser globales o locales.
Si en el interior de una funcin, las variables se declaran
mediante var se consideran locales y las variables que no
se han declarado mediante var, se transforman
automticamente en variables globales.

Por lo tanto, se puede rehacer el cdigo del primer


ejemplo para que muestre el mensaje correctamente. Para
ello, simplemente se debe definir la variable dentro de la
funcin sin la palabra reservada var, para que se
transforme en una variable global:

function creaMensaje() {
mensaje = "Mensaje de prueba";
}

creaMensaje();
alert(mensaje);

mbito de una Variable


Respecto al mbito de una variable, ste puede ser:

Local: Cuando la misma slo es accesible desde un nico


procedimiento hijo, no pudiendo ser leda o modificada
desde otro procedimiento hermano o desde el propio
procedimiento padre. Es posible declarar variables en
bloques de condicin, bucles, etc de tal modo que slo
pueda accederse a ellas en el propio bloque.
Global: Cuando la misma es accesible tanto desde rutinas o
macros de la aplicacin, como en todos los procedimientos
y funciones de la misma.
Si bien es cierto, que de una forma bsica, se puede definir
el mbito de las variables de la forma expuesta ms arriba,
existen grados de globalidad de las mismas, pudiendo ser
accesibles desde unos puntos u otros, o incluso pudiendo
ser accesibles entre aplicaciones distintas, llegando al caso
de la superglobalidad. Ejemplo el mbito de una variable
en el lenguaje de programacin Java.
Hay que tener en cuenta que en Java el caso de las
variables globales a todos los mtodos que se encuentran
en una clase, es algo peculiar, ya que estas realmente son
atributos que definen un objeto de una clase determinada,
en este caso la clase A tiene un atributo llamado numero
Entero. El atributo es un concepto que no define a un
objeto de una clase determinada, sino que es una variable
que sirve de apoyo a los procedimientos y define

conceptualmente objetos.
Diferencia entre funciones y
procedimientos

*PROCEDIMIENTOS
La declaracin de un procedimiento definido por el usuario
se debe hacer en el bloque de declaraciones de
procedimientos del mdulo desde el cual ser invocado, y
consta del encabezamiento y los bloques de declaraciones y
de instrucciones (cuerpo del subprograma). El
encabezamiento est formado por la palabra PROCEDURE
seguida del nombre o identificador del procedimiento y,
opcionalmente, una lista de parmetros.

Veamos un sencillo ejemplo:


program procedimientos;
var
cadena : string;
longitud,
carcter : integer;
procedure PreguntarCad;
begin
Write('Cadena a convertir a maysculas : ');
Readln(cadena);
end; { Preguntar }

procedure A_Mayusculas;
begin
longitud := length(cadena);
for carcter := 1 to longitud do
cadena[carcter] := UpCase(cadena[carcter]);
end; { A_Mayusculas }

begin { Programa principal }


PreguntarCad;
A_Mayusculas;
Writeln(cadena)
ReadLn;
end.
Este programa convierte los caracteres alfabticos en
minscula dentro de una cadena de caracteres de entrada a
sus correspondientes maysculas. Para ello utiliza dos
procedimientos; el primero pregunta la cadena a
transformar y el siguiente procedimiento (A Maysculas)
realiza la conversin. Aunque cada sentencia del
procedimiento podra ubicarse directamente en el bloque
principal, el modular izar el programa le da ms claridad y
elegancia.

Las constantes y variables que aparecen dentro de las


sentencias ejecutables de un procedimiento pueden haber
sido declaradas externamente (dentro de un mdulo que
contiene la declaracin de procedimiento), o localmente
(dentro del propio procedimiento). Aquellas constantes y
variables declaradas dentro del bloque que contiene la
declaracin de procedimiento pueden utilizarse en
cualquier punto dentro de este bloque, ya sea interior o
exterior al procedimiento. Los identificadores definidos de
esta manera se consideran globales al procedimiento.
Recuerde que un identificador es un nombre dado a un
elemento de un programa, tal como una constante, una
variable, un procedimiento o un programa. En general, son
preferibles los identificadores locales a los globales.
Las partes de un subprograma son similares a las de un
programa, o sea: encabezamiento, parte de declaraciones y
parte de instrucciones. Todas las variables declaradas en un
subprograma y definidas dentro de l son variables locales,
es decir slo existen dentro del mdulo y durante su
ejecucin. No son conocidas por el programa principal, ni
fuera del procedimiento o funcin. La parte de instrucciones
o cuerpo del subprograma especifica las acciones que se
llevarn a cabo cuando el procedimiento sea invocado.

*FUNCIONES
Una funcin es similar a un procedimiento, pero a
diferencia de ste, una funcin se usa para devolver un solo
valor de tipo simple a su punto de llamada. Esta llamada
puede hacerse dentro de una expresin como si fuera una
variable ordinaria de tipo simple. El nombre de una funcin
puede ir seguido de uno o ms parmetros actuales
encerrados entre parntesis y separados por coma.

Suponiendo que fac es el nombre de una funcin que


calcula el factorial de una cantidad entera (el factorial de n
se define como n! = 1*2*3*..n). La frmula
f = x!/a!(x-a)!

Podra entonces ser evaluada como

f := fac(x) / (fac(a) * (fac(x-a));

Donde f, x y a son variables de algn tipo numrico.

La funcin en s misma, consiste de una cabecera de funcin


y los bloques de declaraciones y de instrucciones (cuerpo
del subprograma). La cabecera se escribe de la forma

FUNCTION nombre (parmetros formales) : tipo;

El ltimo elemento, tipo, especfica el tipo de dato del


resultado que la funcin retorna.
Los bloques de declaraciones y de instrucciones son
similares a los de un procedimiento aplicando las mismas
reglas de construccin para ste. Dentro del bloque de
instrucciones, sin embargo, el identificador que representa
el nombre de la funcin debe tener asignado un valor del
tipo apropiado (segn se especifica en la cabecera). Este es
el valor que la funcin devuelve a su punto de referencia.
Pueden asignarse valores al nombre de la funcin en ms de
un lugar dentro del bloque, siendo vlida la ltima
asignacin que se efecta. En Object Pascal tambin es
posible asignar el valor que retorna la funcin a la variable
result, esta variable se declara implcitamente para toda
funcin y se utiliza para especificar el valor de retorno.
Actualmente se da prioridad al uso de result en lugar del
nombre de la funcin.

He aqu el desarrollo de un programa para calcular el


factorial de un nmero, por medio de una funcin definida:

program factorial;
var
numero : real;
function fac(n : Integer) : real;
var
i : integer;
acum : real;
begin
acum := 1;

for i := 2 to trunc(n) do
acum := acum * i;

result := acum; // El cdigo sin usar result seria :


// fac := acum;
end; { fac }

begin
Repeat
Write('Numero a calcular su factorial ?');
Readln(numero);
Writeln(fac(numero):40:0);
Until numero = 0;
end.

La declaracin de la funcin fac, incluye una declaracin del


parmetro por valor n. Note tambin que la ltima palabra
de la lnea (real) establece que la funcin devolver una
cantidad de tipo real.

Esta funcin acepta un valor n y luego calcula el valor de n!


usando dos variables locales (i de tipo entero y acum de tipo
real). El resultado final se asigna al identificador fac, que es
tambin el nombre de la funcin.
Defina y de ejemplo de funcin recursiva
Funcin recursiva
En lgica matemtica y computacin, las funciones
recursivas o tambin conocidas como funciones recursivas-
son una clase de funciones de los nmeros naturales en
los nmeros naturales que son computables en un
sentido intuitivo. De hecho, en teora de la compatibilidad
se demuestra que las funciones recursivas son precisamente
las funciones que pueden ser calculadas con el formalismo
de cmputo ms general conocido como lo son las
mquinas de Turing. Las funciones recursivas estn
relacionadas con las funciones primitivas recursivas y su
definicin inductiva se construye basndose en la de las
funciones primitivas recursivas (estas se obtienen por
medio de recursin primitiva y composicin de funciones
iniciales). No toda funcin recursiva es primitiva recursiva.
El ejemplo ms conocido es la funcin de Ackermann.
Para definir las funciones recursivas se toma la definicin de
las funciones primitivas recursivas, para permitir funciones
parciales, agregando el operador de bsqueda o
minimizacin no acotada como sigue:
Si f(x,z1,z2,...,zn) es una funcin parcial sobre los naturales
con n+1 argumentos x, z1,...,zn, la funcin x f es la funcin
parcial con argumentos z1,...,zn que retorna el ms
pequeo x tal que f(0,z1,z2,...,zn), f(1,z1,z2,...,zn), ...,
f(x,z1,z2,...,zn) estn todas definidas y f(x,z1,z2,...,zn) = 0, si
un tal x existe; en caso contrario, x f no est definida para
los valores particulares de los argumentos z1,...,zn.
Se puede verificar que la especificacin del mnimo valor de
x, junto con el resto de la definicin idntica a la de las
funciones primitivas recursivas, implica el axioma de
bsqueda acotada de las funciones primitivas recursivas.

El conjunto de las funciones recursivas parciales est


definido como el ms pequeo conjunto de funciones
parciales con cualquier nmero de argumentos de los
naturales en los naturales que contiene el cero, el sucesor y
las funciones de proyeccin, tales que la composicin, la
recursin primitiva y la bsqueda no acotada son
operaciones cerradas en este conjunto.

El conjunto de las funciones recursivas totales es el


subconjunto de las funciones recursivas parciales que
adems son funciones totales.
En la tesis de Church-Turing se establece el paralelo entre
mquinas de Turing que no se detienen para ciertas
entradas y el resultado indefinido de una funcin recursiva
parcial. El operador de bsqueda no acotada no puede ser
definido usando las reglas de definicin de las funciones
primitivas recursivas, dado que no se dispone en ellas de un
mecanismo de iteracin no acotada por el cual podra no
encontrarse el resultado de una funcin.

Ejemplos

Para calcular el factorial de un nmero se distinguen dos


casos: si el nmero es cero o si es mayor. El primer caso es
un caso base, pues sabemos que la solucin es 1, mientras
que para el resto de los casos utilizaremos una llamada
recursiva. La distincin de casos puede realizarse por
cualquiera de los 4 mtodos que conocemos. Vemoslo por
ejemplo con el uso de patrones:
fact 0 = 1
fact n = n * fact (n-1)
Ntese que la recursin terminar para cualquier valor de
entrada positivo, pues en cada llamada recursiva el
parmetro se va decrementando, hasta que en algn
momento llegue a valer 0. Ntese tambin que la recursin
no es final, pues tras la llamada recursiva es necesario
multiplicar el valor obtenido por el parmetro de entrada.

La funcin anterior puede convertirse en final si se aade


un parmetro acumulador:

fact n = fact' n 1
fact' 0 acum = acum
fact' n acum = fact' (n-1) (n*acum)

La recursin es una estrategia muy potente cuando se


utilizan listas. Veamos por ejemplo cmo calcular la
longitud de una lista:

long [] = 0
long (x:xs) = 1 + long xs
Ntese que la distincin de casos se hace en base a si la lista
es vaca o no. Sabemos que la definicin termina porque en
cada llamada recursiva se reduce en una unidad la longitud
de la lista, por lo que en algn momento llegar a estar
vaca.

Ejemplos de Funciones y Procedimientos


Funciones
Procedimiento

También podría gustarte