La Esencia de la Lógica de
Programación
27
Capítulo 3
Variables, Constantes y Operadores
Variable
Informalmente algo variable es algo que puede cambiar de un
momento a otro. Técnicamente una variable es un
campo de memoria al que se le puede cambiar su contenido cuantas veces sea
necesario. Primera aclaración, un campo de
memoria es un pedacito de la memoria principal del computador en donde podemos guardar un
dato. Segunda aclaración, a pesar de que en la memoria
es donde se guarda la información exactamente ésta se almacena en
variables. Esto le ha de representar a usted que es a través de
variables como se puede
utilizar la memoria del
computador.
Ha notado usted que la maleta de una guitarra es diferente a la maleta de un violín o de una trompeta? Sabe entonces
qué es lo que diferencia la maleta de un
instrumento musical de la maleta de otro instrumento musical..? Pues precisamente la única diferencia es su contenido es decir
el instrumento en sí. Y esto qué tiene que ver con el tema
que estamos tratando..? Pues muy sencillo, la diferencia entre una variable y
otra radica precisamente en su contenido o mas bien en
el tipo de su contenido.
Para poder utilizar variables en el desarrollo de un
programa de computador se debe primerodecir qué tipo de dato van a
almacenar pues las variables son como
unas cajitas de diferentes tamaños y por tal motivo se deben declarar
previamente para que el computador las dimensione de acuerdo a las necesidades.
Cuales son los tipos de datos que pueden ser almacenados en una
variable? A pesar del
avance de la tecnología, los tipos de datos de las variables pueden ser :
28
Tipo Entero
Un dato de tipo entero es un número que no tiene punto decimal, por lo
tanto en sus operaciones jamas va a generar decimales. Por ejemplo 25, -96 y 0. El hecho de que los datos de tipo
entero no generen decimales significa que operan con un
juego de reglas llamado Aritmética Entera. Una variable que se declare
de tipo entero podra almacenar solamente datos de tipo entero.
Tipo Real
Un dato de tipo real es un número que tiene
punto decimal, por lo tanto en sus operaciones puede generar decimales. Por ejemplo 12.3, -78.56 o 45.0. El hecho de que los datos
de tipo real generen decimales significa que operan con un
juego de reglas llamado Aritmética Real. Una variable que se declare de
tipo real podra almacenar solamente datos de tipo real.
Por lo dicho en las anteriores dos definiciones qué
tipo de dato sería 5. (así con el
puntoy todo). Pensaríamos que es un entero pero
en realidad no. La definición de dato entero es que no tiene punto
decimal y la de dato Real es que tiene punto decimal, por lo tanto 5. es un dato real.
Tipo Caracter
Un dato tipo caracter es un equivalente del Código ASCII ( American Standard Code for Interchange Information ).
Qué es el código ASCII..? Es el Código
Internacional de equivalencias Internas en el Sistema Binario. A nivel
mundial, los computadores estan construidos en un
sistema numérico llamado sistema binario, sistema que se basa solamente
en la utilización de unos (1s) y ceros (0s). Este
sistema tiene una relación directa con el sistema decimal y por lo tanto
fue adoptado ya que permitía aprovechar características
físicas de los componentes electrónicos. Dada la gran
importancia que poco a poco fueron adquiriendo los computadores, se
adoptó un solo código interno para la
interpretación de todas y cada una de las teclas (de su teclado,
obviamente).
De esta forma cuando usted presiona en su teclado la letra A realmente se
genera por dentro de su computador el número 65 pero expresado en
código binario, es decir 0100 0001, y cuando usted presiona la tecla 1
se genera internamente el número 49 pero expresado igualmente en
código binario, es decir 0011 0001. Cada unade las teclas que usted
presione tendra un equivalente interno y por
supuesto expresado (internamente) en sistema binario. Cada cero o cada uno
utilizado en este sistema se conoce como
bit (abreviatura de binary digit) y un conjunto de 8 bits (medida en la cual se
expresa el código ASCII) se conoce como
un byte (pronúnciese bait).
Como el
código ASCII esta expresado en bytes y cada byte tiene 8 bits y
cada bit puede tener un 0 8 ó un 1 ( o sea dos
estados ) entonces se puede concluir que el código completo consta de 2
combinaciones (o sea 256 equivalencias). A
continuación relaciono la tabla completa de equivalencias ASCII.
29
CODIGO ASCII
Tabla de Equivalencias Binarias
Equivalencia en Sistema Decimal Equivalencia en Sistema Binario Equivalencia en
Sistema Decimal Equivalencia en Sistema Binario
Caracter que usted digita
Caracter que usted digita
0
48
0011 0000
G
71
0100 0111
1
49
0011 0001
H
72
0100 1000
2
50
0011 0010
I
73
0100 1001
3
51
0011 0011
J
74
0100 1010
4
52
0011 0100
a
97
0110 0001
5
53
0011 0101
b
98
0110 0010
6
54
0011 0110
c
99
0110 0011
7
550011 0111
d
100
0110 0100
8
56
0011 1000
e
101
0110 0101
9
57
0011 1001
f
102
0110 0110
A
65
0100 0001
g
103
0110 0111
B
66
0100 0010
h
104
0110 1000
C
67
0100 0011
i
105
0110 1001
D
68
0100 0100
j
106
0110 1010
30
Como puede usted notar estas son apenas algunas de las 256 equivalencias que
tiene la tabla ASCII. Es obvio pensar que también tienen equivalencia
los caracteres especiales como la coma, el punto o el
paréntesis.
Cuando se tiene un conjunto de caracteres se dice
técnicamente que se tiene una cadena por lo tanto el nombre del autor
“OMAR” es una cadena. El contenido de una cadena no es evaluado por
el computador y se acostumbra acotarlo o encerrarlo entre comillas dobles,
así la cadena – 7 es igual a
8” a pesar de no ser lógica ni correcta matematicamente es
valida para el computador ya que él en ningún momento
evalúa las cadenas.
Cómo se llevan los datos a las variables. .? o sea Cómo se “cargan” las variables..?
Pues a través de un signo muy conocido por
usted y es el signo =. Este signo tiene, en el caso de los algoritmos
computacionales y programas, una connotación un
poco diferente a laque se le da en matematicas. El signo igual (=)
significa que el computador va a realizar lo que
esta a la derecha del igual y lo va a
almacenar en la variable que se encuentre a la izquierda del igual. De manera que ya usted puede ver
claramente en esta definición que a la izquierda del igual solo puede haber una variable y al
lado derecho del
igual puede haber una constante, una variable ó una expresión.
De manera que cualquiera de los siguientes esquemas son validos
a=8
Le indica al computador que guarde la constante 8 en la variable a
b=a
Le indica al computador que guarde en la variable b el contenido de la variable
a que en la instrucción había sido “cargada” con 8,
por lo tanto en la variable b queda el valor de 8 al igual que en la variable a
c=a+b
Le indica al computador que guarde en la variable c el resultado de sumar el
contenido de la variable a con el contenido de la variable b. Como la variable
a tenía el contenido 8 y la variable b también tenía el
contenido 8 entonces el computador sumara 8+8 y ese 16 de resultado lo
almacenara en la variable c
Puede notarse en este ejemplo que en la variable a se ha almacenado una
constante, en la variable b se ha almacenado el contenido de otra variable y en
la variable c se ha almacenado el resultado deuna expresión. Y
qué pasara si luego de tener estas tres instrucciones adicionamos
la siguiente
b=9
Pues, muy sencillo, el anterior contenido de la variable b que era 8 va a ser
reemplazado por el nuevo contenido de la variable b que es 9. Ello significa
que cada que se asigna un nuevo valor (proveniente de
una constante, una variable o como
resultado de una expresión) el valor anterior de la misma variable se
pierde.
Así si se quisieran escribir los contenidos de las variables a, b y c el
computador nos reportaría para a el contenido
8, para b el contenido 9 y para c el contenido 16.
Todo lo que debe tener en cuenta con la asignación o carga de las
variables es lo siguiente
31
a. b. c. d.
Al lado izquierdo del igual solo puede haber una variable Al lado derecho del
igual puede haber una constante, una variable o una expresión El
computador siempre resuelve lo de la derecha del igual y su resultado lo
almacena en la variable que esté a la izquierda del igual Cada vez que
se le entra un nuevo valor a una variable, el valor anterior se pierde
De acuerdo a lo dicho vamos a resolver el siguiente conjunto de instrucciones:
Entero: A, B, C
Declara de tipo entero las variables A, B yC de manera que solo podran
almacenar datos enteros Almacena la constante 10 en la variable A Almacena la
constante 15 en la variable B Almacena la constante 20 en la variable 20
Almacena en la variable A el resultado de sumar el contenido de A mas el
contenido de B o sea 10+15 que es igual a 25 Almacena en la variable B el resultado
de sumar el contenido de B con la constante 8 o sea 15+8 que es igual a 23
Almacena en la variable C el resultado de sumar el contenido de la variable C
mas el contenido de la variable A o sea 20+25 que es igual a 45.
Recuérdese que en esta línea se utiliza el último valor de
almacenado en la variable A Almacena en la variable C el resultado de sumar el
contenido de la variable A mas la constante 5 es decir 25+5 que es igual a 30
Almacena en la variable B el resultado de sumar el contenido de la variable B
mas la constante 3 o sea 23+3 que es igual a 26 Almacena en la variable C el
resultado de sumar el contenido de la variable C mas la constante 2 o sea 45+2
que es igual a 47 Almacena en la variable A el resultado de restarle al
contenido de la variable A el contenido de la variable B o sea 30-26 que es
igual a4 Almacena en la variable B el resultado de restarle al contenido de la
variable A el contenido de la variable B o sea 4-26 que es igual a -22A = 10 B
= 15 C = 20 A=A+B
B=B+8
C=C+A
A=A+5
B=B+3
C=C+2
A=A–B
B=A–B
32
C=A–B
Almacena en la variable C el resultado de restarle al contenido de la variable
A el contenido de la variable B o sea 4 (-22) que por propiedades algebraicas
es igual a 4+22 o sea 26
Los resultados finales en las tres variables son
Variable A Variable B Variable C
4 -22 26
No olvide que para el manejo de variables cada nuevo valor que se le asigne a
una variable borra el valor anterior. Nótese que en este
conjunto de instrucciones las tres últimas son iguales en su forma pero
no en sus resultados. Para hacerlo mas breve, el seguimiento de este conjunto
de instrucciones podríamos detallarlo de la siguiente forma
VARIABLES
Entero: A, B, C A = 10 B = 15 C = 20 A=A+B B=B+8 C=C+A A=A+5 B=B+3 C=C+2
A=A–B B=A–B C=A–B
A 10 10 10 25 25 25 30 30 30 4 4 4
B
C
15 15 15 23 23 23 26 26 26 -22 -22 20 20 20 45 45 45 47 47 47 26
Era evidente que teníamos que llegar al mismo resultado. Esto que
acabamos de hacer es precisamente la PRUEBA DE ESCRITORIO de este
conjunto de instrucciones.
33
También puede notarse que cada nuevovalor asignado a cada variable
reemplaza el valor anterior de la misma variable por esa razón por cada
nuevo resultado (en una determinada variable) se va
tachando el resultado anterior para indicar que ése ya no es
valido.
Ejercicios
1. a = 10 b = 20 c=5 a=a+3 b=b+4 –a c=a+b+c a=a+c b=4 c=c+3 -b+2
Qué valores quedan almacenados en las variables a, b y c ?
2. a=5 b = 18 c = 15 d = 25 a = a + 10 b=b+5–c
c=c+4+b d=d+b+a a=a+1 b=b+c c=b+c d=b+b Qué valores quedan almacenados
en las variables a, b, c y d ?
3. a=9 b=6 a=a+4 b=b+2 a = a + 10 b = b – 25 a =
a – 20 b=b+5 a=a+4 b=b+2 a = a + 10 b = b – 10 Qué valores
quedan almacenados en las variables a y b ?
a = 18 b = 18 c = 18 d = 18 a=a+b b=a-b c=a+b d=a-b a=a-b b=a+b c=a
-b d=a+b Qué valores quedan almacenados en las variables a, b, c y d ?
5. a = 10 b=5 a=a-5 b=b+6 a = a + 18 b = b – 23
a = a – 21 b=b-5 a=a-4 b=b-2 a = a + 10 b = b + 10 Qué valores
quedan almacenados en las variables a y b ?
6. a=8 b=7 c=5 d=8 a=a+b–c+d b=a+b–c+d c=a+b–c+d
d=a+b–c+d a=a+b–c+d b=a+b–c+d c=a+b–c+d d=a+b–c+d
Qué valores quedan almacenados en las variables a, b c y d ?
35
Operadores
Los operadores sonsignos que nos permiten expresar relaciones entre variables
y/o constantes, relaciones de las cuales normalmente se desprende un resultado. Ya hemos manejado dos
operadores que son el de la suma (+) y el de la resta (-) pero no son los
únicos. En un algoritmo computacional
también se pueden utilizar los siguientes operadores
^ * /
Para expresar la potenciación Para expresar la multiplicación Para expresar la división
Debo anotar que la notación para potenciación que vamos a
utilizar en este libro no es standard para todos los lenguajes de
programación y en algunos casos el mismo signo tiene otro significado.
Por tal motivo sugiero que cuando vaya a utilizar este
operador en un programa determinado donde necesite realizar operaciones de
potenciación consulte primero el manual del Lenguaje en el cual
esté trabajando. Por lo menos lo vamos a utilizar en el desarrollo de este libro.
Algo que debemos tener en cuenta cuando vamos a
escribir una expresión es que el computador solo entiende las
expresiones en formato linealizado esto quiere decir escritas en una sola
línea. De tal manera que si queremos escribir
la ecuación
var
=
a + b c + d
No se la podemos entregar al computador tal y cual como esta aquí escrita sino que
debemos “transformarla” de manera quequede escrita en una sola
línea. Supondríamos en primera instancia que su equivalente (en
una sola línea) sería
var = a + b / c + d
Sin embargo aunque a primera vista pareciera ser la misma ecuación, esta
expresión podría tener varias interpretaciones. Le pregunto y a usted amigo lector, la ecuación computacional
var = a + b / c + d
a cual de las siguientes ecuaciones reales correspondería..?
var =
a +b c+ d
var = a +
b +d c
36
a+b var = +d c
var = a +
b c+d
Gran pregunta pues es muy obvio que cada una de estas ecuaciones va a dar un
resultado diferente. Para solucionar esta gran
inquietud todos los computadores tienen implementada una jerarquía de
operadores que no es mas que un conjunto de reglas que
le permiten a un computador evaluar de una y solo una forma una
expresión matematica para que no haya espacio para
ambigüedades.
Lo primero que el computador evalúa y realiza son las potencias
revisandolas de derecha a izquierda. Lo segundo
que el computador evalúa y realiza son las multiplicaciones y divisiones
y lo último que revisa son las sumas y restas. Tanto para el nivel de
multiplicaciones y divisiones como para el nivel de sumas y
restas la evaluación es totalmente indistinta estoquiere decir que en la
medida que va encontrando sumas y restas (si esta en este nivel) las va ejecutando.
Veamos entonces el ejemplo inicial
var = a + b / c + d
Sera interpretado por el computador de la siguiente manera. Primero
evalúa en esta expresión si existen potencias como no las hay
para al siguiente nivel y vuelve a recorrer la expresión evaluando si
existen (indistintamente y no necesariamente en ese orden) multiplicaciones y
divisiones y encuentra que existe una división de manera que lo primero
que realiza es la división de b/c, luego vuelva a recorrer la expresión
buscando (en el tercer nivel) sumas y restas (indistintamente y no
necesariamente en ese orden) y encuentra la suma de a mas lo que ya
había calculado y luego realiza la suma de este último resultado
mas d.
Qué es lo que se persigue con esta jerarquía de operadores?
Pues sencillamente que cuando el computador vaya a resolver una
expresión, en donde por supuesto participen operadores
aritméticos, siempre tenga listos los valores que va
a operar. De esta forma la evaluación de la expresión en
mención se hace en los siguientes pasos
37
var = a + b / c + d
I II
III
Por lo tanto, escribir la expresión así
var= a + b / c + d
SOLAMENTE equivale a la expresión
b var=a + +d c
Y si queremos alterar esa jerarquía porque la expresión que
queríamos escribir no era esta qué hacemos? Para eso se hicieron los
paréntesisprecisamente para alterar esta jerarquía.
El hecho de que los computadores se basen es esta
jerarquía de operadores para realizar sus operaciones es lo único
que garantiza que para una determinada expresión el resultado en
cualquier computador sea el mismo. Cuando se utilizan paréntesis,
el computador detecta el primer paréntesis mas
interno y dentro de él aplica la tabla de jerarquía de operadores.
Cómo sabe el computador que se encuentra dentro de un
“paréntesis mas interno El
computador considera un juego de paréntesis como “ as
interno” cuando dentro de él no existe ningún otro juego de
m paréntesis.
Haciendo uso de la facilidad de los paréntesis podemos entonces expresar
computacionalmente las siguientes fórmulas así:
var =
a + b c + d
var = a +
b +d c
VAR = (a + b ) / ( c + d )
VAR = a + b / c + d
var = a +
b c+d
var=
a+b +d c
VAR = a + b / ( c + d )
VAR = ( a + b ) / c + d
38
Puede usted, amigo lector, suponer el papel tan importante que hacen
aquí losparéntesis, precisamente porque cuando a través de
ellos se altera la jerarquía de operadores es cuando se llega a las
fórmulas que queremos que el computador realice. Igualmente ha de saber
que un paréntesis mal colocado finalmente hace
que los resultados que calcule el computador sean diferentes a los esperados.
Veamos el siguiente ejemplo :
VAR = ( a + b / c – d ) / ( a + b / ( c ^ d+ d / ( a – b / c * d )
) )
Recuerde el computador busca los paréntesis mas internos, sobre ellos
aplica la tabla de jerarquía de operadores (primero potencias, segundo
multiplicaciones y divisiones y tercero sumas y restas). Luego el orden de resolución
de esta ecuación, suponiendo que son variables que tienen ya unos
valores asignados, es el siguiente:
VAR = ( a + b / c – d ) / ( a + b / ( c ^ d+ d / ( a – b / c * d )
) ) I II III VIII IX X XI XII VI VII IV V
El objetivo fundamental de mantener esta jerarquía es que cuando el
computador vaya a realizar una operación entre dos operandos, siempre va
a tener definidos los operandos. Veamoslo paso a paso y vamos
reemplazando por cada uno de los resultados que va encontrando el computador
señalando cada resultado por el número ordinal del paso
Primero se ubica en el primer paréntesis mas interno y dentro de
él aplica la jerarquía de operacionesVAR = ( a + b / c – d
) / ( a + b / ( c ^ d+ d / ( a – b / c * d ) ) ) VAR = ( a + I – d
) / ( a + b / ( c ^ d+ d / ( a – b / c * d ) ) ) VAR = ( VAR = ( II III
– d ) / ( a + b / ( c ^ d+ d / ( a – b / c * d ) ) ) ) / ( a + b /
( c ^ d+ d / ( a – b / c * d ) ) )
39
Luego se ubica en el siguiente paréntesis mas interno. Recuerde que un
paréntesis es “mas interno” si no tiene mas
paréntesis adentro
VAR = ( VAR = ( VAR = (
III III III
) / ( a + b / ( c ^ d+ d / ( a – ) / ( a + b / ( c ^ d+ d / ( a – )
/ ( a + b / ( c ^ d+ d / (
IV * d ) ) ) V VI ))) )))
Sigue buscando y resolviendo los paréntesis que vayan quedando aplicando
en cada uno la tabla de jerarquía de operadores
VAR = ( VAR = ( VAR = (
III III III
) / ( a + b / ( c ^ d+ d / ) / ( a + b / ( VII + d / ) / ( a + b / ( VII + VIII
VI VI
)) )) ))
VAR = (
III
)/(a+b/(
IX
))
En la medida en que se van resolviendo completamente los paréntesis,
estos van desapareciendo y la expresión se va simplificando
VAR = ( VAR = ( VAR = (
III III III
)/(a+b/ )/(a+ )/( XI X
IX
) ) )
Finalmente la expresión queda reducida a resolver
VAR = VAR = XII
III
/
XI
Bueno y si quisiéramos saberesta fórmula linealizada a que
fórmula algebraica correspondería no es sino seguir los mismos
pasos que siguió el computador para resolverla y llegaremos a la
siguiente fórmula
VAR = ( a + b / c – d ) / ( a + b / ( c ^ d+ d / ( a – b / c * d )
) )
40
Equivale algebraicamente a
var =
a + a + c
d
b − d c b d + b a − * d c
Ejercicios
Todos los siguientes ejercicios deberan desarrollarse utilizando las
reglas de la aritmética entera.
a = 10 b = 20 c = 10 a = a + 15 b = b + 12 c=a*c Qué valores quedan en
las variables a, b y c ?
a=3 b=8 c=1 a=5 b=9 c=7 a=a+1 b=b+2 c=c+3 Qué valores quedan en las
variables a, b y c ?
a = 10 b=5 c = 10 a=a+b -5 b=a+b -5 c=a+b-5 a=a+5*b/2 b=a+5*b/2 c=a+5*b/2
Qué valores quedan en las variables a, b y c ?
a=5 b=5 c=5 a=a+a b=b+b c = c +c a=a+b+c b=a+b+c c=a+b+c Qué valores
quedan en las variables a, b y c ?
a = 10 b = 10 c = 10 a=a+5 b=a+3 c=a+2 a=b+4 b=b+5 c=c+8 Qué valores
quedan en las variables a, b y c ?
a = 10 b=1 c=4 a=a+c b=a+c c=a+c a=c+5 b=c+b c=a+b+c Qué valores quedan
en las variables a, b y c ?
a=1 b=1 c=1 a=a+a b=b+a c=c+a a=a+ab=b+a c=c+a Qué valores quedan en las
variables a, b y c ?
a = 10 b = 50
42
c = 30 a=a–b b=b–c c=c–a a=a–1 b=b–a c=c+a
–b Qué valores quedan en las variables a, b y c ?
a=1 b=2 c=3 a=a+b b=a–b c=a*b a=a–b b=a+b c=a*b Qué valores
quedan en las variables a, b y c ?
10. a = 1 b=2 c=3 a=a+2 b=a+2+b c=a+2+c a=a/2 b=b/2
c=c/2 Qué valores quedan en las variables a, b y c ?
“Linealizar” las siguientes expresiones (no se
olvide que linealizar significa escribir una expresión algebraica en una
sola línea). En cada uno de los siguientes
ejercicios escribir el orden en que el computador realizaría las
operaciones.
11
x =
a a b
+ +
b c c
12.
x =
a + b + c
a b
43
13.
x
=
a a
a + a −
b b
14.
a + x =
b a + b + b c
a +
b c + a
15.
x
=
a
+ a
b +
+ b c
c
16.
a + b + x =
c d * a c a + b * d
17.
x =
a
+
b c a
+
d
44
18.
x
=
a b a b
+ −
b c b c
19.
x
=
a
+
a
+ a
a + c + a + b
b d
20.
x = a + b +
c d
+
a b − c a b + c