1 Funciones Agustín J. González Versión Original de Kip Irvine ELO329.

Slides:



Advertisements
Presentaciones similares
Métodos y parámetros.
Advertisements

Elementos básicos del Lenguaje
MANEJO DE EXCEPCIONES EN C++
FUNCIONES EN C.
EXCEPCIÓN DE ERRORES.
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
Unidad 3 Punteros.
Recursión Se dice que un método es recursivo si forma parte de sí mismo o se define en función de sí mismo. La recursión es un medio particularmente poderoso.
2 Acciones y funciones 2.1 Concepto
Funciones en lenguaje C
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.
FUNCIONES Y PROCEDIMIENTOS
Métodos Algoritmos y Desarrollo de Programas I. Cuando utilizar métodos  Los métodos se utilizan para romper un problema en pedazos de forma que este.
1 Procedimientos Es un conjunto de sentencias incluidas entre las declaraciones Sub o Function y End Sub/Function VB utiliza varios tipos de procedimientos:
TRAMPAS EN EL DISEÑO DE LENGUAJES CON RELACIÓN A LOS NOMBRES - REGLAS DE ALCANCE - COMPILACIÓN POR SEPARADO CONTROL DE FLUJO - EVALUACIÓN DE EXPRESIONES.
Tercera Clase Patricio A. Navarrete Septiembre 10 de 2011.
Manejo de Excepciones Agustín J. González ELO329.
Semana 5 Subprogramas..
Variables y Shapes. Variables ► Lugares de la memoria que reciben un nombre ► En VB no es necesario declarar las variables  A=8 ► Se declaran con Dim.
Programación con Assertions
ELO3201 Vectores (Vector) Agustín J. González ELO320.
Programación I Universidad Nacional de Luján
Sesión 5 Sentencias de Selección y repetición Prof:Eridan Otto Programación de Computadores Lenguaje Pascal.
Administración de Proyectos de desarrollo de Software Ciclo de vida de un proyecto Enfoque moderno Temas Componentes Directivas Declaraciones globales.
Programación Básica con NQC Patricio A. Castillo Pizarro 25/08/2007.
Material de apoyo Unidad 4 Estructura de datos
1 Asignación Dinámica de Memoria Agustín J. González Versión original de Kip Irvine ELO 329.
Módulo 8: Manejo de Errores y Excepciones
Manejo de Punteros y objetos en memoria dinámica en C++
Elementos básicos del lenguaje
Ada 2º Parte (variables, ámbitos , subrutinas , tipos abstractos de datos y excepciones)
Unidad II Introducción a la programación en C++
FUNCIONES Conceptos básicos. Retorno de una función Clases de funciones. Paso de parámetros. Funciones y arrays.
1 Manejo de Excepciones y otros Agustín J. González ELO-329.
Elementos básicos del lenguaje
Funciones Definidas por el Programador
ELO3291 Manejo de Excepciones Lectura sugerida de texto en linea: Eckel, Bruce. Thinking About C++, 2nd Edition, Prentice-Hall, Gratis en
1 Definición y Conversión de datos Agustín J. González ELO-329.
Clases y Objetos en Java ELO329: Diseño y Programación Orientados a Objetos.
1 Polimorfismo y Funciones Virtuales Agustín J. González Versión original de Kip Irvine ELO329.
1 Miembros Estáticos (Static) de Clases y Funciones Amigas (Friend) Agustín J. González Versión Original de Kip Irvine ELO329.
1 Algunas ideas básicas de C++ Agustín J. González ELO-329.
INTRODUCCIÓN AL LENGUAJE C++
Patricio A. Castillo José M. Galarce Agosto 23 de 2008 Segunda Clase.
1 Asignación Dinámica de Memoria Agustín J. González ELO 329.
Programación Básica con NQC Patricio A. Castillo 12/04/2008.
UNIDAD 7.
 Un lenguaje se puede definir como un conjunto de palabras y formas de expresión por medio de las cuales se comunican y relacionan miembros de una comunidad.
ELO3291 Manejo de Excepciones Agustín J. González ELO329.
1 Funciones en C++: Nota: Este material es de estudio personal, en clases sólo revisaremos las láminas con. Usted revise todo. Agustín J. González ELO329.
 Las funciones son un conjunto de instrucciones que realizan una tarea específica. En general toman unos valores de entrada, llamados parámetros y proporcionan.
Paso de Parámetros a una Función Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de.
Funciones Copyright © 2005 Unidad 1. Copyright © 2005 Objetivos del Aprendizaje Explicar la naturaleza y usos de las funciones. Describir algunas funciones.
1 Definición y Conversión de datos Agustín J. González ELO-329.
Desarrollador Profesional de Juegos Programación III Unidad I Capturar Excepciones.
Desarrollador Profesional de Juegos Programación III Unidad I Excepciones Tipos.
Décimo Curso de Programación Básica con NQC “Segunda Clase” Cristián Arenas Ulloa Agosto 29 de 2009.
Algunas Características de C++ no presentes en C Agustín J. González ELO-329.
Programación en Visual Basic
Helpers en ASP.NET MVC3. Introducción Los helpers son una herramienta muy potente para generar nuestro propio código HTML dentro de las vistas. Los helpers.
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
Helpers en ASP.NET MVC3. Introducción Los helpers son una herramienta muy potente para generar nuestro propio código HTML dentro de las vistas. Los helpers.
Manejo de Excepciones Agustín J. González ELO329 ELO329.
Algunas Características de C++ no presentes en C
Algunas Características de C++ no presentes en C
Algunas Características de C++ no presentes en C
Algunas Características de C++ no presentes en C
Manejo de Excepciones Agustín J. González ELO329 ELO329.
Algunas Características de C++ no presentes en C
Transcripción de la presentación:

1 Funciones Agustín J. González Versión Original de Kip Irvine ELO329

2 Parámetros Un parámetro actual (o valor, argumento) es el valor pasado a la función desde el código invocador. Un parámetro formal (o variable) es la variable declarada en la lista de parámetros de la función que recibe los valores. Parámetros de entrada reciben los valores pasados a la función. Parámetros de salida retornan valores desde la función al código invocador.

3 Función Valor Futuro double future_value( double p ) { double b = 1000 * pow(1 + p / (12 * 100), 12 * 10); return b; } Esta función calcula el valor futuro de una inversión de 1000 sobre 10 años y calculado mensualmente. No es muy flexible, pero se conserva como una sola tarea. Parámetro formal

4 Función Valor Futuro cout << "Please enter the interest rate " " in percent:"; double rate; cin >> rate; double balance = future_value(rate); cout << "After 10 years, the balance is " << balance << "\n"; La siguiente secuencia llama a future_value(): Valor retornado parámetro actual

5 Haciendo al Función más Flexible double future_value(double initial_balance, double p, int nyear) { double b = initial_balance * pow(1 + p / (12 * 100), 12 * nyear); return b; } Esta versión de future_value() es más flexible porque el balance inicial y el número de años son pasados como parámetros actuales.

6 Uso de Comentarios Esta versión de future_value tiene comentarios según se espera sus tareas de programación: double future_value(double initial_balance, double p, int nyear) // Propósito: calcula el valor de la inversión // usando interés compuesto // Recibe: // initial_balance - El valor inicial de la // inversión. // p - la tasa de interés en porcentaje // nyear - el número de años que la // inversión será mantenida // Retorna: el balance despues de nyear años // Observaciones: el interés es actualizado // mensuamnete

7 Retorno cuando encontramos un Error Use la sentencia return para terminar inmediatamente. En el ejemplo, errores de rango son manejados retornando un valor por defecto: double future_value(double initial_balance, double p, int nyear) { if( nyear < 0 ) return 0; // error if( p < 0 ) return 0; // error double b = initial_balance * pow(1 + p / (12 * 100), 12 * nyear); return b; }

8 Funciones Booleanas (1) bool IsValidYear( int year ) { if(( year > 1600 ) and ( year < 2100 )) return true; else return false; } Funciones que retornan un valor booleano son apropiadas para validación de datos. Se recomienda centralizar sólo una tarea por función: Alternativamente: bool IsValidYear( int year ) { return(( year > 1600 ) and ( year < 2100 )); }

9 Funciones Booleanas (2) if( IsValidYear( birthYear ) and IsLeapYear( birthYear )) { cout << "You were born in a Leap Year\n"; } Las funciones booleanas pueden retornar sus valores dentro de expresiones booleanas, conduciendo así a código más fácil de entender:

10 Prototipo de Funciones double future_value(double initial_balance, double p, int nyear); // function prototype Una declaración de función (or prototipo) es requerida cuando un llamado a función no ha sido precedida por una definición de función. El prototipo indica información de llamado que es esencial para el compilador. Alternativamente: double future_value(double, double, int); // function prototype

11 Efecto Lateral (o secundario) Un efecto lateral ocurre cuando una función produce algún efecto adicional al valor retornado. Por ejemplo, se podría desplegar información o modificar una variable global. double future_value(double initial_balance, double p, int nyear) { if( nyear < 0 ) { cout << "Error: invalid number of years\n"; return 0; } double b = initial_balance * pow(1 + p / (12 * 100), 12 * nyear); return b; }

12 Procedimientos void DisplayReport( double initial_balance, double p, int nyear) { cout << "An investment of " << initial_balance << " will be worth " (etc.) Un procedimiento (o función void) siempre produce un efecto lateral porque no retorna valores.

13 Paso por Referencia (1) void swap( int & x, int & y ) // Exchange the values of two variables. { int temp = x; x = y; y = temp; } Pasar un parámetro por referencia significa que el nombre del parámetro formal queda definido en la misma localización de memoria del parámetro actual. Así la función puede modificar la variable (parámetro actual). Por ejemplo::

14 Paso por Referencia (2) void GetUserName( string & lastName, string & firstName ) { cout << "Last name: "; cin >> lastName; cout << "First name: "; cin >> firstName; } Una función que recibe entradas del usuario normalmente usa parámetros por referencia porque la función no puede retornar más de un valor.

15 Paso por Referencia (3) string firstName; string lastName; GetUserName( lastName, firstName ); // now the values are changed... En el código que invoca la función, las variables pasadas a la función son actualizadas:

16 Parámetros de Entrada y Salida Parámetros de Entrada contienen datos que han sido pasados a la función desde el código llamador. Parámetros de Salida contienen datos que son fijados dentro de la función y retornados al código llamador. Parámetros de Entrada/Salida reciben datos desde el código llamador, modifica los datos, y retorna los datos al código llamador.

17 Parámetros de Entrada double CalcPay( double hours, double payRate ) { return hours * payRate; } CalcPay() usa parámetros de entrada, hours y payRate:

18 Parámetros de Salida void GetUserName( string & lastName, string & firstName ) { cout << "Last name: "; cin >> lastName; cout << "First name: "; cin >> firstName; } GetUserName(), visto antes, usa dos parámetros de salida:

19 Parámetros de Entrada/Salida void swap( int & x, int & y ) { int temp = x; x = y; y = temp; } La función swap() usa dos parámetros de entrada y salida:

20 Paso por Referencia Constante void ShowName( const string & firstName, const string & lastName ) { cout << firstName << " " << lastName; firstName = "George"; // error } Cuando pasamos un objeto por referencia, se recomienda usar paso por referencia constante. El compilador impide a la función llamada modificar su valor.

21 No pases Objetos por Valor void ShowName( string firstName, string lastName ) { cout << firstName << " " << lastName; } El paso de objetos por valor desperdicia memoria y tiempo de procesamiento al crear un duplicado del objeto en el stack.

22 Alcance de Variables (1) if( X > Y ) { // begin block int sum = X + Y; } // end block cout << sum; // error: not visible Una variable declarada dentro de un bloque es sólo visible desde el punto donde está declarada hasta el término del bloque.

23 Alcance de Variables (2) int Evaluate( int n ) { int j = 99; if( n > 5 ) { int j = 20; } return j; } No enmascarar variables de alcance mayor dentro con otra que posee alcance interior. Si esta función recibe como entrada 10, qué retornará?

24 Variables Globales double g_initial_balance, g_principal; int g_nyear; double future_value() { return (g_initial_balance * pow(1 + g_principal / (12 * 100), 12 * g_nyear)); } Una variable global es declarada fuera de cualquier función. Evitar esto cuando sea posible. Nunca usarlas como una forma de evitar paso de parámetros a funciones.

25 Uso de Precondiciones (1) La macro assert() puede ser llamada cuando se desee garantizar absolutamente que se satisface alguna condición. Chequeo de rango es común: double future_value(double initial_balance, double p, int nyear) { assert( nyear >= 0 ); assert( p >= 0 ); double b = initial_balance * pow(1 + p / (12 * 100), 12 * nyear); return b; }

26 Uso de Precondiciones (2) Si la expresión pasada a la macro assert() es falsa, el programa se detiene inmediatamente con un mensaje de diagnóstico del tipo: Assertion failure in file mysub.cpp, line 201: nyear >= 0 Con assert el programa no tiene la posibilidad de recuperarse del error. Para eliminar el efecto de assert se debe compilar el programa con la definición de NDEBUG para el procesador. #define NDEBUG

27 Uso de Precondiciones (3) Una mejor forma para manejar errores es usar el mecanismo de manejo de excepciones de C++. En este caso el programa tiene la posibilidad de recuperarse e intentar nuevamente: double future_value(double initial_balance, double p, int nyear) { if( nyear >= 0 ) throw RangeException( "nyear", 0 ); // etc.

28 Recursión (1) void ChaseMyTail() { //... ChaseMyTail(); } Recursión ocurre cuando una función ya sea (a) se llama así misma, o (b) llama a otra función que eventualmente termina por llamar a la función original. Aquí, una función se llama así misma, creando lo que parece una recursión infinita:

29 Recursión (2) void One() { Two(); } void Two() { Three(); } Recursión Indirecta ocurre cuando una serie de llamados a función conduce a una función previa en la serie, creando un efecto de bucle. Esto parece trabajar pero su correcto funcionamiento puede ser un problema. void Three() { Four(); } void Four() { One(); }

30 Recursión (3) long Factorial( int n ) { if( n == 0 ) return 1; else { long result = n * factorial( n - 1 ); return result; } Recursión tiene que ser controlada proveyendo una condición de término que permite detener la recursión cuando el caso básico es alcanzado. Condición de térmico

31 Función Factorial Recursiva 5! = 5 * 4! and 4! = 4 * 3! and 3! = 3 * 2! and 2! = 2 * 1! and 1! = 1 * 0! and 0! = 1 (por definición) Pensemos n! Como el producto de n por (n-1)!. Esto siempre es verdadero mientras n>0.

32 Fin