Programacion en C
viernes, 21 de noviembre de 2014
jueves, 20 de noviembre de 2014
Estructura de datos
Una pila (stack en inglés) es una estructura de datos de
tipo LIFO (del inglés Last In First Out,último en entrar, primero en salir) que
permite almacenar y recuperar datos. Se aplica en multitud deocasiones en
informática debido a su simplicidad y ordenación implícita en la propia
estructura.Representación gráfica de una pilaPara el manejo de los datos se
cuenta con dos operaciones básicas: apilar (push), que coloca unobjeto en la
pila, y su operación inversa, retirar (o desapilar, pop), que retira el último
elemento apilado.En cada momento sólo se tiene acceso a la parte superior de la
pila, es decir, al último objeto apliado(denominado TOS, top of stack en
inglés). La operación retirar permite la obtención de este elemento,que es
retirado de la pila permitiendo el acceso al siguiente (apilado con
anterioridad), que pasa a ser elnuevo TOS.Por analogía con objetos cotidianos,
una operación apilar equivaldría a colocar un plato sobreuna pila de platos, y
una operación retirar a retirarlo.Las pilas suelen emplearse en los siguientes
contextos:Evaluación de expresiones en notación postfija (notación polaca
inversa).Reconocedores sintácticos de lenguajes independientes del
contextoImplementación de recursividad.EjemploForma principal.
Recursividad
La recursividad es una técnica de programación importante. Se utiliza para realizar una llamada a una función desde la misma función. Como ejemplo útil se puede presentar el cálculo de números factoriales. Él factorial de 0 es, por definición, 1. Los factoriales de números mayores se calculan mediante la multiplicación de 1 * 2 * ..., incrementando el número de 1 en 1 hasta llegar al número para el que se está calculando el factorial.
Leer más: http://www.monografias.com/trabajos14/recursividad/recursividad.shtml#ixzz3JeXBDVzI
If (n < = 1)
return (n);
lofib = 0 ;
hifib = 1 ;
for (i = 2; i < = n; i ++)
{
x = lofib ;
lofib = hifib ;
hifib = x + lofib ;
} /* fin del for*/
return (hifib) ;
Leer más: http://www.monografias.com/trabajos14/recursividad/recursividad.shtml#ixzz3JeXBDVzI
Parámetros por valor y por referencia
Parámetros por referencia a funciones
En C todos los parámetros se pasan por
valor. Esto tiene en principio dos inconvenientes:
• No
se pueden modificar variables pasadas como argumentos
• Si
se pasa como parámetro una estructura, se realiza un duplicado de ella, con lo
que se pierde tiempo y memoria
Sin embargo, se puede pasar un puntero
como argumento a una función. El puntero no se puede alterar, pero sí el valor
al que apunta:
void incrementa_variable (int* var)
{
(*var)++;
}
main()
{
int x = 1;
incrementa_variable (&x); /*
x pasa a valer 2 */
}
En el ejemplo anterior, habia que poner
paréntesis en (*var)++ porque el operador ++ tiene más precedencia que la
desreferencia (el asterisco). Entonces *var++ sería como escribir*(var++), que
no sería lo que queremos.
En el pasaje por referencia se pasa a la
función las direcciones de memoria de las variables en cuestión en lugar de su
valor. A diferencia del paso por valor, aquí no se realizan copias de las
variables sino que se trabaja sobre la dirección de memoria que pasamos, lo que
nos permite modificar el valor de la variable en cuestión.
Veamos esto con el mismo ejemplo que usamos antes, pero usando punteros:
Veamos esto con el mismo ejemplo que usamos antes, pero usando punteros:
Luego hacemos el llamado a la función de la misma manera, pero pasando las direcciones de memoria de x e y:
Obteniendo lo siguiente al compilar el programa y ejecutarlo:
Donde vemos que esta vez sí se modificó el contenido de las variables en cuestión.
Suscribirse a:
Comentarios (Atom)







