Está en la página 1de 12

Ingeniería industrial

Algoritmos y lenguajes de programación

Unidad 6

“Unidad 6 Manejo de funciones.”

Investigaciones

Presenta:

Jiménez Fernando de Jesús

# De control: 17211206

Profesor: ing. Erasmo Estrada Peña

TIJUANA, B.C. 6 de Marzo de 2018


Introducción:

A continuación se mostrara un poco acerca lo que es una función, como


funciona, características, prototipos y cómo funcionan estas partes
importantes dentro de la funciones de C++. También se muestra los
tipos diferentes tipos de funciones dentro de un programa y como una
función es un bloque de código que realiza alguna operación.
¿Qué es una función?
Una función es un bloque de código que realiza alguna operación. Una
función puede definir opcionalmente parámetros de entrada que
permiten a los llamadores pasar argumentos a la función. Una función
también puede devolver un valor como salida. Las funciones son útiles
para encapsular las operaciones comunes en un solo bloque
reutilizable, idealmente con un nombre que describa claramente lo que
hace la función. La función siguiente acepta dos enteros de un llamador
y devuelve su suma; a y b son parámetros de tipo int.

La función puede invocarse, o llamarse, desde cualquier número de


partes del programa. Los valores que se pasan a la función son
los argumentos, cuyos tipos deben ser compatibles con los tipos de
parámetro de la definición de función.

No hay ningún límite práctico para la longitud de la función, pero un buen


diseño tiene como objetivo funciones que realizan una sola tarea bien
definida. Los algoritmos complejos deben dividirse en funciones más
sencillas y fáciles de comprender siempre que sea posible.
Las funciones definidas en el ámbito de clase se denominan funciones
miembro. En C++, a diferencia de otros lenguajes, una función también
pueden definirse en el ámbito de espacio de nombres (incluido el
espacio de nombres global implícito). Estas funciones se
denominan funciones libres o funciones no miembro; se usan
ampliamente en la biblioteca estándar.
¿Cuáles son los prototipos de una función?
Una declaración de función precede a la definición de función y
especifica el nombre, el tipo devuelto, la clase de almacenamiento y
otros atributos de una función. Para ser un prototipo, la declaración de
función también debe establecer tipos e identificadores para los
argumentos de la función.

Sintaxis
declaration:
declaration-specifiers attribute-seq opt init-declarator-list opt;
/* attribute-seq opt es específico de Microsoft */
declaration-specifiers:
storage-class-specifier declaration-specifiers opt
type-specifier declaration-specifiers opt
type-qualifier declaration-specifiers opt
init-declarator-list:
init-declarator
init-declarator-list , init-declarator
init-declarator:
declarator
declarator = initializer
declarator:
pointer opt direct-declarator
direct-declarator: /* Un declarador de función */
direct-declarator ( parameter-type-list ) /* Declarador de estilo nuevo */
direct-declarator ( identifier-list opt ) /* Declarador de estilo obsoleto */

El prototipo tiene la misma forma que la definición de función, excepto


en que termina con un punto y coma inmediatamente después del
paréntesis de cierre y, por consiguiente, no tiene ningún cuerpo. En
cualquier caso, el tipo de valor devuelto debe coincidir con el tipo de
valor devuelto especificado en la definición de función.
Los prototipos de función tienen los siguientes usos importantes:

 Establecen el tipo de valor devuelto para funciones que devuelven tipos diferentes de int.
Aunque las funciones que devuelven valores int no requieren prototipos, estos son
recomendables.
 Sin prototipos completos se realizan conversiones estándar, pero no se hace ningún
intento de comprobar el tipo o el número de argumentos con el número de parámetros.
 Los prototipos se utilizan para inicializar punteros a funciones antes de que se definan esas
funciones.
 La lista de parámetros se utiliza para comprobar la correspondencia de los argumentos de
la llamada de función con los parámetros de la definición de función.

El tipo convertido de cada parámetro determina la interpretación de los


argumentos que la llamada de función coloca en la pila. Un error de
coincidencia de tipos entre un argumento y un parámetro puede
provocar que los argumentos de la pila no se interpreten correctamente.
Por ejemplo, en un equipo de 16 bits, si se pasa un puntero de 16 bits
como argumento y, a continuación, se declara como un parámetro long,
los primeros 32 bits de la pila se interpretan como un parámetro long.
Este error crea problemas no solo con el parámetro long, sino con
cualquier parámetro que lo siga. Puede detectar errores de este tipo
declarando prototipos de función completos para todas las funciones.
Un prototipo establece los atributos de una función para poder
comprobar si en las llamadas a la función que preceden a la definición
(o aparecen en otros archivos de código fuente) aparecen discordancias
entre tipos de argumentos y tipos devueltos. Por ejemplo, si especifica
el especificador de clase de almacenamiento static en un prototipo,
también debe especificar la clase de almacenamiento static en la
definición de función.
Las declaraciones de parámetro completas (int a) se pueden mezclar
con declaradores abstractos (int) en la misma declaración. Por ejemplo,
la siguiente declaración es válida:

El prototipo puede incluir tanto el tipo como el identificador de cada


expresión que se pasa como argumento. Sin embargo, tales
identificadores solo tienen ámbito hasta el final de la declaración. El
prototipo también puede reflejar el hecho de que el número de
argumentos es variable o que no se pasa ningún argumento. Sin esta
lista es posible que las discordancias no se revelen, así que el
compilador no puede generar mensajes de diagnóstico relacionados
con ellos
El ámbito de prototipo en el compilador de Microsoft C es ahora
compatible con ANSI cuando se compila con la opción del compilador
/Za. Esto significa que, si declara una etiqueta struct o union dentro de
un prototipo, la etiqueta se introduce en ese ámbito en lugar de en el
ámbito global. Por ejemplo, al compilar con /Za para la compatibilidad
con ANSI, nunca se puede llamar a esta función sin obtener un error de
coincidencia de tipos:
Escribe la estructura de una función en C++
La estructura de un programa en C o C++ quedaría así:
Menciona tres tipos de funciones y describe cada
una de ellas.
No reciben ni retornan
Las más sencillas. Para usarlas sólo tenemos que saber cómo crearlas
y cómo llamarlas. Una función se crea de esta forma general: tipo
nombre (){}

El ‘tipo’ se refiere al tipo de dato (int, float, void, char) y en las funciones
que no retornan siempre es void.

El ‘nombre’ es el nombre de la función: cualquiera que empiece con una


letra, que sea significativo y que no sea una palabra reservada.

Para llamarlas sólo hay que escribir el nombre de la función seguido de


sus paréntesis y un punto y coma (;).nombre();

Así nuestro programa sería:


Reciben y No Retornan

¿Cómo haríamos para pedir los dos números en el main y que la función
haga la suma? Para eso tenemos que hacer una función capaz de
recibir datos, entonces la sintaxis cambia un poco:
tipo nombre(tipo_var1 nombre_var1, tipo_var2 nombre_var2){}
‘tipo’ y ‘nombre’ se refieren a lo mismo y como no retorna el tipo
siempre es void.

Dentro del paréntesis tenemos otros aspectos: ‘tipo_var1’ se refiere al


tipo de la variable que nuestra función va a recibir. ‘nombre_var1’ se
refiere al nombre de esa variable.

Si queremos recibir una variable hasta ahí es suficiente, si queremos


otra variable ponemos una coma (,) y declaramos la siguiente variable.
Para llamar la función hay que poner la variables que vamos a enviar
dentro del paréntesis en el mismo orden en que las declaramos en la
función: nombre(var1, var2);

Nuestro programa quedaría así:


Retornan y No Reciben

¿Y si ahora queremos lo contrario? Pedir los números en la función,


pero mostrar el resultado en el main. Para eso necesitamos una
función que retorne.

Recibir es enviar datos del main a la función. Retornar es enviar datos


de la función al main. Para retornar datos hay que hacer dos cosas: no
usar void como tipo y usar return.

De forma general:
tipo nombre() { return var; }
El ‘tipo’ tiene que ser del tipo de variable que queremos retornar, si
nuestra variable retorna una variable int, pues el tipo de la función es
int.

Para indicar qué variable estamos retornando usaremos la


palabra return seguido de la variable. Usualmente esto va al final de la
función.

Para llamar a la función hay que preparar un colchón en donde caiga


la variable que está retornando.
var = nombre();
La variable que está retornando nuestra función se va a almacenar en
la variable ‘var’. Este es un buen momento para recordarles que las
variables declaradas entre dos llaves {} únicamente existen entre esas
dos llaves. O sea que la variable ‘var’ de la función no es la
misma que la variable ‘var’ de la función; sin embargo la var del main
está adquiriendo el valor de la var del main. Un poco confuso lo se, no
se preocupen.
Nuestro programa quedaría así:
Conclusión:
Respecto a los temas anteriores nos damos cuenta que estas funciones
dentro de los programas C++ facilitan el trabajo entendiendo los códigos
de la función. Y sus prototipos tienen la misma forma que la definición
de función, excepto en que termina con un punto y coma
inmediatamente después del paréntesis de cierre y, por consiguiente,
no tiene ningún cuerpo.

También podría gustarte