Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

40
Departamento de Informática Departamento de Informática Universidad Técnica Federico Santa María Universidad Técnica Federico Santa María Semana 5 Semana 5 Subprogramas.

Transcript of Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Page 1: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Departamento de InformáticaDepartamento de InformáticaUniversidad Técnica Federico Santa MaríaUniversidad Técnica Federico Santa María

Semana 5Semana 5

Subprogramas.

Page 2: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-13122

SubprogramasSubprogramas

• 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)

Page 3: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-13133

SubprogramasSubprogramas

• 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.

Page 4: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-13144

Divide et ImperaDivide et Impera

Page 5: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-13155

Tipos de FuncionesTipos 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.

Page 6: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-13166

EjemploEjemplo#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; else

max=num3;

printf ( "el maximo es %d\n", max );

return ( 0 ); }

Page 7: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-13177

EjemploEjemplo#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 ); else

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 ); }

Page 8: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-13188

En CEn 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.

Page 9: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-13199

Prototipos de FunciónPrototipos 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 );

Page 10: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-1311010

PrototiposPrototipos

• 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.

Page 11: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-1311111

Ejemplos con prototiposEjemplos con prototipos

Page 12: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-1311212

Formato GeneralFormato 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

}

Page 13: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-1311313

DeclaraciónDeclaració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.

Page 14: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-1311414

Ejemplo FibonacciEjemplo Fibonacci

Page 15: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-1311515

Manejo de VariablesManejo 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).

Page 16: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-1311616

Manejo de VariablesManejo de Variables

Page 17: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-1311717

Variables locales vs GlobalesVariables 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.

Page 18: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-1311818

ÁmbitosÁmbitos

Page 19: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-1311919

ParámetrosPará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.

Page 20: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-1312020

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

Page 21: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-1312121

Argumentos de las FuncionesArgumentos 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.

Page 22: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-1312222

Paso de parámetros por ValorPaso 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).

Page 23: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-1312323

Paso de parámetros por ReferenciaPaso 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.

Page 24: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-1312424

EjemploEjemplo

Page 25: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-1312525

Retorno de una FunciónRetorno 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

Page 26: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-1312626

Determinar las SalidasDeterminar las Salidas

Page 27: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-1312727

Ejemplo 2Ejemplo 2

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

Page 28: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-1312828

SoluciónSolució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 ); printf ( "a=%d b=%d\n", a, b ); return ( 0 ); }

Page 29: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-1312929

Ejemplo Invertir un numeroEjemplo 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 ); }

Page 30: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-1313030

Ejercicio determinar salidasEjercicio determinar salidas

Page 31: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-1313131

Invocación de FuncionesInvocació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 ); }

Page 32: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-1313232

Función main ( )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.

Page 33: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-1313333

Argumentos de main ( )Argumentos de main ( )

Page 34: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-1313434

Argumentos de main ( )Argumentos de main ( )

Page 35: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-1313535

Paso de Arreglos unidimensionales a Paso de Arreglos unidimensionales a funcionesfunciones

Page 36: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-1313636

Paso de Arreglos unidimensionales a Paso de Arreglos unidimensionales a funciones funciones

Page 37: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-1313737

Pasando arreglos como parámetrosPasando arreglos como parámetros

Page 38: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-1313838

Paso arreglos unidimensionales a Paso arreglos unidimensionales a funcionesfunciones

• 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.

Page 39: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Programación de Computadores IWI-131Programación de Computadores IWI-1313939

Pasando arreglos para que no sea Pasando arreglos para que no sea modificadomodificado

• 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

Page 40: Departamento de Informática Universidad Técnica Federico Santa María Semana 5 Subprogramas.

Departamento de InformáticaDepartamento de InformáticaUniversidad Técnica Federico Santa MaríaUniversidad Técnica Federico Santa María

FinFin

Todavía es tiempo …