contenidomlm/fiq_p/fi1qui04.pdfen este primer cap ‡tulo se deflnen los conceptos fundamentales...

69
Contenido ´ Indice 3 1 Introducci´ on y fundamentos 1 1.1 Inform´ atica y computadoras .............................. 1 1.1.1 Programas e instrucciones ........................... 2 1.2 Estructura funcional de la computadora digital ................... 3 2 Codificaci´ on binaria de la informaci´ on 5 2.1 Sistema binario de numeraci´ on ............................ 5 2.1.1 Conversiones .................................. 6 2.2 Codificaci´ on de n´ umeros enteros ........................... 7 2.3 Codificaci´ on de caracteres ............................... 9 2.4 Otros tipos de informaci´ on ............................... 10 2.4.1 umeros fraccionarios ............................. 10 2.4.2 Formatos gr´ aficos ................................ 11 3 Estructura de la computadora digital 13 3.1 Esquema funcional ................................... 13 3.2 La memoria ....................................... 14 3.2.1 Caracter´ ısticas de las memorias ........................ 14 3

Upload: dinhkhanh

Post on 03-Nov-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

Contenido

Indice 3

1 Introduccion y fundamentos 1

1.1 Informatica y computadoras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.1.1 Programas e instrucciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

1.2 Estructura funcional de la computadora digital . . . . . . . . . . . . . . . . . . . 3

2 Codificacion binaria de la informacion 5

2.1 Sistema binario de numeracion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.1.1 Conversiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2.2 Codificacion de numeros enteros . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

2.3 Codificacion de caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

2.4 Otros tipos de informacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2.4.1 Numeros fraccionarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2.4.2 Formatos graficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

3 Estructura de la computadora digital 13

3.1 Esquema funcional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

3.2 La memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

3.2.1 Caracterısticas de las memorias . . . . . . . . . . . . . . . . . . . . . . . . 14

3

4 CONTENIDO

3.2.2 Medidas de capacidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3.3 Clases de memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

3.3.1 Estructura matricial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

3.3.2 La unidad de memoria central . . . . . . . . . . . . . . . . . . . . . . . . . 17

3.4 La unidad aritmetico-logica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

3.5 La unidad de entrada y salida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

3.5.1 Perifericos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

3.6 La unidad de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

3.6.1 Funcionamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

3.7 Ejecucion de instrucciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

3.7.1 Transferencias entre registros . . . . . . . . . . . . . . . . . . . . . . . . . 28

3.7.2 La instruccion de salto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

4 Lenguajes de programacion 31

4.1 Codigo de maquina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

4.1.1 Codigo mnemotecnico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

4.2 Ensamblador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

4.3 Sistema de explotacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

4.3.1 Estructura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

4.3.2 Funciones de los sistemas de explotacion . . . . . . . . . . . . . . . . . . . 36

4.4 Lenguajes de alto nivel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

4.5 Lenguajes interpretados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

5 Resolucion de problemas 45

c© M.R. Arahal 2003 DISA. ESI. US. 5

5.1 Algoritmos y pseudocodigo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

5.2 Objetos y operaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

5.2.1 Fases del proceso de resolucion de problemas . . . . . . . . . . . . . . . . 49

5.3 Diagramas de flujo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

5.3.1 Sımbolos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

5.4 Programacion estructurada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

5.4.1 Flujo lineal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

5.4.2 Analisis descendente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

6 Desarrollo de algoritmos basicos 57

6.1 Calculos en secuencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

6.2 Bifurcaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

6.3 Bucles simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

6.4 Bucles anidados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

6.5 Otros procesos iterativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

6.5.1 Sucesiones y series . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

6.5.2 Ordenaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

6.5.3 Calculos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

CONTENIDO

Tema 1

Introduccion y fundamentos

En este primer capıtulo se definen los conceptos fundamentales del calculo y tratamiento au-tomaticos de la informacion. Estas son las tareas que realizan las maquinas llamadas computa-doras u ordenadores. Hoy en dıa los usos de la computadora son bien conocidos por la mayorıade las personas, por lo que algunos aspectos tratados pueden parecer triviales. Sin embargo, esconveniente definir y delimitar los terminos que se manejaran en este texto para evitar confu-siones. Junto con tales definiciones se presenta ahora el modelo de computadora que detallaraen el tema 3.

1.1 Informatica y computadoras

La informatica trata de la adquisicion, representacion, tratamiento y transmision de la in-formacion. El termino procede de la union de dos palabras: informacion y automatica. Lainformacion aludida puede ser de muy diversos tipos: numeros, texto, sonido, etc. por lo que elcampo de utilizacion de la informatica es muy amplio como es sabido.

Las maquinas que permiten realizar automaticamente las operaciones citadas se denominancomputadoras y tambien ordenadores. Se puede definir la computadora como un elementocapaz de aceptar informacion, procesarla y proporcionar cierta informacion resultante. La infor-macion ha de ser suministrada de forma adecuada para su tratamiento por parte de la maquina.

El tratamiento ha de realizarse de forma automatica; esto es, con poca o ninguna inter-vencion humana y bajo el control de una lista de tareas previamente definida como se representagraficamente en la figura 1.1.

Es conveniente observar que la definicion dada no explicita la forma de los datos ni tampocola clase de tratamiento que han de sufrir para proporcionar los resultados. Veremos que lacomputadora digital es un dispositivo que cumple con la definicion dada, pero no es el unico.Muchos de los conceptos que se vierten aquı se pueden aplicar a otros dispositivos, sin embargoel objetivo de este libro es la computadora digital.

A fin de ilustrar las interacciones representadas en la 1.1 considerese una calculadora. Los

1

2 TEMA 1. INTRODUCCION Y FUNDAMENTOS

Figura 1.1: La computadora trata la informacion de entrada (datos) para producir resultados.

datos proporcionados por el operador son numeros y operaciones a realizar que la calculadorarecibe al ser presionadas ciertas teclas. Los resultados son numeros que aparecen en el visor.Los datos se convierten en resultados mediante procesos de calculo en los que el operador haintervenido poco (comparado con realizar los calculos a mano). Veremos mas adelante que esposible automatizar mas aun la tarea del calculo, de forma que el operador ahorre esfuerzo.

Como es sabido, el calculo numerico no es la unica aplicacion de las computadoras. Losprogramas para la redaccion de texto, los programas de dibujo artıstico o lineal, los juegos deaccion, las bases de datos, etc. son otros ejemplos de tareas que se realizan con computadoras.

En la actualidad la tecnologıa electronica digital domina el tratamiento automatico de lainformacion, pero esto no ha sido siempre ası. De hecho, las primeras maquinas de calculareran mecanicas. Tambien ha habido computadoras neumaticas y en la actualidad se investigaen posibles usos de la luz para construir ordenadores opticos.

Los conceptos que se definiran a continuacion son de aplicacion en todos los ejemplos men-cionados anteriormente, verificandose el diagrama de la figura 1.1, el cual tiene por tanto unavalidez muy amplia.

1.1.1 Programas e instrucciones

La computadora realiza una lista de tareas llamada programa, la cual esta formada por in-strucciones. Una instruccion es un conjunto de sımbolos que representan una orden de op-eracion o tratamiento de los datos. Por tanto, el programa es un conjunto ordenado de instruc-ciones que se dan a la computadora de forma que se obtengan los resultados a partir de losdatos.

Es conveniente comprender que un programa es una secuencia de instrucciones en un campomucho mas amplio que el que se considerara en este libro. Para aclarar estos conceptos con-siderese el problema de realizar una serie de operaciones en una calculadora de bolsillo, porejemplo obtener x3+2

6 . Para resolverlo basta con pulsar una cierta secuencia de teclas. Estopuede ser bastante tedioso si se ha de aplicar la misma formula una y otra vez con datos dis-

c© M.R. Arahal 2003 DISA. ESI. US. 3

tintos, es decir, para distintos valores de x. Si la calculadora pudiera pulsar sus propias teclasbastarıa con proporcionar unicamente el valor de x. En tal caso el trabajo del operador se vereducido a:

1. Proporcionar una lista con las pulsaciones de teclas: xy , 3 , + , 2 , / , 6 , =

2. Introducir cada valor de x y activar la secuencia anterior.

Notese que el paso 1 solo se ha de realizar una vez, por lo que el operador ahorra muchotiempo y esfuerzo. Esto es, en esencia, lo que realiza una computadora. La lista de teclas apulsar hace, en el ejemplo, las veces de programa. Este programa es proporcionado una vez ypuede ser usado en varias ocasiones.

En este ejemplo sencillo vemos que hay dos tipos de acciones que se realizan con la computa-dora. El primer tipo viene ilustrado por el paso 1 y consiste en proporcionar las instrucciones queforman el programa. Esta operacion recibe el nombre de programacion. Programar la maquinaes por tanto proporcionar el programa o lista ordenada de instrucciones que resuelve una tarea oproblema. Una vez programada, la computadora puede ser usada para obtener resultados a par-tir de datos. A esta tarea se le llama simplemente uso del programa. El mismo programa puedeusarse repetidas veces con datos distintos, ahorrando tiempo al operador, pues son muchas lasinstrucciones que pueden realizarse de forma automatica con solo poner en marcha el programa.

Figura 1.2: Una calculadora programable permite realizar calculos con menor intervencion hu-mana.

Las computadoras son maquinas versatiles gracias a que es posible cambiar el programa.Continuando con el ejemplo, si se precisa calcular otra funcion como 5+x

2

3 para distintos valoresde x basta con cambiar la secuencia de teclas. La misma maquina realiza ahora operacionesdiferentes al activar el programa.

1.2 Estructura funcional de la computadora digital

El esquema de computadora presentado en la figura 1.1 no indica las partes de que consta. Unadescripcion mas detallada mostrarıa los modulos que realizan tareas concretas. En la historiade las computadoras se han utilizado diversas estructuras funcionales, pero en la actualidad la

4 TEMA 1. INTRODUCCION Y FUNDAMENTOS

UALprincipal

Unidad de control

unid

ad d

e en

trad

a/sa

lida

Periféfico 1

Periférico n

Memoria

información

señalesde control

Figura 1.3: Esquema de Von Neumann para la computadora digital.

mas usada deriva del modelo ideado en 1945 por J. Von Neumann, que consta de las siguientespartes:

• Memoria principal. Tiene como mision almacenar informacion. Consiste en un conjuntode celulas cada una de las cuales es capaz de almacenar una unidad de informacion binaria;esto es, un cero o un uno. Las celulas se asocian en bloques para representar informacionesdiversas, como son datos con los que operar, resultados producidos y tambien las instruc-ciones que forman el programa.

• Unidad aritmetico-logica. Este modulo incluye un conjunto de circuitos capaces de re-alizar operaciones aritmeticas (suma, resta, etc.) y logicas (suma logica, negacion, etc.).La unidad aritmetico-logica (UAL) realiza las operaciones citadas bajo el control de launidad de control.

• Unidad de control. Este organo es el responsable de ordenar a la UAL que realice opera-ciones con datos tomados de la memoria, de acuerdo con las instrucciones del programa,las cuales estan tambien en la memoria. La armonizacion del trasvase de informacion entrelos distintos modulos tambien corre a cargo de la unidad de control (UC), por lo que estapuede considerarse como el director del sistema.

• Unidad de entrada y salida. Permite obtener o mandar datos del/al exterior. Las vıasde comunicacion con el mundo externo son los perifericos, que es el nombre genericodado a dispositivos como: el teclado, el monitor, la impresora, el disco, etc.

El diagrama de la computadora digital de acuerdo con esta estructura se puede ver en lafigura 1.3. Hay que resaltar, que la comunicacion entre bloques es de dos tipos: datos y senalesde control. Dentro de los datos se incluye todo tipo de informacion adecuadamente representadaincluyendo la informacion proporcionada (datos en sentido habitual), la informacion procesada(los resultados) y otros.

Las senales de control son ordenes que la UC manda a los distintos elementos para que serealicen las operaciones. La UC y la UAL forman la unidad central de proceso (UCP), que esel responsable de la ejecucion del programa. La memoria tiene un papel pasivo proporcionandolos datos e instrucciones cuando son solicitados por la UCP.

Tema 2

Codificacion binaria de la

informacion

Se ha indicado en el tema introductorio que las computadoras digitales solo manejan informacionen forma de ceros y unos. Sin embargo estamos acostumbrados a ver que las computadoraspermiten utilizar informacion de muchos tipos: texto, graficos, sonidos. Para poder representarla informacion con ceros y unos es necesario usar un codigo.

Los dispositivos electronicos usados para construir las computadoras digitales se disenanpara trabajar en torno a dos valores de tension uno de ellos se asocia con el estado 1 y el otrocon el 0. Estos circuitos son capaces de cobijar los valores cero y uno por lo que constituyenceldas de memoria que almacenan estos valores binarios. En este tema se muestra en que formaes posible representar informacion diversa usando unicamente los valores cero y uno.

2.1 Sistema binario de numeracion

Los numeros se pueden expresar en distintos sistemas de numeracion. Como es sabido, el masusual es el sistema en base 10. En este sistema, llamado decimal, se interpretan las cifras comocoeficientes de un polinomio en potencias de 10:

N |10= dn · 10n + · · ·+ d1 · 101 + d0 · 100

donde los dıgitos dn a d0 constituyen el numero en base 10. Para aclarar ideas considerese elnumero 1492. En base 10 se interpreta como: un millar mas cuatro centenas mas nueve decenasmas dos unidades, o lo que es lo mismo:

1492 = 1 · 103 + 4 · 102 + 9 · 101 + 2 · 100

Los dıgitos o coeficientes del polinomio son las cifras 1, 4, 9 y 2. En el sistema decimal setrabaja con cifras del 0 al 9. En el sistema binario la base es el 2, por lo que solo existen dos

5

6 TEMA 2. CODIFICACION BINARIA DE LA INFORMACION

posibles coeficientes: el cero y el uno. La interpretacion de un numero escrito en base dos es lamisma que en decimal, pero cambiando la base:

N |2= bn · 2n + · · ·+ b1 · 21 + b0 · 20 (2.1)

ası el numero 01001 en base dos (indicado frecuentemente como 01001 |2)) se interpreta como lacantidad

0 · 24 + 1 · 23 + 0 · 22 + 0 · 21 + 1 · 20 = 9 |10

Observese que se ha indicado la base utilizada mediante un subındice. Habitualmente setrabaja en base 10, por lo que se omite dicho subındice. A los coeficientes di de la representaciondigital se les llama dıgitos, a los de la binaria bi se les llama bits1.

Los sistemas decimal y binario son solo dos ejemplos de una infinidad de posibles sistemas conbase b . En general, el Teorema Fundamental de la Numeracion proporciona el valor decimal deuna cantidad expresada en base b por ciertas cifras. Sean los dıgitos gpgp−1 · · · g0.g−1 · · · g−n,donde el punto separa la parte entera de la fraccionaria (en la base en cuestion), entonces elvalor decimal es

N |b=i=p∑

i=−n

gi · bi

Otros sistemas de representacion numerica muy usados en informatica son el octal, cuya basees 8 y por tanto usa las las cifras del 0 al 7 y el hexadecimal, de base 16. Este ultimo sistemaplantea un problema a la hora de escribir numeros y es que son necesarios 16 dıgitos distintos.En el sistema decimal solo hay diez dıgitos: 0, 1, 2, 3, 4, 5, 6, 7, 8 y 9. Para obtener los restantesseis dıgitos se utilizan las letras A, B, C, D, E y F para representar los valores 10, 11, 12, 13, 14y 15 respectivamente.

2.1.1 Conversiones

Las conversiones permiten obtener las cifras correspondientes a una misma cantidad en distintasbases. En informatica la conversion mas usada es la de decimal a binario y viceversa, por ellose van a describir con detalle.

Al realizar una conversion hay que tener en cuenta que la cantidad representada no cambia,lo que se modifica es la forma en que se simboliza dicha cantidad.

Dado un numero en base dos, es facil hallar su equivalente decimal sin mas que aplicar larelacion (2.1). Es decir, realizando la suma de potencias de dos. Por ejemplo el numero 1 |2)equivale a 1 · 20 que es el uno en base 10, por tanto 1 |2)= 1 |10). Del mismo modo se obtieneque 101 |2)= 1 · 22 + 0 · 21 + 1 · 20 = 5 |10).

El paso contrario, es decir, el paso de de decimal a binario, es mas elaborado. Una posibilidades dividir sucesivamente el numero por dos. Los restos de las divisiones dan el numero enbinario, leıdos en sentido ascendente, tal como se muestra en la figura 2.1 donde se obtiene larepresentacion en base dos del numero 214 |10).

1del ingles binary digit

c© M.R. Arahal 2003 DISA. ESI. US. 7

2

2

2

2

2

2

2

11010110 1

2

214

107

53

26

13

6

30

1

0

1

1

0

1 1

0

Figura 2.1: Metodo de la division larga para la conversion de base 10 a base 2.

Resulta interesante conocer las potencias de dos de ciertos numeros para ası realizar conver-siones de forma rapida sin usar la regla de la division.

potencia decimal binario20 1 121 2 1022 4 10023 8 100024 16 1000025 32 10000026 64 100000027 128 1000000028 256 10000000029 512 1000000000210 1024 10000000000

Ciertas conversiones resultan comodas de este modo. Por ejemplo, para pasar a binario elnumero decimal 18 basta con observar que 18 |10)= 16+2 y por tanto igual a 24 +21, por lo quela representacion en base dos resulta 10000 |2) +10 |2)= 10010 |2); es decir, 18 |10)= 10010 |2).

2.2 Codificacion de numeros enteros

La memoria de una computadora esta formada por muchas celulas elementales agrupadas enregistros. Cada celda solo pueden representar los numeros 0 o 1, pero al considerar un grupo deellas (el registro) se pueden codificar numeros mayores como veremos.

Para representar un numero entero positivo mediante un conjunto de bits se puede usar lacodificacion del numero en base 2. De este modo, si se dispone de registros de 16 celdas esposible almacenar los numeros entre el 0 y el 216 − 1 = 65535. Si el numero de celdas es mayor,digamos 20, es posible ampliar el rango representable desde cero hasta 220 − 1 = 1048575.

La computadoras digitales utilizan registros de una anchura determinada, por lo que existenlımites a los numeros que es posible representar. Este hecho caracterıstico de los sistemasdigitales no sorprendera a quien haya utilizado una calculadora.

La representacion mostrada que utiliza la base dos es facil de entender y de usar, por lo quees largamente utilizada. Ahora bien, ¿y los numeros negativos?. El signo menos tendrıa que

8 TEMA 2. CODIFICACION BINARIA DE LA INFORMACION

poder expresarse como un cero o un uno. La idea mas simple es usar el bit mas a la izquierdadel registro para indicar el signo del numero. Esta y otras posibles representaciones se explicana continuacion.

1. Modo signo-valor absoluto. Se reserva un bit de la palabra (normalmente el izquierdo)para el signo. Los numeros positivos tienen un valor 0 para este bit y los negativos unvalor 1. Este sistema queda descrito de forma grafica del siguiente modo:

︸︷︷︸

s

. . .︸ ︷︷ ︸

va

donde s simboliza el bit de signo, y va la representacion en base dos del valor absoluto.

De este modo, con un registro de 16 unidades se pueden representar los numeros del -32767 hasta el 32767. En general, para un numero de bits en la palabra igual a n sepueden representar los enteros comprendidos en el rango

[−(2n−1 − 1), 2n−1 − 1

].

Como ejemplo considerense los numeros 5 y −4 codificados en un registro de 8 bits:5 = 00000101, −4 = 10000100

El numero de celdas n del registro afecta a la representacion de los negativos, pues el bitde signo debe quedar a la izquierda. A modo de ejemplo vease la representacion de losnumeros 5 y −4 codificados en un registro de 6 bits

5 = 000101, −4 = 100100Es indispensable conocer n para saber donde esta el signo.

Otra caracterıstica de este sistema es que tiene dos ceros: el positivo (0 00 . . . 0) y elnegativo (1 00 . . . 0).

2. Complemento a 1. Nuevamente se reserva el primer bit para el signo. El resto de lacodificacion es: el numero en base dos si el signo es positivo o el complemento bit a bitdel valor absoluto si es negativo. Es decir, los numeros positivos se representan igual queen el sistema anterior, mientras que, los negativos sufren el cambio de los unos por cerosy los ceros por unos (excepto el bit de signo).

El ejemplo anterior en se expresa en complemento a uno con ocho bits del siguiente modo:5 = 00000101, −4 = 11111011

Utilizando seis bits resulta:5 = 000101, −4 = 111011

Este sistema tambien tiene dos ceros: el positivo (00 . . . 0) y el negativo (11 . . . 1). Paraun numero de bits en la palabra igual a n se pueden representar los enteros comprendidosen el rango

[−(2n−1 − 1), 2n−1 − 1

].

3. Complemento a 2. Los dos sistemas anteriormente vistos presentan dificultades a lahora de realizar sumas y restas mediante circuitos logicos, por lo que se ha buscado otrometodo. El complemento a dos de un numero es igual al complemento a uno mas uno;es decir, los numeros positivos se representan igual que en el sistema signo-valor absoluto,pero los numeros negativos se codifican con el bit de signo igual a uno y el resto como 1mas el complemento bit a bit del valor absoluto en base dos. Los numeros negativos serepresentan pues igual que en complemento a 1 sumandoles 1.

El ejemplo habitual con ocho bits queda:5 = 00000101, −4 = 11111100

c© M.R. Arahal 2003 DISA. ESI. US. 9

Utilizando seis bits resulta:5 = 000101, −4 = 111100

Los numeros que se pueden representar usando un registro de n celulas son los enteroscomprendidos en el rango:

[−2n−1, 2n−1 − 1

]. Se observa que en el lado de los negativos

hay un numero mas. Esto es consecuencia de que solo existe un cero: (00 . . . 0) que usa elespacio de un numero positivo. El numero −2n−1 tiene siempre la representacion especial10 · · · 0 que corresponde al cero negativo en los metodos anteriores.

2.3 Codificacion de caracteres

Muchas veces la informacion que la computadora ha de procesar no son numeros sino caracterestextuales tales como:

• Letras mayusculas y minusculas.

• Dıgitos. Para escribir las cifras de un telefono, o la hora, o numeros.

• Signos: ? ( ) , { } ♥ [ ] + $ . . .

• Codigos sin representacion grafica, pero con funciones de control, por ejemplo el retornode carro de la impresora, el aviso sonoro, los codigos de mensaje recibido, fin de mensaje,fin de fichero, etc. que se transmiten entre dispositivos.

Para transmitir y almacenar informacion de este tipo se creo el ASCII (American StandardCode for Information Interchange), que es un codigo que asigna arbitrariamente un numeroentero a cada signo. Los numeros son luego representados en base dos para poder ser tratadospor la computadora.

El ASCII usa 7 bits, por lo que se pueden representar 27 = 128 signos distintos. Estosincluyen numeros, el alfabeto ingles en mayusculas y minusculas, signos matematicos y de pun-tuacion y algunos caracteres de control. Una version posterior de este codigo es el ASCIIextendido, que usa 8 bits, por lo que se pueden representar 256 signos. Esto pemite incluir laletra n y otras de diversos alfabetos.

El conjunto de signos incluidos en el codigo recibe el nombre de tabla ascii. En la tabla2.1 se muestran los codigos ascii correspondientes a algunos caracteres. Observese que las letrasvan en orden alfabetico a excepcion de la letra n. Las mayusculas estan colocadas en la tablaantes que las minusculas. Tambien es de interes observar que existen codigos sin representaciongrafica, que se han marcado como cc pues son codigos de control.

Los caracteres de control son combinaciones de ocho dıgitos binarios, al igual que el restode la tabla ASCII. Lo que los hace en cierto modo especiales es el modo en que los perifericoslos usan. Al contrario que las letras y signos que aparecen por la pantalla o la impresora, loscodigos de control realizan cierta funcion sobre el dispositivo. La tabla 2.2 resume algunas de lasfunciones mas usadas. La primera columna indica el numero dentro de la tabla ascii, la segundaes un nombre abreviado de la funcion que realiza, la cual se explica en la tercera columna.

10 TEMA 2. CODIFICACION BINARIA DE LA INFORMACION

Nro. Signo

0 cc

1 cc

2 cc

3 cc...

...

46 .47 /

Nro. Signo

48 049 150 251 3...

...

57 958 :

Nro. Signo

63 ?64 @65 A66 B67 C...

...

90 Z

Nro. Signo...

...

97 a98 b99 c

100 d101 e102 f

Nro. Signo...

...

161 ı162 o163 u164 n165 n166 a

Tabla 2.1: Fragmentos de la tabla ascii.

Transmisiones Pantalla o impresora1 SOH comienzo de cabecera 7 BEL senal audible2 STX comienzo de texto 8 BS retroceso3 ETX fin de texto 9 HT tabulacion horizontal4 EOT fin de la transmision 10 LF avance de lınea5 ENQ peticion de transmision 11 VT tabulacion vertical6 ACK reconicimiento de transmision 13 CR retorno de carro

Tabla 2.2: Algunos codigos de control.

2.4 Otros tipos de informacion

2.4.1 Numeros fraccionarios

Los numeros con decimales tambien se pueden expresar en binario, usando para ello potenciasnegativas de dos. Por ejemplo, el numero 101.11 |2 representa la cantidad 1 · 22 +0 · 21 +1 · 20 +1 · 2−1 + 1 · 2−2 = 4 + 1 + 0.5 + 0.25 = 5.75 |10.

En las computadoras digitales se plantea el problema de representar el punto decimal y deinterpretarlo. A continuacion se describen dos posibles soluciones

1. Punto fijo. Se reservan algunos bits del registro para la parte entera del numero enbinario y otros para la fraccionaria; es decir, a partir de una posicion predeterminada, loscoeficientes multiplican potencias negativas de dos. Este sistema queda descrito de formagrafica del siguiente modo:

2p 21 20 2−1 2−2 2−q

· · · . · · ·

donde se han reservado p + 1 celdas para la parte entera y q para la fraccionaria. No seha tenido en cuenta el problema del signo.

Considerese a modo de ejemplo que se tiene un registro de ocho celdas, y el punto decimalse fija antes de los dos ultimos bits, entonces el numero 000001.10 |2 se interpreta como:

1 · 20 + 1 · 2−1 = 1.5 |10

c© M.R. Arahal 2003 DISA. ESI. US. 11

y el numero 000010.01 |2 como 2.25 |10.Los circuitos de la UAL se construyen de forma que cada parte del registro es tratadacorrectamente de acuerdo a la posicion del punto decimal que es fija. Las operaciones serealizan adecuadamente en cada parte del registro.

El problema de esta tecnica es que hay que fijar el punto decimal en un sitio concreto, porlo cual no se puede trabajar con numeros muy dispares (por ejemplo 25000.0 y 0.00052) amenos que se disponga de un numero de bits muy alto. Debido a esto, este sistema se usapoco en la actualidad.

2. Punto flotante.

El numero (N) a representar se transforma en dos (M,E) de forma que N = M · 2E . Laprimera cantidad, M es llamada mantisa, la segunda E el exponente. Puesto que existenmuchas combinaciones de M y E que cumplen N = M · 2E se eligen adecuadamentede acuerdo con alguna regla. Las mas comunes exigen que 0.5 ≤| M |< 1, por lo querepresentacion binaria de | M | comienza por 0.1. De este modo queda fijado M y portanto N .

Para aclarar el metodo es mejor pensar en la representacion decimal. Un numero condecimales tal y como 340.126 puede expresarse como 3.40126 · 102 o como 0.0340126 · 104

o como 0.340126 · 103.

Se denomina ajuste fraccionario o normalizacion al proceso de seleccion de la man-tisa y el exponente de forma que cumpla con las especificaciones. Despues de la normal-izacion cada numero M y N se codifica en un trozo de registro.

Queda por resolver el problema de representar el signo tanto de la mantisa como delexponente. Para ello basta con utilizar alguno de los metodos vistos, como el signo-valorabsoluto o el exceso a 2n−1.

Existen varios formatos de punto flotante con sus reglas especıficas como IEEE 754. No seva a describir con detalle ninguno de estos formatos, baste saber que todos ellos son muysimilares al caso comentado, que puede mostrarse de forma grafica como:

s . . . .︸ ︷︷ ︸

mantisa

s . . .︸ ︷︷ ︸

exponente

Dado un numero n de celdas el punto flotante permite representar la misma cantidad devalores que el punto fijo pues las posibles combinaciones con n son las mismas. Ahora bien,el rango de valores representables es mayor en punto flotante, pues el exponente permitealcanzar numeros muy altos si es positivo o muy cercanos a cero si es negativo. Esta es lagran ventaja del punto flotante frente al fijo y la razon de su uso.

2.4.2 Formatos graficos

Las imagenes pueden representarse mediante conjunto de puntos con un color o tonalidad de grisdado. Esta es la idea usada por formatos graficos denominados matrices de puntos (llamadosen ingles formatos raster y bitmapped). En la figura 2.2 se representa una silueta en blanco ynegro descrita mediante una matriz de unos y ceros. El cero indica un punto luminoso y el unoun punto oscuro. Resulta imaginable que teniendo una matriz con muchos elementos se puedenconseguir imagenes de gran calidad.

12 TEMA 2. CODIFICACION BINARIA DE LA INFORMACION

Figura 2.2: Descripcion de una imagen (izquierda) usando una matriz de valores binarios(derecha).

7.500 slw% Ellipsen 900 1050 525 300 0 360 DrawEllipse gs col-1 s gr

% Polylinen 615 270 m 2100 1200 l gs col-1 s gr

Figura 2.3: Descripcion de una imagen (izquierda) en forma vectorial mediante PostScript.

Las imagenes resultantes son en blanco puro y negro puro, como siluetas. Para conseguirgrises se puede definir la misma matriz conteniendo numeros del 0 al 255, de forma que a cadanivel de gris le corresponde un numero, siendo 0 el negro y 255 el blanco. Cada elemento de lamatriz ahora no es un bit, sino un caracter (8 bits). Para obtener el color se puede realizar lamisma operacion 3 veces, una para cada color rojo, verde y azul.

Este formato precisa mucha memoria, por ejemplo, para almacenar una imagen en colorde 200 × 200 puntos con ocho bits para cada color se necesitan 200 × 200 × 3 × 256 bits, queaproximadamente son 3.7 Mc.

Un metodo alternativo consiste en describir la imagen mediante ecuaciones correspondientesa lıneas, superficies, etc, de forma que la union de las partes produzca (aproximadamente) laimagen total. Se habla entonces de graficos vectoriales. La codificacion de la imagen sereduce a la de las ecuaciones de las partes. Estas ecuaciones pueden representarse de muchasformas. Por ejemplo un segmento queda perfectamente definido por las coordenadas de suspuntos extremos, una circunferencia por las de su centro y un punto de la misma, etc.

A modo de ejemplo considerese el dibujo de la figura 2.3 consistente en un segmento y unaelipse. Utilizando el formato PostScript estos elementos quedan definidos en la forma en que semuestra a la derecha.

Los graficos vectoriales son adecuados para dibujos formados por elementos geometricossimples. Ambos metodos (matrices de puntos y graficos vectoriales) se combinan en los formatosdenominados meta archivos (metafiles), usados por muchos programas para poder incluir objetosformados por lıneas precisas, como planos y esquemas, junto a otros que quedan mejor descritosmediante una matriz de puntos como fotografıas.

Tema 3

Estructura de la computadora digital

3.1 Esquema funcional

Como se avanzo en el tema 1, la computadora digital esta formada por varias unidades con tareasclaramente diferenciadas. Recordemos ahora el diagrama de bloques que puede verse en figura3.1. Hay que resaltar, que la comunicacion entre bloques es de dos tipos: informacion (datos) ysenales de control. Dentro de los datos se incluye todo tipo de informacion adecuadamente rep-resentada incluyendo la informacion proporcionada (datos en sentido habitual), la informacionprocesada (los resultados) y otros (direcciones de memoria, estados, etc).

Las senales de control son ordenes que la UC manda a los distintos elementos para que serealicen las operaciones. La UC y la UAL forman la unidad central de proceso (UCP), que esel responsable de la ejecucion del programa. La memoria tiene un papel pasivo proporcionandolos datos e instrucciones cuando son solicitados por la UCP.

En este tema se va a profundizar en el estudio de las distintas partes funcionales de la com-putadora, comenzando por la memoria y terminando con la unidad de control. Posteriormentese explicara en que forma funciona el conjunto.

UALprincipal

Unidad de control

unid

ad d

e en

trad

a/sa

lida

Periféfico 1

Periférico n

Memoria

información

señalesde control

Figura 3.1: Modelo de Von Neumann de la computadora digital.

13

14 TEMA 3. ESTRUCTURA DE LA COMPUTADORA DIGITAL

3.2 La memoria

El tratamiento automatico de la informacion requiere el almacenamiento de la misma de formamas o menos permanente. Para resolver este problema se han propuesto historicamente solu-ciones diversas muy imaginativas como lıneas de retraso, tubos de mercurio y nucleos de ferrita.

La memoria en una computadora es un dispositivo capaz de almacenar informacion. Paraservir a los propositos del tratamiento automatico de la informacion la memoria ha de ser capazde recuperar cualquier informacion, proporcionandola al exterior solo cuando sea solicitada.

Como ya se ha dicho, las computadoras digitales trabajan con datos binarios, por lo quela memoria debe poder guardar variables que toman dos valores: 0 o 1. Para ello basta conagrupar celdas elementales formando registros. Los registros se apilan para formar bloquesmayores, como resultado las memorias actuales tienen capacidad para varios millones de bits.

En la arquitectura de Von Neumann (figura 3.1) la memoria es el bloque que almacena tantolos datos y resultados como las instrucciones. A peticion de la unidad de control la memoria escapaz de realizar dos operaciones:

• Lectura. Consiste en extraer una copia de cierta informacion. En la mayorıa de los casostal informacion pueden leerse cuantas veces se desee, pues no es destruida por el procesode lectura.

• Escritura. La escritura permite almacenar informacion dentro de la memoria. Los datosque se van a almacenar ocuparan algunas celdas de la memoria que previamente contenıanotros valores, por lo tanto el proceso de escritura siempre conlleva la desaparicion de losdatos que ocupaban el lugar donde se introducen los nuevos.

3.2.1 Caracterısticas de las memorias

En la historia de las computadoras se han usado muchos dispositivos para almacenar informacion.En la actualidad se usan circuitos integrados, discos magneticos y discos opticos. Cualquieraque sea el soporte de la informacion la memoria queda definida por ciertas propiedades o carac-terısticas como son:

• Tiempo de acceso. Es el que transcurre entre el instante en que se ordena la lectura/escriturade una informacion y el momento en que esta disponible para su procesamiento. Interesaque sea lo mas bajo posible, no obstante este requerimiento entra en conflicto con el coste.

• Capacidad. Es el numero de unidades de informacion que puede almacenar una memoria.Como suelen ser numeros muy altos se usan multiplos como kilo y mega.

• Modo de acceso. Hay varias formas en las que se puede accceder a la informacion, entrelas que destacan el acceso directo y el secuencial, que se definen a continuacion.

Acceso directo. Para llegar a una determinada informacion no es preciso pasar por lasanteriores. Este modo es tambien llamado aleatorio. El tiempo invertido en el acceso

c© M.R. Arahal 2003 DISA. ESI. US. 15

es independiente de donde se encuentre la informacion. Las memorias que empleaneste tipo de acceso se denominan genericamenete RAM, del ingles Random AccessMemory.

Acceso secuencial. En este tipo de acceso, para llegar a un dato hay que dejar pasarla informacion que le precede. Esto es lo que sucede, por ejemplo, cuando se usa unacinta magnetica.

• Volatilidad. La informacion almacenada en una memoria es volatil si puede destruirse oalterarse al cesar el suministro de energıa al dispositivo que constituye la memoria. Estaes la situacion normal en memorias de semiconductores, que necesitan suministro electricopara conservar los datos. Los discos y cintas son por contra no volatiles.

3.2.2 Medidas de capacidad

Las memorias como se ve pueden ser de muchos tipos, la mas importante para nuestro estudiode la computadora digital es la memoria principal. En los equipos actuales esta memoria estarealizada mediante circuitos semiconductores que forman puertas logicas. De este modo surge lacelda que da cobijo a la unidad fundamental de informacion. Estos y otros conceptos se definena continuacion.

• Bit. Se denomina bit a la unidad elemental de informacion binaria. El bit es la informacioncontenida en una celula de memoria, es decir, un cero o un uno. Cualquier informacionbinaria puede codificarse mediante una cadena de bits mas o menos larga.

• Caracter. Las celulas de memoria se suelen agrupar formando registros. Una agrupacionmuy usada es la formada por ocho celulas, denominada octeto. La informacion con-stituida por ocho bits, y que se puede almacenar en un octeto se llama caracter o, maspopularmente, byte.

• Palabra. Los registros de una computadora estan formados por cierto numero de bits, losmas usuales son de 16, 32 y 64 unidades. La informacion almacenada en un registro sedenomina palabra.

Se ha de notar la diferencia entre unidades de informacion: bit, caracer y palabra, y elsoporte donde se guardan: unidad de memoria, octeto y registro, respectivamente.

Al tratar con memorias la unidad basica suele ser el caracter o byte. En terminos informaticoskilo es un prefijo que equivale a 210 = 1024 unidades, pues es la potencia exacta de dos masproxima a mil. Del mismo modo, mega equivale a 220 = 1048576 unidades. En la tabla siguientese muestran algunos tamanos de memorias expresados de varios modos.

abreviatura cantidad bits caracteres

1 Kc kilocaracter 8 · 210 210

1 Mc megacaracter 8 · 220 220

1 Gc gigacaracter 8 · 230 230

1 Tc teracaracter 8 · 240 240

16 TEMA 3. ESTRUCTURA DE LA COMPUTADORA DIGITAL

3.3 Clases de memoria

Aunque el esquema de la figura 3.1 no lo muestra, el hecho es que existen dentro de la computa-dora varias clases de memoria, atendiendo cada una a una mision particular. En esta seccion seenumeran algunos de los tipos mas habituales de memoria.

• Memoria principal. Es la que contiene el programa en el momento de la ejecucion delmismo. Suele estar constituida por circuitos integrados, que es la forma de almacenamientomas rapida. En la mayorıa de los casos es de tipo volatil y de acceso directo. Esta memoriasuele ser expansible a voluntad del operario; para ello basta con anadir mas circuitosintegrados a las tarjetas de la computadora.

• Memoria auxiliar. La memoria auxiliar es un dispositivo externo1 que contiene infor-macion. Entre otros pueden citarse el disco duro, el disco optico y los discos flexibles.Son llamadas tambien memorias masivas. La velocidad de acceso suele ser menor que lade la memoria principal, pero la capacidad de almacenamiento mayor. Al ser un periferico,el trasvase de datos entre la memoria auxiliar requiere un adaptador que es la unidad deentrada y salida (vease figura 3.1).

3.3.1 Estructura matricial

La memoria principal en los equipos actuales esta constituida por circuitos integrados en cuyointerior residen las celulas basicas de memoria, organizadas en registros como ya se ha dicho.Una forma de representar esto es usando una disposicion rectangular a base de filas y columnas,como se muestra en la figura 3.2. Cada fila es un registro de n bits, siendo n el ancho o longitudde la palabra. El numero de filas N suele ser muy alto como puede suponerse sabiendo lacapacidad normal de las memorias actuales que es de varios megacaracteres. Cada registropuede ser seleccionado mediante un hilo2. Para acceder a los bits individuales que forman lapalabra contenida en el registro se tienen n hilos llamados de lectura/escritura (abreviadamentel/e).

La lectura se realiza transmitiendo por los hilos de l/e la informacion de cada celda delregistro seleccionado. La escritura realiza el proceso inverso, destruyendo la informacion queresidıa previamente en el registro seleccionado.

Cada registro de la memoria tiene asignado un numero llamado direccion. Es habitualconceder al registro superior el numero 0 y al inferior en numero N − 1, siendo N el numerototal de registros.

Para acceder a la informacion de la memoria es preciso conocer la direccion en la que seencuentra. Conocida dicha direccion se puede seleccionar el registro en cuestion y procederposteriormente a la lectura o escritura.

1Necesita conexion especial para unirse al resto de modulos.2Termino heredado de los dıas en que las memorias eran de nucleos de ferrita ensartados en los nodos de una

red de hilos conductores.

c© M.R. Arahal 2003 DISA. ESI. US. 17

registro

célula dememoria

hilos deselección

hilos de lectura y escritura

N

n

Figura 3.2: Estructura matricial de la memoria.

Por tanto, la seleccion de la informacion es un paso previo a la lectura o escritura y se haceactuando sobre el hilo que correspondiente a la direccion dada. Esto lo realiza el decodificadorde direcciones.

La direccion que se proporciona al decodificador es el numero de la palabra dentro de lamemoria, pero codificado en binario. Si la memoria tiene N = 2m palabras es necesario darleal decodificador un numero en binario entre 0 y 2m − 1. Para expresar este valor hacen faltaprecisamente m dıgitos binarios; es decir, la direccion es un numero binario de m bits.

Para proporcionar al decodificador la direccion se usa un registro llamado de seleccion dedireccion que puede verse en la la figura 3.3 junto con el decodificador de direcciones.

m mN = 2

n

10

de d

irec

cion

esde

codi

fica

dor

N-1

Figura 3.3: Diagrama de la memoria organizada matricialmente incluyendo el registro de se-leccion de direcciones y el decodificador.

3.3.2 La unidad de memoria central

A modo de resumen, y para hacerse una idea de como se enlazan los elementos vistos hastaahora relativos a las memorias, se analizara la memoria central de una computadora. Esta estaformada por una matriz celular de elementos de memoria, un decodificador de direcciones y unapequena unidad de control que coordina las operaciones necesarias para leer o escribir; todo ellodentro de un circuito integrado. Los bloques funcionales se pueden ver en la figura 3.4, y se

18 TEMA 3. ESTRUCTURA DE LA COMPUTADORA DIGITAL

describen a continuacion.

• S. Es el registro selector de direcciones de memoria. Almacena m bits que representan (enbinario, por supuesto) la direccion del registro a seleccionar.

• LECM, ESCM. Son dos senales de control mediante las cuales la UC ordena escribir o leer.

• T. Es un registro tampon o de almacenamiento temporal que realiza la funcion de antesalade la memoria. Durante una lectura recibe una copia de los n bits contenidos en la posicionseleccionada. Durante la escritura contiene la informacion que se va a escribir.

S

T

Dec

odif

icad

orm

n

LECM

ESCM

direcciones

datos

Figura 3.4: Diagrama de bloques de la memoria central mostrando los registros y senales degobierno.

Para realizar una operacion de lectura o escritura con la estructura anteriormente descrita,es necesario seguir un procedimiento que se detalla a continuacion.

• Lectura. El objetivo final es obtener una copia del contenido de una direccion particular dela memoria. Los pasos a seguir son:

• Seleccionar la direccion que contiene la informacion a recuperar; para ello se ha deintroducir dicha direccion en el registro S.

• Dar la orden de lectura activando LECM; es decir, dando el valor logico 1 a LECM.Con esto se consigue que la palabra seleccionada transfiera una copia de sus bits alregistro T.

• Tomar el contenido del registro T, el cual contiene una copia de la palabra buscada.

• Escritura. La escritura consiste en introducir una informacion dada en una posicion dememoria concreta conocida. Los pasos a seguir son:

• Selecionar la direccion que contiene la informacion a recuperar; para ello se ha deintroducir dicha direccion en el registro S.

• Copiar en T la informacion que se quiere escribir en la memoria. Para ello se usanlos hilos de bit que conectan cada palabra de la memoria con el registro T.

• Activar la senal de escritura haciendo ESCM=1.

c© M.R. Arahal 2003 DISA. ESI. US. 19

3.4 La unidad aritmetico-logica

Utilizando circuitos electronicos es posible combinar el contenido de dos registros de memoriade forma que se obtenga un tercer registro que guarde alguna relacion con los primeros. Porejemplo de forma que el registro resultado sea la suma de los registros iniciales.

La figura 3.5 ilustra esta idea. Puede verse que el registro 1 contiene los bits 010010 quepuede interpretarse como el numero binario 010010 |2) que en decimal es 010010 |2)= 18 |10).Similarmente, el registro 2 contiene los bits 000011 que puede interpretarse como el numerobinario 000011 |2) que en decimal es 000011 |2)= 3 |10). Es facil comprobar que el circuitosumador debe combinar la informacion de ambos registros de tal modo que el registro resultadocontenga 010101 que es la representacion binaria de la cantidad 18 + 3 = 21.

010010 000011

Registro 1 Registro 2

Sumador

010101

Registro resultado

Figura 3.5: Circuito sumador.

Existen circuitos capaces de realizar operaciones aritmeticas como la suma, la resta, etc.Tambien interesan operaciones llamadas logicas. Como ejemplo de operaciones logicas se puedecitar la comparacion de igualdad. Un circuito comparador produce el valor binario 1 si los dosregistros R1 y R2 son iguales y el valor 0 en caso contrario.

La construccion de la UAL se lleva a cabo hoy en dıa en una pastilla de silicio, agrupandouna serie de circuitos con puertas logicas. Estos circuitos son capaces de realizar tareas concretascomo desplazamientos, sumas, comparaciones, etc. La unidad de control que tambien reside enla pastilla puede seleccionar la operacion a efectuar gracias a las senales de control. La activacionde alguna de estas senales provoca la puesta en marcha de la operacion correspondiente.

Los dos operandos provienen de la memoria. Para operar con ellos se saca una copia que seguarda en registros especiales separados de la memoria central . Frecuentemente, en computa-doras y calculadoras, el resultado de las operaciones se almacena en un registro A que recibeel nombre de registro acumulador. Para reducir el tamano de la UAL, el acumulador es amenudo tambien el soporte de uno de los operandos.

La UAL recibe ordenes de la unidad de control que especifican la operacion a realizar conlos datos del acumulador y del registro de operando. El resultado de las operaciones queda enel acumulador a la espera de ser transferido cuando lo indique la unidad de control.

La figura 3.6 muestra un diagrama de la UAL en el que se detalla el acumulador. El bloque

20 TEMA 3. ESTRUCTURA DE LA COMPUTADORA DIGITAL

Señales decontrol.

A

segundo operando

MULTSUMA

estado

···

primer operando

Figura 3.6: Esquema de la Unidad Aritmetico Logica mostrando el acumulador y las senales degobierno.

con forma de v invertida contiene los circuitos que realizan las operaciones. Como se ha dicho,el acumulador contiene el primer operando. El registro para el segundo operando se consideraen el interior de dicho bloque por lo que no se ha dibujado.

3.5 La unidad de entrada y salida

Para poder ser de alguna utilidad, la computadora ha de interaccionar con el exterior. Larecogida de datos y la evacuacion de resultados se llevan a cabo mediante dispositivos variadoscomo son el teclado y la pantalla y que reciben el nombre de perifericos.

El reto que plantea la comunicacion de la computadora con el exterior a traves de dispositivosdiferentes reside fundamentalmente en la distinta velocidad de transmision de estos. En efecto,considerese un teclado; la informacion que proviene del mismo no suele superar los 20 caracterespor segundo, es decir hay 0.05 segundos de espera entre caracter y caracter. Durante estos 0.05segundos la computadora puede realizar miles de operaciones. Sin embargo otros dispositivosadmiten una velocidad mayor, como por ejemplo los discos y las impresoras. La computadoraha de adecuar sus operaciones al ritmo de transmision de datos, so pena de perder informacion.

Tıpicamente, los perifericos se conectan al enlace de la computadora mediante circuitos querealizan las adaptaciones necesarias (niveles de tension, formato de la informacion, etc.). Esta esla situacion mostrada en la figura 3.7. En el desarrollo del capıtulo se van a describir brevementealgunos perifericos, para pasar posteriormente al problema de la comunicacion entre estos y laUCP.

3.5.1 Perifericos

Como se ha dicho, los perifericos son dispositivos que permiten el trasvase de informacion desdeel exterior a la computadora o al contrario. Los mas comunes son descritos a continuacion:

Teclado Permite tanto introducir texto, numeros y proporcionar senales para los programas. Secompone de pulsadores electromecanicos que mandan un codigo identificador a un espaciode almacenamiento temporal que la computadora lee y vacıa periodicamente. Las teclasque incluye son:

c© M.R. Arahal 2003 DISA. ESI. US. 21

Teclado Monitor ImpresoraDisco

vídeo

Adaptador

paralelo

AdaptadorAdaptadorAdaptador

Teclado unidad de disco

UCP RAM ROM

Figura 3.7: Perifericos conectados a los enlaces de la computadora.

• Letras, numeros y signos de puntuacion. Esta parte del teclado se asemeja al de unamaquina de escribir convencional.

• Tecla INTRO. Tiene dos funciones: en primer lugar permite pasar a la siguiente lıneaen la escritura. Ademas, en programas de uso interactivo sirve para dar entrada a lainformacion tecleada anteriormente de forma que pueda ser procesada. Por ejemplo,despues de introducir un comando hay que pulsar esta tecla, para que la computadoraejecute la orden. En algunos teclados aparece el sımbolo ←

|, o la palabra RETURN oENTER.

• Teclas de funcion, Numeradas desde la F1 a la F12 sirven para realizar ordenes dentrode ciertos programas. No tienen un significado definido, sino que cada programa lesasigna una funcion, lo cual permite ahorrar tiempo de escritura. Por ejemplo, enalgunos editores la tecla F2 sirve para guardar una copia del texto actual en el disco.

• Teclado numerico. Ademas de los numeros, los teclados modernos, suelen traer unteclado numerico compuesto por los numeros, el punto decimal y otras, en la partederecha del teclado. De esta forma se agiliza la escritura de grandes cantidades dedatos.

• Teclas de bloqueo de mayusculas, bloqueo de teclado numerico, etc.

• Otras teclas especiales, como flechas, boton de parada, etc.

• Teclas que alteran la funcion de otras teclas.

– Tecla MAY3. Pulsada simultaneamente con otra produce la escritura de la letraen mayusculas o del signo superior de los dos que aparecen encima en la tecla.Su funcion normal es en todo igual a las mayusculas de una maquina de escribir.Aplicada a las teclas de funcion permite activar funciones distintas.En general cuando se ha de pulsar una tecla conjuntamente con otra se indica me-diante el signo +. Por ejemplo, para indicar que se han de pulsar simultaneamentela tecla MAY y la tecla de funcion F2 se usa: MAY+F2.

– Tecla ALT. Al igual que la tecla de mayusculas permite cambiar la funcion delas teclas de funcion. Ademas sirve para generar los sımbolos de la tabla ASCIImanteniendo la tecla pulsada mientras se introduce el codigo correspondienteen decimal. En muchas aplicaciones esta tecla tiene significado especial. Porejemplo, en los entornos de ventana, sirve para activar funciones dentro de unmenu tecleando ALT+inicial opcion del menu.

3En algunos teclados aparece como Shift, en otros como una flecha vertical ⇑.

22 TEMA 3. ESTRUCTURA DE LA COMPUTADORA DIGITAL

– Tecla ALT GR. Permite obtener los signos |, [, ], } y { , u otros dependiendo delsistema.

– Tecla CONTROL. Pulsada conjuntamente con algunas letras produce caracteresde control. Es decir, caracteres ASCII no visibles que tienen funciones de control,como CONTROL+G, que produce el caracter ASCII numero 7 que provoca unzumbido en el altavoz del terminal. Otros caracteres utiles son CONTROL+Cy CONTROL+Z para terminar la ejecucion de programas. Usada en conjuncioncon las teclas de funcion permite activar otras funciones distintas dentro de pro-gramas.

Una combinacion de teclas especialmente util en sistemas PC es CONTROL+ALT+SUPR

que causa un reinicio del sistema.

Los teclados tienen una velocidad de transmision baja (10 o 15 caracteres por segundo).Si se teclea a una velocidad superior el espacio de almacenamiento temporal se llena y lacomputadora emite un sonido de advertencia.

Raton Es un dispositivo que sirve para posicionar un puntero grafico sobre la pantalla, deforma rapida. Este puntero permite realizar acciones pulsando los botones del raton. Losentornos de ventana hacen un uso exhaustivo del raton. Existen diversos tipos, de bola,optico, por presion.

Monitor de visualizacion Es el lugar donde usualmente la computadora envıa la salida de losprogramas, suele ser del tipo TRC (tubo de rayos catodicos), de color o monocromo. Losequipos portatiles suelen llevar una pantalla de cuarzo llamada de cristal lıquido (LCD).La imagen en los TRC se forma por barrido de un haz (monocromo) o de tres haces (color)de electrones que inciden sobre el fosforo del interior del tubo. La senal para determinarla intensidad de luz de cada color de cada punto de la pantalla procede de un circuitoelectronico que lee el contenido de una memoria de vıdeo que se puede dividir en planos.El numero de colores o de tonalidades diferentes de gris que se pueden enviar a la pantalladepende del numero de planos.

Para poder usar el monitor, la computadora ha de incorporar un circuito especial llamadotarjeta de vıdeo. La imagen que se presenta en pantalla esta contenida en la memoria devıdeo. Un circuito especial de la tarjeta se encarga del refresco de la imagen en el tubo,consistente en redibujar la imagen un cierto numero de veces por segundo de acuerdo conel contenido de la memoria. La UCP se limita a colocar en la memoria de vıdeo la imageny el circuito de refresco la manda a la pantalla.

La cantidad de memoria de vıdeo disponible limita las posibilidades graficas. Ası, unatarjeta con poca memoria compone las imagenes mediante puntos gruesos y con pocoscolores, como se muestra en la figura 3.8 a la izquierda. Al aumentar la memoria disponiblees posible disminuir el tamano del punto y aumentar la cantidad de colores que puedenpresentarse a un mismo tiempo. De este modo las imagenes resultan mejor definidas comoen la figura 3.8 a la derecha. La capacidad de la tarjeta de vıdeo se indica por los puntoshorizontales y verticales y la cantidad de colores disponibles.

Impresora Es un dispositivo que permite reproducir en papel los dibujos o textos realizadosen una computadora. Hay muchos tipos distintos, dependiendo de la tecnica usada paraimpregnar el papel. Las mas usadas actualmente son las impresoras de chorro de tinta ylas laser.

La tinta en una impresora de chorro o inyeccion es lanzada gota a gota sobre el papelformando los caracteres o dibujos. Un mecanismo especial va soltando la tinta (o tintas

c© M.R. Arahal 2003 DISA. ESI. US. 23

Figura 3.8: Imagenes proporcionadas por dos tarjetas de vıdeo distintas. A la izquierda unaimagen de 201 × 129 puntos; a la derecha una imagen de 402 × 258 puntos, ambas en blanco ynegro.

de diversos colores). Las gotas son dirigidas mediante campos electricos para que lleguenal lugar indicado sobre el papel.

La impresora laser permite copiar paginas enteras de una vez. Se basan en un tamborcargado electrostaticamente, que al ser expuesto a un rayo laser se descarga en algunaszonas. La tinta en polvo impregna luego esas zonas del tambor. Al pasar cerca del papelcargado opuestamente al tambor la tinta se adhiere al papel. Finalmente se aplica calorpara que la tinta en polvo funda sobre el papel. Debido a que el laser es muy fino, lacalidad de impresion es muy alta.

No hay ningun codigo normalizado para la comunicacion ente impresoras y computadoras.Sin embargo, normalmente no hay que preocuparse por estos detalles pues los programas(o sistemas de explotacion) permiten seleccionar el tipo de impresora a usar mediantemenus, por lo que todo lo que uno debe saber es la marca y modelo de la impresora quetiene conectada. Entre los muchos lenguajes se pueden destacar los siguentes: PCL 1 aPCL 5 de Hewlett-Packard y PostScript o lenguaje de descripcion de paginas a base deinstrucciones producido por Adobe Systems Inc,

Las impresoras pueden conectarse a la computadora usando diversos adaptadores de entrada-salida entre los que destacan: Centronics, RS232, SCSI y las conexiones de red comoEthernet u otras.

Digitalizador de imagenes Se usan para obtener una version digital de imagenes sobre elpapel. Para ello la imagen es descompuesta en una matriz de puntos de color y posterior-mente almacenada como un archivo en un formato grafico, como los conocidos GIF yTIFF.

En ocasiones la digitalizacion de imagenes tiene por objeto conseguir un fichero conteniendoel texto impreso en la imagen. Es decir, la imagen puede ser una pagina de un periodicoy lo que se desea es el texto contenido en dicha pagina. A partir de la imagen se puedenusar programas de reconocimiento de caracteres (conocidos como OCR) para obtener eltexto en un fichero. Los programas de reconocimiento de caracteres suelen funcionar solocon letra de imprenta.

Discos magneticos Los dispositivos de almacenamiento masivo como el disco duro, las cintasmagneticas y el disco optico permiten guardar grandes cantidades de datos de forma novolatil.

Los discos llamados flexibles permiten ser extraıdos de la computadora. Hay discos dedistintos tamanos, siendo los mas usados hoy en dıa los de 10 cm, que pueden contener

24 TEMA 3. ESTRUCTURA DE LA COMPUTADORA DIGITAL

Pista Cabezas

Figura 3.9: Discos magneticos para almacenamiento de datos.

objetivo

detector

(a) (b)

plástico

etiqueta

datos

00100010000100000100

bits modulados

Figura 3.10: (a) Esquema del disco optico. (b) Representacion de la informacion en el mismo.

hasta 1.44 Mc de datos.

Los discos duros estan fijos en el interior de la computadora. Su construccion les confieremayor rapidez y capacidad. Actualmente los discos duros pueden tener capacidades entrecientos y miles de Megacaracteres. El principio de funcionamiento es el mismo que en elcaso de los discos flexibles. En la parte derecha de la figura 3.9 se muestra un diagramasimplificado de un disco duro, mostrando las cabezas que permiten la lectura y escritura.

Disco optico El CD-ROM como se le conoce popularmente permite guardar gran cantidadde datos (aproximadamente 700 Mc). La informacion se guarda en binario en forma deagujeros o huecos microscopicos en el metal interior del disco. Mediante un rayo laserse puede obtener una senal electrica con un voltaje alto o bajo dependiendo del paso dedepresiones bajo el laser a medida que el disco gira.

El CD-ROM es casi identico a los discos compactos para audio que existıan previamente.De hecho, ambos discos son compatibles. Los reproductores de discos para audio incorpo-ran una etapa de conversion de digital a analogico para producir el sonido, la cual no esnecesaria en el caso de reproductores para uso de la computadora.

Puesto que el metal que contiene los datos esta protegido por una capa de plastico seconsigue un medio menos sensible que los discos flexibles. El disco tiene los datos grabadosen una unica pista espiral. La lectura sobre la pista es a velocidad constante, por lo queel disco gira a distintas velocidades segun el tramo leido. Ver figura 3.10 (a). Los datosse modulan siguiendo la regla ”8 en 14”, que usa 14 bits para codificar cada caracter. Seincluye un codigo de deteccion de errores de tipo CRC. La figura 3.10 (b) muestra la formaen que los bits quedan grabados en el disco.

Dentro de los discos opticos hay varias clases: hay discos que solo admiten lectura, discosque se pueden grabar una sola vez desde el equipo personal y discos que admiten serregrabados varias veces.

c© M.R. Arahal 2003 DISA. ESI. US. 25

3.6 La unidad de control

La unidad de control es el elemento que ordena a todos los demas. La tarea que tiene encomen-dada consiste en enviar las senales de control que provocan operaciones de los modulos y tambientransferencias de informacion entre los mismos.

En el esquema de la figura 3.11 se muestran los modulos ya conocidos interconectados porenlaces. Podemos imaginar que los enlaces son autopistas de varios carriles por las cuales puedenmoverse los bits de forma que pasen de unos registros a otros.

Los elementos con que se va a trabajar y que aparecen en dicha figura son:

1. Un enlace M que une la memoria, la unidad de control y la UAL. La informacion que setransmite puede ser de diversas clases: datos y resultados de operaciones, instruccionesdel programa y direcciones de memoria.

2. Otro enlace S que une la unidad de control y el selector de posiciones de memoria. Por else transmiten direcciones de memoria.

3. La memoria principal, con organizacion matricial.

4. La UAL con registro acumulador que almacena uno de los operandos y el resultado de lasoperaciones.

5. Los siguientes registros:

• A. Registro acumulador de la UAL.

• S. Registro de seleccion de memoria.

• T. Registro tampon de comunicacion entre la memoria y la lınea M.

• P. Contador de pasos de programa. Indica la posicion dentro de la memoria de lainstruccion a ejecutar.

• I. Registro de instruccion. Guarda en cada momento la instruccion que se ejecuta enese paso.

• E. Registro de comunicacion con el exterior. Permite tomar datos del teclado o llevarlosa la pantalla. Es una forma simple e idealizada de la unidad de control que se hadescrito anteriormente.

3.6.1 Funcionamiento

El esquema presentado corresponde a una maquina de programa almacenado, por lo que en lamemoria se almacenan tanto datos y resultados como el programa a ejecutar. El funcionamientodel mismo se describe a continuacion.

Para comenzar la explicacion se parte de una situacion en la que el programa ha sido alma-cenado previamente en la memoria. El programa se va a ejecutar paso a paso bajo la direccionde la unidad de control. Esta debe obtener de la memoria la instruccion a ejecutar, por lo que

26 TEMA 3. ESTRUCTURA DE LA COMPUTADORA DIGITAL

SPEP

INCP

P

DCO MD

ET ST

S

MEM

LECM

ESCM

TEE SE

EA

SA

SUMAMULT

EO

A

M

EI

SD

ES

I

S

LEETESCP

E

M

Figura 3.11: Esquema de una computadora digital mostrando los enlaces y las senales de gob-ierno.

necesita disponer de algun medio que le permita conocer en que posicion de memoria se encuen-tra localizada la misma. El problema se resuelve colocando las instrucciones secuencialmenteen la memoria y dotando a la unidad de control de un registro de direccion de la instruccion(registro P en la figura anterior). Este registro es un contador que se incrementa en una unidadcada vez que se realiza una instruccion, pasando ası a apuntar a la siguiente.

Una vez localizada la instruccion se extrae de la memoria llevandola al registro I, dondese ejecuta activando las senales de gobierno necesarias. Esta tarea la realiza un modulo de launidad de control que aun no se ha mostrado. Finalmente se incrementa P para poder ejecutarla siguiente instruccion.

Cada instruccion requiere tres componentes para quedar totalmente definida: la operacion,la forma de direccionamiento y una direccion con la que operar. Estos elementos se codifican enbinario y se guardan en el registro I, que consta de las tres partes que se describen a continuacion.

1. Codigo de operacion (CO), es un conjunto de ceros y unos que identifica la operacion quedebe realizarse. Las instrucciones como la suma, la resta, etc. tienen cada una un codigodistinto.

2. El modo de direccionamiento (MD), que indica la forma en que se ha de interpretar ladireccion que esta incluida en la instruccion. En el caso mas sencillo (llamado direc-cionamiento directo) la direccion es la del dato o resultado de la operacion.

3. Direccion de memoria (D). Esta direccion puede interpretarse de formas distintas, segunel modo de direccionamiento y la instruccion de que se trate. En un caso simple como lasuma directa, esta direccion es el lugar de la memoria donde reside el dato que se ha desumar.

Para aclarar las ideas, considerese la instruccion sumar al acumulador el contenido de laposicion de memoria 8. Supongase que la codificacion de esta instruccion es:

CO MD D0101 0 00000001000

Por lo que el registro I, en el momento de ejecutarse esta instruccion contiene el valor

c© M.R. Arahal 2003 DISA. ESI. US. 27

A SP

II

S

SP

I

A SP

I

P

8

17

3

7

8

8

173

3

8

co | md | 8co | md | 8

co | md | 8co | md | 8

178 3

co | md | 817co | md | 8

17

8

17 co | md | 8

3

co | md | 8

17

B)

A

A

A)

D)C)

4 4 17

18

8

34

7

Figura 3.12: Fases de la ejecucion de la instruccion suma.

0101000000001000. La primera parte (CO) identifica la operacion suma, la segunda parte (MD)indica que se trata de direccionamiento directo, que sera explicado mas adelante. Por ultimo, ladireccion 00000001000 es el numero 8 codificado en binario, y se interpreta como el lugar dondereside el numero que se ha de sumar al registro acumulador.

3.7 Ejecucion de instrucciones

Para cualquier instruccion el proceso de ejecucion se divide en cuatro fases: busqueda de lainstruccion, busqueda del operando, ejecucion de la instruccion y preparacion de la instruccionsiguiente. Estas fases conllevan pasos distintos dependiendo de la instruccion de que se trate.Los casos mas sencillos se plantean al considerar instrucciones aritmeticas, como la suma.

La figura 3.12 muestra de forma esquematica el desarrollo de las cuatro fases para unainstruccion como la suma directa. Como es sabido los registros contienen los numeros en binario,sin embargo, para dar mayor claridad al dibujo se han indicado aquı en decimal. Las posicionesde memoria tambien se han indicado con su direccion en decimal por identico motivo.

La parte A) de la figura representa la busqueda de la instruccion. Se ha supuesto que esta sehalla en memoria en la direccion 17 por lo que el contenido de P es precisamente 17. Se observatambien el direccionamiento de la memoria logrado con el registro S. Mediante una lectura sepasa la instruccion al registro I.

La parte B) corresponde a la busqueda del operando; este es el valor contenido en la direccionde memoria 8, que en este caso es el numero 3. Una nueva lectura de memoria permite pasar eloperando al registro de operando de la UAL.

En la parte C) se realiza la suma del acumulador que contenıa el numero 4 con el operando.El resultado (7 = 4 + 3) pasa al propio acumulador.

28 TEMA 3. ESTRUCTURA DE LA COMPUTADORA DIGITAL

En la parte D) se prepara la instruccion siguiente. El registro P se incrementa en una unidad,de este modo, repitiendo las fases anteriores se consigue ejecutar la instruccion siguiente y asısucesivamente.

Observese que el desarrollo de la instruccion se logra simplemente por la transferencia deinformacion entre registros y mediante la transformacion de esta en la UAL. La tarea de launidad de control es precisamente coordinar tales transferencias.

3.7.1 Transferencias entre registros

El funcionamiento de la computadora se puede describir mediante transferencias de informacionentre registros. Para verificar esta afirmacion se va a explicar a continuacion de forma masdetallada la ejecucion de la instruccion del ejemplo anterior, sumar al acumulador un datoalmacenado en una direccion de memoria dada.

1. Busqueda de la instruccion: consiste en extraer la instruccion que se va a ejecutar dela memoria. El registro P contiene la direccion de la instruccion a ejecutar, por lo quehabra de leerse la direccion de memoria indicada por P. Esta fase tiene tres operacioneselementales:

(a) Direccionamiento: transferir a S el contenido del registro P. Esto se simboliza me-diante: (P) → S. Notese que el contenido anterior del registro S se pierde al sersustituido por el contenido de P.

(b) Leer de memoria , obteniendose en T la informacion almacenada en la posiciondefinida por S, lo cual se puede expresar como: M(S) → T

(c) Pasar la instruccion a I: (T) → I, donde debe quedar para poder ser ejecutada.

2. Busqueda del operando: En CO se ha supuesto la existencia del codigo de operacion (queidentifica a la suma en este ejemplo). El modo de direccionamiento es directo, por lo tantola direccion que figura en D se interpreta como la del operando que hay que sumar alacumulador. Los pasos son los siguientes:

(a) Buscar el operando a sumar. Para ello hay que permitir el paso de D al registro S:(D) → S. De este modo se direcciona dicho operando.

(b) Leer de memoria: M(S) → T. El registro de la memoria que ha sido seleccionado escopiado en T, con lo que se tiene el numero a sumar en T.

3. Ejecucion de la instruccion. En este caso, la suma al acumulador del contenido de T. Estopuede escribirse como: (T)+(A) → A, puesto que, como ya se ha dicho, el acumuladorguarda el primer operando y recibe ademas el resultado de las operaciones.

4. Preparacion de la siguiente instruccion. En este caso hay que sumar uno al contador depasos del programa: (P)+1 → P.

La forma en que se han detallado los pasos a realizar para ejecutar la instruccion sumaconsiste en dar las transferencias elementales entre registros. Del diagrama 3.11resulta claro que para lograr estas transferencias es necesario activar las senales de entrada y

c© M.R. Arahal 2003 DISA. ESI. US. 29

fase transferencias entre registros senales de gobierno

1a (P) → S SP, ES

1b M(S) → T LECM

1c (T) → I ST, EI

2a (D) → S SD, ES

2b M(S) → T LECM

3 (A)+(T) → A ST, EO, SUMA,EA

4 (P)+1 → P INCP

Tabla 3.1: Fases, transferencias entre registros y senales de gobierno correspondientes a lainstruccion suma.

salida de los registros, tales como: SP, ES, etc. En la tabla 3.1 se muestra de nuevo la secuenciade operaciones para el mismo ejemplo de la suma, pero incluyendo las senales de gobiernonecesarias.

La activacion de las senales de gobierno se realiza de forma automatica durante la ejecuciondel programa. Es una tarea que corre a cargo de la unidad de control como se explicara masadelante.

3.7.2 La instruccion de salto

Se ha indicado que el contador de pasos de programa se incrementa en una unidad cada vez quese ejecuta una instruccion, de forma que pase a senalar la direccion de la siguiente instruccionen la memoria. Esta forma de proceder es adecuada para muchas situaciones, pero esta muyfalta de versatilidad. El llamado salto incondicional permite romper el orden de ejecucion delas instrucciones, de forma que, tras la instruccion de salto situada en la direccion d, se pasaa ejecutar otra, situada en una direccion distinta de d + 1. Para ello es necesario y suficientemodificar el registro contador de pasos del programa P. Los pasos necesarios son:

1. Busqueda de la instruccion: Hay que extraer la instruccion que se va a ejecutar de lamemoria. Esta fase tiene tres operaciones elementales:

(a) Transferir a S el contenido del registro P. Esto se simboliza mediante: (P) → S.

(b) Leer de memoria , obteniendose en T la informacion almacenada en la posiciondefinida por S: M(S) → T

(c) Pasar la instruccion a I: (T) → I. Donde sera interpretada.

2. Busqueda del operando: en la parte D del registro I debe figurar la direccion del salto, quese debe introducir en P, por lo que no es necesario buscar en memoria.

3. Ejecucion de la instruccion. En este caso, pasar el contenido de D al registro contador depasos: (D) → P.

4. Preparacion de la siguiente instruccion. En este caso no hay que hacer nada pues elcontador de pasos del programa contiene ya la direccion de la siguiente instruccion trasdel salto.

30 TEMA 3. ESTRUCTURA DE LA COMPUTADORA DIGITAL

Tema 4

Lenguajes de programacion

4.1 Codigo de maquina

El codigo de maquina es la forma mas basica y primitiva en que se puede programar unacomputadora digital. En esencia consiste en colocar en la memoria (de alguna manera) los cerosy unos que conforman las instrucciones de un programa.

Ya se ha explicado con anterioridad que la unidad de control saca de la memoria las instruc-ciones una a una y las ejecuta enviando senales de control a las otras unidades de la maquina.Se ha supuesto que el programa reside en la memoria, pero, ¿como ha llegado allı?

En los sistemas de calculo automatico de los anos 1940 y siguientes se disponıa de mediosprimitivos para realizar esta tarea. Las tarjetas perforadas, las cintas agujereadas (de papel o deceluloide) eran metodos habituales. Posteriormente surgieron las cintas magneticas y los discos.

Sea cual fuera el metodo, era preciso que alguna persona disenara el programa que consistıaen una ristra de ceros y unos. A modo de ejemplo considerese la tabla 4.1 que muestra unaserie de instrucciones de una computadora simple. Cada lınea esta formada por 16 celdas quecontiene una instruccion. A la derecha se ha indicado lo que cada instruccion representa.

El programa realiza una tarea muy simple: lee dos numeros del teclado y los almacena enmemoria. Tras esto, los suma y guarda en la memoria el resultado. Finalmente el resultado sepresenta por pantalla. Para guardar los numeros leıdos se van a usar las posiciones de memoriacon direccion 10 y 11 (que se van a suponer vacıas o no usadas). El resultado se almacena en ladireccion 12.

En este ejemplo se ha supuesto que las instrucciones del programa se almacenan codificadasen la memoria principal comenzando en la direccion 20. De este modo el programa queda enmemoria tal y como muestra dicha tabla. Para ejecutarlo basta con introducir en el contadorde pasos de programa (registro P) la direccion de comienzo del mismo, es decir, la direccion 20.

Un programa escrito en la forma vista en el ejemplo anterior se dice que esta en codigo de

maquina, pues utiliza unicamente las instrucciones de la maquina codificadas con ceros y unos.

31

32 TEMA 4. LENGUAJES DE PROGRAMACION

direccion CO MD D significado...

20 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 Leer de teclado almacenando el valor

leıdo en la posicion de memoria 10

21 0 1 0 0 0 0 0 0 0 0 0 1 0 1 1 Leer de teclado almacenando el valor

leıdo en la posicion de memoria 11

22 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 Llevar al acumulador (registro de la

UAL) el numero guardado en la

posicion de memoria 10

23 0 1 0 1 0 0 0 0 0 0 0 1 0 1 1 Sumar al acumulador el numero

guardado en la posicion de memoria 11

24 0 0 0 1 0 0 0 0 0 0 0 1 1 0 0 Almacenar el contenido del acumulador

en la posicion de memoria 12

25 0 0 1 1 0 0 0 0 0 0 0 1 1 0 0 Escribir en pantalla el valor de la

posicion de memoria 12

26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Parar la maquina...

Tabla 4.1: Ejemplo de programa. A la izquierda se presenta una lista de las operaciones aefectuar, a la derecha se tiene el programa en la memoria. El contenido de los registros de lamemoria se ha separado en tres bloques (CO, MD y D) para facilitar el estudio, dicha separacionno existe en realidad.

Cada UCP tiene su propio juego de instrucciones, por lo que los programas en codigo maquinano son necesariamente portables; es decir, no pueden ser ejecutados en otras maquinas.

El programa de la suma que ha servido de ejemplo es muy simple y se puede programarfacilmente en codigo maquina. Sin embargo es facil adivinar la complejidad que tendrıa el codigode maquina correspondiente a la programacion de una tarea con muchas mas instrucciones. Paraaliviar este problema surge el codigo mnemotecnico, que se describe en el punto siguiente.

4.1.1 Codigo mnemotecnico

Una forma de simplificar la programacion es reemplazar la codificacion binaria por una masinteligible. Tal codificacion ha de ser equivalente al codigo maquina, por lo que en cada sentenciadebe aparecer de manera clara los componentes basicos de cada instruccion, que son la operaciona realizar, el modo de direccionamiento y el operando.

Una forma sencilla de facilitar la tarea al programador consiste en escribir cada instruccionpor su nombre y los numeros en decimal, de forma parecida a

El programa del ejemplo anterior podrıa codificarse del modo que se muestra en la tabla 4.2

Esta forma de codificar necesita una posterior traduccion puesto que en la memoria no sepuede colocar otra cosa que no sea los ceros y unos de las instrucciones y datos. La tarea detraducir es repetitiva y mecanizable, por lo que se dejaba en manos de personal poco cualificado.

c© M.R. Arahal 2003 DISA. ESI. US. 33

PROGRAMA MEMORIA

instruccion...

LEER 10LEER 11CARGAR 10SUMAR 11ALMACENAR 12ESCRIBE 12PARAR

...

direccion CO MD D...20 0 1 0 0 0 0 0 0 0 0 0 1 0 1 021 0 1 0 0 0 0 0 0 0 0 0 1 0 1 122 0 0 1 0 0 0 0 0 0 0 0 1 0 1 023 0 1 0 1 0 0 0 0 0 0 0 1 0 1 124 0 0 0 1 0 0 0 0 0 0 0 1 1 0 025 0 0 1 1 0 0 0 0 0 0 0 1 1 0 026 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0...

Tabla 4.2: Ejemplo de programa. A la izquierda se presenta una lista de las operaciones aefectuar, a la derecha se tiene el programa en la memoria. El contenido de los registros de lamemoria se ha separado en tres bloques (CO, MD y D) para facilitar el estudio, dicha separacionno existe en realidad.

Posteriormente las propias computadoras fueron programadas para que llevaran a cabo la tareade traducir programas para otras maquinas o para sı mismas.

4.2 Ensamblador

Los programas traductores tomaron la dura tarea de pasar el codigo mnemotecnico a codigo demaquina. Ademas se les anadieron otras funciones que aliviaban aun mas la tarea del progra-mador:

1. Los programas pueden necesitar valores para los calculos, por ejemplo, el valor dos parahallar la media. Este valor debe residir en memoria al iniciarse la ejecucion del programa,por lo que resulta de ayuda que el traductor lo coloque en la memoria antes de dichaejecucion. Esta tarea recibe el nombre de establecimiento de valores iniciales o de datosnumericos constantes.

2. Tambien resulta preciso que existan direcciones de memoria libres para almacenar en ellaslas variables del programa. Por ejemplo, para almacenar un resultado calculado. Puestoque en la memoria se almacenan tanto datos como instrucciones es preciso algun mecan-ismo para dejar huecos libres. Es decir, hay que indicar que una determinada posicionde memoria no va a contener una instruccion sino que ha de dejarse libre para alojarinformacion.

Se crearon entonces las pseudoinstrucciones. Estas son anotaciones que el programadorescribe para que el programa traductor realice tareas adicionales durante la traduccion, comopor ejemplo dejar espacios vacıos en medio del programa o colocar valores constantes para queel programa los use, una vez traducido, durante su ejecucion.

El conjunto de instrucciones y pseudoinstrucciones forma el lenguaje ensamblador.

34 TEMA 4. LENGUAJES DE PROGRAMACION

A pesar de ser un gran avance, el lenguaje ensamblador sigue siendo de difıcil uso. Paramejorar sus caracterısticas se crearon macroinstrucciones, subprogramas y otros desarrollos quedieron lugar a los modernos lenguajes de programacion. Pero antes de avanzar en este punto seva a describir el sistema de explotacion.

4.3 Sistema de explotacion

Los sistemas de explotacion (SE), conocidos tambien como sistemas operativos proporcionan elmedio por el cual el usuario puede interaccionar con la maquina y aprovechar sus recursos, porlo que es muy importante comprender como funcionan.

El SE proporciona el rostro o primera imagen que el usuario percibe al usar el ordenador.Para comprender su importancia piensese, que la mayorıa de las personas que usan las computa-doras no ven otra cosa sino aplicaciones y el SE. En efecto, tareas como: poner en marcha pro-gramas diversos, acceder a perifericos como discos e impresoras, comunicarse con otros equipos,etc. caen bajo la responsabilidad del SE.

El SE no solo es aprovechado por el usuario normal, ademas ofrece un conjunto de funcionesque son usadas por los programadores para acceder a la circuiterıa de cada maquina particular,lo cual es necesario en casos como el acceso a perifericos desde programas. Estas funciones tienenpor objeto ocultar los detalles de cada computadora, de forma que el programador pueda escribirprogramas que funcionen en maquinas con equipos distintos, por ejemplo discos o impresoras dediferentes marcas.

Todo lo dicho anteriormente situa al SE como la conexion entre la maquina, que solo manejadatos binarios, y el usuario, para el cual los ceros y unos son extremadamente inoperantes.

Las aplicaciones son programas que resuelven un problema concreto para el usuario. Ejem-plos de aplicaciones son los procesadores de texto, programas para dibujo o diseno grafico,videojuegos, etc. El SE en cambio se dedica a gestionar el uso de la computadora en sı. Lasaplicaciones se apoyan a menudo en el SE para acceder a las entranas del sistema: los cirtuitos.

En la figura 4.1 se presenta un esquema en el que se hace patente la situacion del SE paralos distintos usuarios del sistema. En primer lugar, el usuario de aplicaciones interacciona conestas y no ha de preocuparse por los detalles del SE o del equipo que utiliza. A un nivelinferior trabaja el programador de aplicaciones, que en muchos casos ha de conocer a fondo elSE, pero que no necesita saber las particularidades de la circuiterıa de los distintos equipos.Finalmente, el programador de sistemas ha de enfrentarse a un hecho importante del mundoreal: las computadoras de distintos modelos o fabricantes tienen circuitos distintos, que han deser tratados de forma diferenciada.

A la luz de dicha figura se puede decir que el SE es un conjunto de programas que ofrecen alos usuarios una forma sencilla, flexible y rapida de acceso a los recursos ocultando los detallesdel equipo. Este hecho, la ocultacion, es de gran importancia pues permite desarrollar programassin conocer los detalles llamados de bajo nivel, como por ejemplo el modo de acceder a undisco en particular.

c© M.R. Arahal 2003 DISA. ESI. US. 35

Sistema de explotación

Aplicación

Circuitos de cada máquina particular

Usuario

Programador

Programador SE

Figura 4.1: El sistema de explotacion visto por los distintos usuarios del sistema.

Intérprete de comandos

Nivel intermedio

Núcleo

Figura 4.2: Estructura de los sistemas operativos organizada por niveles.

4.3.1 Estructura

Las tareas de los SE son muy variadas. En principio se puede fijar la atencion en programascomo el ensamblador y el cargador, pero hay mas: desde rutinas para enviar caracteres a undispositivo hasta programas que permiten manejar ficheros enteros. De hecho, el SE cubre elespacio existente entre el usuario y la circuiterıa de la maquina mediante una estructura en laque se pueden distinguir varios niveles.

Un SE se compone de modulos con funciones asignadas. El primero es el nucleo que es unmodulo de servicio para los demas. Los otros se encargan de la memoria, las E/S, memoriasauxiliares, asignacion recursos. De este modo, la organizacion del SE queda como un conjuntode capas, de forma que las superiores hacen uso de las inferiores como muestra la figura 4.2.

• Nucleo. Es el de mas bajo nivel, pues descansa sobre la circuiterıa de la computadora,proporcionando servicios a las capas mas altas. Entre las funciones que tiene asignadadestacan la gestion de interrupciones, mediante las cuales es posible realizar tareas comola asignacion de trabajo al procesador y la comunicacion entre los distintos programas

• Nivel intermedio. Aunque puede estar subdividido en varios niveles, se presenta aquı comouno solo por simplicidad. Las tareas que realiza son : tratamiento de E/S a nivel de ficherosMemoria virtual, etc

• Interprete de comandos. Ya se ha indicado que es el responsable de leer las ordenes delusuario y procesarlas.

El sistema de explotacion se divide en numerosos programas que se hacen cargo de las diversastareas. Entendido como un conjunto, el SE no tiene que estar en memoria completo, sino que

36 TEMA 4. LENGUAJES DE PROGRAMACION

las distintas partes pueden estar en el disco y ser llamadas en el momento en que se las necesite.Ahora bien, siempre debe existir una parte en memoria llamada supervisor residente queincluye al menos las rutinas encargadas de las siguientes tareas:

• Aceptar ordenes del usuario a traves del teclado.

• Analizar las ordenes o comandos.

• Buscar el programa necesario para cada comando, por ejemplo, para borrar un fichero ocopiarlo o para usar una aplicacion.

• Cargar el programa (de borrado, de copia, aplicacion, etc.) y lanzar su ejecucion.

• Retomar el control al termino de la ejecucion.

4.3.2 Funciones de los sistemas de explotacion

El SE realiza numerosas funciones, todas encaminadas a ayudar al usuario y a mejorar elrendimiento de la maquina. A continuacion se da una lista no exhaustiva clasificada por eltipo de tarea.

Entradas y salidas

Los dispositivos perifericos usados para la E/S de datos son muy distintos entre sı, lo cualimplica la necesidad de desarrollar comunicaciones especıficas para cada tipo. El SE debe limarestas diferencias, de forma que el programador pueda solicitar operaciones de lectura/escriturade forma parecida, con independencia del dispositivo usado.

La E/S de datos desde perifericos se realiza por medio de programas concretos. El programadebe mandar senales de control como: puesta en marcha, posicionamiento de partes moviles,peticion de mensajes. Ademas se ha de coordinar la comunicacion para asegurar que sea rapida ysin errores. Todo ello requiere una programacion cuidadosa. Los SE incluyen rutinas que realizanestas tareas de forma que el programador pueda usarlas. Esto ahorra tiempo al programador yaumenta la fiabilidad.

Dentro de los procesos de E/S merece ser destacado el problema de la deteccion de er-

rores. Las operaciones que implican trasvase de informacion estan sujetas a errores provocadaspor ruidos en las lıneas de transmision. El sistema de explotacion debe detectar estas situacionesy actuar de acuerdo a la gravedad del problema: bien recuperando automaticamente los datoscorruptos o avisando de la existencia de errores o incluso parando el sistema. Para detectar loserrores en transmisiones existen tecnicas que se detallan en el capıtulo dedicado a la codificacionbinaria de la informacion.

Debido a que los perifericos usan velocidades de transmision muy diferentes a la de la UCP,se suelen usar zonas de almacenamiento temporal. En ellas los datos son almacenados hasta queel dispositivo de destino este listo para aceptarlos. Se consigue de este modo que la UCP no

c© M.R. Arahal 2003 DISA. ESI. US. 37

raíz

config programas sistema

cc ens editor

conectgrafic

juan mateo carlos

usuarios

dietas juegos ficha prueba listin matriz

ahorcado gusano

Figura 4.3: arbol de directorios en un SE particular.

tenga que espera al periferico. Los perifericos virtuales surgen de esta idea y se explicaranen una seccion posterior.

Sistema de archivos

En los dispositivos de almacenamiento masivo como discos, la informacion se agrupa en archivoso ficheros. A su vez, los ficheros pueden agruparse para formar directorios o carpetas quesirven para organizar la informacion, del mismo modo que en un fichero convencional se puedeclasificar los asuntos en carpetas y estas en cajones.

Los directorios pueden a su vez formar parte de directorios mayores, dando lugar a unaestructura arborescente. Esta organizacion jerarquica es llamada arbol de directorios. Enla figura 4.3 se muestra una de estas estructuras. A partir de la raız, que es el directorio superior,parten otros directorios que a su vez pueden contener archivos (indicados en letra cursiva) y otrosdirectorios. El objetivo de esta organizacion es mantener la informacion estructurada para poderacceder a ella eficientemente.

Los archivos tienen un nombre que los identifica dentro del directorio, por ejemplo los ficheroslistin y matriz de la mencionada figura 4.3. Los directorios tambien se identifican mediante unnombre como es el caso de usuarios y pedro.

Las operaciones que se pueden realizar con archivos son: crear, borrar, renombrar, cambiarla ubicacion dentro del arbol, copiar, anadir informacion , etc. El SE provee los programasnecesarios para llevar a cabo tales tareas.

Del mismo modo los directorios pueden ser objeto de diversas acciones, como:

• Crear. El directorio nace vacıo, es decir, sin ficheros en el. Hay que especificar el nombrecon el que se va a denominar.

• Borrar. El directorio ha de ser previamente vaciado borrando los ficheros y subdirectoriosque contiene.

38 TEMA 4. LENGUAJES DE PROGRAMACION

• Listar. Consiste en abrir el directorio y leer los ficheros y subdirectorios que contiene.

• Renombrar. El nombre del directorio se puede cambiar sin afectar a su contenido. Ademas,es posible recolocar el directorio dentro del arbol.

Dos archivos distintos pueden tener el mismo nombre si pertenecen a directorios distintos.Por este motivo, si se quiere hacer referencia a un archivo de forma unıvoca no basta con darel nombre. Es necesario especificar el camino de directorios. En el ejemplo de la figura 4.3mediante raız-usuarios-juan-dietas1 se designa el camino absoluto para llegar al ficherodietas (se llama absoluto porque parte del directorio raız).

La gestion del sistema de archivos puede realizarse por medio de comandos u ordenes intro-ducidas por el teclado (como es el caso de UNIX y MS-DOS) o utilizando una pantalla graficacuyos sımbolos se activan y manejan con el raton (como es el caso de los sistemas de ventana).En ambos casos es el SE correspondiente el que recibe la operacion a realizar y la lleva a cabo.

Ejecucion de programas

La ejecucion de un programa implica que el SE debe ceder parte del control de la maquina almismo. Al acabar la ejecucion el SE retoma el control. Esta tarea se descompone en variasoperaciones, como son: localizar el programa en el disco, proporcionar un lugar en la memoriapara cargarlo, realizar la carga desde el disco, dar al contador de pasos del programa la direccionde comienzo y retomar el control al finalizar.

El programa cargador que ha sido aludido numerosas veces tiene por mision colocar en lamemoria el programa que se quiere ejecutar y dar comienzo a su ejecucion. Durante la misma,el control de la maquina pertenece total o parcialmente al programa que se ejecuta. Cuandoeste finaliza, devuelve al SE tal control. En la figura 4.4 se muestra un diagrama del programacargador correspondiente a la computadora CESIUS que sirve para ilustrar el proceso descrito.

Cargador

Programa

Programa encódigomáquina

COMPUTADORA

resultadoentrada

COMPUTADORA

Figura 4.4: El programa cargador.

1En este ejemplo se ha usado el guion como separador de directorios, en MS DOS el separador es la barra

invertida \ y en UNIX es la barra /.

c© M.R. Arahal 2003 DISA. ESI. US. 39

En algunos sistemas la UCP reparte su tiempo entre varias tareas. En estos sistemas mul-titarea se suele vigilar el tiempo que cada programa pasa utilizando la UCP y tambien laszonas de memoria usadas por cada uno. Estas cuestiones se analizaran mas adelante.

Ayuda al usuario

Los usuarios necesitan a menudo acudir al manual del SE para realizar una tarea. Algunos SEincluyen la posibilidad de consultar el manual en lınea; es decir, no una copia en papel sino enla pantalla.

El manual puede ser mostrado a peticion del usuario introduciendo una palabra clave paraidentificar la parte del mismo que interesa. Por ejemplo, el nombre de un comando. Esto ahorramucho tiempo al usuario y dinero, pues las copias impresas de algunos manuales son gigantescas.En los entornos graficos de ventana (McIntosh Systems, Solaris, MS Windows) la ayuda se hallaen tal cantidad que es casi innecesario el manual.

Gestion de recursos

Los recursos de la computadora son la UCP, la memoria principal y los perifericos. En algunossistemas se permite que exista mas de un programa en ejecucion. Esto puede ocurrir porque elsistema es multiusuario o simplemente multitarea. En tales casos es necesario arbitrar laadjudicacion de los recursos entre los distintos programas y/o usuarios. El sistema de explotacionse hace cargo de esta tarea, para lo cual usa reglas encaminadas a obtener un buen rendimientodel sistema. Estas reglas deben solventar conflictos surgidos de peticiones simultaneas de unmismo servicio.

En los sistemas multitarea la simultaneidad de ejecucion se consigue dividiendo el tiempode trabajo en pequenos intervalos y asignandolos a cada programa. En rigor, solo un programausa la UCP cada instante de tiempo, puesto que (en sistemas monoprocesador) la UCP soloejecuta una instruccion cada vez, la cual pertenecera a un programa en particular. Ahora bien,al dividir el tiempo en trocitos y cambiar de programa frecuentemente se consigue el efecto deque todos avancen su tarea.

En los sistemas de tiempo compartido varios usuarios utilizan una misma computadorausando terminales remotos. El SE asigna a cada usuario una porcion de tiempo para atenderle.Debido a que el tiempo de proceso de la UCP es mucho menor que el de las acciones humanas,cada usuario tiene la sensacion de que toda la maquina es para sı2. Esta es la forma de uso delas grandes computadoras centrales a partir de los anos 70.

La gestion de la memoria principal se realiza en base a tecnicas sofisticadas destinadas aproveer de recursos a los programas en ejecucion manteniendo la confidencialidad de los datos.En muchos sistemas la memoria instalada es mas pequena que la suma de espacios que ocupan losprogramas que se han de ejecutar simultaneamente, por lo que estos se han de cargar por partes;

2En teorıa, claro. La realidad es que cuando el numero de usuarios conectados es muy alto se nota una

ralentizacion desesperante.

40 TEMA 4. LENGUAJES DE PROGRAMACION

es decir, teniendo en memoria en cada instante solo el trozo que interesa en cada momento. Laforma mas comun de gestion de memoria es la memoria virtual.

Otras tareas del SE relacionadas con la gestion de recursos son la realizacion de estadısticasde uso por parte de los distintos usuarios y contabilidad.

Proteccion

En los sistemas multiusuario es deseable que unos usuarios no puedan interferir en el trabajo delos otros. El sistema de explotacion debe proporcionar mecanismos para mantener la confiden-cialidad de los datos. Se ha de evitar que ningun usuario pueda leer o modificar la informacionque pertenece a otro, este situada en la memoria principal o en el disco.

Ademas, en sistemas con posibilidad de acceso remoto3 es indispensable contar con mediospara asegurar que solo las personas autorizadas acceden al sistema. En la mayorıa de los casosesto se resuelve asignando a cada usuario un nombre identificativo y una palabra secreta. Cuandoel usuario se conecta a la maquina el sistema pregunta ambos datos y comprueba la concordanciausando su base de datos. En la historia de las redes informaticas ha habido casos celebres depersonas que han aprovechado mınimos fallos de seguridad para acceder e incluso modificarinformacion restringida.

Otro tipo de proteccion concierne al funcionamiento del sistema. Por ejemplo, no es deseableque un usuario de un sistema de tiempo compartido consiga ejecutar sus programas mas rapidoque los demas sin el conocimiento de nadie. Esto pudiera lograrse en algunos sistemas cambiandola tabla de prioridades para la ejecucion de tareas.

Configurar el sistema

Consiste en fijar las opciones por omision y otros valores que suelen ser constantes durante unasesion de trabajo. Un ejemplo puede ser elegir el idioma del usuario, de forma que el tecladoproduzca los caracteres correctos. En muchos casos el proceso de configuracion se produceautomaticamente durante el arranque de la computadora. En todo caso, el SE debe ofrecermedios para que cada usuario cambie el aspecto del sistema o las opciones por omision a voluntad.

4.4 Lenguajes de alto nivel

La programacion de computadoras serıa una tarea harto desagradable y pesada si no existiesenlos lenguajes de programacion. Considerese por ejemplo el panorama mostrado en el capıtulo8, donde se han ilustrado las venjajas de usar un lenguaje simbolico en lugar de programar encodigo de maquina. Los codigos mnemotecnicos confieren mayor legibilidad al programa y portanto facilitan su depuracion.

3A traves de redes de computadoras o usando la lınea telefonica y un modem.

c© M.R. Arahal 2003 DISA. ESI. US. 41

Los lenguajes de programacion permiten realizar el paso de algoritmo a programa de com-putadora.

Lenguajes de alto nivel. Persiguiendo una mayor facilidad de la programacion se llego a laobservacion de que es util disponer de un medio de indicar a la maquina tareas complicadas conpocas sentencias del programa. Por ejemplo: poder realizar una raız cuadrada sin necesidad deescribir varias paginas de programa. Esto se logra con los lenguajes de alto nivel. La correspon-dencia entre instrucciones de maquina y sentencias del lenguaje queda rota. Las sentencias delprograma en alto nivel son traducidas y dan lugar a muchas instrucciones de maquina.

Las ventajas de los lenguajes de alto nivel son muchas: mayor legibilidad del programa,menor tiempo de programacion, mayor facilidad para el aprendizaje por parte de personas singrandes conocimientos de informatica, y sobre todo transportabilidad.

La transportabilidad se consigue gracias a la existencia de programas traductores que con-struyen las instrucciones de maquina necesarias a partir del programa escrito con el lenguaje dealto nivel. Para cada maquina distinta existe un programa que realiza la traduccion adecuada.

Pero no todo son ventajas, la traduccion implica una serie de operaciones que antes no ex-istıan. Ademas, al utilizar lenguaje de alto nivel a menudo se produce el efecto de ”matar moscasa canonazos”. Ilustremos con un ejemplo esta afirmacion. Consideremos la tarea de sumar dosnumeros que en codigo de maquina queda resuelta con muy pocas instrucciones. Al usar unlenguaje de alto nivel se escriben sentencias que son luego traducidas. El traductor proporcionauna serie de instrucciones que realizan la suma, en general aparecen mas instrucciones que elnumero mınimo necesario. Esto es debido a que el traductor no tiene la fineza del programadorhumano.

Programar con un lenguaje de alto nivel es equivalente a construir una casa con grandesbloques de cemento frente a construir con ladrillos: es mas rapido, pero se derrocha material.Como consecuencia, los programas en codigo de maquina se ejecutan mas rapidamente que losproducidos con un lenguaje de alto nivel, pues estos contienen mas operaciones.

Existen lenguajes de programacion que contienen elementos de alto y bajo nivel. Un buenejemplo es el lenguaje de programacion C. En este lenguaje se pueden escribir expresiones que,al ser traducidas, producen pocas instrucciones, como en los lenguajes de bajo nivel, y otras degran potencia cuyo equivalente en codigo de maquina son muchas instrucciones.

Los lenguajes de bajo nivel quedan bien reflejados mediante el LS-2 explicado en el capıtulo8. Como ejemplo de lenguaje de alto nivel se muestra aquı un programa en C.

#include < stdio.h >void main(void){int i;for(i=0; i<10; i++)

printf(”\n %d %d”, i, i*i );printf(”\n Fin”);

}

42 TEMA 4. LENGUAJES DE PROGRAMACION

Puede observarse que el programa esta escrito usando palabras del idioma ingles y expresionesparecidas a las habituales en Matematicas.

4.5 Lenguajes interpretados

Como se ha visto son necesarios traductores para los lenguajes de bajo y alto nivel. Es conocidodel capıtulo 8 el programa ensamblador de dos pasos. Recordemos que tiene como misionproducir las instrucciones del programa a partir del codigo escrito en lenguaje simbolico en laforma que se muestra en la figura 4.5.

Traductor

Programa encódigomáquina

en LS-2Programa

COMPUTADORA

Figura 4.5: El programa traductor para LS-2.

Cuando se usan lenguajes de alto nivel es posible utilizar interpretes o compiladores.Los interpretes realizan la traduccion y ejecucion del programa sentencia a sentencia. En cambio,los compiladores producen un codigo intermedio que sirve para crear un fichero ejecutable quepuede ejecutarse posteriormente tantas veces como se desee.

La forma de trabajo queda reflejada en la figura 4.6. Los bloques marcados como MFson trozos de programa escritos en el lenguaje de alto nivel y reciben el nombre de modulosde codigo fuente. Estos modulos se almacenan en ficheros llamados ficheros fuente. Elcompilador acepta varios de estos modulos para producir los correspondientes bloques de codigoobjeto. El codigo objeto consiste en instrucciones de maquina, pero no esta preparado parafuncionar. Es preciso un proceso de montaje, donde se reunen todas las partes para formar elprograma ejecutable.

Observese que ademas del codigo fuente escrito por el programador existen partes del pro-grama que proceden de la biblioteca. Se incluyen ahı rutinas de uso frecuente para matematicaso para el manejo de perifericos, etc. que facilitan la tarea del programador. La biblioteca secompone de muchos modulos de codigo objeto que se venden normalmente con el compilador.El programador no puede ver o cambiar las rutinas incluidas en la biblioteca, pero recibe infor-macion del vendedor para poder usarlas.

El resultado del montaje es un programa ejecutable, consistente en instrucciones de lamaquina que se este utilizando.

El proceso de creacion de programas usando lenguajes de alto nivel involucra segun estamosviendo muchas operaciones. Los programadores cuentan hoy en dıa con aplicaciones que lespermiten escribir codigo fuente, compilar, montar e incluso ejecutar paso a paso los programas.Los pasos que el programador ha de realizar son:

1. Estudio del problema a resolver.

c© M.R. Arahal 2003 DISA. ESI. US. 43

Biblioteca

M F 1 M F 2 M F 3

M O 2M O 1 M O 3

Cargador

Ejecutable en memoria principal

Montador

Fichero ejecutable

Compilador

M F = Módulo en código fuente

M O = Módulo en código objeto

Figura 4.6: Compilacion y montaje de modulos para crear un fichero ejecutable.

44 TEMA 4. LENGUAJES DE PROGRAMACION

2. Desarrollo y verificacion de un algoritmo.

3. Estudio de la codificacion del algoritmo.

4. Escritura de los ficheros fuente.

5. Compilacion.

6. Si hay errores volver a 4, si no proceder al montaje.

7. Si hay errores volver a 4, si no proceder a la prueba de ejecucion.

8. Ejecutar programa.

9. Verificar salida proporcionada por el programa.

Se observa que, cada vez que se modifica alguna parte del codigo fuente es preciso volver acompilar y montar. Esto no sucede si se utiliza un interprete, a pesar de ello los interpretes sonpoco usados pues la ejecucion es mas lenta.

Tema 5

Resolucion de problemas

Una vez que se tiene una idea de cual es la estructura y funcionamiento de la computadora digitales posible preparar el camino para lograr su programacion. En primer lugar hay que dejar claroque un programa es una realizacion concreta de un algoritmo que resuelve un problema, por loque la tarea difıcil es en la mayorıa de los casos la de hallar el algoritmo.

En este tema se van a tratar varios aspectos relacionados con la programacion. En primerlugar se mostrara la forma de exponer los algoritmos usando el lenguaje natural de las personas.Estas descripciones reciben el nombre de pseudocodigo, y no constituyen un lenguaje de progra-macion o codigo alguno. Posteriormente se mostrara como crear representaciones graficas de losalgoritmos llamadas diagramas de flujo. Finalmente, se tratan los problemas que aparecen altratar de modificar programas previamente escritos. La solucion a tales problemas pasa por unconjunto de reglas que, restringiendo la libertad del programador, permiten producir programaslegibles y facilmente modificables.

5.1 Algoritmos y pseudocodigo

Un algoritmo1 es un ”conjunto ordenado y finito de operaciones que permite hallar la solucion deun problema”. No debe confundirse algoritmo con programa, este ultimo es la codificacion delalgoritmo en algun lenguaje de programacion o en instrucciones de la maquina. La resolucionde problemas mediante computadora conlleva dos pasos: hallar un algoritmo y su posteriorcodificacion. De forma grafica se ha ilustrado en la figura 5.1.

Algoritmo

resolución codificación

Problema Programa

Figura 5.1: Proceso de resolucion de problemas mediante computadora.

El pseudocodigo es un modo de especificar la solucion de un problema, una expresion de

1La palabra procede de al-Jwarizmi, sobrenombre del celebre matematico Mohamed ben Musa.

45

46 TEMA 5. RESOLUCION DE PROBLEMAS

un algoritmo dada en lenguaje natural, por ejemplo una receta de cocina. Los algoritmos conque trataremos aquı tienen un caracter mas matematico. A modo de ejemplo considerese elproblema consistente en hallar el resto de la division entera de un numero a entre otro b. Unejemplo de pseudocodigo es el siguiente:

1 Hallar el cociente c de a/b2 Tomar la parte entera del cociente, d = [c]3 Obtener el resto como a− b ∗ d4 Fin

En la tabla anterior se ha usado el operador parte entera, simbolizado como [ . ], por ejemplo[3.742] = 3.

Las operaciones necesarias para resolver el problema han sido especificadas en lenguaje nat-ural. De este modo el pseudocodigo es una receta valida para todo programador, cualquieraque sea el lenguaje de programacion que vaya a usar. En el ejemplo anterior las operacionesa realizar vienen dadas en secuencia; esto es, una detras de otra. Pero este no es siempre elcaso, como ocurre en el siguiente ejemplo. Considerese la tarea de hallar el valor absoluto de unnumero x.

1 Si x es positivo, el resultado es x2 Si no, el resultado es −x3 Fin

Muchos algoritmos requieren la repeticion de un conjunto de operaciones cierto numero deveces. En tales casos es conveniente disponer de un modo para indicar dicha repeticion en lugarde repetir las sentencias. Por ejemplo, el algoritmo para hallar la norma de un vector v de 10componentes2 podrıa ser el indicado en la tabla siguiente.

1 Iniciar suma parcial sp a cero2 Iniciar ındice i a uno3 Hacer:

3.1 Dar a sp el valor sp+ v2i

3.2 Incrementar i3.3 Si i > 10 ir al punto 4, si no ir a 3

4 El resultado es√sp

5 Fin

Los tres ejemplos anteriores presentan tres situaciones muy frecuentes en programacion yque seran tratadas con detalle en este capıtulo.

Los algoritmos no sirven solo para operaciones matematicas; como ha sido el caso de losejemplos mostrados, tambien pueden emplearse en otros contextos como el ejemplo de la receta

2La norma se calcula como la raız cuadrada de la suma de las componentes al cuadrado,

√∑i=10

i=1v2

i .

c© M.R. Arahal 2003 DISA. ESI. US. 47

de cocina. Resulta facil imaginar que si la receta no esta bien explicada es posible que no puedallegarse con exito al objetivo. Tomemos como ejemplo una receta para freir un huevo:

1 Poner aceite en sarten2 Colocar sarten en fuego3 Romper huevo haciendo caer el contenido en

sarten4 Tirar cascaras a la basura5 Poner sal en yema6 Si el huevo esta solido ir a 7, si no esperar7 Servir huevo, fregar sarten8 Fin

Dejando aparte la habilidad manual necesaria, es obvio que si la persona que lee la recetadesconoce el significado de alguna accion sera incapaz de preparar el huevo frito. Esta obser-vacion tambien se puede aplicar a los pseudocodigos de algoritmos matematicos, por lo que hayque poner especial cuidado en utilizar solo aquellos elementos que se suponen conocidos por ellector.

En la literatura especializada se denomina procesador a la entidad que realiza las operacionesindicadas por el algoritmo. Las acciones que el procesador conoce se denominan primitivas.En un algoritmo puede haber operaciones no primitivas siempre y cuando sean definidas usandoacciones primitivas.

5.2 Objetos y operaciones

En la descripcion de algoritmos es preciso con frecuencia hacer referencia a objetos que es precisomanipular. Considerese el ejemplo de hallar el valor absoluto expuesto anteriormente. En elpseudocodigo hemos utilizado sentencias como ”Si x es positivo, el resultado es x”. En ella hayun objeto x que, por familiaridad con la notacion matematica, hemos identificado sin problemacomo un numero cualquiera.

En informatica se manejan diversos tipos de informaciones, no solo numericas. Consideresepor ejemplo el problema de cifrar un mensaje para transmitirlo de forma secreta. Un modosencillo de cifrar mensajes es cambiar cada letra por la siguiente en el alfabeto. De este modo,el mensaje: ”estamos bien” se convierte en ”ftubnpt cjfo”. El pseudocodigo siguiente permiterealizar la tarea de cifrado.

1 Iniciar ındice i a 12 Tomar li letra i-esima de la palabra3 Reemplazar por li + 1, siguiente en el alfabeto4 Si li es la ultima letra ir a 65 Sumar uno a i6 Fin

48 TEMA 5. RESOLUCION DE PROBLEMAS

En este caso se ha identificado cada letra de la palabra por un sımbolo li. Ademas, se haconsiderado que al sumar uno a una letra se consigue la siguiente letra del alfabeto. Ciertamente,estos no son usos corrientes de la notacion matematica.

Para poder escribir algoritmos de forma comoda y precisa es conveniente nombrar a distintosobjetos (como numeros o letras) usando para ello identificadores o nombres. El identificadorsimboliza una cantidad que puede ser constante o que puede variar a lo largo de la tarea. Cadaidentificador hace referencia a un unico objeto que es de un tipo determinado (numero entero,letra, palabra, numero real, numero complejo, etc.)

En resumen, los objetos tienen un unico nombre que lo identifica. Poseen tambien un tipoque no varıa durante el algoritmo. El valor o cantidad representado por el nombre puede variardurante el algoritmo, en tal caso se dice que el objeto es una variable. Por contra, existenobjetos cuyo valor no cambia, son las llamadas constantes.

Para aclarar los conceptos anteriores considerese el problema de obtener dos numeros numerosenteros a y b y hallarles la media.

1 preguntar el valor de a y b

2 la media es m = a+b2

3 Fin

La tabla siguiente muestra los atributos de los objetos que aparecen en el algoritmo anterior.

objeto nombre valor tipo

primer numero a variable numero enterosegundo numero b variable numero enteromedia m variable numero realdos 2 constante numero entero

Observese que los valores de a y b pasan de ser indeterminados a tener un valor concretotras el paso 1. Por este motivo a y b son variables. La unica constante es el numero dos, que seha representado con el identificador 2.

Los objetos son manipulados mediante operaciones como la suma, la resta, etc. o medianteotras acciones ”romper”, ”vaciar”. Los enunciados en los que se indican las manipulacionesson llamados expresiones. Las expresiones muestran la forma en que tal manipulacion serealiza, para ello se combinan los nombres de objetos con signos que simbolizan operaciones.Por ejemplo, al escribir m = a+b

2 se indica que la variable m ha de cambiar su valor tomando elresultado de sumar a y b y dividir por dos. Las operaciones involucradas son la suma y divisionaritmeticas.

La descripcion de un algoritmo no sera de ninguna utilidad si contiene operaciones no cono-cidas por la persona (o mecanismo) que lo recibe. Los lenguajes de alto nivel ponen a disposiciondel programado muchas operaciones diferentes, por lo que escribir el programa resulta facil. En

c© M.R. Arahal 2003 DISA. ESI. US. 49

cambio, cuando se usa un lenguaje de bajo nivel es preciso describir cada tarea en funcion deoperaciones simples, por lo que la escritura es larga y tediosa.

En esta obra, las operaciones que se consideran conocidas por el lector son las corrientes dela aritmetica. Hay que destacar sin embargo el uso especial del signo =. En Matematicas seemplea para establecer una relacion de equivalencia entre dos terminos. Aquı sin embargo se hausado para asignar valores a variables. De este modo x = 2 significa que la variable x tomael valor dos en ese momento, pudiendo mas adelante alterarse dicho valor mediante una nuevaasignacion. Para evitar confusiones se usara el signo ←, de forma que se escribira x← 2.

Otra operacion que puede parecer poco familiar es la que permite preguntar valores paraasignarlos a variables. Esta operacion es llamada lectura y equivale a la entrada de datosen la computadora. Estos datos pueden provenir de cualquier periferico, la caracterıstica quelos distingue es que no son conocidos a la hora de programar, por lo que han de ser obtenidosdurante la ejecucion.

Los tipos de objetos que se utilizaran son tambien los habituales de las Matematicas: numerosenteros, reales, vectores y matrices.

Los lenguajes algorıtmicos tienen reglas para la escritura destinadas a obtener algoritmoslegibles. No hay espacio en este libro introductorio a la informatica para describir en detalley con rigor un lenguaje algorıtmico. Sin embargo podemos citar las siguientes restricciones,algunas de las cuales han sido ya comentadas.

• El lenguaje algorıtmico debe tener palabras reservadas como ”iniciar”, ”asignar”, ”incre-mentar”. Los objetos no pueden tomar como nombre ninguna de estas palabras.

• Cada objeto debe tener un identificador.

• Cada accion debe escribirse en una sentencia.

• El conjunto de acciones primitivas ha de ser especificado con total claridad formando unconjunto pequeno pero suficiente.

5.2.1 Fases del proceso de resolucion de problemas

Es difıcil concretar en proceso de resolucion de problemas pues cada problema plantea dificul-tades especiales. No obstante hay una serie de reglas que conviene observar a la hora de construiralgoritmos.

• Definicion del problema, de forma que quede absolutamente claro que es lo que se pretenderesolver. Ademas hay que especificar cuales son los datos y cuales los resultados buscados.

• Esbozo de la solucion. El problema debe partirse en trozos para los cuales se sospechaque puede haber soluciones conocidas. Es preciso asegurarse que al resolver los trozos seconsigue la solucion del problema total.

• Resolucion de los subproblemas y prueba de la validez de los mismos.

50 TEMA 5. RESOLUCION DE PROBLEMAS

• Expresion en pseudocodigo de los algoritmos correspondientes a cada parte.

• Prueba de validez del algoritmo que surge de unir todas las partes.

Para seguir estas reglas se dispone de la ayuda de la programacion estructurada, que seratratada mas adelante. El tipo de problemas que se resuelve para dar los primeros pasos en pro-gramacion es muy simple por lo que no es facil ver la utilidad de las recomendaciones anteriores.

5.3 Diagramas de flujo

Un diagrama de flujo u organigrama es una representacion grafica de las distintas operaciones quedeben ser realizadas por un operador (humano o mecanico) para la resolucion de un problema,indicando el orden logico de las mismas, las posibles alternativas, etc.

Existen muchos tipos de representaciones graficas. En este texto se va a usar un conjunto desımbolos para representar acciones y decisiones, conectados por flechas que indican el orden enque se realizan. Hay que hacer notar que la representacion grafica de un algoritmo no es exclusivade la informatica, sino que puede usarse en cualquier entorno que requiera planificacion. Masaun, la representacion del algoritmo es independiente de la programacion en un lenguaje u otroo de la maquina en que vaya a ser ejecutado.

5.3.1 Sımbolos

La figura 5.2 muestra el conjunto de sımbolos que se van a usar para realizar diagramas de flujo.De izquierda a derecha y de arriba a abajo se tiene:

• Comienzo de modulo. Marca el comienzo de un bloque del programa.

• Proceso. Este elemento indica la realizacion de operaciones diversas. Equivale a una o masacciones del pseudocodigo.

• Bifurcacion condicional. Permite elegir una de entre dos opciones en funcion de ciertacondicion que se ha de especificar. Permite representar operaciones de decision como ”si... , entonces ... ; si no ...”, como se ha visto en el ejemplo del pseudocodigo paracalcular el valor absoluto de un numero.

• Operacion de entrada o salida. Gracias a este bloque se pueden tomar datos del exte-rior (entrada) o enviar resultados al exterior de la computadora (salida). Equivale a lasoperaciones de lectura y escritura del pseudocodigo.

• Fin de modulo. Marca el final de un modulo.

• Subprograma. Los subprogramas son bloques de codigo preparados para ser incluidos enprogramas, de forma que se ahorre tiempo de preparacion de los mismos. Un subprogramase hace cargo de una parte de la tarea que puede ser repetida en varias partes del programao en programas distintos. Por ejemplo, el calculo de la norma de un vector o el determinantede una matriz.

c© M.R. Arahal 2003 DISA. ESI. US. 51

• Modulo. Este sımbolo indica que la operacion es realizada por un bloque que se detallaen otro lugar. Un modulo se diferencia de un subprograma en que este tiene siempreentidad propia en el codigo, mientras que el modulo es el resultado de una division en larepresentacion grafica y puede no afectar a la codificacion.

• Inicio y actualizacion. Realizacion de operaciones iniciales de un modulo. Asignacion devalores iniciales y modificacion de ındices y contadores, usados sobre todo en bucles.

Proceso Entrada o salidaInicio de bloque Bifurcación

MóduloSubprograma ActualizaciónFin de bloque

Figura 5.2: Sımbolos para la confeccion de diagramas de flujo.

A modo de ejemplo considerese el problema consistente en ”leer dos numeros y escribir lasuma”. El pseudocodigo correspondiente a este programa se muestra en la tabla 5.1. Las opera-ciones de lectura consisten en tomar datos provenientes de un periferico exterior, normalmenteel teclado; es decir, la operacion marcada como leer provoca que se obtenga un dato del exterior.

1 Leer primer sumando a2 Leer segundo sumando b3 Hallar la suma de los sumandos c = a+ b4 Escribir c5 Fin

Tabla 5.1: Programa para sumar dos numeros y escribir el resultado.

La figura 5.3 muestra el diagrama de flujo correspondiente a dicha tarea. Conviene observarque para asignar su valor a la variable C se ha usado la notacion C ← A + B, que significaintroducir en C el valor A+B; esto no debe inducir a pensar que C = A + B en el sentidomatematico dado usualmente a tales ecuaciones. La interpretacion correcta es que la variableC toma en ese instante el valor corrrespondiente a la suma A + B, pudiendo posteriormentecambiar este valor por otro.

Un ejemplo mas complejo es el correspondiente a un programa que tiene que averiguar siun numero entero positivo dado es primo o no. El algoritmo consiste en dividir por todos losenteros menores que el numero y ver si en algun caso el resto vale cero. El pseudocodigo puedeexpresarse en la forma indicada por la tabla 5.2

En la figura 5.4 se muestra el diagrama de flujo del programa anterior. Se ha de notar que elcalculo del resultado se ha detallado en un modulo aparte; de este modo resultan dos diagramas

52 TEMA 5. RESOLUCION DE PROBLEMAS

leer dato A

leer dato B

calcular

C A + B

escribir C

fin

inicio

Figura 5.3: Diagrama de flujo de un programa para sumar dos numeros.

1 Leer numero x2 Iniciar resultado al valor CIERTO3 Iniciar divisor a 24 Hacer:

4.1 Dividir x entre divisor4.2 Si el resto es cero, hacer resultado igual a

FALSO4.3 Incrementar divisor una unidad4.4 Si el divisor es igual a x ir a 5, sino ir a 4

5 Escribir resultado6 Fin

Tabla 5.2: Programa para hallar si un numero es primo.

separados. El objetivo de la separacion es mejorar la legibilidad del conjunto. En efecto, de ungolpe de vista se puede, a partir del diagrama de la izquierda, reconocer el problema al que seda solucion, mientras que el diagrama de la derecha explica en detalle el proceso seguido.

5.4 Programacion estructurada

Es difıcil hacer un resumen de las ideas de la programacion estructurada a lectores que no tienencierta experiencia en programacion. Esto sucede porque la programacion estructurada pretendeevitar cierto tipo de situaciones que aparecen en programas grandes y medianos, pero que nose advierten en los ejemplos dados a principiantes. Una de estas situaciones es la siguiente: unprogramador escribe un diagrama de flujo tal y como aparece en la parte derecha de la figura 5.5.Transcurrido cierto tiempo, el mismo programador es requerido para realizar una modificacionen el mismo. Este intenta modificar el diagrama, pero la tarea le resulta ardua. Analizando losmotivos por los que el trabajo no avanza con rapidez se puede observar que:

c© M.R. Arahal 2003 DISA. ESI. US. 53

inicio programa

resultado = NO

SI

divisor

divisor = x ?

fin cálculo

Incrementar

NO

SIes resto = 0 ?

NO

inicio cálculo

escribirresultado

leer x

calcular resultado(ser x primo)

fin programa

hallar resto de dividir x por divisor

resultado SIdivisor 2

Figura 5.4: Diagrama de flujo de un programa que comprueba si el numero dado es primo.

Figura 5.5: Diagrama de flujo estructurado (izquierda) y no estructurado (derecha).

54 TEMA 5. RESOLUCION DE PROBLEMAS

• Es difıcil hallar el punto en el cual hay que eliminar un bloque o insertar uno nuevo, puestodo esta enmaranado.

• Incluso aunque el diagrama tuviera una mejor disposicion grafica, cuesta trabajo ver siuna modificacion de una parte dara resultados indeseables en otra, debido al gran numerode interconexiones que hay.

Y los problemas no acaban ahı. Tras realizar los cambios, el programador debera probar elnuevo programa para comprobar su correcto funcionamiento. Cada vez que se detecte un errordebera volver a repetir el tedioso proceso de modificacion. Los problemas descritos no serıantales si el programador hubiera podido escribir el diagrama de flujo de forma parecida a la dela figura 5.5 (izquierda), en la que se aprecia que no existen cruces de lıneas y que cada modulotiene una entrada y una salida. Sobre estos dos aspectos se insistira mas adelante, por ahora noes necesario comentar mas las ventajas que para cualquier proyecto supone el tener programaslegibles y comprensibles.

5.4.1 Flujo lineal

Los diagramas se dice que tienen flujo lineal cuando no existen conexiones de vuelta atras olaterales. El flujo lineal se puede conseguir restringiendo los bloques constructivos a formatos deentrada unica y salida unica. Es decir, usando para la confeccion del diagrama de flujo bloquesa los cuales llega solo una flecha y de los cuales parte solo una flecha. La secuencia, la seleccionentre alternativas y la iteracion forman un conjunto suficiente de modulos constructivos paradescribir cualquier algoritmo. Es decir, es posible siempre realizar un diagrama de flujo quecontiene solo los bloques citados. En la figura 5.6 se tienen tales bloques; se puede ver que sonde entrada unica y salida unica.

secuencia bucle

NO SI

?

¿condición

bifurcación

condición

¿

?

cuerpo del buclemódulo 1

módulo 2opción 1 opción 2

Figura 5.6: Bloques constructivos para programas estructurados.

En lo sucesivo se usaran estos bloques para realizar los diagramas de flujo, pero antes depasar a los ejemplos es preciso comentar como se va a producir la descomposicion del problemaglobal en los modulos presentados.

5.4.2 Analisis descendente

En ocasiones se presenta la programacion estructurada como un conjunto de reglas a seguir. Enrealidad no hay una definicion exacta de programacion estructurada, por lo que las reglas son

c© M.R. Arahal 2003 DISA. ESI. US. 55

solo una aproximacion. Una idea importante de la programacion estructurada es el analisis de-scendente o jerarquizado. Consiste este en identificar las funciones a cumplir por el programaa nivel global y proceder luego a descomponer estas funciones en otras menores. Estas a su vezse vuelven a descomponer en un proceso que termina cuando se alcanza el nivel del lenguaje ocodigo usado. De este modo, el diseno del programa se realiza por niveles. Se comienza por elnivel mas general y se termina por lo particular o concreto. Antes de pasar al siguiente nivel sedebe comprobar la validez formal de la solucion actual.

fin leer

inicio leer

fin calculo

escribirresultado

inicio

fin

leer datos

fin escribir

calcular resultado

inicio escribir

inicio calculo

Figura 5.7: El analisis descendente aplicado a la confeccion de diagramas de flujo.

Al confeccionar el diagrama de flujo de un programa o modulo se ha de usar el analisisdescendente. El resultado es un conjunto de diagramas que describen el programa con un nivelde detalle creciente. En un primer nivel el diagrama de flujo de cualquier programa puede tomarla forma dada en la figura 5.7. En un segundo nivel, cada uno de los modulos se detalla en undiagrama aparte. El proceso continua mientras existan bloques que necesiten explicacionesadicionales. Esta ha sido la tecnica usada en el ejemplo del programa que comprueba si unnumero es primo (ver figura 5.4).

56 TEMA 5. RESOLUCION DE PROBLEMAS

Tema 6

Desarrollo de algoritmos basicos

Antes de comenzar a programar es preciso saber desarrollar algoritmos. Como se ha visto enel tema anterior, un algoritmo es una descripcion detallada de los pasos a seguir para resolveruna tarea. Los pasos han de ser operaciones capaces de ser llevadas a cabo por el operador alcual va dirigido el algoritmo. En este tema se va a suponer que el operador es una persona conconocimientos matematicos suficientes como para saber realizar:

• Operaciones aritmeticas (suma, multiplicacion, etc.)

• Operaciones logicas (comparacion, producto logico, comprobacion de igualdad, etc.)

• Asignacion de valores a variables

• Lectura y escritura de valores

• Acceso a vectores y matrices mediante subındices

Por tanto los algoritmos estaran escritos usando estas operaciones elementales, y no otras.

6.1 Calculos en secuencia

Los calculos en secuencia no presentan dificultad alguna desde el punto de vista algorıtmico.Los diagramas de flujo resultantes son lineales, sin bifurcaciones o bucles, y por tanto de facilcreacion.

Un programa evoluciona de modo lineal cuando realiza toda la secuencia de instrucciones deforma continua, sin saltos en la ejecucion. Este es el caso presentado en el ejemplo de la sumade dos numeros (ver figura 6.1). La realizacion y representacion en diagrama de flujo de estosprogramas no conlleva ninguna dificultad.

Como ejemplos se propone realizar el diagrama de flujo de algoritmos que resuelvan las tareassiguientes:

57

58 TEMA 6. DESARROLLO DE ALGORITMOS BASICOS

leer dato A

leer dato B

calcular

C A + B

escribir C

fin

inicio

Figura 6.1: Diagrama de flujo de un programa para sumar dos numeros.

• Leer dos valores del teclado y escribir media aritmetica.

• Leer los coeficientes de una ecuacion de segundo grado de la forma x2 + bx + c = 0 yescribir las soluciones.

• Leer los coeficientes de un polinomio de grado tres de la forma P (x) = x3 + ax2 + bx+ c.Leer a continuacion un cierto valor para la variable independiente x y escribir P (x).

6.2 Bifurcaciones

Las bifurcaciones permiten tomar un camino o su alternativa. Como es sabido, dentro de unbloque bifurcacion puede situarse otro, creando de este modo bifurcaciones anidadas.

Las bifurcaciones permiten que el programa discurra por un camino o su alternativa enfuncion de condiciones. Un ejemplo muy simple es el siguiente: leer un numero por teclado yescribir el valor absoluto del mismo. Una forma de resolver el programa es mediante el diagramade flujo de la figura 6.2. La idea es hacer que la secuencia de ejecucion pase por la escritura delnumero o del numero cambiado de signo en funcion de que sea positivo o negativo.

Las bifurcaciones se pueden encadenar para dar solucion a situaciones mas complejas. Porejemplo considerese la funcion: NC(x, y), con (x, y) ∈ IR2 7→ c ∈ {1, 2, 3, 4}. Esta funcion de-vuelve el numero de cuadrante en que se encuentra el punto (x, y) de IR2. El diagrama de lafigura 6.3 presenta una posible solucion mediante el uso de bifurcaciones en cascada.

Desarrolle los diagramas de flujo que resuelven los problemas siguientes:

• Leer un numero real x y calcular y escribir su valor absoluto (sin usar vabs).

c© M.R. Arahal 2003 DISA. ESI. US. 59

escribir x escribir -x

fin programa

SI NO

es x > 0

¿

?

inicio programa

leer x

Figura 6.2: Diagrama de flujo con ruptura de secuencia.

es x > 0

¿

?

SI NO

¿

?

es y > 0SI NO

¿

?

es y > 0SI NO

Escribir 1 Escribir 4 Escribir 2 Escribir 3

leer x e y

inicio programa

fin programa

Figura 6.3: Programa que escribe el cuadrante en el cual se situa el punto del plano dado por(x, y).

60 TEMA 6. DESARROLLO DE ALGORITMOS BASICOS

• Leer las componentes de un vector de IR2 (x e y). Escribir el numero del cuadrante en quese halla. Suponga que ninguna componente es nula.

• Leer un numero del teclado. Si esta en el intervalo (2, 8] escribir en la pantalla un uno, encaso contrario escribir un cero.

• Leer un valor x del teclado y escribir el valor f(x) siendo f una funcion definida a trozosdel siguiente modo:

x f(x)x ∈ [−1, 3) 10− xx > 50 1resto 0

6.3 Bucles simples

Muchos algoritmos requieren la repeticion de operaciones cierto numero de veces. Al conjuntode operaciones que se repite se le llama cuerpo del bucle. El bucle queda completamente definidopor el cuerpo y la condicion de parada o salida. Cada vez que el programa en ejecucion pasapor el cuerpo del bucle se dice que ha realizado una iteracion.

El bloque constructivo que se ha denominado iteracion permite plasmar en diagramas deflujo este tipo de procesos. La bifurcacion al final del bloque hace las veces de control de salida.En ocasiones es conveniente poner el control de salida en la cabeza del bucle, como se indica enla figura 6.4. De este modo se puede salir del bucle sin haber realizado ninguna operacion.

condición

¿

?

cuerpo del bucle

Figura 6.4: Bucle con control de salida en cabeza.

A modo de ejemplo considerese la tarea de construir un vector v de dimension N de formaque la componente i−esima tenga el valor vi = i2− 4. Una posible solucion viene expresada porel pseudocodigo siguiente de la tabla 6.1.

Los siguientes ejercicios se pueden resolver con ayuda de bucles.

• Leer n (suponiendo que es entero y positivo) y escribir el factorial n!.

• Leer las 10 componentes de un vector de dimension 10. Escribirlo luego en la pantalla.

• Leer N (suponer que es un entero mayor que uno). Leer a continuacion las N componentesde un vector de dimension N. Escribir luego el vector.

c© M.R. Arahal 2003 DISA. ESI. US. 61

1 Leer dimension N2 Iniciar ındice i← 13 Si i > N , ir a 64 vi ← i2 − 45 i← i+ 16 ir a 47 Fin

vi

fin programa

inicio programa

leer dimensión N

i i + 1

?

¿NOi > N

2- 4 i

i 1

SI

Tabla 6.1: Ejemplo de algoritmo con un bucle simple.

• Leer las 5 componentes de un vector y escribirlo luego al reves.

• Leer n (que se supone es entero y mayor que uno), construir un vector v ∈ IRn×1, tal queel elemento k−esimo sea vk = k2 − 3 para k = 1, ..., n.

• Leer N y un vector de dimension N. Calcular y escribir la componente de mayor valor

• Leer N y un vector de dimension N. Calcular y escribir la componente de mayor valor ysu ındice dentro del vector. (no usar max).

• Leer v ∈ IRn×1, hallar y escribir m = vtv, m ∈ IR

• Leer del teclado un numero indeterminado de alturas. Dejar de leer cuando se hayaintroducido una altura negativa. Escribir la media de las alturas validas (las no negativas).

• Escribir en pantalla los numeros del 90 al 100 y los caracteres de la tabla ASCII cuyoscodigos son tales numeros.

• Hallar el maximo comun divisor de dos numeros enteros positivos a y b dados.

6.4 Bucles anidados

Dentro de un bucle pueden aparecer operaciones diversas, en particular puede haber otro bucle.En tal caso se dice que los bucles estan anidados. En cada iteracion del bucle externo se realizael bucle interno un cierto numero de veces hasta que se produzca la condicion de salida delmismo. Este es el caso cuando se trabaja con matrices. En la figura 6.5 se presenta un diagramade flujo que puede utilizarse para recorrer la matriz. Se ha supuesto que la matriz tiene M filasy N columnas. Observese que cada fila (ındice K) se recorre variando el ındice de columnas Jdesde 1 a N en el bucle interior. El bucle exterior permite variar K de 1 a M .

62 TEMA 6. DESARROLLO DE ALGORITMOS BASICOS

¿ J > N ?

no

iniciar índice de

columnas J a 1

Incrementar J

¿ K > M ?

no

Incrementar K

iniciar índice de

filas K a 1

Operar con el

elemento a KJ

Figura 6.5: Bucles anidados para trabajar con una matriz.

c© M.R. Arahal 2003 DISA. ESI. US. 63

Los ejercicios que se proponen a continuacion se pueden resolver con un par de bucles anida-dos.

• Lectura de una matriz m× n. Se han de leer del teclado las dimensiones m y n (supongaque son numeros enteros positivos). A continuacion se han de leer los elementos akj deuna matriz A de m filas y n columnas. Finalmente se presentara en la pantalla la matrizleıda.

• Construir una matriz A m× n cuyo elemento generico akj viene dado por akj = k2 − j

• Dada una matriz A de dimensiones m × n, se quiere anular (poner a cero) los elementosde su diagonal principal y escribir la matriz resultante.

• Suma de matrices. Dadas dos matrices A ∈ IRm×n y B ∈ IRm×n se quiere calcular yescribir la matriz C obtenida como suma de las anteriores C = A + B. (realice la sumaelemento a elemento).

• Matriz traspuesta. Dada una matriz A ∈ IRm×n calcular su traspuesta B = At (ha dehacerse mediante bucles).

• Submatriz triangular. Dada una matriz A ∈ IRm×n se desea mostrar en pantalla loselementos de su submatriz triangular inferior. Es decir, deben aparecer en la pantalla sololos elementos de A que estan por debajo de la diagonal principal. Se supone que tanto mcomo n son numeros mayores que uno.

• Algoritmo para obtener la multiplicacion de A ∈ IRm×n por B ∈ IRn×p dadas A y B.

6.5 Otros procesos iterativos

6.5.1 Sucesiones y series

• Se quiere construir y escribir un vector v de dimension n cuyas componentes siguen la leyvk = 3 ∗ vk−1 − k. Tanto n como v1 son cantidades que han de leerse del teclado.

• Dado un numero x mayor que uno se ha de determinar si es primo. Para ello ha decomprobar si x es divisible por algun entero en el intervalo (1, x).

• Se desea calcular la suma∑n

k=1 1/ak siendo los valores ak los elementos de la sucesiondada por ak = ak−1 + ak−2 con a1 = 1 y a2 = 1. El lımite n ha de leerse del teclado y sesupone mayor que dos.

6.5.2 Ordenaciones

• Dado un vector v de dimension n cuyas componentes son todas positivas o cero se deseareordenar sus componentes de mayor a menor. Por ejemplo, si

v = [2 3 8 5 4]

el resultado ha de ser un nuevo vector:

w = [8 5 4 3 2]

64 TEMA 6. DESARROLLO DE ALGORITMOS BASICOS

• Repetir el ejercicio anterior pero sin usar un vector auxiliar como w. El resultado que sepretende conseguir es que el propio vector v tenga sus componentes ordenadas.

• Igual que el anterior pero suponiendo que v contiene cantidades positivas y negativas, porejemplo:

v = [−7 3 8 − 9 5 4 0 − 1]

ha de dar como resultado el propio vector reordenado ası:

v = [8 5 4 3 0 − 1 − 7 − 9]

• Un fabricante de automoviles dispone de un modelo de vehıculo en cinco colores. Parasaber la aceptacion de cada color realiza una encuesta usando un programa en su ordenadorportatil. El programa ha de ayudarle a contar los votos de los encuestados. El encuestadortecleara el numero del color elegido (de uno a cinco) cada vez que pregunte a una personanueva. Cuando no quiera preguntar a nadie mas introducira el valor -1. En ese momentoel programa le indicara el numero de votos que cada color ha obtenido. Posteriormente sehan de ordenar los colores segun los resultados de la votacion.

6.5.3 Calculos

• Dada una cantidad positiva N calcular la raız cuadrada entera aproximada r. Se ha decumplir que

r · r ≤ N ≤ (r + 1) · (r + 1)

.

Por ejemplo, si N = 24 se tiene que r = 4 pues 4 · 4 = 16 < 24 < 25 = 5 · 5

• Se han medido las longitudes de tornillos procedentes de un mismo lote de fabricacion. Sehan dispuesto en un vector v de dimension N > 2. Disene un algoritmo para calcular lamedia y la varianza de las longitudes.

Bibliografıa

• P. Anasagasti, Fundamentos de los computadores. Paraninfo, 1990.

• M. R. Arahal, Fundamentos de informatica. Escuela Superior de Ingenieros, Universidadde Sevilla, 1999.

• G. Brassard y P. Bratley, Fundamentos de algoritmia. Prentice Hall, 1997.