martes 28 de abril de 2009

CURSO FUNCIONES EN C. RECURSIVIDAD ( 1º PARTE)

Las funciones en C pueden ser recursivas, en otras palabras, pueden llamarse a si mismas directa o inidrectamente. La recursividad directa es el proceso mediante el que una función se llama a si misma desde el propio cuerpo de la función, mientras que la recursividad indirecta implica más de una función.
Un proceso recursivo tiene que tenr una condicion de finalización, ya que de lo contrario podria continuar infinitamente.
Un ejemplo típico de aplicación de la recursividad es el cálculo del factorial de un número entero.
Autor: Fundamentos de Programación de J.M.Molina y F.Chamorro. Ed. McGrill

jueves 16 de abril de 2009

CURSO FUNCIONES EN C. PASO DE ARGUMENTOS Y PUNTEROS (CUARTA PARTE)

Si a continuación asignamos un valor a la variable dato, éste se almacenaría en la dirección de memoria bffff120. En el caso de puntero, si le asignamos un contenido (la dirección de la variable dato), la dirección en memoria de la variabl e dato se almacenaría en la dirección 0012fed4. Supongamos que realizamos las sigguientes asignaciones:Negrita

dato= 99
puntero = &dato;

Debemos recordar que mediante el operador & obtenemos la dirección de una variable.

Una vez realizada la asignación anterior,disponemos de dos maneras de acceder al contenido de la variable dato. La primera forma de acceder es mediante el nombre de la variable y la segunda mediante el puntero que apunta a dicha variable. Para acceder a la variable dato mediante puntero, se utiliza el operador *.
Una utilidad del paso de argumentos por referencia se relaciona con la devolución de valores desde una función. Como ya sabemos, en C una función solo puede devolver un único valor. Sin embargo, a menudo se hace necesario que una función devuelva más de un valor, y aquí es donde podemos utilizar el paso de argumentos por referencia.
Además, la utilización del paso de argumentos por referencia nos permite ahorrar tiempo y espacio. En el caso que deseáramos pasar algo a una función cuyo tamaño sea grande, por ejemplo una estructura, seria conveniente pasarla por referencia, ya que si lo hacemos por valor, se tiene que realizar una copia de la misma y colocarla en la pila, lo que implica consumo de tiempo y espacio.
A
utor: Fundamentos de programación, de J.M.Molina y F.Chamorro, ed. McGraw-Hill.

jueves 9 de abril de 2009

CURSO FUNCIONES EN C. PASO DE ARGUMENTOS Y PUNTEROS (TERCERA PARTE)

Como se puede observar el valor de i ha cambiado puesto que la función modificar ha utilizado la dirección de memoria de esta variable en la sentencia de asignación * variable = 9. Analicemos detenidamente este ejemplo. Lo primero que tenemos que tener en cuenta es la premisa de que en C todos los argumentos se pasan por valor sigue siendo cierta. Lo que sucede es que en este caso estamos pasando el valor de la dirección de memoria de la variable i y no el valor de su contenido. Para pasar la dirección de memoria de una variable se utiliza el operador &. Al finalizar la función, el valor ded dicha dirección permanece igual y lo que se ha modificado es el contenido de esa dirección de memoria. Dentro de la función se utilizan los punteros para tabajar con las direcciones de memoria (*variable).
Dado que el paso de argumentos por referencia es común en C, conviene que en este punto ampliemos el concepto de puntero.
Consideremos las siguientes declaraciones:

int dato;
int * puntero;

La primera de las declaraciones reserva memoria para almacenar una variable de tipo entero (int) mientras que la segunda declaración reseva memoria para almacenar una dirección. A pesar de que apuna a una variable de tipo entero, lo que se va a almacenar es una dirección. Como en el fundo un puntero puede apuntar a cualquier cosa., C permite la declaración de punteros tipo void. Supongamos que el compilador reserva la dirección en hexadecimal bffff120 para la variable dato y la dirección en hexadecimal 0012fed4 para el puntero.
Autor: Fundamentos de Programación, de J.M.Molina y F.Chamorro ed.McGraw Hill