Introducción a la computaciónInformática I (2015-2) Departamento de Ingeniería Electrónica y de Telecomunicaciones Facultad de Ingeniería Informática I Introducción a la computación
Informática I (2015-2) LENGUAJES DE PROGRAMACIÓN Notaciones formales para describir algoritmos y funciones que serán ejecutadas por un ordenador. Clasificación de Lenguajes de Programación: – Según grado de independencia de la máquina. – Según la forma de sus instrucciones – Por generaciones
Introducción a la computaciónInformática I (2015-2) CLASIFICACIÓN SEGÚN INDEPENDENCIA DE LA MAQUINA Lenguaje de máquina – Cada instrucción es un código binario – Notación que entiende directamente un computador – Las instrucciones y su estructura son particulares de cada maquina.
Introducción a la computaciónInformática I (2015-2) CLASIFICACIÓN SEGÚN INDEPENDENCIA DE LA MAQUINA Lenguaje ensamblador – Versión simbólica del lenguaje de máquina. – Equivalencia uno a uno entre instrucciones de ensamblador y lenguaje maquina. – Permite hacer asignaciones de memoria con nombres simbólicos. – Algunos ensambladores contienen macroinstrucciones cuyo nivel es superior a las instrucciones de ensamblador. – Da acceso completo a todos los recursos de la máquina.
Introducción a la computaciónInformática I (2015-2) CLASIFICACIÓN SEGÚN INDEPENDENCIA DE LA MAQUINA Lenguajes de medio nivel – Poseen características de lenguajes de bajo nivel (maquina y ensamblador) y algunas ventajas de los lenguajes de alto nivel – Proporciona estructuras de control y datos – Ejemplos: C, FORTH Lenguajes de alto nivel – No acceso directo al hardware – Estructuras de datos complejas – Lenguajes orientados a objetos. – Ejemplos: C++, JAVA, Pascal
Introducción a la computaciónInformática I (2015-2) CLASIFICACIÓN SEGÚN INDEPENDENCIA DE LA MAQUINA Lenguajes orientados a problemas – Resolución de problemas de un campo o dominio concreto. – Ejemplos: HTML Sitios web SQL Bases de datos VHDL y VERILOG Descripción de hardware MATLAB y GNU-Octave Programación matricial
Introducción a la computaciónInformática I (2015-2) CLASIFICACIÓN SEGÚN FORMA DE INSTRUCCIONES Lenguajes procedimentales – Sentencias de asignación es construcción básica de programas – Históricamente primeros lenguajes y los mas usados actualmente – C, C++, FORTRA, Pascal, etc. Lenguajes declarativos – Notación muy próxima al problema – Lenguajes declarativos llamados a funciones (LISP) – Lenguajes lógicos clausulas lógicas (PROLOG)
Introducción a la computaciónInformática I (2015-2) CLASIFICACIÓN SEGÚN FORMA DE INSTRUCCIONES Lenguajes Orientados a Objetos – Soporte para tipos de datos abstractos y clases (basado en objetos) – Soporte para herencia y polimorfismo (orientado a objetos) – C++, JAVA, Delphi, etc.
Introducción a la computaciónInformática I (2015-2) LENGUAJES DE ALTO NIVEL VENTAJAS Mas fáciles de aprender No se necesita tener conocimiento del hardware Liberan de ocupaciones tediosas como el manejo detallado de memoria Ofrecen múltiples estructuras de control Ofrecen múltiples estructuras de datos y permiten crear nuevas Facilitan la depuración Portabilidad de los programas
Introducción a la computaciónInformática I (2015-2) LENGUAJES DE ALTO NIVEL DESVENTAJAS Mayores tamaños de ficheros, mayores tiempos de compilación y ejecución Tamaño de archivo para aplicación “Hello World” codificada a diferentes niveles de abstracción: L. máquina, L. ensamblador, L. C y L. C++.
Introducción a la computaciónInformática I (2015-2) PROCESADORES DE LENGUAGE Nombre genérico de todas las aplicaciones en las cuales uno de los datos de entrada es un lenguaje de programación: Traductores (translators) Compiladores (compilers) Ensambladores (assemblers) Enlazadores (linkers) Cargadores (loaders) Intérpretes (interpreters) Desensambladores (dissemblers) Decompiladores (decompilers) Depuradores (debuggers) Analizadores de rendimiento (profilers) Optimizadores de código (code optimizers) Compresores (compressors) Preprocesadores (preprocessors) Formteadores (formatters) Editores (editos)
Introducción a la computaciónInformática I (2015-2) PROCESADORES DE LENGUAGE Traductores – Procesa Lenguaje Fuente (LF) y genera Lenguaje Objeto (LO). – El Lenguaje de Implementación (LI) puede ser cualquier lenguaje. Ensambladores – Si el LF es lenguaje ensamblador y el LO es el lenguaje de maquina. – Traductores simples por la equivalencia entre declaraciones en ensamblador y códigos binarios en lenguaje maquina. – Macroinstrucciones se traducen en múltiples instrucciones de maquina (Macroensambladores)
Introducción a la computaciónInformática I (2015-2) PROCESADORES DE LENGUAGE Compilador – Traductor de LF de alto nivel a LF de bajo nivel. Compilador Programa en Lenguaje fuente (C, C++, Fortran, etc.) Programa en Lenguaje destino (IR, Ensamblador, Lenguaje de Maquina) ALTO NIVEL BAJO NIVEL Tiempo de Compilación Programa Objeto DatosResultados Tiempo de Ejecución
Introducción a la computaciónInformática I (2015-2) PROCESADORES DE LENGUAGE Linkers – Ocurre entre el proceso de compilación y la ejecución – Necesario cuando el LF permite fragmentación del programa. Librerías, procedimientos, subrutinas, etc. El compilador produce códigos objeto para cada parte. – El linker une los diferentes códigos objeto en el programa objeto completo. Cargador (Loader) – Coloca el archivo ejecutable en memoria – Asigna el espacio de memoria – Pasa el control a la primera instrucción ejecutarse
Introducción a la computaciónInformática I (2015-2) COMPILACIÓN, MONTAJE Y EJECUCIÓN Traductor Ensamblador L. fuente L. ensamblador C. objeto 0 C. objeto 1 C. objeto n Linker C. objeto full Cargador Programa en Ejecución compilación montaje
Introducción a la computaciónInformática I (2015-2) PROCESADORES DE LENGUAGE Interprete – Ejecuta en la máquina las instrucciones que encuentra en LF – Todo el proceso se realiza en tiempo de ejecución – Aplicación e interprete coexisten en memoria – Ejecución más lenta que en programas compilados – Mayor portabilidad y flexibilidad.
Introducción a la computaciónInformática I (2015-2) Interpreter vs. compiler Intérprete: actúa en tiempo de ejecución ( runtime ) Compilador: traducción completa antes de ejecución 17 myprog.c int main(void){ int a, b; a = 3; printf(“a=%d”, a); exit(0); } COMPILADOR myprog.exe COMPUTADOR (Hardware) hola myprog.py b = 1 vec[a] = func(b) a = b+ 1 if a==10: b = 0 } print a INTÉRPRETE (Python engine) COMPUTADOR (Hardware) hola myprog.java public class HelloWorld { public static void main(String[] args) { System.out.println(“ a=3"); } } COMPILADOR (a bytecode) myprog.class COMPUTADOR (Hardware) Java Virtual Machine hola
Introducción a la computaciónInformática I (2015-2) SISTEMAS NUMÉRICOS Conjunto ordenado de símbolos llamados dígitos, con relaciones definidas para la suma (+), resta (-), multiplicación (x) y división (÷) BASE (r) El número de dígitos en un sistema numérico se denomina base. Las bases mas utilizadas en sistemas digitales son las siguientes:
Introducción a la computaciónInformática I (2015-2) NOTACIÓN Parte Entera Parte Fraccionaria Notación Posicional Notación Polinómica · = separa dígitos enteros de fraccionarios. r = base del sistema numérico. n = número de dígitos enteros m = número de dígitos fraccionarios a i = digito entero cuando n-1 >= i >= 0 a i = digito fraccionario cuando -1 >= i >= -m a n-1 = dígito mas significativo (MSB) a -m = digito menos significativo (LSB) Parte Entera Parte Fraccionaria
Introducción a la computaciónInformática I (2015-2) EJEMPLOS NOTACIONES POSICIONAL Y POLINÓMICA
Introducción a la computaciónInformática I (2015-2) CONVERSIONES BASE 10 BASE r Convertir (234.45) 10 a base Paso 1 – Convertir parte entera Se realizan divisiones consecutivas hasta que el cociente de la división sea menor que la base. Cociente < base TERMINAMOS El resultado de la conversión es: el ultimo cociente como bit más significativo (234) 10 = Los dígitos restantes corresponden a los residuos de las divisiones en el orden inverso al que fueron obtenidos () 2 El procedimiento consiste en dividir la parte entera del número por la base del sistema numérico al que se desea pasar
Introducción a la computaciónInformática I (2015-2) CONVERSIONES BASE 10 BASE r.45 x 2 = x 2 = 0.90 x 2 = x 2 = x 2 = 0.40 Paso 2 – Convertir parte fraccionaria Las multiplicacione s continúan hasta que la parte fraccionaria sea cero, o se alcance la precisión deseada Convertir (234.45) 10 a base 2 (0.45) 10 = El procedimiento consiste en multiplicar la parte fraccionaria del número a convertir por la base. Una vez obtenido el primer producto, la parte fraccionaria de este se multiplica de nuevo por la base El resultado final es la parte entera de los productos en el orden en que fueron obtenidos Finalmente se obtiene: (234.45) 10 = ( ) 2 (234) 10 = ( ) 2 (0.45) 10 = ( ) 2 ()2)2. x 2 = x 2 = Parte Fraccionaria: Parte Entera: Total 1 La secuencia se repetirá una y otra vez. No es posible obtener un valor exacto Terminamos aquí con una precisión de 7 bits
Introducción a la computaciónInformática I (2015-2) CONVERSIONES BASE r BASE 10 Convertir ( ) 7 a base x x x x x x x 7 4 = = = 5 = 21 = 196 = 2058 = Notación Polinomial 2 x x x x x x x 7 4 m = -2 n = 4 a i x 7 i El procedimiento consiste básicamente en multiplicar cada uno de los dígitos por su peso correspondiente Finalmente hacemos la sumatoria de los productos El procedimiento anterior es equivalente al uso de la notación polinomial = peso s
Introducción a la computaciónInformática I (2015-2) CONVERSION BINARIO OCTAL Convertir ( ) 2 a base 8 Convertir ( ) 8 a base El procedimiento consiste en agrupar los bits en grupos de 3 Para la parte entera se agrupa del punto hacia la izquierda La parte fraccionaria se agrupa del punto hacia la derecha Finalmente usando una tabla de equivalencias, asignamos a cada grupo de bits el digito octal correspondiente El procedimient o consiste en usar la tabla de equivalencias para asignar un valor binario a cada digito octal ( ) 2 = (1561.4) 8 ( ) 8 = ( )
Introducción a la computaciónInformática I (2015-2) CONVERSION BINARIO HEXADECIMAL Convertir ( ) 2 a base 16 Convertir (7AD.B) 16 a base DF. 7ADB ( ) 2 = (37D.F4) 16 (7AD.B) 16 = ( ) El procedimiento consiste en usar la tabla de equivalencias para asignar un valor binario a cada digito hexadecimal Finalmente usamos una tabla de equivalencias, para asignar a cada grupo de bits un digito hexadecimal El procedimiento consiste en agrupar los bits en grupos de 4 La parte fraccionaria se agrupa del punto hacia la derecha La parte entera se agrupa del punto hacia la izquierda 00 00
Introducción a la computaciónInformática I (2015-2) Binario a Octal – Paso directo grupos de 3 bits a dígitos octales Octal a Binario – Paso directo dígitos octales a su equivalente binario de 3 bits Binario a Hexadecimal – Paso directo grupos de 4 bits a dígitos hexadecimales Hexadecimal a Binario – Paso directo dígitos hexadecimales a su equivalente binario de 4 bits Octal a Hexadecimal, Hexadecimal a Octal – Paso intermedio a través de base binaria – Octal binario hexadecimal – Hexadecimal binario Octal ORDEN DE CONVERSIONES
Introducción a la computaciónInformática I (2015-2) ORDEN DE CONVERSIONES BASE X a BASE Y – Solo sabemos multiplicar y dividir en decimal – Paso intermedio a través de base decimal – BASE X Decimal, evaluar notación polinómica del número en base X – Decimal BASE Y, divisiones sucesivas por Y
Introducción a la computaciónInformática I (2015-2) Binary system Formato de un número decimal: d 0 · d 1 · d 2 ·10 2 … + d n ·10 n Formato de un número binario o en base 2: b 0 ·2 0 + b 1 ·2 1 + b 2 ·2 2 … + b n ·2 n b 0 ·1 + b 1 ·2 + b 2 ·4 + b 3 ·8 + b 4 ·16 … Ejemplo: (1101) 2 = (1· · · ·2 3 ) 10 = (1·1 + 0·2 + 1·4 + 1·8) 10 = ¿Cuál es el número más grande que puede representarse con 8 bits?
Introducción a la computaciónInformática I (2015-2) Bits, bytes, words Bit : unidad absoluta mínima de información que tiene la capacidad de almacenar un ‘1’ o un ‘0’. Byte : 8 bits, unidad típica mínima de información que se puede almacenar en una memoria. – Un byte puede tomar 256 valores diferentes. Word : cantidad máxima de bits que pueden ser manipulados a la vez, es específico de la arquitectura del procesador. – En computadores, es 32 o 64 bits => 4 u 8 bytes 29
Introducción a la computaciónInformática I (2015-2) Memory 30 DirecciónContenido … … ¿Cuántas posiciones de memoria puedo direccionar con direcciones que usan 32 bits? bits byte word (32 bits)
Introducción a la computaciónInformática I (2015-2) El código decimal codificado en binario (BCD) sirve para representar los dígitos decimales del 0 al 9. El código BCD utiliza 4 bits, y los pesos son los mismos que en un entero binario de 4 bits. Por tanto el código BCD para un digito decimal dado es igual al equivalente binario del número, con ceros de relleno. Este código también se conoce como código , por los pesos utilizados. CODIGO DECIMAL BINARIO (BCD) Las combinaciones de no son válidas.
Introducción a la computaciónInformática I (2015-2) CODIGO DECIMAL BINARIO (BCD) Encontrar la representación en BCD de los siguientes números: –3467 – –123 Encontrar el valor de los siguientes números representados en BCD: – – –
Introducción a la computaciónInformática I (2015-2) CODIGO DECIMAL BINARIO (BCD) Los códigos BCD se utilizan para codificar números que se envían a pantallas numéricas y para representar números en procesadores que realizan aritmética decimal. Este código es utilizado tanto en supercomputadoras como en calculadoras de bolsillo. CONVERSOR BIN-BCD CONVERSOR BIN-BCD
Introducción a la computaciónInformática I (2015-2) Binary information coding 34 DirecciónContenidoASCII P A R T I D O DecimalCarácterDecimalCarácter 65A78N 66B79O 67C80P 68D81Q 69E82R 70F83S 71G84T 72H85U 73I86V 74J87W 75K88X 76L89Y 77M90Z Fragmento de memoriaTabla ASCII ¿Qué palabra ASCII está almacenada en ese fragmento de memoria?
Introducción a la computaciónInformática I (2015-2) ASCII Table 35
Introducción a la computaciónInformática I (2015-2) ASCII El código de caracteres más utilizado en las aplicaciones de cómputo es el código ASCII (siglas en Ingles de Código Estándar Americano para Intercambio de información). Para la representación de los caracteres el código ASCII utiliza 7 bits, para un total de 128 caracteres posibles.