CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.

Slides:



Advertisements
Presentaciones similares
Laboratorio Lenguaje de Programación ING2101
Advertisements

DATSI, FI, UPM José M. Peña Programación en C DATSI, FI, UPM José M. Peña Programación en C.
PROGRAMACIÓN EN C.
Programación de Computadores
Funciones y recursividad
MANUAL EXPRESS DE C J.M.sevilla.
Repaso para la construcción del intérprete 2012
Fundamentos de la Programación Estructurada
Procedimientos y Funciones
Programación I Teoría III
Direcciones, Arreglos y Argumentos de Funciones
Funciones. Programación, Algoritmos y Estructuras de Datos.
Desarrollo de Aplicaciones para Internet
Punteros Universidad Nacional Mayor de San Marcos
FUNCIONES EN C.
INFORMATICA I Arreglos 1 CLASE 17.
Programación en C (Segunda Parte) DATSI, FI, UPM José M. Peña
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
Programación Estructurada
Algoritmo y Estructura de Datos I
Unidad 3 Punteros.
Curso Práctica 3 1 Funciones CONTENIDO Consideraciones sobre funciones Estructura de un programa en C Uso de funciones Paso de parámetros Punteros.
17/09/2014Catedra de Programacion I1 Programación I Funciones.
¿Qué es un PUNTERO?: Un puntero es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. No.
La estructura básica de los programas en java, algo a tener en cuenta y que debemos recordar siempre es el archivo debe llevar el nombre de la clase con.
Funciones “En C” Semestre de Otoño 2006 Claudio Gutiérrez-Soto.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
2 Acciones y funciones 2.1 Concepto
Funciones en lenguaje C
FUNCIONES EN C.
El lenguaje de programación C - 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.
Tema 6: Clases Antonio J. Sierra.
Semana 5 Subprogramas..
FUNCIONES EN C. SOBRE FUNCIONES... Caja negra in_1 in_N out_1 In_2 Función: Nombre. (Con el cual es invocada). Entradas. (Parámetros de la función). Salida.
Introducción a los punteros
FUNCIONES EN C.
Prog. Univ. Rodríguez Rey, Pablo Funciones Programación I.

Capítulo 1 “Elementos de Programación”
Descomposición Modular. Funciones
Administración de Proyectos de desarrollo de Software Ciclo de vida de un proyecto Enfoque moderno Temas Componentes Directivas Declaraciones globales.
Material de apoyo Unidad 4 Estructura de datos
Archivos Programación I MC Beatriz Beltrán Martínez.
Elementos básicos del lenguaje
Estructuras de Control.
FUNCIONES Conceptos básicos. Retorno de una función Clases de funciones. Paso de parámetros. Funciones y arrays.
Informática Ingeniería en Electrónica y Automática Industrial
Punteros.
Recursividad (2 clases) 1. Nivelación Funciones Menú Vectores String
Elementos básicos del lenguaje
PUNTEROS Y REFERENCIAS
Conceptos Avanzados de Programación
FUNDAMENTOS DE PROGRAMACIÓN
ELEMENTOS DE COMPUTACIÓN Profesor: Guillermo Figueroa
CARACTERÍSTICAS Es un lenguaje de programación estructurado de propósito general. Está estrechamente asociado al sistema operativo UNIX, ya que el propio.
INTRODUCCION A LA PROGRAMACION
ALGORITMOS Y ESTRUCTURAS DE DATOS Operaciones sobre cadenas de caracteres y Funciones LIA. Suei Chong Sol.

LENGUAJE “C” Programación.
Capítulo 2 “Subprogramas/Funciones - Arreglos”
Algoritmo.
Corporación Universitaria del Caribe CECAR Fundamentos de programación II.
 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.
MEMORIA DINÁMICA.
La programación modular es un paradigma de programación que consiste en dividir un programa en módulos o subprogramas con el fin de hacerlo más legible.
3.6 Manejo de E/S Estructuras En la creación de soluciones para algunos problemas surge la necesidad de agrupar datos de diferente tipo o de manejar datos.
Transcripción de la presentación:

CI2125 TEORIA semana 8 Subprogramas o funciones Definición de funciones. Declaración de la función (prototipo). Argumentos de la función, pase por valor Función sin argumentos Función con argumentos, pasa el valor Funciones que retornan un valor, con argumentos Ámbito de las variables: globales, locales. Función main, y sus argumentos argc, argv

FUNCIONES: Motivación Para resolver problemas complejos y/o de gran tamaño se debe utilizar el concepto de Reducción de Problemas. El problema se descompone en subproblemas, los cuales a su vez se descomponen en otros subproblemas, ... Hasta que el problema original queda reducido a actividades básicas. La solución de estas tareas básicas, permite, aplicando razonamiento hacia atrás, la solución del problema final En C, la solución de un problema se expresa por medio de un programa, la solución de un subproblema, por medio de una función.

FUNCIONES en lenguaje C Un programa en C esta constituido por un programa principal ( main ) y un conjunto de funciones. El programa principal consta de pocas líneas, las cuales son generalmente llamadas a funciones. La llamada a una función indica al procesador que debe continuar con el procesamiento de la función, una vez que esta concluye, el control regresa al punto en donde fue llamada en el programa principal. C permite que una función pueda llamar a otras funciones. Permite el concepto de “Recursividad”, una función que se llama a si misma.

Definición / Declaracion de Funciones /* programa.c calculo del area … */ #include <stdio.h> /* Declaración de la función, prototipo */ float calculo_area( float b, float h); void main() { … area= calculo_area(base,altura); } /* Definicion de la funcion */ float calculo_area( float b, float h) return b*h; Comentarios Archivos cabeceras Declaración función Puede estar en archivo.h Cuerpo main Definición función Puede estar en otro archivo.c

Definición de Funciones Una función se define usando el siguiente prototipo: tipo nombre_función( tipo1 arg1, tipo2 arg2,…, tipon argn) { /* declaracion de variables locales a la funcion */ /* cuerpo de la función */ return valor_mismo_tipo; } Las funciones se comunican con el cuerpo principal, o con otras funciones a través de parámetros/argumentos, por Valor, por Referencia o por medio de variables globales (menos usadas) El prototipo de la función debe declararse antes del cuerpo principal. tipo nombre_función( tipo1 arg1, tipo2 arg2,…, tipon argn);

Definición de Funciones nombre_funcion: no se pueden usar mas que letras, números y el símbolo '_'. el nombre de la función debe empezar por una letra. El nombre de la función se usa para llamarla dentro del programa. tipo: Cuando una función se ejecuta y termina debe devolver un valor. Este valor puede ser cualquiera de los tipos de variables que hemos visto o un tipo de dato definido por nosotros. El valor que devuelve la función suele ser el resultado de las operaciones que se realizan en la función, o si han tenido éxito o no. También podemos usar el tipo void cuando no se devuelve ningún valor. Definición de variables: Dentro de la función podemos definir variables que sólo tendrán validez dentro de la propia función. Cuerpo de la función: Aquí es donde va el código de la función. return: La sentencia return se usa para devolver un valor en el nombre de la función del mismo tipo declarado arriba. El dato que se pone después de return es el dato que se devuelve. Puede ser una constante o una variable. argi: argumentos: Estos son variables que se pasan como datos a una función. Deben ir separados por una coma. Cada variable debe ir con su tipo de variable.

Argumentos de la función, pase por valor Función sin argumentos: #include <stdio.h> void hola_mundo( void ); /* lleva punto y coma aquí */ void main() { hola_mundo(); /* Llamamos a la función */ } void hola_mundo( void ) /* No se debe poner punto y coma aquí */ printf(“\n”); printf( “Hola Mundo\n" ); return; /* No hace falta devolver ningún valor, ni siquiera poner return */

Argumentos de la función, pase por valor Función con argumentos, pasa el valor: #include <stdio.h> void compara( int a, int b ); int main() { int num1, num2; num1 = 2, num3=5; compara( num1, num2 ); /* Llamamos a la función con sus dos arg’s */ } void compara( int a, int b ) /* argumentos a y b a la función */ if ( a>b ) printf( "%i es mayor que %i\n" , a, b ); else printf( "%i es mayor o igual que %i\n", b, a );

Argumentos de la función, pase por valor Funciones que retornan un valor, con argumentos #include <stdio.h> int compara( int a, int b ); /* prototipo, retorna un valor entero */ int main() { int num1=2, num2=5, resultado; resultado = compara( num1, num2 ); /* guarda el valor que devuelve la función en resultado */ printf( "El mayor de los dos es %i\n", resultado ); } int compara( int a, int b ) /* argumentos a y b a la función */ int mayor; /* Esta función define su propia variable*/ if ( a>b ) mayor = a; else mayor = b; return mayor;

Argumentos de la función, pase por valor Función Inútil !!, argumentos solo pasan su valor !! Una función en C no puede alterar las variables pasadas como argumentos. #include <stdio.h> void incrementa ( int variable ); main() { int x = 33; incrementa (x); /* x no resulta afectada, sigue valiendo 33 */ printf ( "la variable x vale ahora %d\n", x ); } /* función inútil */ void incrementa ( int variable ) variable ++; Variable local x x 33 Variable local variable variable 33 variable 34

Ámbitos de variables: Globales - Locales Según el lugar donde son declaradas puede haber dos tipos de variables. Globales: Las variables permanecen activas durante todo el programa. Se crean al iniciarse éste y se destruyen de la memoria al finalizar. Pueden ser utilizadas en cualquier función. Locales: Las variables son creadas cuando el programa llega a la función en la que están definidas. Al finalizar la función desaparecen de la memoria. Si dos variables, una global y una local, tienen el mismo nombre, la local prevalecerá sobre la global dentro de la función en que ha sido declarada. Dos variables locales pueden tener el mismo nombre siempre que estén declaradas en funciones diferentes.

Ámbitos de variables: Globales - Locales #include <stdio.h> int variable; void incrementa ( void ); main() { int x = 33; variable = x; incrementa (); /* x no resulta afectada, sigue valiendo 33 */ printf ( "la variable vale ahora %d\n", variable ); } /* función void, que cambia variable Global*/ void incrementa ( void ) variable ++; Variable GLOBAL variable variable Variable local x x 33 Variable GLOBAL variable variable 33 Variable GLOBAL variable variable 34

Ámbitos de variables: Globales - Locales #include <stdio.h> int variable; void incrementa ( void ); main() { int x = 33; variable = x; incrementa (); /* x no resulta afectada, sigue valiendo 33 */ printf ( "la variable vale ahora %d\n", variable ); } /* función void, que cambia variable Global*/ void incrementa ( void ) { int variable; /* variable local */ variable ++; Variable GLOBAL variable variable Variable local x x 33 Variable GLOBAL variable variable 33 Variable LOCAL variable variable Valor ?

PASAJE DE ARGUMENTOS POR VALOR Cuando se pasa una variable a una función (paso por valor) no se puede cambiar el valor de esa variable en la función Realizar una función que recibe dos argumentos y retornar como resultado los valores invertidos de las dos variables. void permuta(int x, int y) { int temp; temp = x; x = y; y = temp; } El efecto de esta función no es el deseado, ya que las variables son pasadas por valor Variables locales x, y, temp temp Valor x x Valor y y Valor temp

PASAJE DE ARGUMENTOS POR VALOR Uso de la función permuta en main … Las variables var1 y var2 no cambian a pesar de que permuta las usa, solo pasa el valor de las mismas, y no su referencia o dirección #include <stdio.h> void permuta(int x, int y) void main() { int var1=1, var2=2; printf(“ valor de var1= %d y var2= %d, var1, var2); permuta( var1, var2); }

PASAJE DE ARGUMENTOS POR REFERENCIA El nombre del arreglo es un apuntador constante a la dirección de memoria del primer elemento del arreglo arreglo arreglo[0] arreglo[1] . . . arreglo[N]

PASAJE DE ARGUMENTOS POR REFERENCIA Volvamos a ver el ejemplo de permutar dos variables en una función, usando un arreglo para almacenar los valores de las variables a permutar, y como pase por referencia ANTES #include <stdio.h> void PermutaArray( int x[] ); void main() { int arreglo[] = { 1, 2 }; printf(“Antes: arreglo={%d,%d}\n”, arreglo[0], arreglo[1] ); PermutaArray( arreglo[]); printf(“Despues: arreglo={%d,%d}\n”, arreglo[0], arreglo[1] ); } arreglo 1 2 DESPUES arreglo 2 1

PASAJE DE ARGUMENTOS POR REFERENCIA Volvamos a ver el ejemplo de permutar dos variables en una función, usando un arreglo para almacenar los valores de las variables a permutar, pase por referencia void PermutaArray( int x[] ) { int aux; aux = x[0]; x[0] = x[1]; x[1] = aux; } x 1 2

FUNCIONES RECURSIVAS Una función recursiva es una función que se llama a si misma. Esto es un concepto complejo. Aquí veremos solo algunos ejemplos sencillos. El problema que trata de resolver una función recursiva, se descompone en el caso mas simple, o Caso Base., en cuyo caso retorna un valor. Para los casos complejos, se divide el problema en una parte que la función sabe resolver y en otra parte parecida a si misma, por lo que realiza una llamada a si misma, pero con un valor menos complejo, hasta llegar al caso base. Llegado a este punto, la función retorna un valor a la copia anterior de la función, y así sucesivamente, esta otra retorna otro valor a la anterior llamada, hasta llegar a la primera llamada que retorna un valor donde fue llamada inicialmente (main).

FUNCIONES RECURSIVAS Ejemplo: Factorial de un numero n >=0, n! n! = n . ( n-1)!, donde 0!= 1 y 1!=1 son el caso base En forma iterativa: factorial = 1; for (i= numero; i >=1; i-- ) factorial = factorial * i; En forma Recursiva: llamando a la función factorial( numero ) double factorial ( int numero ) { if ( numero < = 1 ) return 1; else return ( numero * factorial( numero-1) ) ; }

FUNCIONES RECURSIVAS Veamos que pasa con cada llamada recursiva: 5! 5 * 4! 4 * 3! 3 * 2! 2 * 1! 1 Veamos que pasa con cada llamada recursiva: 120 5 * 24 4 * 6 3 * 2 2 * 1 1 Cuando llega a Caso Base, empieza el retorno de valores en cada llamadas de la función Secuencia de llamadas recursivas

Función “main” La función main también acepta argumentos. Y retorna valor int o void Sin embargo sólo se le pueden pasar dos argumentos. int main( int argc, char *argv[] ) argc (argument count). Es de tipo int e indica el número de argumentos que se le han pasado al programa. argv (argument values) Es un array de strings. En el se almacenan los parámetros. Normalmente, el primer elemento (argv[0]) es el nombre del programa con su ruta. El segundo (argv[1]) es el primer parámetro, el tercero (argv[2]) el segundo parámetro y así hasta el final.

Función “main” #include <stdio.h> int main( int argc, char *argv[]) { int i; for( i=0 ; i<argc ; i++ ) printf( "Argumento %d: %s\n", i, argv[i] ); return 1; } Si salvamos este programa con el nombre “argumentos” y ejecutamos como: c:\programas> argumentos hola amigos La salida será: Argumento 0: c:\programas\argumentos.exe Argumento 1: hola Argumento 2: amigos