domingo, 27 de septiembre de 2015

Estructuras de los datos en informática - 1 de 2



2.1 Introducción

La información válida para un ordenador son números binarios. Los números suponen una simplificación de la realidad en el sentido de que solamente se guardan características particulares eliminando las otras que son irrelevantes.

Por ejemplo, cuando se realiza un programa para almacenar empleados de una empresa, los datos que se guardan de cada empleado son el DNI, la edad, el salario... pero no el color del pelo, el peso etc... 
La elección de los datos a almacenar está condicionada por el problema a resolver.

A veces esta determinación resulta evidente, a veces es difícil. Sin embargo el programa final que se obtiene -en términos de memoria que ocupa, rapidez de funcionamiento... -está muy condicionado por esta elección.


2.2 Las variables y las constantes

Una variable o una constante es un dato, o conjunto de datos, en la memoria del ordenador de especial interés para el programa y que recibe un nombre simbólico dentro del código del programa.
Cuando el valor de ese dato puede modificarse, se dice que es una variable, mientras que si no puede modificarse se dice que es una constante. 
Tal y como se emplean dentro del código en la mayoría de los lenguajes de programación, las variables tienen las siguientes características (Observa la inicialización de la variable a para C++ en el ejemplo del apartado 1.4.5 ):
  • Un nombre o identificador con el que nos referimos en el código a la variable. En el ejemplo indicado, el nombre es a.
  • Un tipo, que indica los posibles valores que puede tomar la variable y las acciones que son posibles con ella. En el ejemplo, el tipo es un número entero (int es la expresión para definir un integer en C++).
  • Un valor que está contenido en la memoria del ordenador. Inicialmente es el número 3.
  • Una dirección de memoria que indica dónde está localizada la variable en la memoria (esta dirección la gestiona el compilador o el intérprete y puede ser o no ser accesible en el lenguaje de programación, como sucede en C++ o Matlab respectivamente).

Por su parte, las constates se utilizan como las variables, salvo que no se les puede aplicar la operación de asignación, ya que esta operación es para modificar el valor de la constante y, para evitar esta una contradicción, el compilador no lo permitirá. Las constantes se utilizan para almacenar valores constantes (valga la redundancia) como puede ser el número Pi, el número de segundos que tiene un minuto o la velocidad de la luz. A continuación sólo nos referiremos a las variables pero, salvando la comentada operación de asignación, las propiedades entre ambas son las mismas.


2.3 Tipos de datos

Internamente los ordenadores trabajan con una representación binaria (mediante unos y ceros) de los números. Esta forma de representar la información es muy adecuada a la hora de fabricar los circuitos electrónicos ya que:
1. Es la forma más básica de discernir.
2. Un 1 y un 0 son muy diferentes eléctricamente (tradicionalmente son 5 V de diferencia) por lo que es difícil que se confundan entre sí. 
Sin embargo hacer un programa directamente con unos y ceros es prácticamente imposible. Preferimos utilizar palabras para las instrucciones y números en base 10. De ahí que los lenguajes de programación ofrezcan la posibilidad de utilizar distintos tipos variables para almacenar la distinta información.
A continuación se especifica la tipología de variables más comunes en los distintos lenguajes.


2.3.1 Variables booleanas

Una variable booleana sólo puede tener dos valores, verdadero o falso. Para representar una variable booleana sólo se necesita un bit (precisamente un bit es la cantidad mínima de información y sólo puede tener dos valores: 1 y 0), haciendo corresponder el valor 1 a verdadero y 0 falso. No obstante, hay que añadir que, en general, los computadores no son capaces de trabajar directamente con un solo bit, sino que trabajan con un paquete mínimo de 8 bit. Esta cantidad es conocida como byte. 
Existe una serie de operadores que permiten trabajar con variables booleanas, de forma que se pueden agrupar y formar expresiones complejas. Los más habituales son los siguientes (empleando la sintaxis de Matlab):


Estas relaciones se suelen escribir en tablas que muestran los posibles resultados de una de estas operaciones para todas las posibles entradas. Estas tablas reciben el nombre de tablas de verdad. La siguiente tabla muestra la tabla de verdad correspondiente al operador lógico AND y OR, respectivamente:


El resultado de una operación AND es verdadero si los dos operandos son verdaderos.


El resultado de una operación OR es verdadero si, al menos, uno de los dos operandos es verdadero.


2.3.2 Números enteros

Los números enteros suelen emplearse con gran frecuencia en programación, ya que su procesamiento es muy rápido y existen muchas operaciones en las que son imprescindibles como, por ejemplo:
  • Como los indices en un vector o matriz
  • Como contador del número de iteraciones en un bucle

Debido a limitaciones de memoria no se puede definir un número con una precisión arbitraria.

Los lenguajes de programación pueden definir distintos tamaños para los enteros; empleando, por ejemplo, 8 bits (para contar desde el 0 hasta el 256), 16 bits (del 0 al 65536 o -32768 a 32761 según se considere el signo o no), etc. 

Como ejemplo con 4 bits y dedicando el primer bit para el signo, una posible representación binaria es:



Donde nbits es el número de bits de la variable, y signo es 1 si la variable tiene signo o 0 en caso de que sólo se consideren números positivos.

Con los números enteros se pueden hacer operaciones matemáticas. Los típicos símbolos empleados en los lenguajes de programación son:
  • + para sumar
  • - para restar
  • * para multiplicar
  • / para dividir


Pero hay que notar que en general la división de dos números enteros es otro número entero y por lo tanto sin decimales, esto es, se produce un truncamiento del resultado. Por ejemplo, para el siguiente programa en C++:

#include <iostream.h>
void main(void){
int a=2;
int b=5;
int c=a/b;
cout<<"C: "<<c<<endl;
}

Resulta que el contenido de la variable c es 0.



Espero haber ayudado en algo. Hasta la próxima oportunidad!








No hay comentarios:

Publicar un comentario en la entrada