variables
Diferencias
Muestra las diferencias entre dos versiones de la página.
Próxima revisión | Revisión previa | ||
variables [2012/07/29 13:01] – creado lmateu | variables [2014/08/06 16:20] (actual) – lmateu | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
- | ===== Variables ===== | + | ====== Variables |
Supongamos que se declara la variable x como se muestra en la figura de abajo a la izquierda. | Supongamos que se declara la variable x como se muestra en la figura de abajo a la izquierda. | ||
Línea 9: | Línea 9: | ||
Por último la // | Por último la // | ||
- | ==== Ejercicio | + | === Ejercicio === |
Haga un diagrama equivalente al anterior pero para la declaración: | Haga un diagrama equivalente al anterior pero para la declaración: | ||
Línea 17: | Línea 17: | ||
</ | </ | ||
- | ==== Tiempo de vida y alcance de una variable ==== | + | ===== Tiempo de vida y alcance de una variable |
- | Una variable tiene un tiempo de vida. La variable nace, es decir se crea cuando se le asigna un espacio en memoria. | + | Una variable tiene un //tiempo de vida//. La variable nace, es decir se crea cuando se le asigna un espacio en memoria. |
- | El alcance de una variable es el o los trozos de código en donde su identificador es conocido. | + | El //alcance de una variable// es el o los trozos de código en donde su identificador es conocido. |
- | ==== Variables globales ==== | + | ===== Variables globales |
Son todas las variables que se declaran fuera de una función. | Son todas las variables que se declaran fuera de una función. | ||
Línea 36: | Línea 36: | ||
</ | </ | ||
- | Una variable global se crea al momento de lanzar el programa (es decir cuando se crea el proceso) y solo se destruye cuando el programa termina (el proceso termina). | + | Una variable global se crea al momento de lanzar el programa (es decir cuando se crea el proceso) y solo se destruye cuando el programa termina (el proceso termina). |
- | ==== variables automáticas ==== | + | El alcance de una variable global comprende desde el punto del código en donde se declara hasta el final del archivo. |
+ | |||
+ | ===== variables automáticas | ||
La //variables automáticas// | La //variables automáticas// | ||
Línea 44: | Línea 46: | ||
< | < | ||
double fact(int n) { | double fact(int n) { | ||
- | | + | |
while (n> | while (n> | ||
p*= n; | p*= n; | ||
Línea 55: | Línea 57: | ||
El parámetro n de la función fact y la variable local p son variables automáticas. | El parámetro n de la función fact y la variable local p son variables automáticas. | ||
- | Existen casos más sutiles como por ejemplo: | + | Existen casos más sutiles |
< | < | ||
Línea 76: | Línea 78: | ||
Al comienzo de una secuencia de instrucciones delimitadas por { }, se pueden declarar nuevas variables automáticas, | Al comienzo de una secuencia de instrucciones delimitadas por { }, se pueden declarar nuevas variables automáticas, | ||
+ | | ||
Observe que variables declaradas al inicio de la función como x y sum tienen una sola reencarnación por cada invocación de sum_difs. | Observe que variables declaradas al inicio de la función como x y sum tienen una sola reencarnación por cada invocación de sum_difs. | ||
+ | |||
+ | ==== Inicialización ==== | ||
+ | |||
+ | Es importante destacar que si la declaración de una variable automática no incluye un valor inicial, éste queda indeterminado y //¡rara vez resulta ser 0!// Acceder al valor de una variable automática no inicializada es un error de programación en el 99.9% de los casos. | ||
+ | |||
+ | === Ejercicio: uso incorrecto de variables === | ||
+ | |||
+ | Estudie el siguiente programa y descubra qué es lo que hace supuestamente. | ||
+ | |||
+ | < | ||
+ | int sum_difs(double x[], int n) { | ||
+ | int max= 0; | ||
+ | int i; | ||
+ | for (i= 0; i<n; i++) { | ||
+ | int v; | ||
+ | if (i != 0 && | ||
+ | max= x[i]-v; | ||
+ | v= x[i]; | ||
+ | } | ||
+ | return max; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | El problema con este programa es que se usa la variable v sin haberle dado un valor inicial. | ||
+ | |||
+ | ===== Variables y funciones recursivas ===== | ||
Un caso más complicado se produce al considerar la versión recursiva de fact: | Un caso más complicado se produce al considerar la versión recursiva de fact: | ||
Línea 83: | Línea 111: | ||
< | < | ||
double fact(int n) { | double fact(int n) { | ||
- | | + | |
- | if (fact>1) { | + | if (n>1) { |
res= n*fact(n-1); | res= n*fact(n-1); | ||
+ | } | ||
return res; | return res; | ||
} | } | ||
Línea 92: | Línea 121: | ||
Si se invoca fact(6) se invocará recursivamente fact(5), fact(4), fact(3), fact(2) y fact(1). | Si se invoca fact(6) se invocará recursivamente fact(5), fact(4), fact(3), fact(2) y fact(1). | ||
- | ==== Variables dinámicas ==== | + | ===== Variables dinámicas |
- | La última categoría de variables corresponde a las variables dinámicas. | + | La última categoría de variables corresponde a las variables dinámicas. |
variables.1343566919.txt.gz · Última modificación: 2012/07/29 13:01 por lmateu