IDENTIFICADORES


Una de las innovaciones que se introdujeron con la aparición de los primeros lenguajes de programación de alto nivel fue la implementación de los denominados "identificadores".

La memoria del computador está compuesta por una serie de celdas que sirven para almacenar información. Cada una de estas celdas se identifican por un número al que se denomina "dirección de memoria". Cada vez que en un programa se tuviera que guardar un dato, se deberá indicar en qué dirección de memoria se va a colocar. Si luego queremos a utilizar ese dato para realizar alguna operación, debemos recordar en qué posición de memoria se colocó para porder extraerlo y autilizarlo. Si por otro lado, en ese programa se quisiera ejecutar una porción de código ubicado en alguna parte de la memoria, tendríamos que hacerlo indicando la dirección de memoria donde se ubica. Como puede apreciar, elaborar un programa, en esas condiciones, sería una tarea muy complicada.

Afortunadamente los lenguajes de programación de alto nivel proporcionan una herramienta que permite que esta tarea sea mucho más simple, esta herramienta se denomina "Identificador".

Un identificador es un nombre, que define el programador, que sirve para denotar ciertos elementos de un programa. Estos elementos pueden ser las denominadas variables, constantes y funciones (elementos que se tratarán más adelante). Cuando se ejecuta el programa, el sistema relaciona estos nombres con alguna dirección de memoria. De este modo, a la hora de programar, ya no se requiere recordar posiciones de memoria sino los nombres dados a estas posiciones de memoria.

Reglas de Formación

La definición de un identificador debe hacerse siguiendo unas reglas que las da el lenguaje de programación, en el caso del C/C++ las reglas son las siguientes:

- Solo se pueden emplear las letras mayúsculas y minúsculas del alfabeto inglés, esto es: A, B, C,..., X, Y, Z, y a, b, c,..., x, y, z.

- También se pueden emplear dígitos los decimales: 0, 2, 3, 4,..., 9. Sin embargo un identificador NO puede empezar con un dígito.

- Otro símbolo que se permite utilizar es el _ (signo de subrayar).

- NO se pueden emplear letras o símbolos como: ñ, +, &, á, etc.

- Se debe empezar obligatoriamente con una letra o con el signo de subrayar.

- El lenguaje, para efectos de un identificador, considera diferentes las mayúsculas de las minúsculas.


Ejemplo de identificadores válidos son: actual,   x425,    No_hay_datos,   areaDelTriangulo,    _80486,   dX_,   etc.

Ejemplo de identificadores inválidos son: año,   425x,    No  hay  datos,   α-β,    Tecla↵,   Tres-Cuatro,   etc.

Al haber diferencias entre mayúsculas y minúsculas, todos estos identificadores serán considerados diferentes: actual, Actual, ACTUAL, AcTuAl.



TIPOS DE DATOS


El lenguaje C++ de define un conjunto de tipos de datos, de los cuales presentamos a continuación algunos de ellos:

TIPO

TAMAÑO EN BITS

RANGO o PRECISIÓN

     char

8

    -128 a 127 (Se emplea para representar números pequeños con signo y caracteres de tabla ASCII)

     unsigned char

8

    0 a 255 (Se emplea para representar números pequeños sin signo y caracters de la tabla ASCII extendida)

     short / short int

16

    -32,768 a 32,767
     unsigned short

16

    0 a 65,535
     int

32

    2,147'483,648 a 2,147'483,647
     unsigned int

32

    0 a 4,294'967,295
     long

32

    -2,147'483,648 a 2,147'483,647(Este tipo de dato quedó en desuso cuando los tipos int pasóa tener 32 bits)
     unsigned long long

32

    0 a 4,294'967,295(Este tipo de dato quedó en desuso cuando los tipos int pasóa tener 32 bits)
     long long

64

    -9'223,372'036,854'775,808 a 9'223,372'036,854'775,807(Este tipo de dato quedó en desuso cuando los tipos int pasóa tener 32 bits)
     unsigned long

32

    0 a 18'446,744'073,709'551,616(Este tipo de dato quedó en desuso cuando los tipos int pasóa tener 32 bits)
     float

32

    3.4 x 10-38 a 3.4 x 1038 (11 dígitos signif.)
     double

64

    1.7 x 10-305 a 1.7 x 10308 (15 dígitos signif.)

     long double

80

    3.4 x 10-4932 a 1.1 x 104932 (19 dígitos signif)

     bool

8

    false / true



EXPRESIONES

Una expresión es un conjunto de valores constantes, variables, constantes y funciones unidas por un operador, se agrupan con la finalidad de obtener un resultado.

A continuación definimos estos términos:


VALORES CONSTANTES

Los valores constantes están referidos a la forma cómo podemos escribir un valor según el tipode dato al que queremos referirnos. A continuación se muestra estas formas:

Un tipo int se dene escribir como : 357, 1243, 38, etc.

Un tipo unsigned int se debe escribir como: 40000u, 278u, etc.

Un tipo long como: 378874l ó 387874L

Un tipo unsigned long como: 249845ul

Valores de tipo float como: 18.74 , 3.94e-3, 1.6523E85, etc.

Un tipo long double como: 3874.32L

Un valor octal como: 0473, 0478L (octal long)

Un valor hexadecimal como: 0x4AB, 0x4ABL (hexad. long)

Un valor de tipo char como: 97 ó 'a' (ambos valores son lo mismo, el caracter a va entre apóstrofos)

También también se pueden representar los caracters así:

'\a' carácter de alarma (bell)

'\b' retroceso (back space)

'\f' avance de hoja (form feed)

'\n' nueva línea (line feed)

'\r' retroceso de carro (carriage return)

'\t' tabulador horizontal

'\v' tabulador vertical

'\\' diagonal invertido (back slash)

'\?' signo de interrogación

'\'' apóstrofe

'\"' comillas

'\013' carácter 11 (13 en base octal)

'\007' carácter 7 (7 en base octal)

'\x4B' carácter 75 (4B en base hexadecimal)

'\x0A' carácter 10 (A en base hexadecimal)



VARIABLES Y CONSTANTES

VARIABLES:

Una variable es un identificador relacionado a una posición de memoria donde se puedena colocar datos. Al definirse como una variable, el contenido de esa posición de memoria podr´ cambiar o ser mofdificado a lo largo del programa.

Una variable se define colocando el tipo de dato seguido por los identificadores que desee utilizar. Ejemplos de definición de variablers se muestran a continuación:

int actual, cont;
char n, rango;
double raiz, valor;

Las variables no se inicializan, por lo que si se desea que éstas tengan un valor definido desde su declaración, se deberá realizar lo que a continuación se indica:

int actual=0, cont=24;
char p = 57, n = 'a', rango = '\x18';
double raiz = 2.21, valor = 217.56;

Se recomienda que los identificadores que definan variables deberían empezar siempre con una minúscula.

CONSTANTES:

Una constante es básicamente lo mismo que una variable, con la única diferencia que la constante debe ser inicializada en su definición y este valor no se podrá modificar a lo largo del programa. Se definen de la siguiente manera:

const double Pi=3.1415926;
const int R = 33;
const char L = 'A';


CONSTANTES SIMBÓLICAS:

Los "Nombres simbólicos" o "Constantes simbólicas" son elementos dentro del lenguaje C/C++ quer no pueden considerarse dentro de la misma categoría que las variables o constantes propiamente dichas. Una constante simbólica es un de texto va a ser buscado y reemplazado por otro en el texto del programa, antes de iniciarse el proceso de compilación. Este proceso se denomina pre-compilación. Una constante simbólica se define mediante la cláusula #define de la siguiente manera:

#define TEXTO_A_BUSCAR texto_de_reemplazo.

Se recomienda que los identificadores que definan constantes simbólicas deberían estar escritos en su totalidad con una mayúsculas.

El "TEXTO_A_BUSCAR" debe estar formado por una sola palabra, mientras que el "texto_de_reemplazo" puede estar formado por varias palabras, pero todo debe estar en una sola línea.

Las constantes simbólicas deben ser colocadas al inicio del texto del programa.

Ejemplos:

Grabar este ejemplo

#include <cstdio>

#define NUMDATOS  50
#define TEXTO   "Hola Amigos"

int main (void) {
     int n = NUMDATOS;
     ...
     printf(TEXTO);
     ...
}

Grabar este
ejemplo

# include <cstdio>

#define ENTERO 	int
#define REAL 	float
#define PROGRAMA main
#define INICIO 	{
#define FIN 	}
#define IMPRIMIR printf

int PROGRAMA (void) INICIO
    ENTERO n=50;
    REAL f, g;
    ...
    IMPRIMIR ("Hola amigos");
    ...
FIN


Una constante simbólica muy empleada en C/c++ es EOF ( End Of File), definida en cstdio y en muchas otras bibliotecas de funciones. Esta constante simbólica es reemplazada por el pre-procesador por el valor -1, y es usada para detectar el final de un archivo.


OPERADORES

Los operadores son elementos de enlace en una expresión y nos sirven para realizar operaciones y ontener un resultado.

A continuación se presentan los distintos operadores que se encuentran en el lenguaje C/C++. Los operadores se pueden considerar como unarios y binarios, se dice que un operador es unario cuando se aplica a un solo elemento, será binario cuando se aplica sobre dos elementos.


OPERADORES ARITMÉTICOS:

OPERADOR

SIGNIFICADO

+

Suma

-

Resta

*

Multiplicación

/

División

%

Módulo

El resultado de una operación depende de los operandos que la componen, si uno de ellos es de punto flotante, el resultado lo será también, de lo contrario será un número entero.

Por ejemplo:

3/4      dará como resultado cero (0)
3.0/4   dará como resultado 0.75
3/4.0   dará como resultado 0.75


OPERADORES DE BITS:

OPERADOR

SIGNIFICADO

&

and a nivel de bits

|

or a nivel de bits

^

xor a nivel de bits

~

not a nivel de bits

>>

Desplazamiento de bits a la derecha

<<

Desplazamiento de bits a la izquierda

Los operadores de bit actuan sobre los datos (enteros) a nivel de su represntación binaria interna. Cada bit es considerado como un valor lógico, esto es un cero será considerado como falso y un valor uno como verdadero.

Por ejemplo:

not 89          dará como resultado -90, esto porque la representación binaria de 89 es 01011001, por lo que not 01011001 dará
                    como resultado 10100110, y esto es -90, tomando en cuenta que los enteros se almacenan en compleemento a dos.
89 and 113    dará como resultado 81, porque 01011001(89) and 01110001 (113) es 01010001 (81)
89 or 113     dará como resultado 121, porque 01011001 (89) or 01110001 (113) es 01111001 (121)
89 xor 113    dará como resultado 40, porque 01011001 (89) xor 01110001 (113) es 00101000 (40)
113 shl 3      dará como resultado 904, porque 01110001 (113) shl 3 es 00000011 10001000 (904)
113 shr 3      dará como resultado 14, porque 01110001 (113) shr 3 es 00001110 (14)


OPERADORES DE ASIGNACIÓN:

Una operación de asignación es una operación por medio de la cual se coloca informacón en una variable.

La asignación se realiza mediante el signo =, de la siguiente manera:

Variable = Expresión;

Ejemplos de asignación:

int a, b, c;
a = 5;
b = 12;
c = 3*a + b;

Asignación múltiple:

Un operador de asignación, a igual que los otros operadores, al aplicarse en una expresión devolverá un valor. En el caso de la asinación, el valor devuelto será el valor asignado. Por esta razón la asignación puede concatenarse, de modo que se asigne un valor a muchas variables en una sola expresión, como se indica a continuación:

a = b = c = d = 5;

En el ejemplo el valor de 5 se asigna a la variable d, pero como = es un operador, el resultado (5) sirve para asignarlo a la variable c, que a su vez se le asignará la variable b y luego a la variable a.

Otros operadores de asignación:

+=

-=

*=

/=

%=

&=

|=

^=

<<=

<<=

Estos operadores sirven para abreviar la opraciones de asignación en las que la variable a la que se le está asignado un valor aparece en la expresión de la derecha. Algunos ejemplos se muestran a continuación:

a +=  5;       equivale a hacer      a = a + 5;                                               b -=  2;       equivale a hacer      b = b - 2;
c *= 11;       equivale a hacer      c = c * 11;                                             d /=  7;       equivale a hacer      d = d / 7;
e %= 8;       equivale a hacer      e = e % 8;                                             f &=  3;       equivale a hacer      f = f & 3;
g  |=  1;       equivale a hacer      g  =  g |  1;                                            h ^=  6;       equivale a hacer      h = h ^ 6;
i  <<= 4;       equivale a hacer      i  =  i <<  4;                                            j >>=  9;       equivale a hacer      j = j >> 6;


Conversión de tipos en la asignación:

Se debe tener mucho cuidado cuando se manejan expresiones que devolverán valores de un tipo diferente al de la variable que recibe el resultado. El compilador no avisa si la conversión se va realizar de la manera que uno puede esperar. El ejemplo siguiente muestra una de estas situaciones.

int a = 527;
char c;
c = a;

Si ejecutamos el código, veremos que el valor asignado a la variable c es 15. Luego, ¿cómo un valor como 527 se pudo convertir en 15?

La respuesta es simple, el valor hexadecimal de 527 es 00 00 02 0Fh ya que un entero se almacena en 4 bytes. Al pasar este valor a una variable como c, que es de tipo char y por lo tanto se almacenará en un byte, los tres bytes más significativos del valor de la variable a se perderán, por lo que solo se almacenará en la variable c el byte menos significativo, que en este caso es 0Fh y que no es otra cosa que el valor 15.

Converción explícita de tipos:

Cuando desarrollamos expresiones, sobretodo cuando operamos números enteros, muchas veces vamos a encotrar situaciones en las que recibimos respuestas no esperadas, por ejemplo la siguiente:

int a = 8, b = 3, c = 15;
double f;
f = b/a * c;

El valor asignado a la variable f será cero. La razón se da por las propiedades de los opardores, primero se evalua la expresión a/b, como las dos variables son enteras, el resultado de dividir 3/8 es precísamente cero. Al multiplicarlo luego por el avlor de la variable c, el resultado permanecerá en cero.

Una forma de corregir esto podría ser como sigue:

f = 1.0 * b/a * c;

Al multiplicar primero 1.0 (valor de punto flotante) por el contendo de la variable b se obtiene el valor 3.0 (valor de punto flotante), luego al dividir este valor entre el valor de la variable a (en este caso 8) se obtendrá el valor de 0.375 y luego al multiplicarse por el valor de la variable c (15) se obtendría el valor esperado de 5.625.

Sin embargo existe otra forma de hacerlo, mediante lo que se denomina "converción explícita de tipos" o también operación "type cast".

La operación type cast consiste en escribir un tipo de dato entre paréntesis al lado de una variable dentro de una expresión. Al hacerlo el valor de la variable será convertido temporalmente al tipo de dato escrito. La expresión siguiente muestra este detalle:

f = (double)b/a*c;

El valor de la variable b es convertido de 3 a 3.0 por la operación type cast, luego el valor de final de la expresión será el esperado.


OPERADORES UNARIOS DE INCREMENTO Y DECREMENTO:

Se denominan operadores unarios porque se aplican a un solo 0perando. Un ejemplo de operador unario se aprecia en la expresión: a * -b, el operador - se aplica sólo en la variable b y en este caso sirve para cambiar el signo de esa variable.

Los operadores de los que hablamos en este acápite son:

+ + incrementa el operando en 1

- - decrementa el operando en 1

Estos operadores pueden emplearse como prefifo (++a o --a) o como sufijo (a++ o a--), sin embargo no será lo mismo que utilicemos el operador en una instrucción simple que en una compuesta. Esto se explicará de la siguiente manera:

Expresión simple:

int a = 3;
++a;            // la variable a se incrementa a 4

int a = 3;
a++;            // la variable a se incrementa a 4

Expresión compuesta:

int a = 3,  b;
b = ++a;      // la variable a se incrementa a 4 y b recibe 4

int a = 3;
b = a++;      // la variable a se incrementa a 4, pero b recibe 3

En líneas generales, en una expresión compuesta, si el operador se coloca como prefijo, primero se aplica el operador sobre la variable y luego se evalua la expresión. Si se usa como sufijo, primero se evalua la expresión y luego se aplica el operador sobre la variable.


OPERADORES DE RELACIÓN:

Los operadores de relación se aplican, como su nombre lo indica, para relacionar dos valores. El resultado de esta operación será uno (1) si la relación es correcta y cero (0) sino lo es.

OPERADOR

SIGNIFICADO

==

Igual

!=

Diferente

>

Mayor que

<

Menor que

>=

Mayor o igual

<=

Menor o igual


OPERADORES DE LÓGICOS:

Los operadores de lógicos se aplican sobre expresiones lógicas. Una expresión lógica, en C/C++, se considera toda expresión que devuelva un valor falso (valor cero) o un valor verdadero (valor diferente de cero). El resultado de esta operación será uno (1) si la operación es correcta y cero (0) sino lo es.

OPERADOR

SIGNIFICADO

!

Not (negación)

&&

And (conjunción)

||

Or (disyunción)


OPERADOR CONDICIONAL:

El operador condicional sirve para decidir, entre dos expresiones, qué valor se le asignación a una variable. Este operador consta de dos símbolos: "?" y ":" y se forma de la siguiente manera:

variable  =  expr1  ?  expr2  :  expre3

Al evaluarse, si la expr1, da un valor diferente de cero (verdadero) entonces la expresión condicional devuelve el valor de la expr2, de lo contrario devuelve el valor de la expr3.

Por ejemplo:

b = a > c ? a + 1 : a - 1;
b = a - 3 ? a : c ;


PRECEDENCIA DE LOS OPERADORES:

Una expresión por lo general emplea más de un operador, si ese es el caso, entonces debemos tener encuenta en qué orden se aplicarán los operadores, esto debido a que éstos no se evaluará nesariamente en el orden en se ubican en la expresión.

A continuación se presenta una tabla en la que se muestra el orden de evaluación o la precedencia de los operadores.

 1°   ( )

 2°   !,  ˜,  ++,  --,  +,  -     (+ y - como operadores unarios)

 3°   *,  /,  %

 4°   +,  -

 5°   <<,  >>

 6°   <,  <=,  >,  >=

 7°   ==,  !=

 8°   &

 9°   ^

10°   ¦

11°   &&

12°   ¦¦

13°   ?  :

14°   =,  +=,  -=,  *=,  /=,  %=,  &=,  ^=,  ¦=,  <<=,  >>=

En el caso que dos operadores del mismo nivel estén presentes en una expresión, se evaluará primero el que esté más a la izquierda.

Volver a contenidos AtrásSiguiente
 * Nota:
    - Recuerde que el tamaño del archivo no debe ser mayor a 10 MBytes.
    - Para publicar el sílabo del curso, guárdelo en Word con el nombre silabo.doc (sin tilde) y súbalo a la carpeta ftp.