Programación de Computadores I • Conceptos básicos y definiciones. La informática es la adquisición, tratamiento y procesamiento automáticos de la información. • Introducción. • Introducción histórica. Pascal en 1642 y Leibnitz en 1671 ya se plantearon la fabricación de máquinas capaces de realizar las operaciones más comunes: suma, resta, multiplicación y división. Pero hasta 1938, año en el que Shanon propuso del álgebra de Boole como modelo para construir máquinas de cálculo, no se dio el primer paso teórico. En 1944, H. Aiken dio el primer paso práctico, al construir el primer computador digital moderno, basándose en el álgebra de Boole. Lo bautizó Mark I. El siguiente modelo fue el ENIAC, construido en la Universidad de Pennsylvania. Este computador era completamente electrónico, estaba constituido por tubos y válvulas de vacío, medía unos 140 m2 y pesaba unas 140 toneladas. Von Neumann en 1952 construyó el EDVAC, ya compuesto por Unidades Aritmético−Lógicas (ALU), dispositivos de Entrada−Salida (E/S), Memoria y Unidad de Control (CU). Pero la verdadera revolución se produjo en los Laboratorios Bell (actualmente AT&T) en 1947 con la invención del transistor. Es un dispositivo de tres terminales en el que, dependiendo de la tensión, se abre o se cierra el interruptor. Una combinación de transistores forma un circuito integrado. Un ejemplo de circuito integrado es el que se puede ver en la figura, en el que, dependiendo de la tensión, se abren o cierran los diferentes interruptores gracias a la puerta AND. a 0 0 1 1 b 0 1 0 1 Y 0 0 0 1 • Información analógica y digital. _ Magnitud continua es aquella que toma todos los valores dentro del conjunto de los números reales. _ Magnitud discreta es aquella, de naturaleza discontinua, que sólo toma valores de un conjunto discreto, el conjunto de los números naturales. _ Información analógica es aquella que tiene naturaleza continua. 1 _ Información digital es aquella que tiene naturaleza discreta. Los computadores trabajan con información digital. Características de la información digital. • El procesamiento y transmisión de datos son más fiables (se puede determinar si están mal) y eficientes (menos palabras para expresar más cosas). • El almacenamiento es más compacto (menos espacio para más información). • Permite información simbólica (no dependiente sólo de números). • Es fácilmente utilizable en la tecnología que poseemos. ¿Cómo discretizar la información? Asignar a un rango de valores un conjunto discreto de valores se conoce con el nombre de discretizar. Pero tiene la principal desventaja de la pérdida de información por el efecto de redondeo. • Codificación de la información. _ Codificar es representar algo mediante elementos de un conjunto, cualquiera que sea ese conjunto. Ej. Coche ! Matrícula; Nosotros ! D.N.I. ¿Por qué se codifica? Se consigue una representación más compacta del objeto. ¿Cómo se codifica en un computador? En los computadores digitales la información se codifica en el sistema binario, en dos posibles valores: 0 y 1. 2 La unidad de información recibe el nombre de BIT (Binary digIT). Estos BITs se agrupan en grupos de ocho para formar los BYTES. 1 Kilobyte 1 Megabyte 1 Gigabyte 1 Terabyte 1 KB 1 MB 1 GB 1 TB 210 Bytes 1.024 Bytes 220 Bytes 1.048.576 Bytes 230 Bytes 1.073.741.824 Bytes 240 Bytes • Componentes principales de un computador digital. CPU Entrada−Salida (E/S). _ Entrada. Entra información desde el mundo exterior al computador. • Teclado. • Ratón. • Scanner. _ Salida. Sale información del computador. • Impresora. • Pantalla. Memoria. Unidad donde se almacenan datos o instrucciones, es decir, información. Tipos: _ Memoria principal. _ Memoria externa o masiva (auxiliar). Memoria Principal. _ Memoria muy rápida (s). _ Tamaño medio. Tipos: _ R.A.M. (Random Access Memory). _ R.O.M. (Read Only Memory). Memoria R.A.M. _ Lectura y escritura. _ Volátil. Memoria R.O.M. _ Sólo lectura. 3 _ No volátil. Memoria Externa o Masiva (auxiliar). _ Memorias muy lentas. _ Gran capacidad. Tipos: _ Discos Duros. _ CD−ROM. _ Cintas. ¿Cómo funciona la memoria? La memoria auxiliar es aquella que utilizamos para guardar información que queremos conservar. Una vez iniciada la sesión, pasamos la información de la memoria auxiliar a la memoria principal para poder trabajar con ella y, una vez finalizada la operación, grabamos los resultados de nuevo en la memoria auxiliar con el fin de conservarlos. ¿Cómo es la memoria? 1 2 3 4 5 6 7 8 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 Es una enorme tabla compuesta por BITs en la que cada fila constituye una Palabra de Memoria (W). Estas filas son identificadas por su posición y dirección en la tabla. ¿Qué tipo de operaciones realizamos con la memoria? _ Lectura. Hay que decir al computador la dirección donde queremos leer y lo que queremos leer. _ Escritura. Hay que decir al computador que queremos escribir, lo que queremos escribir y dónde queremos escribirlo. A.L.U. (Arithmetic−Logical Unit). Es un circuito eléctrico encargado de realizar las operaciones aritméticas (suma, resta, multiplicación y división) y lógicas (comparación de dos números,...). Es el único componente del computador que realiza operaciones. C.U. (Control Unity). Es la parte del computador encargada de gestionar las acciones de los demás elementos. 4 Registros. Elementos de memoria de muy pequeño tamaño, muy pequeña capacidad y extremadamente rápidos. Son el lugar donde se almacenan los resultados de la ALU. Son volátiles (se pierden al reiniciar). C.P.U. (Central Processing Unit). ALU + CU + Registro = CPU Reloj. Sincroniza a todos los componentes del computador. Puede estar incluido en la CU o simplemente estar separado en la CPU. Se define como una señal eléctrica periódica cuadrada. Es muy importante a la hora de medir la velocidad de un computador. = 1/T (ciclos·s−1) o (Hz) Longitud de Palabra. Es el número de BITs que se transmiten entre las diferentes unidades del computador simultáneamente. Se puede comparar al número de cables que existan. • Clasificación de los computadores. − Según la representación interna de los datos. _ Analógicos. _ Digitales. _ Híbridos. − Según su uso. _ Uso general. Ejecutan cualquier tipo de aplicación. PCs. _ Uso específico. Pensados para realizar una sola tarea. Videojuegos. − Empotrados o embebidos. Computadores de uso específico insertados en otros. − Según su potencia de cálculo. (MFLOP!Millón de instrucciones en punto flotante, operaciones con números reales) _ Supercomputadores. 5 • Realizan cálculos científicos intensivos. • Formados por la unión de varias CPU's. • INCARed (9000 Pentium II 200 MHz). 1 TFLOP. _ Mainframes. • Grandes computadores. • Para uso general. _ Minicomputadores. • Mainframes a escala reducida. _ Estaciones de Trabajo. • Computadores potentes de gama baja. _ PC. • 1 MFLOP. • Instrucciones, programas y lenguajes. _ Instrucción es una orden de operación o tratamiento que se da al computador. _ Programa es un conjunto ordenado de instrucciones que dice al computador lo que tiene que hacer para realizar una cierta tarea. _ Lenguaje de programación es el conjunto de instrucciones y reglas para construir programas. Tipos de lenguaje. _ Lenguaje máquina. _ Lenguaje ensamblador. _ Lenguaje de programación. Lenguaje máquina. Sólo lo entiende el ordenador. Está formado por código binario, 0s y 1s. _ Desventajas. • Depende del modelo del computador. • Muy laborioso de programar. • Muy poco legible. • Baja portabilidad. • El programador debe realizar la asignación de memoria. _ Ventajas. 6 • Rapidez. Lenguaje ensamblador. Tiene un mayor nivel de abstracción que el lenguaje máquina ya que no es necesario escribir mediante 0s y 1s. Las instrucciones se representan mediante un código mnemotécnico. ADD 2, 5 D0 _ Ventajas. • Mayor legibilidad que el lenguaje máquina. • Algo más de portabilidad que el lenguaje máquina. • Se pueden utilizar direcciones simbólicas. • Se pueden utilizar nombres simbólicos para las variables. ADD Op1, Op2, Op3 Pueden ser valores explícitos (3) o la dirección de la memoria donde está contenido el valor 3. Programa ensamblador. Es el programa que se encarga de traducir el lenguaje ensamblador a lenguaje máquina. ADD Op1, Op2, Op3 • 010 010 0011 Lenguaje de alto nivel. Es el lenguaje con mayor nivel de abstracción. Es el que más se parece a nuestra forma de expresarnos. Tiene una sintaxis parecida a la nuestra y también posee una semántica muy similar. Fortram, C, Pascal, C++, BASIC, etc. _ Ventajas. • Gran portabilidad. • Código compacto. • Mayor legibilidad. Traductores. _ Compiladores. Traducen el programa inicial o fuente como un todo, es decir, todo de una sola vez, a programa final o máquina. _ Intérpretes. Leen cada instrucción del lenguaje de alto nivel, las interpretan y las ejecutan. Lenguaje de alto nivel Lenguaje máquina 7 • Hardware y Software. _ Hardware. Es el conjunto de circuitos, cables y dispositivos electrónicos en general que constituyen un computador. _ Software. Es el conjunto de programas ejecutables por un computador. • Funcionamiento de los computadores. El lenguaje máquina ha de estar cargado en memoria. Esta tarea la realiza un programa llamado cargador. _ Secuencia de órdenes. • El programa dice al computador dónde empezar a trabajar. • El microprocesador lleva lo que hay en la posición i de la memoria a la CU. • La CU interpreta el código de instrucción. • El microprocesador ejecuta la instrucción. • Se actualiza el valor del contador de programa (i!i+1). Un tipo de registro llamado contador de programa guarda la dirección de la memoria donde se encuentra la siguiente instrucción del programa. Ejemplo. 1 2 3 4 5 6 7 4 5 MOVE.W 1, D0 ADD.W 2, D0 MOVE.W D0, 3 STOP #$2700 Sumando 1 DC.W 4 Sumando 2 DC.W 5 Resultado DS.L 1 Inicio MOVE.W Sumando 1, D0 ADD.W Sumando 2, D0 MOVE.W D0, Resultado STOP #$ 2700 D0 es uno de los Registros de Propósito General (GPR) de la CPU. _Secuencia del ejemplo. • El microprocesador lleva la instrucción que hay en m (4) a la CU. 8 • La CU interpreta la instrucción. • La CU ejecuta la instrucción. • El contador de programa pasa a valer i+1. • Utilización de los computadores. _ Pasos a seguir para usar un computador. • Planteamiento del problema. Definir lo que vamos a hacer, los datos del problema y las operaciones que se harán sobre ellos. DEFINIR EL ALGORITMO. • Análisis. Descomponer el problema en las diferentes fases realizables por el computador. • Implementación o programación. Escribir el algoritmo en lenguaje de alto nivel. • Prueba y depuración. Comprobar que el programa funciona y si no funciona, depurar el error. • Explotación. Hacer uso del programa. _ Analogías con las fases del programador. Fase del Computador Fase Análisis Fase Diseño Fase Implementación Fase Prueba Fase Mantenimiento Fase del Programador Fase de Diseño del Algoritmo Fase de Análisis Fase de Programación Fase de Prueba del programa Fase de Explotación • Aplicaciones de los computadores. _ Características de los problemas solubles con los computadores. • Gran cantidad de datos a tratar de los cuales muchos son comunes. • El proceso debe ser automatizable. • Necesidad de precisión y rapidez en los cálculos. • Necesidad de cálculos complejos. _ Tipos de aplicaciones. • Procesamiento administrativo. (Bancos). • Ciencias. _ Resolución de ecuaciones. _ Análisis estadístico. _ Simulación de modelos. • Ingeniería. Ayuda al desarrollo. _ CAD (Computer Aided Design). _ CAM (Computer Aided Manufacturing). _ CAE (Computer Aided Engineering). 9 • Aritmética computacional. • Información numérica, alfabética y especial. Al computador, toda la información que le introducimos, se la expresamos mediante caracteres. Estos caracteres son símbolos de un alfabeto cualquiera. _ Categorías de caracteres. • Numéricos. {0,1,2,3,4,5,6,7,8,9}. • Alfabéticos.{A,B,C,D,E,F,G,H,I,J,K,L,M,N,Ñ,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,ñ,o,p,q,r,s, • Especiales. {º,ª,\,!,|,,@,·,#,$,%,&,¬,/,(,),=,?,',¡,¿,[,`,^,+,*,],´,¨,{,ç,},,,;,.,:,−,_,<,>}. • Control. Representan órdenes de control. No tienen representación.{fin de línea...}. • Gráficos. {,¤,¶,§,...}. Proceso de codificación. Consiste en traducir todo al sistema binario, es decir, a 0s y 1s. • Representación numérica de la información. Sistemas de numeración en base b. Son sistemas que emplean un alfabeto formado por b símbolos o cifras para representar los números. Todo número se expresa como un conjunto de símbolos, cada uno de los cuales contribuye con un valor al valor final. Ese valor depende del símbolo y de su posición dentro de la cadena que representa al número. Sistema de numeración posicional. N = S1 · b3 + S2 · b2 + Sb · b1 + S2 · b0 S1 S2 Sb S2 Sistema decimal. b = 10. {0,1,2,3,4,5,6,7,8,9}. 323 = 3·102 + 2·101 + 3·100 Sistema octal. b = 8. {0,1,2,3,4,5,6,7}. Sistema hexadecimal. b = 16. {0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}. Ejemplo. 413|10 = 4·102 + 1·101 + 3·100 = 413|10 413|8 = 4·82 + 1·81 + 3·80 = 267|10 413|16 = 4·162 + 1·161 + 3·160 = 1043|10 S23 S102 S31 S40 S2−1 S1−2 S0−3 N = S2 b3 + S10 b2 + S2 b1 + S4 b0 + S2 b−1 + S1 b−2 + S0 b−3 215,13|10 = 2·102 + 1·101 + 5·100 + 1·10−1 + 3·10−2 = 215,13|10 10 215,13|8 = 2·82 + 1·81 + 5·80 + 1·8−1 + 3·8−2 = 141,171875|10 215,13|16 = 1·162 + 1·161 + 5·160 + 1·16−1 + 3·16−2 = 533,0742188 Sistema binario. b = 2. {0,1}. 10101|2 = 1·24 + 0·23 + 1·22 + 0·21 + 1·20 = 21|10 101.01|2 = 1·22 + 0·21 + 1·20 + 0·2−1 + 1·2−1 = 5,25|10 Números básicos en sistema binario. 0 1 2 3 4 000 001 010 011 100 5 6 7 8 9 101 110 111 1000 1001 _ Traducir o convertir de un sistema de representación a otro. _ Sistema Decimal ! Base b. • Dividimos el número entero entre b tantas veces como sea necesario hasta que el cociente de la división sea menor que b. El número en base b se escribiría: cn rn rn−1. • Multiplicamos la parte decimal por la base b tantas veces como creamos oportuno. La parte decimal se escribiría: `d1 d2 d3. Ej. 15|10 ! b = 2 •2 1 7 2 1111|2 = 15|10 •32 •1 12|10 ! b =2 12 2 0 6 2 1100|2 = 12|10 032 •1 0,50|10 ! b = 2 11 0,50 x2 1,00 x 2 0,50|10 = 0.1|2 0,00 x2 0,00 26,1875|10 ! b = 2 26,1875|10 = 11010.0011|2 0,1875 x2 0,3750 26 2 x 2 0 13 2 1 6 2 0,7500 032x2 11 1,5000 x2 1,0000 _ Sistema Octal ! Sistema Binario. 12