La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Semana 5 Subprogramas..

Presentaciones similares


Presentación del tema: "Semana 5 Subprogramas.."— Transcripción de la presentación:

1 Semana 5 Subprogramas.

2 Subprogramas Un programa puede volverse complejo, esta complejidad puede ser abordada dividiendo el programa en subprogramas más pequeños y más manejables (basada en estrategia romana “divide y conquista”). Conociendo nuestro objetivo, procedemos a dividir nuestro problema en tarea más simples. “Divide et impera” - Divide y Conquista (Julio César)

3 Subprogramas Los subprogramas permiten:
Organizar de mejor manera el código. Reducir la cantidad de código redundante en un programa. Reutilizar código. Dividir problemas grandes en problemas más sencillos. Mejorar la legibilidad del código. Facilitar la portabilidad del código. Sentencias que se ejecutan muchas veces y que no están contenidas en un ciclo, deberían estar definidas como un subprograma.

4 Divide et Impera

5 Tipos de Funciones 1.- Funciones diseñadas para realizar operaciones
con sus argumentos y devolver un valor basado en sus cálculos. 2.- Funciones que manipulan información y devuelven un valor que indica simplemente el éxito o el fallo de esa manipulación. 3.- Funciones que no tienen valor de vuelta explícito, es decir, es de tipo procedimiento y no genera un valor.

6 Ejemplo #include <stdio.h>
int main ( int argc, char * argv [ ] ) { int num1,num2,num3, max; printf ( "ingrese 3 numeros\n“ ); scanf ( "%d %d %d", &num1, &num2, &num3 ); if ( ( num1 >= num2 ) && ( num1 >= num3 ) ) max=num1; else if ( ( num2 >= num1 ) && ( num2 >= num3 ) ) max=num2; max=num3; printf ( "el maximo es %d\n", max ); return ( 0 ); }

7 Ejemplo #include <stdio.h> int max3 ( int n1, int n2, int n3 ) {
if ( ( n1 >= n2 ) && ( n1 >= n3 ) ) return ( n1 ); else if ( ( n2 >= n1 ) && ( n2 >= n3 ) ) return ( n2 ); return ( n3 ); } int main ( ) int num1,num2,num3, max; printf ( "ingrese 3 numeros\n“ ); scanf ( "%d %d %d", &num1, &num2, &num3 ); max = max3 ( num1, num2, num3 ); printf ( "el maximo es %d\n", max ); return ( 0 );

8 En C Existen 2 tipos de subprogramas: Las Funciones y los Procedimientos. Las funciones son un conjuntos de instrucciones que deben devolver un resultado. En cambio un procedimiento sólo realiza un conjunto de instrucciones sin devolver nada. Para C, los procedimientos también los considera como funciones, solo que devuelven un resultado tipo void. Una función es subprograma que representa una abstracción de una expresión compleja. Su utilización es similar a la matemática, recibe 0 o más parámetros, y devuelve un único resultado.

9 Prototipo especifica la interfaz de datos (firma) de una función por:
Prototipos de Función Todas las funciones deben ser declaradas antes de ser usadas. Este requisito se cumple mediante la utilización del prototipo. Prototipo especifica la interfaz de datos (firma) de una función por: Tipo que retorna. El tipo de sus parámetros. El numero de sus parámetros. Ejemplo: int cuadrado ( int i ); int cuadrado ( int );

10 Prototipos Nos permiten programar permitiéndonos un nivel de abstracción de funciones que aun no hemos programado. Elimina la dependencia de funciones que fueron implementadas posterior al lugar (orden) en que se definieron. Además, proveen información para que el compilador pueda detectar problemas en la cantidad de parámetros, y en la incompatibilidad de tipos de datos.

11 Ejemplos con prototipos

12 La forma de declarar funciones es la siguiente.
Formato General La forma de declarar funciones es la siguiente. (Si fuera un prototipo no tendría cuerpo). tipo_dato_r Nombre_funcion(tipo_dato1 parametro1, tipo_dato2 parametro2, ... tipo_dato_n parametro_n) { //cuerpo del subprograma //retornando un resultado de tipo tipo_dato_r }

13 Declaración Nombre_funcion: es el identificar con el cual llamaremos a la función. Parámetros: son el conjunto de valores que se necesitan para hacer el cálculo. Cada parametro tiene su tipo de dato. Tipo_dato_r: es el tipo de dato del resultado que se espera entre la función.

14 Ejemplo Fibonacci

15 Manejo de Variables Ya sabemos que cada variable tiene
asociado su tipo de dato. Pero además debemos tener muy claro que existe otra clasificación: variables globales, variables locales, y parámetros formales. Esta última clasificación restringe a una variable en cuando o no puede ser accesada, y además su volatilidad (tiempo de vida).

16 Manejo de Variables

17 Variables locales vs Globales
Las variables definidas en los subprogramas se clasifican en: Variables Locales: - Está declarada dentro de la función y sólo está disponible durante su ejecución. - Se crean cuando se entra a una función y se destruyen cuando sale. Variables globales: - Se declaran en el programa principal. Pueden ser utilizados por el programa y los subprogramas (funciones). - Existen durante toda la vida del programa.

18 Ámbitos

19 Parámetros Parámetros Formales - Corresponden a la definiciones de los parámetros de una función, deben tener su tipo dato y sus nombres identificadores. Un parámetro formal se comporta como otra variable local dentro de la función. Parámetros Actuales - Estos corresponden a los valores o expresiones con los cuales es llamada la función. El parámetro formal es instanciado con el parámetro actual.

20 Existen dos maneras de pasar parámetros a un subprograma
Paso de parámetros Existen dos maneras de pasar parámetros a un subprograma Paso de parámetros por valor Paso de parámetros por referencia

21 Argumentos de las Funciones
funcion ( param1, param2, param3, param4, ... ); Los argumentos están definidos por los parámetros formales, y utilizados con los parámetros actuales. Es la manera de entregarle la información al subprograma. Se comportan como variables locales. El paso de los parámetros puede ser por valor o por referencia.

22 Paso de parámetros por Valor
Se pasan valores desde el punto de invocación hacia la función. El parámetro formal es una variable local, mientras que el parámetro actual es una expresión que sustituye el correspondiente parámetro formal (sustitución por valor). Una vez finalizada la función se retorna a la siguiente instrucción de la invocación, sin provocar cambios en la variables de ambiente ( a excepción de la modificación directa de variables globales).

23 Paso de parámetros por Referencia
Se permite transferir información desde el punto de invocación hacia la función, y el retorno de resultados desde la función. Los resultados son entregados por medio de variables visibles o accesibles, llamados parámetros formales variables (precedidos por *). Se les llamas variables por referencia, ya que no se crea un nuevo espacio para el parámetro formal, sino que se hace una referencia a la variable actual durante la ejecución del procedimiento. El parámetro formal en este caso es sólo una variable muda.

24 Ejemplo

25 Retorno de una Función Una función retorna a la rutina que lo llamo cuando: Se encuentra la llave que cierra la función O cuando la sentencia de return es ejecutada Puede ser usada con o sin un valor asociado Sin embargo, si la función fue declarada como aquella que retorna un valor de un cierto tipo, entonces debe retornar un valor. Solo funciones declaradas con tipo void pueden usar el return sin valor

26 Determinar las Salidas

27 Ejemplo 2 Desarrollar una función intercambio, que reciba dos números como parámetro y los devuelva intercambiados

28 Solución void intercambio ( int * x, int * y ) { int temp; temp = * x;
* x = * y; * y = temp; printf ( "\n x=%d y=%d temp=%d ", * x, * y, temp ); } main ( ) int a = 1,b = 2; printf ( "a=%d b=%d\n", a, b ); intercambio ( &a, &b ); return ( 0 );

29 Ejemplo Invertir un numero
void invierte(int* n) { int tmp; tmp = * n; * N = 0; while ( tmp > 0 ) * n = ( * n ) * 10 + tmp % 10; tmp /= 10; } int main ( ) int num; scanf ( "%d", &num ); invierte ( &num ); printf ( "invertiendo es %d\n", num ); return ( 0 );

30 Ejercicio determinar salidas

31 Invocación de Funciones
Recordar que las variables globales pueden ser accesadas por cualquier función Si en una función existe una variable local de igual nombre que una global, es la variable local con la que se trabaja. Normalmente del main invocamos a las funciones, pero cualquier función puede invocar a otra función que ya ha sido definida, incluso puede llamarse a si misma (recursividad). void diez_veces ( int v ) { if ( v == 10 ) return; else diez_veces ( v + 1 ); }

32 Función main ( ) Como ya se señaló, es la función principal en un programa. Cuando se utiliza return, el programa devuelve un código de terminación al proceso de llamada (Sistema Operativo). El valor devuelto puede ser 0 que indica terminación normal o cualquier otro valor cuando se produce un error.

33 Argumentos de main ( )

34 Argumentos de main ( )

35 Paso de Arreglos unidimensionales a funciones

36 Paso de Arreglos unidimensionales a funciones

37 Pasando arreglos como parámetros

38 Paso arreglos unidimensionales a funciones
Al llamar una función pasándole un arreglo como parámetro, como se le entrega la dirección del primer elemento, entonces si los valores del arreglo son modificados dentro de la función, también son modificados en la función que llama. Por lo tanto el paso de la arreglos es por referencia.

39 Pasando arreglos para que no sea modificado
Una forma de pasar un arreglo y que no sea modificado, es declararlo como un parámetro constante funcion ( const int x [ 10 ] ) { ... } Si se intenta modificar dentro el la función, resultará un error de compilación

40 Fin Todavía es tiempo …


Descargar ppt "Semana 5 Subprogramas.."

Presentaciones similares


Anuncios Google