Download - 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.
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)
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.
Programación de Computadores IWI-131Programación de Computadores IWI-13144
Divide et ImperaDivide et Impera
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.
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 ); }
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 ); }
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.
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 );
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.
Programación de Computadores IWI-131Programación de Computadores IWI-1311111
Ejemplos con prototiposEjemplos con prototipos
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
}
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.
Programación de Computadores IWI-131Programación de Computadores IWI-1311414
Ejemplo FibonacciEjemplo Fibonacci
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).
Programación de Computadores IWI-131Programación de Computadores IWI-1311616
Manejo de VariablesManejo de Variables
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.
Programación de Computadores IWI-131Programación de Computadores IWI-1311818
ÁmbitosÁmbitos
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.
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
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.
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).
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.
Programación de Computadores IWI-131Programación de Computadores IWI-1312424
EjemploEjemplo
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
Programación de Computadores IWI-131Programación de Computadores IWI-1312626
Determinar las SalidasDeterminar las Salidas
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
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 ); }
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 ); }
Programación de Computadores IWI-131Programación de Computadores IWI-1313030
Ejercicio determinar salidasEjercicio determinar salidas
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 ); }
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.
Programación de Computadores IWI-131Programación de Computadores IWI-1313333
Argumentos de main ( )Argumentos de main ( )
Programación de Computadores IWI-131Programación de Computadores IWI-1313434
Argumentos de main ( )Argumentos de main ( )
Programación de Computadores IWI-131Programación de Computadores IWI-1313535
Paso de Arreglos unidimensionales a Paso de Arreglos unidimensionales a funcionesfunciones
Programación de Computadores IWI-131Programación de Computadores IWI-1313636
Paso de Arreglos unidimensionales a Paso de Arreglos unidimensionales a funciones funciones
Programación de Computadores IWI-131Programación de Computadores IWI-1313737
Pasando arreglos como parámetrosPasando arreglos como parámetros
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.
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
Departamento de InformáticaDepartamento de InformáticaUniversidad Técnica Federico Santa MaríaUniversidad Técnica Federico Santa María
FinFin
Todavía es tiempo …