Tema 2: Estructuras básicas de datos 2.0. Introducción 2.1. Sistemas y código de numeración 2.2. Clasificación de datos 2.3. Datos básicos 2.4. Dato derivado o puntero 2.5. Datos estructurados 2.6. Constantes y variables 2.7. Operadores 2.8. Expresiones 2.0. Introducción Un dato es toda aquella información característica de una entidad, que es susceptible de tratamiento en un programa informático. Para todo ordenador, internamente toda la información es numérica (código binario). Por ello, para su correcto tratamiento, todos los datos que forman dicha información deben estar clasificados de tal forma que los programas sean capaces de realizar operaciones sobre ellos sin dar lugar a error o fallos por parte del sistema. La forma en la que se clasifican los datos establece la estructura y formato de los mismos, así como su representación dentro de un lenguaje de programación. 2.1. Sistemas y códigos de numeración Desde el punto de vista numérico, el hombre ese expresa con el sistema decimal, constituido por 10 símbolos que son los símbolos del 0 al 9. Desde el punto de vista alfabético mediante distintas combinaciones de los símbolos del alfabeto. Por otra parte, un ordenador manipula cualquier tipo de dato en código binario, es decir, que toda la información la traduce a combinaciones de ceros y unos. Para que pueda darse la necesaria comunicación hombre−maquina es necesario traducir toda la información que se desea procesar a ceros y unos. En definitiva, los circuitos de tipo electrónico que conforman un sistema informático viaja corriente eléctrica, por ello, desde un punto de vista lógico la ausencia o presencia de tensión se representa: • Mediante una lógica positiva • la presencia de tensión representará un uno lógico. • La ausencia de tensión representará el cero lógico. • Mediante una lógica negativa • la presencia de tensión representará un cero lógico. 1 • La ausencia de tensión representará el uno lógico. 2.1.1. Sistemas de numeración Un sistema de numeración es un conjunto de símbolos y reglas que se utilizan para la representación de datos numéricos. Todo sistema de numeración se caracteriza por su base, que marca o indica el número de símbolos distintos que utiliza para la representación de cantidades. Siendo el coeficiente el que determina cual es el valor de cada símbolo dependiendo de la posición que ocupe con respecto al punto decimal. Este tipo de sistemas de numeración reciben el nombre de sistemas posiciónales o ponderados. Dicho de otra forma, un sistema posicional es aquel en el que el valor que representa cada símbolo o cifra de una determinada cantidad depende de su valor absoluto y de la posición relativa que ocupa dicha cifra con respecto con respecto a la coma o punto decimal. Sistema decimal: Es un sistema posicional que consta de diez símbolos llamados dígitos para la representación de cantidades. Según el teorema fundamental de la numeración (TFN), cualquier número expresado en un sistema posicional cualquiera puede expresarse mediante el siguiente polinomio equivalente. Número(b = X1 · Bi + X1−1 · Bi−1 + ... − + X2 · B2 + X1 · B1 + X0 · B0 + X−1 · B−1 + X−2 · B−2 + X−n · B−n 126,84(0 = 1 · 102 + 2 · 101 + 6 · 100 + 8 · 10−1 + 4 · 10−2 B es la base. Xi son los coeficientes. i es el índice o la posición relativa con respecto al punto decimal. Dada una cantidad expresada en un sistema de numeración cuya base es B, cada uno de los símbolos (dígitos) utilizados queda representado por Xi donde el subíndice i marca la posición del dígito con respecto al punto decimal. Posición que hacia la izquierda de la coma se numera de 0 en adelante con incremento de 1 en 1 y hacia la derecha se numera desde −1 con incremento de −1. El número de símbolos que constituyen un determinado sistema de numeración viene dado por la siguiente desigualdad. 0<= Xi < B 2.1.2. Sistema binario Es también un sistema posicional o ponderado que consta de 2 únicos símbolos para la representación de cantidades, esos dos símbolos son el 0 y el 1 y reciben el nombre de bit. El número de combinaciones que podemos realizar en el sistema de numeración binario viene dado por la expresión 2n siendo n el número de bits. Para la medida de cantidades de información representada en binario se utiliza una serie de unidades múltiples del bit que reciben nombre propio: • Nibble o cuarteto: 4 bits 2 • Byte u octeto: 8 bits • Kilobyte (KB): 1024 Bytes • Megabyte (MB): 210 Kb = 10242 Bytes • Gigabyte (GB): 210 MB = 10243 Bytes • Terabyte (TB): 210 GB = 10244 Bytes Paso de binario a decimal El paso de binario a decimal se llevará a cabo aplicando el TFN al número en base 2, ejemplo pasar a decimal el siguiente número binario. 11011101,11(2) B(10) 1 · 20 + 0 · 21 + 1 · 22 + 1 · 23 + 0 · 24 + 1 · 25 + 1 · 26 + 1 · 2−1 + 1 · 2−2 = 109,75(10) Paso de decimal a binario 37,86(10) B(2)= 101001,1101 0,86 · 2 = 1,72 0,72 · 2 = 1,44 0,44 · 2 = 0,88 0,88 · 2 = 1,76 37 17 1 2 18 0 2 9 1 2 4 0 2 2 0 2 1 Suma de binario 0+0=1 0+1=1 1+0=1 1+1=0 + 1 1 1 1 1 0 0 0 1 0 1 1 1 1(2) 1(2) 0(2) Resta de binario 3 0−0=0 0 − 1 = 1; AC = 1 1−0=1 1−1=0 • Sistema octal: Es un sistema posicional o ponderado que consta de 8 símbolos para la representación de cantidades. • Paso de B(10) B(8) 45(10) B(8) = 55 (8) 45 5 8 5 Sumas en octal + 1 1 6 0 6 4 3 5 2 0 4 4 1 3(8) 6(8) 1(8) Restas en octal − 7 6 1 6 4 2 5 2 2 4 4 7 3(8) 6(8) 5(8) 2.2. Clasificación de datos Como se vio en el tema anterior, los datos son aquellos elementos considerados como unidad de tratamiento de dentro de un sistema de proceso de datos (SPD), y que al conjunto de esos datos se le denomina información. Para el diseño de un programa es importante establecer cuales son las estructuras de datos que se van a utilizar, con el objeto de establecer las operaciones que sobre dichos datos se pueden realizar, para lo cual debemos proporcionar información al sistema acerca de los mismos. Los datos manejados en un programa deben llevar asociado por tanto un identificador, un tipo y un valor. Identificador: Es el nombre utilizado en un programa haciendo referencia a un dato, existen algunas normas generales para su empleo, entre los cuales destacan: • Pueden estar constituidos por letras y dígitos, y en algunos casos por el signo del subrayado. Ej.: dato_1 • Deben comenzar por una letra. • No deben contener espacios. • El nº máximo de caracteres dependerá del compilador utilizado. • El nombre asignado debe tener relación con la información que contiene. 4 Tipo: Establece el rango o intervalo de valores que puede tomar el dato. Además determina el espacio de memoria que ocupa dicho rango. Valor: Elemento que debe pertenecer al rango o intervalo de valores según el tipo definido. Una clasificación de los posibles tipos de datos que suelen encontrarse en cualquier lenguaje de programación es la siguiente: − Entero − − Datos Numéricos − No numéricos − Datos derivados − Reales − Carácter − Lógico − Parámetros − Estáticos − Tablas − Listas enlazadas − Pilas − Colas − Dinámicos − Lineal − Datos estructurados − Internos − No Lineal − Árboles − Grafos − Externos − Archivos − Bases de datos − Compuestos − Registro 2.3. Datos básicos Dato de tipo numérico: Se utilizan para obtener magnitudes y se clasifican en enteros y reales. • Numérico entero: Se emplea para representar números enteros pudiendo llevar o no el signo correspondiente. Se expresa mediante una serie de dígitos que pueden estar precedido por el signo + o −. Ej.: (+1516,1516)(−1516). Existen varias formas de representación interna de los datos numéricos enteros. • Para números enteros sin signo: • Binario puro: El número entero completo se pasa a binario teniendo en cuenta la palabra del ordenador. Ej.: 45 0 0 1 Byte 1 0 1 1 0 1 5 • Decimal codificado en binario BCD: Cada dígito decimal se pasa a binario utilizando 4 bits para cada dígito. Ej.: 45 0 4 0 1 0 1 5 1 0 0 0 1 Ej.: 657 0 0 1 Byte 0 1 1 0 0 1 1 Byte 0 1 0 1 1 1 • Para números enteros con signo se utilizan 6 métodos para la representación interna de números enteros positivos y negativos que son los siguientes: • Binario o modulo y signo: Este método de representación asigna el bit situado más a la izquierda para la representación del signo, utilizando el bit 0 para el signo positivo y el bit 1 para el signo negativo. El resto de los bits contiene el modulo o valor del número representado en binario puro. Ejemplo: BS (Bit de signo) 0 1 0 1 1 1 0 1 N=3 Binario o módulo y signo. N bits. 111 −3 110 −2 101 −1 000 0 001 1 010 2 011 3 Rango de presentación: −2n−1 + 1 <= X <= 2n−1 − 1 Se denomina rango de representación en un método determinado al conjunto de números representables en dicho método. Este método de representación posee la ventaja frente a otros de tener un rango de representación simétrico (igual cantidad de valores positivos que negativos). Su mayor inconveniente es el de poseer dos representaciones posibles para el 0. • Complemento a 1 (C. a 1) En este método de representación también se reserva el bit situado más a la izquierda para representar el signo. Los números positivos se representarán igual que en el método anterior y los números negativos se obtienen calculando el complemento a 1 de los números positivos. Ej.: 1011 (11) 0100 6 Resta sumando − 1100 (12) 1000 (8) 0100 (4) 1100 0111 10011 1 0100 (4) N=3 110 −1 000 0 001 1 010 2 011 3 Rango de representación −2n+1+1<= X <= 2n−1−1 • Complemento a 2 (C. a 2) También se utiliza el bit situado más a la izquierda para la representación del signo. Los números positivos se representan en binario puro y los números negativos calculando el complemento a 2 de los positivos. 1101 (13) 0011 (−13) 10000 0010 +1 0011 En la operación de comprobación se desprecia si hay un ultimo acarreo. N=3 110 −2 111 −1 000 0 001 1 010 2 011 3 Rango de representación −2x−1 = X <= 2n−1−1 • Exceso a 2n−1 En este método no se empleo ningún bit para el signo y el valor se corresponde con el número más el exceso. N=8 Exceso = 2n−1 = 28−1 = 128 Ej.: 27 + 128 = 155 10011011 (2) − 27 + 128 = 101 01100101 (2) El número a codificar es 27 en el ejemplo. Rango de representación −2n−1 <= X <= 2n−1−1 7 Este método de representación posee al igual que complemento a 2, un rango asimétrico al tiempo que posee una única representación posible para el 0. • Decimal desempaquetado Cada digito ocupa un octeto (1 byte) teniendo un cuarteto de zona (el cuarteto a la izquierda que para todos los dígitos menos para el último contiene 1111) y un cuarteto de contenido donde se haya el digito decimal codificado en binario (el cuarteto de la derecha). El último digito del número contiene el signo del número en el cuarteto de zona (1100 para el signo más y 1101 para el signo menos). 2015 1111 Zona 2 0010 Contenido 1111 Zona 0 0000 Contenido 1111 Zona 1 0001 Contenido 1100 Signo 5 0101 Contenido • Decimal empaquetado En este método de representación cada digito ocupa un cuarteto y al ultimo digito se le añade un cuarteto con el signo. 2015 0000 Relleno 0010 2 0000 0 0001 1 1100 + 0101 5 • Número real Se emplea para representar los números con parte decimal o los números muy grandes o muy pequeños que no pueden ser contenidos en un número entero. Se puede expresar de dos formas: • Punto decimal: Emplea los dígitos del 0 al 9 con su signo correspondiente y un punto para separar la parte entera de la decimal. • Notación científica o exponencial: Utiliza el formato mantisa E característica. Número = Mantisa * base de exponenciación exponente −95'16 = 0.9516 * 102 Mantisa: Es un número real. Se suele representar en formato normalizado (0.(...)). E: Representa a la base decimal. Característica: Es el exponente correspondiente a un número entero con su signo. La representación interna de los números reales según el estándar internacional es el siguiente. La base es igual a 2. La característica 0, el exponente se representa normalmente en formato 2n−1 y finalmente la mantisa se puede representar en binario puro, modulo signo, C. a 1, C. a 2. Simple precisión: Es para maquinas de 32 bits, el 31 seria el bit de signo. Para el exponente se van a utilizar 8 bits, de las posiciones 30 a la 23 y para la mantisa 23 bits, es decir, desde la posición 22 a 0. 8