Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

Funciones

Funciones básicas y funciones definidas por el usuario
by

Lucero Zamora

on 10 October 2013

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Funciones

Estas funciones están agrupadas en bibliotecas. Para utilizar cualquiera de las funciones que forman parte de las bibliotecas estándar de C, sólo hace falta realizar una llamada a dicha función. Funciones de Biblioteca Funciones Definidas por el Usuario Paso de Parámetros Recursividad Función Ejemplo:
double promedio( int a, int b, int c)
{
return (a + b + c ) / 3.0;
} Por valor Se dice que una función es recursiva cuando se define en función de si misma. Unidad 3 Funciones Básicas y Funciones Definidas por el Usuario Son un conjunto de funciones estándar que dan soporte a las operaciones que se utilizan con más frecuencia. Cuando el control pasa a la función, los valores de los parámetros en la llamada se copian a "objetos" locales de la función, estos "objetos" son de hecho los propios parámetros. La definición de una función se realiza escribiendo primero el tipo del valor de retorno de la función, después el nombre de la función, posteriormente entre paréntesis las variables que utilizará dicha función (parámetros) y finalmente las instrucciones de la función. Programación 1 Ing. Lucero Zamora M Cómo se usan??? Qué es??? Una función es un conjunto de instrucciones que se pueden llamar desde el programa principal o desde otras funciones Para qué sirven??? Nos sirven para desarrollar algo en especial cuando el programa así lo necesite. Para usar funciones, debemos tener en cuenta dos cosas que se necesitan: 1) La declaración de la función: Esta nos sirve para que al compilar el programa, el compilador reconozca que esa función existe; ya que si la llamamos desde alguna parte del programa sin haberla declarado o habiendola declarado, se la declaró mal eso nos dará error. Entonces es importante antes siquiera de desarrollar la función, declararla. Sintaxis prototipo_de_función nombre_de_la_función ( parametros opcionales ); Sirve para indicar que va a retornar la función, si va a retornar un entero, un double, un char, o simplemente no retorna nada ( void ). Esto es obligatorio son los datos que le enviamos a la función para que con ellos posiblemente desarrolle algo que necesitemos. Esto es opcional. Ejemplo:
void ingresar(); Donde vemos no va a retornar nada, por ello tiene void entonces la función hace lo que tiene que hacer y termina, no devuelve nada. int suma_enteros ( int, int );

float suma_numeros ( float, float ); suma unicamente enteros, devuelve un entero suma enteros o flotantes, devuelve un flotante 2) La definición de la función: La declaración nos sirve para que el compilador sepa que existe dicha función, ahora la definición nos sirve ya para desarrollar la función; es decir ya programar dentro de ella para que haga lo que necesitamos Como consecuencia de que ya está creada podemos usarla, pero si no la hubiesemos declarado y la desarrollamos ( hacemos la definición ), al compilar nos dará error y dirá que esa función no fue declarada, que no existe. La definición es muy similar a la declaración, solo que esta vez lleva un ambiente ( donde vamos a programar es decir las llaves “{ … }” ) Ejemplo:
void ingresar()
{
……… // Lo que deba hacer esa función
} otra diferencia es que la declaración lleva “;” ( punto y coma ) al final, la definición ya no lo lleva. Las funciones que forman parte de la biblioteca estándar de C, funciones estándar o predefinidas, están divididas en grupos. Todas las funciones que pertenecen a un mismo grupo se definen en el mismo fichero de cabecera. Cuando deseamos utilizar cualquiera de las funciones estándar de C, primero debemos utilizar la directiva de precompilación #include para incluir los ficheros cabecera en nuestro programa. Por otra parte, antes de utilizar una función, primero debemos conocer las características de dicha función, es decir, el número y tipo de datos de sus argumentos y el tipo de valor que devuelve. Esta información es proporcionada por los prototipos de función. Los grupos de funciones estándar más comunes son:
- entrada/salida estándar
- matemáticas
- de conversión
- diagnóstico
- de manipulación de memoria
- control de proceso
- ordenación
- directorios
- fecha y hora
- búsqueda
- manipulación de cadenas
- gráficos
- etcétera Podemos incluir tantos ficheros de cabecera como nos haga falta, incluyendo los ficheros de cabecera que hemos creado y donde hemos definido nuestras funciones. Al llamar una función, los parámetros que se pasan ala función deben concordar en número, tipos y orden con los parámetros utilizados en la definición de la función Cuando el programa encuentra una función, se le transfiere el control, se ejecuta y se regresa el control al invocador de la función Una función invocada puede regresar el control a su invocador de tres formas: 1.- Si la función no regresa valor, el control se devuelve al encontrar la llave final de la misma 2.- Ejecutando una instrucción return 3.- Si la función regresa valor, se debe utilizar la siguiente instrucción para regresar el valor a su invocador: return expresión Por referencia Ejemplo:
#include <iostream>
using namespace std;
int funcion(int n, int m);
int main() {
int a, b;
a = 10;
b = 20;
cout << "a,b ->" << a << ", " << b << endl;
cout << "funcion(a,b) ->"
<< funcion(a, b) << endl;
cout << "a,b ->" << a << ", " << b << endl;
cout << "funcion(10,20) ->"
<< funcion(10, 20) << endl;
return 0;
}
int funcion(int n, int m) {
n = n + 2;
m = m - 5;
return n+m;
} Empezamos haciendo a = 10 y b = 20, después llamamos a la función "función" con las objetos a y b como parámetros. Dentro de "función" esos parámetros se llaman n y m, y sus valores son modificados. Sin embargo al retornar a main, a y b conservan sus valores originales. ¿Por qué?

La respuesta es que lo que pasamos no son los objetos a y b, sino que copiamos sus valores a los objetos n y m. Cuando llamamos a la función con parámetros constantes. Los valores de los parámetros no pueden cambiar al retornar de "función", ya que esos valores son constantes. Las referencias sirven para definir "alias" o nombres alternativos para un mismo objeto. Para ello se usa el operador de referencia (&). Sintaxis:
<tipo> &<alias> = <objeto de referencia>
<tipo> &<alias> Se usa para declarar objetos que son referencias, la asignación es obligatoria ya que no pueden definirse referencias indeterminadas. Se usa para definir parámetros por referencia en funciones, en estos casos, las asignaciones son implícitas. Ejemplo:
#include <iostream>
using namespace std;
int main() {
int a;
int &r = a;
a = 10;
cout << r << endl;
return 0;
} Los identificadores a y r se refieren al mismo objeto, cualquier cambio en uno de ellos se produce en el otro, ya que son, de hecho, el mismo objeto.

El compilador mantiene una tabla en la que se hace corresponder una dirección de memoria para cada identificador de objeto. A cada nuevo objeto declarado se le reserva un espacio de memoria y se almacena su dirección. En el caso de las referencias, se omite ese paso, y se asigna la dirección de otro objeto que ya existía previamente.

De ese modo, podemos tener varios identificadores que hacen referencia al mismo objeto, pero sin usar punteros. Si queremos que los cambios realizados en los parámetros dentro de la función se conserven al retornar de la llamada, deberemos pasarlos por referencia. Esto se hace declarando los parámetros de la función como referencias a objetos. Ejemplo:
using namespace std;
int funcion(int &n, int &m);
int main() {
int a, b;
a = 10; b = 20;
cout << "a,b ->" << a << ", " << b << endl;
cout << "funcion(a,b) ->" << funcion(a, b) << endl;
cout << "a,b ->" << a << ", " << b << endl;
/* cout << "funcion(10,20) ->"
<< funcion(10, 20) << endl; // (1)
es ilegal pasar constantes como parámetros cuando
estos son referencias */
return 0;
}
int funcion(int &n, int &m) {
n = n + 2;
m = m - 5;
return n+m;
} En este caso, los objetos "a" y "b" tendrán valores distintos después de llamar a la función. Cualquier cambio de valor que realicemos en los parámetros dentro de la función, se hará también en los objetos referenciados. Esto quiere decir que no podremos llamar a la función con parámetros constantes, ya que aunque es posible definir referencias a constantes, en este ejemplo, la función tiene como parámetros referencias a objetos variables. NOTA: Un objeto constante no puede tratarse como objeto variable. No todas la funciones pueden llamarse a si mismas, sino que deben estar diseñadas especialmente para que sean recursivas, de otro modo podrían conducir a bucles infinitos, o a que el programa termine inadecuadamente. Cada vez que se llama a una función, se crea un juego de variables locales, de este modo, si la función hace una llamada a si misma, se guardan sus variables y parámetros, usando la pila, y la nueva instancia de la función trabajará con su propia copia de las variables locales. Cuando esta segunda instancia de la función retorna, recupera las variables y los parámetros de la pila y continua la ejecución en el punto en que había sido llamada. Ejemplo:
Crear una función recursiva para calcular el factorial de un número entero.
El factorial se simboliza como n!, se lee como "n factorial", y la definición es:
n! = n * (n-1) * (n-2) * ... * 1 Limitaciones:
No es posible calcular el factorial de números negativos, no está definido.
El factorial de cero es 1.
De modo que una función bien hecha para cálculo de factoriales debería incluir un control para esos casos:
/* Función recursiva para cálculo de factoriales */
int factorial(int n) {
if(n < 0) return 0;
else if(n > 1) return n*factorial(n-1); /* Recursividad */
return 1; /* Condición de terminación, n == 1 */
} La recursividad consume muchos recursos de memoria y tiempo de ejecución, y se debe aplicar a funciones que realmente le saquen partido.
Full transcript