fundamentosdeinform¶aticaparaingenier¶‡aaerona¶uticajaar/datos/fia/fi1aer04.pdfcomputadora...

123
Fundamentos de inform´ atica para Ingenier´ ıa Aerona´ utica Manuel Ruiz Arahal Sevilla, octubre de 2003

Upload: lamcong

Post on 03-Nov-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

Fundamentos de informatica para Ingenierıa Aeronautica

Manuel Ruiz Arahal

Sevilla, octubre de 2003

2

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

4.6 El entorno MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

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

7 Programacion en MATLAB 65

7.1 El entorno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

7.2 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

7.2.1 Tipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

7.2.2 Creacion y destruccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

7.2.3 Asignacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

6 CONTENIDO

7.3 Operaciones y funciones incorporadas . . . . . . . . . . . . . . . . . . . . . . . . 67

7.3.1 Operaciones elementales . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

7.3.2 Funciones incorporadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

7.3.3 Vectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

7.3.4 Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

7.3.5 Cadenas de caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

7.3.6 Funciones para el manejo de datos . . . . . . . . . . . . . . . . . . . . . . 77

7.4 Codificacion de nuevos programas . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

7.4.1 Legibilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

7.5 Funciones para trazado de graficas . . . . . . . . . . . . . . . . . . . . . . . . . . 80

7.6 Sentencias de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82

7.6.1 La bifurcacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82

7.6.2 El bucle ”mientras” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

7.6.3 La sentencia for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

7.7 Ejemplos de programacion I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

8 Programacion de funciones en MATLAB 89

8.1 Concepto de funcion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

8.2 Datos y resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

8.3 Variables locales y globales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

8.3.1 Clasificacion de las variables . . . . . . . . . . . . . . . . . . . . . . . . . . 94

8.4 Fases de la ejecucion de una instruccion . . . . . . . . . . . . . . . . . . . . . . . 97

9 Algunos problemas de ingenierıa 99

9.1 Interpolacion con segmentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

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

9.2 Ajuste por mınimos cuadrados . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

9.3 Calculo aproximado de areas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

9.4 Integracion numerica de ecuaciones diferenciales . . . . . . . . . . . . . . . . . . . 104

9.4.1 Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

9.4.2 El metodo de Euler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

9.5 Ecuaciones trascendentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

9.5.1 Metodo de la biseccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

9.6 Superficies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

9.6.1 Busqueda de extremos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

9.7 Tratamiento de textos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

9.7.1 Palabras en orden inverso . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

9.7.2 Palındromo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

9.7.3 Mensaje oculto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

9.7.4 Mensaje oculto II . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

9.7.5 Descifrar mensaje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

9.7.6 Mensaje oculto II . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

9.7.7 Pase a mayusculas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

9.8 Tratamiento de archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

9.8.1 Agenda telefonica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

9.8.2 Agenda telefonica II . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

9.8.3 Agenda telefonica III . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

Bibliografıa 115

8 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.

4.6 El entorno MATLAB

MATLAB es un programa pensado para realizar calculo numerico. Mediante una ventana per-mite que el usuario escriba ordenes que son interpretadas y ejecutadas en ese momento. A lavista de los resultados el usuario puede continuar con otras ordenes hasta que completa la tareaque precisa realizar.

Las ordenes tıpicas son sentencias como y=cos(3)+x/z que permiten al usuario obtener losresultados de calculos complejos.

Ademas el usuario puede apilar un conjunto de ordenes y enviarlas a la ventana de ordenesformando un lote. De este modo el usuario puede apartarse un rato de la pantalla y descansarmientras aparece la respuesta.

EL conjunto de ordenes disponibles en MATLAB permite realizar tares muy diversas, por loque constituye un verdadero lenguaje de alto nivel para programar la computadora, aunque hayque decir que MATLAB no fue creado con este proposito. Se trata de un lenguaje interpretado,lo cual facilita su uso aunque disminuye la velocidad a la que realiza los calculos.

En el tema 7 se explicaran las ordenes mas comunes y el manejo de MATLAB para que sirvade banco de pruebas con el cual realizar practicas de programacion.

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 (nousar la funcion de MATLAB max).

• 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, sin utilizar la suma matricial que ofrece MATLAB).

• Matriz traspuesta. Dada una matriz A ∈ IRm×n calcular su traspuesta B = At (ha dehacerse mediante bucles, sin usar la apostrofe de MATLAB).

• 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.

Tema 7

Programacion en MATLAB

MATLAB es una aplicacion informatica que surgio para servir de herramienta en operacionesmatematicas, especialmente en operaciones con matrices.

Con los anos ha ido incorporando funciones distintas y hoy en dıa contiene herramientaspara gran cantidad de aplicaciones ingenieriles: vision artificial, analisis estadıstico, diseno decontroladores, etc.

El usuario de MATLAB suele ser una persona que necesita algo mas que una calculadorapero que no quiere ”mancharse las manos” con un lenguaje de programacion. Por eso el en-torno de trabajo es sencillo de manejar, casi tan facil como una calculadora. Ademas permitecrear graficos de muchos tipos y presenta grandes ventajas a la hora de trabajar con numeroscomplejos.

Una incorporacion temprana fue la programacion. Es posible crear nuevas funciones deMATLAB mediante un lenguaje que es muy parecido a lenguajes de programacion como BASICo C. Esto permite que el usuario pueda agrupar sentencias que utiliza frecuentemente dentrode un programa que puede ser invocado posteriormente. De este modo se ahorra tiempo yesfuerzo en sucesivas sesiones pues no es necesario escribir todas las sentencias de nuevo comose mostrara.

Pero no todo son ventajas. Como principal inconveniente hay que senalar el hecho de queMATLAB no ha sido concebido como lenguaje de programacion por lo que carece de elementoso caracterısticas necesarias para una buena practica de la programacion.

7.1 El entorno

El programa MATLAB se maneja (en su mayor parte) escribiendo sentencias dentro de unaventana llamada de ordenes. Por ejemplo, si se escribe

sqrt(16)

65

66 TEMA 7. PROGRAMACION EN MATLAB

el programa realiza la operacion indicada y responde en la pantalla con el resultad.

Desafortunadamente todo esta en ingles. Se proporcionara una lista de ordenes y funcionesdebidamente traducida.

7.2 Variables

7.2.1 Tipos

En MATLAB todas las variables son matrices. Un escalar no es mas que una matriz 1× 1.

Ademas, cada elemento se considera que es un numero complejo a + bi siendo i =√−1.

Cuando se trabaja con numeros reales MATLAB considera simplemente que b = 0.

Finalmente, todos los numeros son tratados en formato de punto flotante. Esto quiere decirque son numeros con parte entera, parte decimal y un exponente (vease tema 2).

Estas caracterısticas hacen que MATLAB desperdicie memoria con respecto a otros lenguajesen los cuales las variables pueden ser de otros tipos mas pequenos.

A pesar de que MATLAB trata a todas las variables del mismo modo se va a continuar con lasana costumbre de indicar en los diagramas de flujo y en los comentarios el tipo de las variables.De este modo se facilita la deteccion de errores.

7.2.2 Creacion y destruccion

Las variables pueden crearse en cualquier momento. Para ello basta con asignarles un valor enla forma que veremos.

Hay que tener en cuenta que las variables ocupan un espacio en la memoria. Cada vezque se crea una nueva variable el programa MATLAB pide al SE un trozo mas de la memoriadisponible. A partir de ese momento el trozo en cuestion no puede ser usado para otros fines.

Si se quiere liberar el espacio ocupado por una variable se ha de utilizar la orden clear,por ejemplo clear k o clear matriz a. Esto causa la destruccion completa de la variable yla liberacion del trozo de memoria ocupado por la misma. Una vez que una variable ha sidoeliminada no es posible recuperar su valor.

7.2.3 Asignacion

La asignacion se consigue por medio del signo igual =. No hay que olvidar que asignar es unaoperacion consistente en copiar un cierto valor en la memoria ocupada por una variable. Por

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

tanto no es lo mismo asignar que igualar en el sentido matematico. Lamentablemente el uso delsigno = en ambos casos no ayuda nada a clarificar la cuestion.

Debido a que la asignacion es una operacion distinta de la igualdad matematica se ha insistidoen temas anteriores en que se utilice un signo diferente←. En los diagramas de flujo que vendranen adelante se mantendra el uso del sımbolo ← para la asignacion.

7.3 Operaciones y funciones incorporadas

La mejor manera de aprender a realizar operaciones con MATLAB es probar el programa conejemplos simples y explorar su comportamiento. En este punto se van a mostrar ejemplos envarias categorıas de dificultad creciente. Es muy aconsejable no estudiar de memoria los ejemplossino probarlos en el entorno MATLAB.

7.3.1 Operaciones elementales

La forma mas simple de usar MATLAB es como una calculadora. En lugar de pulsar teclas seha de escribir la operacion a realizar y pulsar Intro para que esta se lleve a cabo.

Por ejemplo si se escribe

6+8

y se pulsa Intro se obtiene en la pantalla:

>> 6+8

ans =

14

>>

Como ya se ha dicho, el sımbolo >> sirve para indicar al usuario que puede escribir ahı suorden. A menudo recibe el nombre de sımbolo inductor pues induce al usuario a escribir.

Puede verse que el resultado viene precedido de ans=. Estas letras son la abreviatura deanswer (respuesta, resultado).

El programa MATLAB admite operaciones con parentesis, como por ejemplo 2 · (5 + 3).

68 TEMA 7. PROGRAMACION EN MATLAB

>> 2*(5+3)

ans =

16

>>

Notese que la multiplicacion se indica por medio del asterisco *. Tambien es posible realizaroperaciones menos elementales, como por ejemplo logaritmos en base 10

>> log10(100)

ans =

2

>>

o raıces cuadradas

>> sqrt(36)

ans =

6

Si uno desea dar nombres simbolicos a los numeros que ha de manejar debe crear variables.Para ello basta con asignar un valor mediante una expresion del tipo:

nombre_de_la_variable = valor_que_se_asigna

por ejemplo:

x=22.3

el programa responde con un mensaje que indica que se ha creado la variable y que hatomado el valor adecuado

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

>> x=22.3

x =

22.3000

>>

Es importante saber que estas expresiones hacen dos cosas: crear la variable (tomando ciertacantidad de memoria para almacenar su valor) y dar un valor inicial a la variable.

Esta facilidad para crear variables conlleva algunos peligros que trataremos de minimizarmediante una programacion cuidadosa.

Las variables pueden usarse en otras expresiones como si se tratase de numeros, por ejemplo:

>> x+10

ans =

32.3000

>>

Para saber el valor que contiene una variable basta con escribir su nombre y pulsar Intro.

>> x

x =

22.3000

>>

Si uno desea conocer cuantas variables tiene en un momento dado puede usar la orden who.En el ejemplo anterior se obtiene:

>> who

Your variables are:

ans x

>>

70 TEMA 7. PROGRAMACION EN MATLAB

Observe que ans (la respuesta) es una variable. Puede comprobar que su valor coincide conel de la ultima respuesta dada por MATLAB.

Ademas de las operaciones aritmeticas de sobra conocidas existen operaciones logicas, comopor ejemplo la comprobacion de igualdad. Considere el ejemplo siguiente consistente en unaexpresion de comprobacion de igualdad:

>> x==7

ans =

0

>>

La expresion x == 7 equivale a preguntar ¿Es el valor de x igual a 7?. La respuesta obtenidaes cero, lo cual indica que x no es igual a 7. De forma equivalente la sentencia x == 22.3 produceun valor 1 al ser evaluada.

>> x==22.3

ans =

1

>>

De estos ejemplos se desprende que las comprobaciones que el valor logico verdadero esrepresentado en MATLAB mediante el valor numerico ”1”, mientras que el valor logico falso esrepresentado por ”0”.

Otras operaciones logicas son ”mayor que” >, ”menor que” <, ”mayor o igual que” >= ,”menor o igual que” <=, ”distinto a” ∼=. A modo de ejemplo considere las expresiones siguientesy las respuestas proporcionadas por MATLAB.

>> x<10

ans =

0

>> x>=22.3

ans =

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

1

>> x ~= 8

ans =

1

>>

En la tabla siguiente se muestran las operaciones aritmeticas y logicas que MATLAB puederealizar.

>> help elfun

Las operaciones que dan como resultado un valor logico se pueden combinar utilizando lasuma logica (operacion ”o”), el producto logico (operacion ”y”) y la negacion (operacion ”no”).

Por ejemplo, para saber si x < 100 y al mismo tiempo x > 5; es decir, para comprobar si5 < x < 100 se usara la expresion x<100 & x > 5

>> x<100 & x>5

ans =

1

>>

Como era de esperar el resultado es 1. Eso quiere decir que es cierto que ”x es menor que100 y mayor que 5”.

Las operaciones que se han comentado se indican en la tabla siguiente de forma mas resumida.

72 TEMA 7. PROGRAMACION EN MATLAB

Expresion en MATLAB Operacion+ suma aritmetica

- resta aritmetica o cambio de signo

* multiplicacion aritmetica

/ division

< relacion "menor que"

> relacion "mayor que"

<= relacion "menor o igual que"

>= relacion "mayor o igual que"

== relacion "igual que"

= relacion "distinto que"

& producto logico (operacion "y")

| suma logica (operacion "o")

∼ negacion (operacion "no")

No es preciso aprender ahora mismo de memoria esta tabla. El uso frecuente deberıa bastarpara aprenderla por lo que se recomienda que se practiquen los ejemplos indicados y se explorenlas posibilidades que ofrecen.

7.3.2 Funciones incorporadas

De todas las ordenes de MATLAB ninguna debiera ser mas util para el usuario aprendiz que lafuncion de ayuda. Se comentara mas adelante como usar la funcion help, de momento se va ausar ahora para conocer la lista de funciones ”elementales”.

>> help elfun

El resultado de esta orden es una larga lista de funciones que se muestra en la tabla 7.1 (queesta en ingles como puede verse por lo que habra que acostumbrarse).

La forma de uso de estas funciones es simple e intuitiva, por ejemplo a = sin(1) asigna ala variable a el valor del seno de un radian, o sea sen(1).

>> a = sin(1)

a =

0.8415

7.3.3 Vectores

Los vectores se introducen en MATLAB como una coleccion de valores. Por ejemplo un vectorfila es

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

Trigonometric.

sin Sine.sinh Hyperbolic sine.asin Inverse sine.asinh Inverse hyperbolic sine.cos Cosine.cosh Hyperbolic cosine.acos Inverse cosine.acosh Inverse hyperbolic cosine.tan Tangent.tanh Hyperbolic tangent.atan Inverse tangent.atan2 Four quadrant inverse

tangent.atanh Inverse hyperbolic tan-

gent.sec Secant.sech Hyperbolic secant.asec Inverse secant.asech Inverse hyperbolic secant.csc Cosecant.csch Hyperbolic cosecant.acsc Inverse cosecant.acsch Inverse hyperbolic cose-

cant.cot Cotangent.coth Hyperbolic cotangent.acot Inverse cotangent.acoth Inverse hyperbolic cotan-

gent.Exponential.

exp Exponential.log Natural logarithm.log10 Common (base 10) loga-

rithm.log2 Base 2 logarithm and dis-

sect floating point num-ber.

pow2 Base 2 power and scalefloating point number.

realpow Power that will error outon complex result.

reallog Natural logarithm of realnumber.

realsqrt Square root of numbergreater than or equal tozero.

sqrt Square root.nextpow2 Next higher power of 2.Complex.

abs Absolute value.angle Phase angle.complex Construct complex data

from real and imaginaryparts.

conj Complex conjugate.imag Complex imaginary part.real Complex real part.unwrap Unwrap phase angle.isreal True for real array.cplxpair Sort numbers into com-

plex conjugate pairs.

Rounding andremainder.fix Round towards zero.floor Round towards minus in-

finity.ceil Round towards plus infin-

ity.round Round towards nearest

integer.mod Modulus (signed remain-

der after division).rem Remainder after division.sign Signum.

Tabla 7.1: Funciones elementales de MATLAB

74 TEMA 7. PROGRAMACION EN MATLAB

>> v=[ -1 2 -3 4 -5]

v =

-1 2 -3 4 -5

>>

Para acceder a las componentes individuales del vector se usan parentesis indicando el ındicede la componente como se muestra en las dos sentencias del ejemplo siguiente.

>> v(3)

ans =

-3

>> v(1)*8

ans =

-8

Es decir que en MATLAB la expresion v(k) equivale a la notacion matematica vk.

Tambien se pueden construir vectores columna. Para ello se separan las filas mediante puntoy coma como se muestra a continuacion

>> u=[0; 1; 0; 1; 0]

u =

0

1

0

1

0

En el ejemplo siguiente se ilustra que el producto escalar de dos vectores se obtiene facilmente.

>> v*u

ans =

6

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

Los vectores son tratados por MATLAB como matrices con la peculiaridad de tener una solafila o columna. Por este motivo no merece la pena dedicar mas espacio a los vectores y debemospasar ya a las matrices.

7.3.4 Matrices

En MATLAB una matriz es una variable como otra cualquiera y no precisa mecanismos compli-cados para su creacion y uso. A modo de ilustracion considere que pretendemos sumar las dosmatrices:

A =

(0 2 41 1 1

)

, B =

(3 3 3−1 −1 −1

)

El primer paso es introducir las matrices en variables. Comenzando con la matriz A escribi-mos la sentencia

A = [ 0 2 4; 1 1 1]

en la pantalla se obtiene:

>> A = [ 0 2 4; 1 1 1]

A =

0 2 4

1 1 1

>>

Como puede verse, los elementos de una misma fila se separan por espacios (o comas) y unafila se separa de la siguiente mediante el punto y coma.

Se procede del mismo modo con la matriz B, obteniendose:

>> B = [ 3 3 3; -1 -1 -1]

B =

3 3 3

-1 -1 -1

76 TEMA 7. PROGRAMACION EN MATLAB

Para realizar la suma se procede igual que si A y B fuesen variables escalares; es decir, seescribe A+B

>> A+B

ans =

3 5 7

0 0 0

Con la misma facilidad se calcula el producto de matrices o funciones de matrices. Porejemplo, para calcular el valor absoluto de los elementos de la matriz B se escribe:

>> abs(B)

ans =

3 3 3

1 1 1

Como puede observarse el resultado es una nueva matriz cuyos elementos son el valor absolutode los elementos de la matriz B.

7.3.5 Cadenas de caracteres

Las cadenas de caracteres son conjuntos de sımbolos tomados de la tabla ASCII. Tienen granutilidad para trabajar en problemas donde se precisa manipulacion de texto.

Un ejemplo de cadena de caracteres es: clase de 3 a 5 atrasada!!. Este conjunto decaracteres incluye letras, numeros y signos como el espacio o la admiracion. Es posible introducirla cadena en una variable de MATLAB:

>> texto = ’clase de 3 a 5 atrasada!!’

texto =

clase de 3 a 5 atrasada!!

Observese que el conjunto de sımbolos ha de ir encerrado por dos apostrofes. Son lasapostrofes las que diferencian una sentencia como a=barco de a=’barco’. Vea en el ejemplo elefecto de cada una de ellas.

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

>> a=barco

??? Undefined function or variable ’barco’.

>> a=’barco’

a =

barco

En el primer caso MATLAB muestra en la pantalla un mensaje de error pues ha interpretadoa=barco como una asignacion en la cual el termino de la derecha (la variable barco) no existe.En cambio, en la segunda expresion, ’barco’ es un valor definido que se asigna a la variable a

por lo que la expresion es tan correcta como hubiera sido x = 8.

Las cadenas de caracteres no sirven para calculos matematicos propiamente dichos y fueronintroducidas en MATLAB para facilitar la programacion, el depurado y el uso de programas.No obstante proporcionan interesantes posibilidades para desarrollar algoritmos y practicar elarte de programar.

7.3.6 Funciones para el manejo de datos

Puesto que MATLAB esta pensado para ser usado de forma interactiva es frecuente que elusuario necesite saber que variables ha creado, cuales son sus caracterısticas, cuanto espacioocupan, etc. Para ello se dispone de ciertas funciones que se van a explicar a continuacion.

Informes . Se ha comentado anteriormente que la orden who proporciona una lista de variables.Vea como ejemplo la secuencia de ordenes y respuestas siguiente:

>> x=8

x =

8

>> y=x+2

y =

10

>> who

Your variables are:

x y

Existe una modalidad que proporciona los tamanos de las variables y que es de utilidadcuando se trabaja con matrices. La orden es whos como puede verse en el ejemplo.

>> A=[1 2 3; 3 4 6]

78 TEMA 7. PROGRAMACION EN MATLAB

A =

1 2 3

3 4 6

>> whos

Name Size Bytes Class

A 2x3 48 double array

x 1x1 8 double array

y 1x1 8 double array

Grand total is 8 elements using 64 bytes

Dimensiones A veces es necesario conocer el tamano o dimensiones de una unica variable,por ejemplo para saber el numero de filas de una matriz y disponer de este numero paraposteriores calculos. Para estos casos se puede usar la funcion size.

>> size(A)

ans =

2 3

En el caso de manejar vectores resulta mas conveniente la funcion length que proporcionael numero de elementos.

>> v=[ -1 2 -3 4 -5]

v =

-1 2 -3 4 -5

>> length(v)

ans =

5

Almacenamiento MATLAB permite almacenar en el disco variables. De este modo es posibleparar una sesion de trabajo y continuar en otro momento sin volver a repetir calculos. Laorden mas simple para guardar es save que puede usarse de varias maneras. En la tablasiguiente se presenta un resumen.

Orden Operacion realizadasave Crea el archivo de nombre matlab.mat en la carpeta

actual. Dicho archivo contiene todas las variables queexisten en ese momento en el entorno MATLAB.

save nombrearchivo Crea el archivo de nombre nombrearchivo.mat en lacarpeta actual. Dicho archivo contiene todas las vari-ables que existen en ese momento en el entorno MAT-LAB.

save nombrearchivo x y z Crea el archivo de nombre nombrearchivo.mat en lacarpeta actual. Dicho archivo contiene unicamente lasvariables x, y y z.

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

Recuperacion Las variables almacenadas en el disco pueden ser usadas en una sesion diferente.Para ello es preciso que MATLAB las lea del disco mediante la orden load. En la tablasiguiente se muestran tres posibilidades.

Orden Operacion realizadaload Lee todas las variables del archivo de nombre mat-

lab.mat de la carpeta actual. Si alguna de las vari-ables del disco tiene nombre coincidente con otra quepreviamente existe en MATLAB se producira la de-struccion de la variable existente para dejar su sitio ala variable del disco.

save nombrearchivo Igual que en el caso anterior, pero leyendo del archivonombrearchivo de la carpeta actual.

save nombrearchivo x y z Igual que el anterior pero leyendo unicamente las vari-ables x, y y z.

Resulta util la orden what pues muestra los archivos que existen en la carpeta actual yque contienen variables o programas utilizables por MATLAB.

7.4 Codificacion de nuevos programas

Una de las caracterısticas del entorno MATLAB es que permite que las ordenes puedan sertomadas de un archivo en lugar de ser introducidas por el teclado.

La idea es simple: si el usuario va a repetir a menudo un conjunto de ordenes puede escribirlasen un archivo de texto. Posteriormente le indica a MATLAB que lea dicho archivo ejecutandolas ordenes una por una. El efecto es el mismo que si el usuario hubiese escrito las ordenes enel entorno de MATLAB. Ahora bien, puesto que el archivo de texto se puede guardar en discono es preciso volver a escribir las ordenes nunca mas. Cada vez que el usuario desee ejecutarde nuevo el conjunto de ordenes podra indicar nuevamente a MATLAB que lea el archivo. Estosupone un gran ahorro de tiempo en muchos casos.

Es costumbre dar a los archivos que contienen ordenes de MATLAB una extension prede-terminada que los diferencia de otros archivos de texto. Esta extension es .m. Por ejemplo si unarchivo contiene las ordenes para dibujar un vector se le puede llamar dibuvector.m.

Los archivos que contienen ordenes de MATLAB seran llamados desde ahora archivos M.Para escribir el archivo de texto se puede usar cualquier programa como la libreta de notas, eleditor de MS-DOS, etc. MATLAB incorpora su propio programa para redaccion llamado M fileEditor, o sea redactor de archivos M.

A modo de ejemplo considere las siguientes ordenes de MATLAB que convierten una cantidaden pesetas a euros.

pesetas=input(’Escriba la cantidad en pesetas : ’)

euros = pesetas/166.386

80 TEMA 7. PROGRAMACION EN MATLAB

Supongamos que se introducen este texto dentro de un archivo al cual se le da el nombre decpe.m (el nombre viene de convertidor de pesetas a euros). La forma de indicar a MATLAB queutilice el archivo es simple: se escribe su nombre en el entorno MATLAB. Se obtiene el resultadoque se muestra a continuacion.

>> cpe

Escriba la cantidad en pesetas : 1000

pesetas =

1000

euros =

6.0101

7.4.1 Legibilidad

Frecuentemente el usuario de MATLAB escribe archivo M que le resultan de utilidad. Pasadoun tiempo sin usar un archivo es posible que uno olvide que tarea realiza exactamente. En talcaso es necesario mirar el contenido del archivo y repasar su contenido. Es en este punto cuandose agradece (o se echa en falta) una buena practica de programacion que haga que el codigo sealegible.

Los siguientes consejos ayudaran sin duda al usuario de MATLAB a conseguir programaslegibles.

• Elegir nombres de variables indicativos de lo que representan.

• No usar una misma variable para representar mas que una cosa.

• Incluir comentarios en el codigo para ayudar a seguir la secuencia del programa.

• Dividir el codigo en trozos, de forma tal que sea posible abarcar cada trozo de un vistazoen una ventana mediana. La division no ha de ser arbitraria, sino que los trozos debentener cada uno cometidos claros. Normalmente los diagramas de flujo desarrollados conanterioridad a la codificacion indican como realizar esta division.

A pesar de haber dado estos consejos hemos de ser conscientes de que la buena programacionsolo se logra mediante un proceso de aprendizaje por prueba y error.

7.5 Funciones para trazado de graficas

Uno de los motivos por el que MATLAB ha sido un entorno favorecido por el publico es lafacilidad con la que se pueden realizar graficos de muy distintos tipos. En este punto se va a

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

indicar la forma de realizar algunas representaciones graficas que pueden ser muy utiles parailustrar posteriormente otros ejercicios.

La orden de dibujo mas simple es plot. Esta funcion puede ser utilizada de muchas maneras.En primer lugar puede usarse para representar las componentes de un vector. Por ejemplo,supongamos que el vector:

>> v=[ 15.6 16.2 18 17 16.5 15 ]

esta formado por las temperaturas (en grados Celsius) medidas cada cuatro horas en una estacionmeteorologica. Si se escribe lo siguiente en el entorno MATLAB

>> v=[ 15.6 16.2 18 17 16.5 15 ]

v =

15.6000 16.2000 18.0000 17.0000 16.5000 15.0000

>> plot(v)

se observa que aparece una nueva ventana conteniendo una grafica con el aspecto que muestrala figura 7.1. Puede observarse que en el eje vertical MATLAB ha representado los valores v1,v2, etc. mientras que en el horizontal aparece el subındice correspondiente.

1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 614

14.5

15

15.5

16

16.5

17

17.5

18

Figura 7.1: Grafica obtenida con la orden plot

Continuando con el ejemplo supongamos ahora que se conoce la hora a la que se realizo cadamedida y que deseamos que aparezca en el eje horizontal. Sea t = [4812162024], la orden quenecesitamos es simplemente:

>> t= [ 4 8 12 16 20 24 ]

t =

4 8 12 16 20 24

>> plot(t,v)

que produce un cambio en la ventana, de forma que ahora se obtiene lo que muestra la figura7.2. Se observa que el eje horizontal esta ahora marcado con las componentes del vector t.

Puede ser interesante ahora anadir unos letreros indicativos de que es lo que se esta repre-sentando. Esto se consigue de manera simple con las ordenes siguientes:

82 TEMA 7. PROGRAMACION EN MATLAB

4 6 8 10 12 14 16 18 20 22 2414

14.5

15

15.5

16

16.5

17

17.5

18

Figura 7.2: Grafica obtenida con la orden plot usando una variable para el eje horizontal y otrapara el vertical.

>> xlabel(’hora’)

>> ylabel(’temperatura’)

>> title(’Datos estacion meteorologica’)

El resultado final se muestra en la figura 7.3.

4 6 8 10 12 14 16 18 20 22 2414

14.5

15

15.5

16

16.5

17

17.5

18

hora

tem

pera

tura

Datos estación meteorológica

Figura 7.3: Grafica con tıtulo y letreros en los ejes.

7.6 Sentencias de control

7.6.1 La bifurcacion

Ya se ha visto en los diagramas de flujo realizados que las bifurcaciones son imprescindibles parallevar a cabo ciertas tareas. En MATLAB es posible realizar la bifurcacion basica mediante lasentencia if-else. La forma de uso se muestra en el codigo que aparece a continuacion.

if condicion

sentencias bloque S

else

sentencias bloque N

end

En esta construccion, La condicion es una expresion que da como resultado un valor logico(por ejemplo x > 2) que puede ser verdadero o falso. En caso de que la evaluacion de la expresionarroje un resultado verdadero se procede a ejecutar las sentencias del bloque S. En caso contrario

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

se ejecutan las sentencias del bloque N. Al terminar uno u otro bloque se pasa a las sentenciasposteriores a end.

De la explicacion anterior debe resultar evidente que al usar la bifurcacion se ejecutan lassentencias S o las N pero no ambas.

El diagrama de flujo de la figura 7.4 a) corresponde a una bifurcacion generica. Dentro de losbloques S y N se puede colocar cualquier conjunto de sentencias, incluyendo nuevas bifurcacionescomo se vera mas adelante.

inicio

¿ x < 0 ? sí no

fin

a) b)

Escribir va

Leer x

va x va -x

x Variable real Dato

va Variable real Resultado. Valor absoluto de x

condición sí no

Bloque N Bloque S

Figura 7.4: a) Diagrama de flujo correspondiente a una bifurcacion generica. b) Diagrama deflujo correspondiente al ejemplo de bifurcacion

Como ejemplo sencillo considere el siguiente trozo de codigo:

x=input(’Introduzca valor de x’)

if x < 0,

va = -x;

else

va=x;

end

disp(El valor absoluto es)

va

Este programa serıa de utilidad en caso de que no dispusiesemos en MATLAB de otrosmedios para calcular el valor absoluto.

Un ejemplo igualmente simple es:

84 TEMA 7. PROGRAMACION EN MATLAB

a=input(’Coeficiente a?’) %coeficientes de a x^2 + b x + c = 0

b=input(’Coeficiente b?’)

c=input(’Coeficiente c?’)

if b*b-4*a*c < 0,

disp(’Las raıces son complejas’)

else

disp(’Las raıces son reales’)

end

Es facil ver que este programa toma como datos los coeficientes a, b y c de una ecuacion desegundo grado ax2 + bx + c = 0, los analiza y escribe en la pantalla si las raıces (soluciones dela ecuacion) seran reales o complejas (con parte imaginaria).

7.6.2 El bucle ”mientras”

El bucle ”hacer mientras que la condicion sea cierta” se construye en MATLAB mediante unconjunto de lıneas de codigo que tienen la forma siguiente:

while condicion

sentencias del cuerpo del bucle

end

En la figura 7.5 a) se muestra el diagrama de flujo correspondiente al bucle. La condiciones una expresion que da como resultado un valor logico, por ejemplo x > 2. El cuerpo del bucleson sentencias cualesquiera.

Examinando el diagrama de flujo de la figura 7.5 a) es facil deducir que mientras la condicionse cumpla se repetira el bucle una y otra vez. Es decir, si al evaluar la expresion logica de lacondicion se obtiene un resultado verdadero se pasa a ejecutar el cuerpo del bucle, en casocontrario se termina el bucle.

Como ejemplo sencillo considere el siguiente trozo de codigo:

x=0; suma=0;

while x<10,

suma = suma + x;

x = x+2;

end

suma

Es facil adivinar que ocurre al ejecutar este programa, sobre todo si se dibuja el diagramade flujo equivalente (vease figura 7.5 b).

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

¿ condición ?

cuerpo

no

inicio

Escribir suma

¿ x < 10 ?

Iniciar x a 0 y suma a 0

suma suma + x

no

x x + 2

fin

a) b)

x Variable entera suma Variable entera

Contador de 0 a 10 Suma de los valores de x

Figura 7.5: a) Diagrama de flujo correspondiente a un bucle generico del tipo ”repetir mientrasla condicion sea cierta”. b) Diagrama de flujo correspondiente al ejemplo de uso del bucle”mientras”

Para mejorar la legibilidad de los programas es muy aconsejable incluir comentarios y ordenarla apariencia en la pantalla de las sentencias. De este modo el ejemplo en cuestion resulta masfacil de interpretar.

x=0; % variable contador para el bucle

suma=0; % variable suma parcial

while x<10, % condicion bucle

suma = suma + x; %

x = x+2; % actualizacion

end

suma % escritura resultado

7.6.3 La sentencia for

En muchas situaciones es preciso repetir una tarea un numero conocido de veces. Para ello sepuede disponer un bucle con un contador. En cada pasada o repeticion el contador se incrementay se comprueba que no se ha sobrepasado el lımite. Estas tareas se realizan facilmente enMATLAB con el uso de la sentencia for.

Los bucles que utilizan for tienen en MATLAB el aspecto siguiente:

for contador = valorinicial:valorfinal,

86 TEMA 7. PROGRAMACION EN MATLAB

sentencias del cuerpo del bucle

end

En la figura 7.6 a) se muestra el diagrama de flujo correspondiente al bucle anterior. En else observa que contador es una variable que sirve para controlar el bucle. Esta variable tomainicialmente el valor especificado por valorinicial. La variable se incrementa al final de cadapase o repeticion en una unidad. La condicion de salida del bucle consiste en que el contadorno sobrepase el lımite fijado por el valor valorfinal.

¿ contador dentro de límites?

cuerpo

no

inicio

¿ k 6 ?

Iniciar k a 1

no

k k + 1

fin

a) b)

k Variable entera Contador de 1 a 6

Asignar al contador el valor

inicial

Incrementar el contador

Escribir k

Figura 7.6: a) Diagrama de flujo correspondiente a un bucle generico del tipo ”para”. b)Diagrama de flujo correspondiente al ejemplo de uso del bucle ”para”

A fin de aclarar las ideas se muestra el siguiente ejemplo de bucle usando la sentencia for.

for k = 1:6,

k

end

En la figura 7.6 b) se presenta el diagrama de flujo correspondiente a este ejemplo. Es facilver que el bucle no realiza calculo alguno, simplemente escribe en la pantalla los valores sucesivosque va adquiriendo la variable k.

Este ejemplo revela porque se le llama bucle ”para”. Se observa que para cada valor de kentre 1 y 6 se escribe k en la pantalla, que es lo que literalmente dice la sentencia for k=1:6,.

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

Los valores iniciales y finales no necesariamente son constantes, pueden ser variables comoen el programa siguiente.

% valores inicial y final para bucle

v_inicial = input(’Introduce valor inicial’)

v_final = input(’Introduce valor final’)

% bucle

for k = v_inicial:v_final,

k %escritura en pantalla

end

El incremento de la variable contador puede ser distinto de uno. Por ejemplo para realizaruna cuenta atras (mediante decremento del contador) o para saltar de dos en dos, etc. La formade indicar un incremento en la sentencia for es muy simple:

for contador = valorinicial:incremento:valorfinal,

sentencias del cuerpo del bucle

end

A modo de ejemplo considere el programa:

for k=1:2:20,

k

end

7.7 Ejemplos de programacion I

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

• Crear un vector x de dimension 100, cuyas componentes son los valores xk = −1.001 +0.01 ∗ k. Calcular a continuacion un vector y cuyas 100 componentes vienen dadas poryk = sen(xk)

xk. Representar graficamente y frente a x.

• Leer una cadena de caracteres. Cifrarla para que pueda ser enviada de forma secreta. Laregla de cifrado es: sumar al codigo de cada caracter la posicion que ocupa dentro deltexto al cuadrado. El mensaje cifrado consiste en la lista de numeros obtenidos separadospor espacios.

• Descifrar un mensaje codificado segun la regla anterior.

• Leer del teclado un par de abcisas x1 y x2. Representar graficamente la funcion y =x− sen(x) utilizando cien puntos equiespaciados entre x1 y x2.

88 TEMA 7. PROGRAMACION EN MATLAB

• Utilizar el programa anterior para calcular graficamente la solucion de la ecuacion sen(x) =x (calculando el paso por cero de la funcion y = x− sen(x) mediante llamadas sucesivas alprograma con valores de x1 y x2 que esten a izquierda y derecha de dicho pase por cero).

Tema 8

Programacion de funciones en

MATLAB

Las funciones son fundamentales para realizar programas de cierta envergadura. Por un ladopermiten desarrollar un codigo modular lo cual mejora la legibilidad, pero ademas descargan eltrabajo del programador pues cada funcion constituye un nuevo bloque constructivo en el queapoyarse.

8.1 Concepto de funcion

Una funcion es un conjunto de ordenes que lleva a cabo una tarea precisa. La funcion es utilizadadentro de un programa como si de una orden se tratara. La funcion puede calcular resultadosutilizando los datos que se le suministran explıcitamente.

Un ejemplo de funcion es sin. Observemos que cumple las condiciones que hemos impuesto:

• Es un conjunto de ordenes aunque en las modernas versiones de MATLAB no podamosverlo.

• Realiza una tarea concreta consistente en calcular el seno del numero indicado.

• Calcula resultados a partir de datos suministrados.

Las funciones pueden interpretarse como modulos con los cuales es posible construir progra-mas. Son similares a los modulos que se han utilizado en los diagramas de flujo. Ademas poseenuna caracterıstica que las hace muy utiles: las funciones pueden usarse una y otra vez con datosdistintos. Desde este punto de vista la funcion es una maquina capaz de producir resultados apartir de datos que se le suministran. Este aspecto es ilustrado por el diagrama de la figura 8.1.

89

90 TEMA 8. PROGRAMACION DE FUNCIONES EN MATLAB

Función

Argumentos

Resultados

Figura 8.1:

8.2 Datos y resultados

En matematicas una funcion f calcula un valor (y variable dependiente) a partir de otro dado(x variable independiente). Tanto x como y pueden ser escalares, vectores o matrices. Con lasfunciones de MATLAB ocurre otro tanto. El papel de la variable independiente es represen-tado por los datos que se le suministran a la funcion, llamados normalmente argumento. Sedice habitualmente que la funcion ”devuelve” un resultado que es el equivalente a la variabledependiente.

Para aclarar las ideas consideremos la sentencia de MATLAB y = sin(x). Hemos de recor-dar que la ejecucion de esta sentencia provoca lo siguiente:

1. El calculo mediante la funcion sin del seno del dato proporcionado, que en este caso es elvalor de x.

2. La asignacion a la variable y del valor calculado por la funcion sin (que es, logicamentesen(x)).

Es muy conveniente no perder de vista estos pasos en las explicaciones que se daran poste-riormente.

Ademas de las funciones existentes en MATLAB hay mecanismos para que el usuario escribafunciones nuevas. Para ello solo tiene que preparar en un archivo de texto las ordenes de MAT-LAB que realizan un determinado calculo y posteriormente anadir una cabecera que permita aesas ordenes trabajar como debe hacerlo una funcion.

Se va a ilustrar el procedimiento con un ejemplo. Supongamos que se necesita una funcionque calcule el factorial de un numero dado n. Escribimos en un archivo las ordenes:

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

producto=1;

for multiplicador=2:n,

producto = producto*multiplicador;

end

factorial = producto;

y con esto tenemos resuelto parte del problema. Ahora bien, si queremos utilizar este trozode codigo debemos recordar siempre que hemos de usar la variable n para el dato. Dicho de otromodo, este trozo de codigo no sirve si se pretende calcular el factorial de x o de q. Lo que senecesita es anadir una cabecera para que el trozo de codigo se convierta en una funcion.

function [factorial] = mi_fact(n)

producto=1;

for multiplicador=2:n,

producto = producto*multiplicador;

end

factorial = producto;

Se ha de guardar este texto en un archivo M cuyo nombre ha de ser mi fact. Este nombrese ha escogido para recalcar que es una funcion mıa y que calcula el factorial.

Para probar mediante ejemplos que este archivo M es una funcion escribimos en la ventanade ordenes de MATLAB lo siguiente:

>> mi_fact(5)

ans =

120

Cada vez que se utiliza una funcion se dice que se hace ”una llamada” a la misma, o que sela ”invoca”. Notese que esta invocacion, uso o llamada produce un efecto interesante: el valorque se le proporciona (el valor 5 en el ejemplo) es copiado en la variable n de la funcion, demodo que las ordenes que se habıan escrito y que calculan el factorial de n estan en realidadcalculando el factorial del dato escrito entre parentesis. A este fenomeno se le suele llamar ”pasede argumento”.

Por otra parte, el resultado que se calcula y que almacena en la variable factorial aparecetras la llamada en el entorno de MATLAB. Si esto no se entiende del todo considere este otroejemplo:

92 TEMA 8. PROGRAMACION DE FUNCIONES EN MATLAB

>> y=0

y =

0

>> y=mi_fact(4)

y =

24

>> y

y =

24

Ahora debe ser obvio que el valor de factorial ha sido asignado a la variable y. A estefenomeno se le da el nombre de ”devolucion de resultados”.

Con esta explicacion ya tiene sentido una frase habitual entre programadores como ”le pasea la funcion el valor 4 y me devolvio en y el factorial de 4”.

La sintaxis para la escritura de funciones es simple. En primer lugar debe aparecer una lıneaen la que se indica:

• el nombre de la funcion (en el ejemplo anterior es mi fact).

• el nombre de la variable resultado (en el ejemplo anterior es factorial).

• el nombre de los argumentos (en el ejemplo anterior hay un unico argumento de nombren).

A continuacion se escribiran sentencias de MATLAB incluyendo todo tipo de calculos. Esobligatorio que en algun punto se le de valor a la variable resultado pues de otro modo la funcionno sabra que devolver al ser invocada y generara un error.

8.3 Variables locales y globales

Continuando con el ejemplo anterior es instructivo utilizar la orden who para ver que variablesse estan utilizando:

>> who

Your variables are:

y

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

el resultado obtenido quiza debiera sorprender, porque, ¿donde esta la variable producto?,¿y factorial?, ¿y multiplicador?, ¿y n?. La unica variable que parece existir (segun indicael resultado de who) es y.

La respuesta es que estas variables no son visibles desde el entorno de MATLAB pues estanocultas dentro de la funcion mi fact. Esta caracterıstica es muy util pues de este modo cadafuncion puede usar variables con el nombre que quiera sin que haya que preocuparse porque estavariable ya exista previamente en otra funcion.

Este hecho se produce con las funciones, pero no con cualquier archivo M. El siguienteejemplo puede contribuir a aclarar esta afirmacion. Considere los dos archivos M que se indicana continuacion.

function [y] = f_recta(x)

a = 8; % pendiente

b = 2; % ordenada en el origen

y = a*x + b; %valor de la recta en x

Archivo f recta.m

Este primer archivo M contiene una funcion. Es facil ver que la funcion calcula la ordenadasobre la recta y = 8x+ 2 correspondiente a un punto de abcisa x que es el dato proporcionadoa la funcion.

a = 8; % pendiente

b = 2; % ordenada en el origen

y = a*x + b; %valor de la recta en x

Archivo m recta.m

Este otro archivo no es una funcion, es simplemente un conjunto de ordenes de MATLABque se han escrito y guardado en disco.

Se va a mostrar mediante ejemplos las diferencias de uso de ambos archivos.

>> a=-2

a =

-2

94 TEMA 8. PROGRAMACION DE FUNCIONES EN MATLAB

>> f_recta(1)

ans =

10

>> a

a =

-2

Ejemplo de uso de la funcion f recta en el que se observa que la variable a permanece inalterada.

>> a=-2

a =

-2

>> x=1

x =

1

>> m_recta

>> y

y =

10

>> a

a =

8

Ejemplo de uso del archivo M m recta en el que se observa que la variable a cambia de valor.

8.3.1 Clasificacion de las variables

Las variables pueden clasificarse de varias maneras. Atendiendo al campo donde pueden servistas y utilizadas se distinguen dos grupos:

Globales Estas variables pueden ser vistas y utilizadas desde cualquier fichero M y desde el entornode MATLAB.

Locales Son variables que solo pueden ser vistas y utilizadas dentro de alguna funcion. Fuera dela misma no son visibles y por tanto no son utilizables.

Por otra parte, atendiendo a la durabilidad de la variables se pueden hacer dos grupos.

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

Persistentes Estas variables existen desde el momento en que son creadas hasta que se las destruyeexplıcitamente mediante la orden clear. Las variables globales son de este tipo. Tambiense las suele llamar variables estaticas.

Estas variables no pierden su valor por culpa de llamadas a funciones u otros acontec-imientos. Tan solo se ven afectadas por ordenes de asignacion.

Efımeras Son variables que son creadas por una funcion y desaparecen al terminar la funcion. Lasvariables locales suelen ser efımeras. Debido a esto las variables que estan dentro de unafuncion no conservan su valor de una llamada a otra de la funcion. Existe un procedimientopara convertir las variables locales en persistentes mediante la orden persistent.

Las caracterısticas de disponibilidad (global o local) y durabilidad (persistente o efımera)pueden combinarse dando lugar a varias situaciones. El mejor modo de poner de manifiestotodo esto es utilizando ejemplos como los que se proporcionan a continuacion.

Ejemplo 1. Las variables del entorno de MATLAB son locales.

Para poner de manifiesto esta afirmacion considere la funcion f1 cuyas ordenes se guardanen el archivo f1.m.

function [y] = f1(x)

a = 8; % pendiente

y = a*x + b; %valor de la recta en x

Archivo f1.m

Puede verse que el valor de b no es asignado dentro de la funcion, por lo que intentaremoshacerlo desde el entorno. Para ello creamos la variable y le damos un valor:

>> clear all

>> b=4

b =

4

y a continuacion utilizamos la funcion f1

>> f1(9)

??? Undefined function or variable ’b’.

Error in ==> f1.m

On line 3 ==> y = a*x + b; %valor de la recta en x

96 TEMA 8. PROGRAMACION DE FUNCIONES EN MATLAB

Aparece un mensaje de error que nos indica que la variable b no es conocida dentro de lafuncion f1. La explicacion es simple: la variable b pertenece al entorno de MATLAB. No es unavariable global. No puede ser utilizada en el interior de funciones.

Ejemplo 2. Las variables interiores de una funcion son locales y no pueden ser accedidasdesde otras funciones o desde el entorno de MATLAB.

Retomamos la funcion f recta

function [y] = f_recta(x)

a = 8; % pendiente

b = 2; % ordenada en el origen

y = a*x + b; %valor de la recta en x

Archivo f recta.m

Haremos una llamada a la funcion y luego intentaremos averiguar desde el entorno de MAT-LAB cuanto vale la variable a que es la pendiente de la recta.

>> clear all

>> ordenada2 = f_recta(2)

ordenada2 =

18

>> a

??? Undefined function or variable ’a’.

Obtenemos un mensaje de error que era esperable pues a es una variable local de la funcionf recta y no es accesible fuera de esta funcion.

Ejemplo 3. Las variables globales son accesibles desde cualquier funcion.

Para crear una variable global es preciso escribir global nombrevariable en las funcionesque la vayan a usar, incluyendo la ventana de ordenes de MATLAB en caso necesario.

En este ejemplo comenzamos por tanto escribiendo:

>> global b

que no produce respuesta alguna, pero que crea la variable b aunque sin valor asignado. Paraponer esto de manifiesto usamos la orden whos.

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

>> whos

Name Size Bytes Class

b 0x0 0 double array (global)

Grand total is 0 elements using 0 bytes

La funcion que vaya a utilizar la variable global ha de contener tambien la orden global b.Creamos la funcion f2 que es una modificacion de f1 (vease ejemplos anteriores).

function [y] = f2(x)

global b

a = 8; % pendiente

y = a*x + b; %valor de la recta en x

Archivo f2.m

Ahora intentamos asignar un valor a b y veamos si la funcion f2 es capaz de utilizar dichovalor.

>> b=-5

b =

-5

>> f2(1)

ans =

3

La respuesta obtenida es la deseada, con lo que queda probado que las variables globalespueden ser usadas dentro y fuera de funciones.

8.4 Fases de la ejecucion de una instruccion

De los ejemplos anteriores es posible sacar conclusiones generales acerca de como utiliza MAT-LAB las funciones. A continuacion se indican las fases de la ejecucion de una instruccion.Conviene comprenderlas bien pues se trata de los pasos que MATLAB realiza cada vez quese invoca a una funcion. El exito o fracaso de las funciones que uno escriba estara sin dudainfluenciado por el buen conocimiento de estas fases.

98 TEMA 8. PROGRAMACION DE FUNCIONES EN MATLAB

1. Creacion de variables locales para argumentos formales.

2. Recogida del valor de los argumentos de la llamada por parte de las variables locales.

3. Calculos incluidos en el cuerpo de la funcion.

4. Envıo de valores de las variables resultados a las variables de la sentencia llamante.

Resulta un ejercicio interesante comprobar en los ejemplos anteriores que dichas fases tienenlugar y que son necesarias para el desempeno de las tareas encomendadas a una funcion.

Tema 9

Algunos problemas de ingenierıa

9.1 Interpolacion con segmentos

Suponga que se conocen los valores que una funcion f desconocida toma sobre ciertos puntos{x1, x2, · · · , xn}. Se pretende proporcionar valores aproximados de f en cualquier punto x∗

interpolando los valores conocidos.

Para precisar se va a llamar X = {xk} al conjunto de los valores de x para los cuales seconoce el valor de f . De forma equivalente se denominara Y = {f(xk)} a las ordenadas dedichos puntos.

Para poder obtener aproximadamente f(x∗) mediante interpolacion es necesario que existandos valores xi y xd pertenecientes a X tales que xi ≤ x∗ ≤ xd.

En tal caso la interpolacion produce un valor aproximado f(x∗) que se calcula utilizando larecta que pasa por (xi, yi) y (xd, yd) como se muestra en la figura 9.1. La ecuacion de esta rectaes:

y − yi =yd − yi

xd − xi

(x− xi)

y en el punto x∗ toma el valor

y∗ = yi +yd − yi

xd − xi

(x∗ − xi)

En caso de que x∗ no caiga entre dos valores conocidos no es posible realizar la interpolacion.

El problema que se pretende resolver puede enunciarse como: dado un conjunto de abscisasX = {xk} y sus imagenes mediante f denotadas por Y = {f(xk)}, siendo f una funcion

99

100 TEMA 9. ALGUNOS PROBLEMAS DE INGENIERIA

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.60

0.2

0.4

0.6

0.8

1

1.2

1.4

(xi, yi)(xd, yd)

x*

Figura 9.1: Ilustracion de la interpolacion de funciones. La funcion desconocida a interpolar esla lınea de puntos. Los valores conocidos se indican con marcas +. Dado el valor x∗, la rectaque interpola es la lınea continua.

desconocida, calcular mediante interpolacion una aproximacion f para nuevos valores de x pro-porcionados por el usuario por teclado.

Es importante tener en cuenta que los valores en X no estan ordenados, es decir no se cumpleque xk ≤ xk+1 para todo k.

9.2 Ajuste por mınimos cuadrados

Hay ocasiones en ingenierıa en las que se dispone de un conjunto de medidas o datos observadosde dos variables y se quiere hallar la relacion entre ambas. Por ejemplo, la relacion entre altitudy temperatura media en la estratosfera.

Mediante un globo se puede medir la temperatura en distintas epocas del ano y la alturacorrespondiente. Suponga que el resultado de tales mediciones se ha incluido en dos vectores Tde temperaturas (en grados Celsius) y A de alturas (en Kms).

Para realizar este ejemplo se va a suponer que los vectores citados tienen como componentes:

A = [ 21 23 25 26 28 30 31 35 40 45 49]

T = [−50 − 51 − 45 − 44 − 39 − 40 − 39 − 28 − 20 − 15 − 8]

La grafica que se muestra en la figura 9.2 muestra en el eje vertical (eje y) la altura y enel horizontal (eje x) la temperatura. Como puede verse, parece existir una relacion entre lasobservaciones de ambas variables. Mas aun, esta relacion es lineal pues se asemeja a una recta.

Una vez hecha esta observacion es posible preguntarse si alguna recta del tipo y(x) = ax+ bproporciona una relacion valida a la vista de las mediciones disponibles.

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

−60 −50 −40 −30 −20 −10 020

25

30

35

40

45

50

temperatura (oC)

altit

ud (

Km

s)

Datos observados

Figura 9.2: Mediciones realizadas con globo en la estratosfera.

Dada una observacion consistente en el par (xk, yk) se denomina error de ajuste a la diferenciaentre el valor observado yk y el valor dado por la recta para el valor de x observado y(xk) =axk + b. La desviacion cuadratica es es cuadrado de dicho error (yk − y(xk))

2.

El metodo de los mınimos cuadrados permite obtener los valores de a y b que producen elmejor ajuste posible en cierto sentido1.

Las formulas para obtener los valores de a y de b son de sobra conocidas:

a =

nn∑

k=1

xkyk −n∑

k=1

xk

n∑

k=1

yk

nn∑

k=1

x2k −

(n∑

k=1

xk

)2

b =

n∑

k=1

yk − an∑

k=1

xk

n

Siendo n el numero de observaciones. Aplicadas a los datos de altitud y temperatura seobtienen los valores

a =11(−10840)− (−379)(353)

11 · 15177− 143641= 0.6242

1La recta de mınimos cuadrados, como indica su nombre, es la que hace mınima la suma de las desviaciones

cuadraticas.

102 TEMA 9. ALGUNOS PROBLEMAS DE INGENIERIA

b = (353− a ∗ (−379))/11 = 53.6

En la figura 9.3 se muestran de nuevo los datos de temperatura y altitud incluyendo ademasla recta de ajuste obtenida con las formulas anteriores y = 0.624x+ 53.6.

−60 −50 −40 −30 −20 −10 020

25

30

35

40

45

50

temperatura (oC)

altit

ud (

Km

s)Datos observados y recta de ajuste

Figura 9.3: Recta de ajuste de los datos experimentales.

El problema que se pretende resolver puede enunciarse como: dado un conjunto de medidasconsistentes en pares (xi, yi) hallar la resta de ajuste por mınimos cuadrados.

9.3 Calculo aproximado de areas

Como es sabido, la integral definida de una funcion equivale al area que queda bajo la curva dedicha funcion entre los lımites de integracion. Por ejemplo, la integral indefinida (o primitiva)de y = 1 es

∫1dx = x, por tanto la integral definida entre las abscisas 1 y 5 es:

∫ 5

11dx = (5− 1) = 4

Este resultado puede comprobarse de manera inmediata sin mas que trazar la grafica dey = 1 y observar que el area del rectangulo es igual al producto de la base por la altura 4 ·1 = 4.

Segun lo anterior, parece claro que para calcular el area de y =f(x) entre dos abscisas xi,xf basta con hallar la primitiva de f(x), digamos g(x) =

∫f(x)dx y luego obtener la diferencia

g(xf )−g(xi).

Este metodo presenta un inconveniente, y es que existen funciones para las cuales no seconocen primitivas. Este es el caso, por ejemplo de la funcion f(x) = e−x2

.

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

El calculo aproximado de integrales consiste en hallar un valor numerico h(xi, xf ) que sea lomas parecido posible al area que se desea calcular g(xf )−g(xi).

Un metodo muy simple consiste en dividir el area en rectangulos como los que se muestranen la figura 9.4. Observese que se ha dividido el intervalo [xi, xf ] en n trozos iguales, resultandolos subintervalos: [x1, x2], [x2, x3], ... [xn, xn+1], siendo x1 = xi y xn+1 = xf . La altura decada rectangulo se calcula mediante el valor de la funcion. Ası, para el primer rectangulo laaltura es f(x1), para el segundo rectangulo f(x2) y para el ultimo rectangulo (el n) es f(xn).

x 1 x n+1 x i x f

f( x )

x 2 x n x k

f( x 1 )

Figura 9.4: Calculo aproximado del area bajo la curva f mediante suma de rectangulos

El area bajo la curva es aproximadamente igual a la suma de las areas de los n rectangulos.Se va a indicar mediante h(xi, xf , n) el valor de dicha suma. Puesto que la base de todos elloses igual a d = (xf − xi)/n se tiene que:

h(xi, xf , n) = dn∑

k=1

f(xk) (9.1)

La suma anterior puede llevarse a cabo mediante un programa de computador. Notese que laformula (9.1) solo contiene variables y funciones conocidas. Se supone que aunque no se conocela expresion analıtica de la funcion primitiva g(x) sı se conoce la de f(x) y tambien se suponeque los valores de f(x) se pueden calcular para cualquier x ∈ [xi, xf ].

El problema que se pretende resolver puede enunciarse como: dados dos valores xi, xf

(xi < xf ) y una funcion f(x), hallar el area bajo la curva f de forma aproximada.

Resulta evidente que el resultado de (9.1) depende del numero de rectangulos que se utilicen.Si se toma un valor demasiado bajo para n es resultado sera poco aproximado pues la ”escalera”de rectangulos sera demasiado tosca. Por contra un valor demasiado alto de n producira re-sultados finos a costa de un tiempo de calculo elevado. En el algoritmo que se va a realizar sedejara que n sea una variable a elegir por el usuario.

104 TEMA 9. ALGUNOS PROBLEMAS DE INGENIERIA

9.4 Integracion numerica de ecuaciones diferenciales

9.4.1 Introduccion

Un problema clasico en ingenierıa es el calculo de soluciones aproximadas de ecuaciones difer-enciales usando metodos numericos.

Una ecuacion diferencial es aquella en la que aparecen la incognita y sus derivadas. Porejemplo la ecuacion

dx

dt+ x = 0

En esta ecuacion x no representa un numero sino una funcion del tiempo x(t). La solucionde la ecuacion es una funcion tal que derivada respecto al tiempo y sumada a sı misma produzcael valor cero.

En algunos casos es posible obtener la solucion utilizando herramientas del calculo. En elejemplo mostrado es simple pasando dt al segundo miembro y tomando integral.

dx

dt+ x = 0

dx

dt= −x

− dx

xdt= 1

−dxx

= dt

−∫

dx

x=

dt

La integral de la izquierda es el logaritmo neperiano de x, la integral de la derecha es t,si suponemos que en el instante t = 0 se conoce el valor de x al cual simbolizamos mediantex(0) = x0 se tiene que:

−∫ t

0

dx

x=

∫ t

0dt

−(lnx− lnx0) = (t− 0)

−(ln x

x0) = t

(lnx

x0) = −t

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

x

x0= e−t

x(t) = x0e−t

Sin embargo hay ocasiones donde no se conocen maneras para calcular soluciones manipu-lando las ecuaciones como en el ejemplo anterior. Tal es el caso de ecuaciones diferenciales enlas cuales aparecen terminos que no son lineales.

Como ejemplo considere el problema de un paracaidista cayendo en la atmosfera. La caıdaesta gobernada por la accion de la fuerza de gravedad y la fuerza de rozamiento con el aire.

Fg − Fr = mdv

dt

donde Fg es la fuerza de la gravedad que atrae al paracaidista hacia el suelo, Fr es la fuerzade rozamiento que se opone a la caıda, v es la velocidad vertical hacia abajo con la que viaja elmovil y m es su masa.

Se sabe que Fg = mg siendo g = 9.8m/s2, por otra parte la resistencia aerodinamica dependede muchos factores. Simplificando mucho se puede considerar que Fr = kv2. Es decir, laresistencia es proporcional al cuadrado de la velocidad.

La ecuacion diferencial queda entonces:

mg − kv2 = mdv

dt

dividiendo por m y reagrupando terminos se obtiene:

dv

dt= g −Bv2

siendo B = k/m.

9.4.2 El metodo de Euler

Una forma simple de resolver ecuaciones como la anterior es el metodo de Euler.

Sea la ecuacion dxdt

= f(t) con condicion inicial x(0) = x0.Por tanto, en el instante de tiempot = 0 se sabe que x(t) = x0. Ademas se sabe que

x(0) = f(0) = limt−→0

x(t)− x0

t− 0≈ x(h)− x0

h

tomando un valor h = ∆t suficientemente pequeno. Es decir, que el valor de x(t) en un instanteh proximo a cero es aproximadamente x(h) ≈ x0 + hf(0). Del mismo modo, para el instante

106 TEMA 9. ALGUNOS PROBLEMAS DE INGENIERIA

2h se puede escribir x(2h) ≈ x(h) + hf(h), como x(h) no es conocido se puede utilizar su valoraproximado x(h) = x0 + hf(0). Queda claro que de este modo se puede obtener una secuenciade valores aproximados {x(kh)}, k = 0, 1, 2, · · · . Notese que este metodo equivale a hacer unaextrapolacion lineal con la derivada en cada punto.

Para ilustrar el metodo de Euler se parte de la situacion mostrada en la figura 9.5 (a). El ejehorizontal representa la variable t, en el eje vertical se ha colocado el valor x(0) = x0. A partirde este punto se traza una recta con pendiente f(0). Sobre esta recta se halla el punto de abcisah y ordenada x(h) = x0 + hf(0). La nueva situacion es la mostrada en 9.5 (b): ahora se tomax(h) como punto de partida para trazar una nueva recta de pendiente f(h) y obtener sobre ella elpunto de abcisa 2h y ordenada x(2h) = x(h)+hf(h). En la figura 9.5 (c) se muestra el resultadoobtenido al repetir los pasos anteriores 50 veces con h = 0.1, siendo f(t) = cos(t) y x(0) = 0.Se observa que la solucion proporcionada por la integracion numerica es un conjunto de valores{x(kh)}, k = 0, 1, 2, · · · 50. Estos valores se han representado uniendo mediante segmentos lospuntos (kh, x(kh)), de forma que se obtiene una aproximacion mediante trozos rectos. En lacitada figura se muestra tambien con trazo punteado la solucion exacta obtenida resolviendodxdt

= cos(t), con x(0) = 0 que da como resultado x(t) =sen(t).

0

xx(h)

ht

0

x(h) x(2h)

t2h

x

0 h

0

0 0.5 1 1.5 2 2.5 30

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

(a) (b) (c)

Figura 9.5: El metodo de Euler para integracion numerica

El problema que se pretende resolver puede enunciarse como: dada una ecuacion diferencialde primer orden en la forma dx

dt= f(t) con condicion inicial x(0) = x0 calcular de forma

aproximada mediante el metodo de Euler los valores de la trayectoria x(t) para t = h, 2h, · · · , Nhsiendo h el paso de integracion dado y N el numero de pasos (tambien dado).

9.5 Ecuaciones trascendentes

Existen ecuaciones cuyas soluciones no pueden hallarse con lapiz y papel intentando despejar lavariable buscada. Este es el caso de ecuaciones como cos(x) = x.

El problema se puede replantear como la busqueda del punto de corte con el eje horizontalde la funcion y = cos(x) − x. Para calcular (de forma numerica) el paso por cero de y(x) sepueden aplicar diversos metodos. Uno de ellos se comenta a continuacion.

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

9.5.1 Metodo de la biseccion

Se quiere resolver el problema de hallar el paso por cero (o raız) de una funcion y = f(x) dentro deun cierto intervalo [xi, xf ]. Se sabe que f es continua y tambien que en los extremos del intervalotoma valores de distinto signo. Sin perdida de generalidad se puede suponer que f(xi) > 0 yf(xf ) < 0 (en caso contrario basta con buscar el corte por cero de −f(x)).

La situacion comentada aparece descrita en la figura 9.6. De la propiedad de continuidad dela funcion f se obtiene que debe existir al menos un paso por cero en el intervalo citado. Interesacalcular ese valor x∗ que cumple f(x∗) = 0 aunque sea de modo aproximado.

x i x f

f( x )

x *

Figura 9.6: Funcion con un pase por cero en el intervalo mostrado.

El metodo de la biseccion consiste en dividir el intervalo en otro mas pequeno que sigaconteniendo el punto de corte. Este procedimiento se repite varias veces hasta que el intervaloes lo bastante pequeno. Llegado este momento se puede tomar como valor aproximado del ceroel punto medio del ultimo intervalo.

Para realizar la biseccion se toma el punto medio del intervalo actual xm = (xi + xf )/2. Seevalua la funcion en dicho punto, pueden darse tres casos:

• a) la funcion en xm es del mismo signo que f(xi). En tal caso se toma como nuevo intervaloel [xm, xf ] y se repite el proceso.

• b) la funcion en xm es del mismo signo que f(xf ). En tal caso se toma como nuevo intervaloel [xi, xm] y se repite el proceso.

• c) f(xm) = 0 en tal caso no es preciso buscar mas, se ha hallado un pase por cero de lafuncion.

El metodo de la biseccion termina o bien cuando se halla un punto en el que la funcion valecero o cuando el intervalo es lo suficientemente pequeno. Por ejemplo, si se necesita conocer elpase por cero con dos decimales nada mas el metodo ha de aplicarse hasta que el intervalo tengauna longitud menor o igual a 0.01.

En la figura 9.7 se muestra como actuarıa el metodo de la biseccion con la misma funcion dela figura 9.6. Se han representado tres etapas con los pasos descritos anteriormente (indicadasmediante un numero encuadrado situado en la parte superior de cada grafica). La longitud

108 TEMA 9. ALGUNOS PROBLEMAS DE INGENIERIA

x i x i x f

f( x )

x m

2

x f

f( x )

x m

1

x i x f

f( x )

x m

3

Figura 9.7: Funcionamiento del metodo de la biseccion.

del intervalo, que se ha indicado en la parte inferior, disminuye a la mitad en cada etapa conrespecto a la anterior.

Para ilustrar el metodo se va a considerar la funcion cosx−x. El intervalo en el que existe unpase por cero se obtiene facilmente recordando que cos 0 = 1, por lo que f(0) = cos 0−0 = 1 > 0y por otra parte cosπ/2 = 1, por lo que f(π/2) = cosπ/2− pi/2 = 0− π/2 < 0.

Por tanto el primer intervalo considerado es [xi, xf ] = [0, π/2]. El punto medio de esteintervalo es xm = (xi +xf )/2 = π/4. Al evaluar la funcion se obtiene que f(xm) = −0.0783 < 0,por lo que se trata del caso b). El nuevo intervalo ha de ser [0, π/4].

Repitiendo el proceso varias veces se obtienen los valores que figuran en la tabla siguiente:

Intervalo Punto medio xm Valor de f(xm) Longitud intervalo

[0, π/2] π/4 -0.0783 1.5708[0, π/4] π/8 0.5312 0.7854

[π/8, π/4] 3π/16 0.2424 0.3927[3π/16, π/4] 7π/32 0.0858 0.1963[7π/32, π/4] 15π/64 0.0046 0.0982[15π/64, π/4] 31π/128 -0.0366 0.0491

[15π/64, 31π/128] 61π/256 -0.0159 0.0245[15π/64, 61π/256] 121π/512 -0.0056 0.0123[15π/64, 121π/512] 245π/1024 -0.0211 0.0061

La columna de la derecha indica la longitud del intervalo considerado; es decir xf − xi.Puede observarse que el valor en cada etapa es la mitad que en la anterior. Esta cantidad tienegran importancia en el metodo. Observese que si se toma xm como valor aproximado de x∗

el error cometido no sera nunca mayor que la longitud del intervalo. Por tanto, si se desea lasolucion aproximada con un decimal exacto esta se puede tomar como 15π/64; si se precisan dosdecimales exactos entonces hay que tomar 245π/1024.

La figura 9.8 muestra la funcion f(x) = cosx− x. Los cırculos y las lıneas verticales indicanlos valores de xm en las cuatro primeras etapas. Los numeros que figuran encima de los cırculosindican la etapa en la que han sido obtenidos. Puede comprobarse que en la primera etapa seobtiene (por casualidad) un valor muy cercano al paso por cero.

El problema que se pretende resolver puede enunciarse como: dada una funcion f(x) y un

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

0 0.5 1 1.5−1.5

−1

−0.5

0

0.5

1

x

y

cos(x)−x

1

2

3

4

Figura 9.8: Ejemplo de uso del metodo de la biseccion.

intervalo inicial [xi, xf ] tales que f(xi) · f(xf ) < 0 aplicar el metodo de la biseccion hasta que elintervalo resultante tenga una longitud menor que cierto valor dado ∆. El algoritmo dara comoresultado el intervalo final.

9.6 Superficies

Una superficie z = f(x, y) definida en un rectangulo [xi, xf ]× [yi, yf ] puede representarse medi-ante un conjunto discreto de alturas medidas en algunos puntos del dominio. Por ejemplo, si setoma una rejilla en el rectangulo con nx × ny puntos, las alturas de los puntos (xj , yi) seran losvalores zij = f(xj , yi) para i = 1, · · · , ny y j = 1, · · · , nx que se pueden incluir en una matrizZ ∈ IRny×nx .

A modo de ejemplo considere la funcion z = f(x, y) = x2+y2 en el rectangulo [−1, 1]× [−2, 2].Si se toma una rejilla de ancho 0.5 se obtienen los valores siguientes:

x = {−1,−0.5, 0, 0.5, 1}y = {−2,−1.5,−1,−0.5, 0, 0.5, 1, 1.5, 2}

Z =

5.00 3.25 2.00 1.25 1.00 1.25 2.00 3.25 5.004.25 2.50 1.25 0.50 0.25 0.50 1.25 2.50 4.254.00 2.25 1.00 0.25 0.00 0.25 1.00 2.25 4.004.25 2.50 1.25 0.50 0.25 0.50 1.25 2.50 4.255.00 3.25 2.00 1.25 1.00 1.25 2.00 3.25 5.00

La figura 9.9 muestra la rejilla en el rectangulo considerado y la superficie z = f(x, y) calcu-lada en los puntos de la rejilla.

Una superficie cualquiera, como por ejemplo la formada por las montanas y valles del terreno,puede ser representada aproximadamente por una matriz. Usando esta representacion es posible

110 TEMA 9. ALGUNOS PROBLEMAS DE INGENIERIA

−2 −1 0 1 2−1.5

−1

−0.5

0

0.5

1

1.5rejilla

x

y

−2 −1 0 1 2−1

0

10

1

2

3

4

5superficie f(x,y)

xy

Figura 9.9: Ejemplo de uso del metodo de la biseccion.

resolver algunos problemas de ingenierıa.

9.6.1 Busqueda de extremos

Dada una matriz de alturas como la descrita en 9.6 con ny filas y nx columnas se desea determinarlos maximos y mınimos. El problema es equivalente a buscar las cimas y depresiones de unterreno.

Para concretar mas lo expuesto considerese la superficie mostrada en la figura 9.10 y sucorrespondiente grafico de curvas de nivel. Puede observarse que existe mas de una cumbre ymas de una depresion. El objetivo no es hallar la cumbre mas alta o la sima mas profunda sinoindicar en que lugares existe alguna de estas caracterısticas del terreno.

1020

3040

5060

1020

3040

50

10

20

30

j

superficie

i10 20 30 40 50 60

5

10

15

20

25

30

35

40

45

50

55

j

i

5

10

15

20

25

Figura 9.10: Terreno con multiples cumbres y simas (izquierda) y mapa con curvas de nivel(derecha). La barra de la derecha indica la correspondencia entre tonos de gris y altura.

Para solucionar el problema se puede usar la idea de que una cumbre es un punto del terrenoque sobresale de los puntos vecinos. Este hecho sera visible en la matriz de alturas pues la

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

cumbre correspondera a algun elemento ai,j con la propiedad de ser mayor que sus vecinos.

Por ejemplo, en la matriz siguiente

0 0 1 2 2 1 0 0 00 0 2 2 2 2 1 0 00 0 2 2 2 2 1 0 00 1 1 2 3 1 1 0 00 0 1 1 2 1 1 0 00 0 1 1 2 1 1 0 00 0 1 1 2 1 0 0 0

hay una sola cumbre, correspondiente al elemento a4,5. Puede verse que los elementos ad-ya-centes tienen menor valor.

Ha de tenerse en cuenta que los vecinos que hay que comprobar son: el de arriba, el deabajo, el de la izquierda, el de la derecha y tambien los cuatro situados en las diagonales; esdecir, arriba a la izquierda, arriba a la derecha, abajo a la izquierda y abajo a la derecha.

Los elementos que estan situados en los bordes de la matriz (los de las filas primera y ultimay los de las columnas primera y ultima) no pueden ser comprobados porque no tienen todos susvecinos, por ello se dejan fuera del analisis.

El algoritmo para detectar cumbres debera analizar cada uno de los elementos interiores dela matriz y comprobar si se cumple o no la condicion de ser mayor que los vecinos.

9.7 Tratamiento de textos

9.7.1 Palabras en orden inverso

El problema consiste en leer una frase del teclado y escribirla luego al reves. Por ejemplo, si selee la frase Hola amigo. se ha de escribir en la pantalla .ogima aloH que es la frase escrita dederecha a izquierda.

9.7.2 Palındromo

Problema Leer una palabra y decidir si es palındromo. El final de la palabra es indicado conel punto. Para ser palındromo debe ocurrir que exista un eje de simetrıa en la palabra. Lapalabra puede tener un numero par o impar de caracteres; en este ultimo caso el eje de simetrıacontendra el caracter central.

Ejemplos: abba, abcba.

112 TEMA 9. ALGUNOS PROBLEMAS DE INGENIERIA

9.7.3 Mensaje oculto

Una frase puede cambiarse para que resulte irreconocible. Una forma muy simple consiste encambiar cada caracter por el siguiente del alfabeto. Por ejemplo, la palabra IBM se convierte enHAL.

El programa que se desea construir ha de codificar, mediante esta tecnica simple, una fraseque se leera del teclado. Considere que la frase leıda consiste unicamente en una palabra formadapor letras (sin numeros ni otros caracteres).

Para simplificar no tenga en cuenta el caso de letras con tilde o dieresis.

9.7.4 Mensaje oculto II

Se puede expandir el programa anterior para que opere tambien con frases que contienen carac-teres que no son letras, tales como los numeros y signos de puntuacion. Los unicos caracteresque se han de modificar son las letras.

Por ejemplo, si la frase que se introduce es >Quedamos a las 6h? el resultado ha de ser>Rvfebnpt b mbt 6i?

Para simplificar no tenga en cuenta el caso de letras con tilde o dieresis.

9.7.5 Descifrar mensaje

Se trata ahora de resolver el problema inverso: dado un mensaje codificado proporcionar la fraseoriginal.

El programa ha de leer del teclado una frase codificada, como por ejemplo >Rvfebnpt b

mbt 6i?. Como resultado el programa ha de escribir en la pantalla el mensaje sin codificar>Quedamos a las 6h?.

Para simplificar no tenga en cuenta el caso de letras con tilde o dieresis.

9.7.6 Mensaje oculto II

En los dos problemas anteriores se ha ignorado el caso de la letra z. Esta letra plantea unproblema para ser codificada pues no existe otra letra posterior. Una forma de resolver esteproblema es ”asignar” de forma artificial la a como letra siguiente a la z. De este modo unafrase como zona 3 se codifica en apob 3.

Para simplificar no tenga en cuenta el caso de letras con tilde o dieresis.

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

9.7.7 Pase a mayusculas

Se desea cambiar una frase de forma que todas las letras queden en mayusculas. El programaleera una frase del teclado y escribira como resultado la misma frase pero con las letras cambiadasde forma que todas esten en mayusculas. Por ejemplo, la frase Tengo clase a las 16h en la

planta E-2 ha de transformarse en TENGO CLASE A LAS 16H EN LA PLANTA E-2.

Observese que las letras que ya estaban en mayusculas se quedan igual. Los caracteres queno son letras no se ven afectados.

Para simplificar no tenga en cuenta el caso de letras con tilde o dieresis.

9.8 Tratamiento de archivos

9.8.1 Agenda telefonica

Se desea crear una agenda telefonica. Esta agenda consiste en un archivo de texto en el queaparecen nombres, apellidos y numeros de telefono.

Esta tarea puede realizarse con la libreta de notas, pero en lugar de eso queremos desarrollarun programa en MATLAB que recoja los datos de la agenda y los introduzca en un archivo.

El programa ha de preguntar al usuario el nombre, apellidos y numero de telefono de unapersona. Posteriormente preguntara si desea anadir otra persona a la agenda o grabar los datos.Si escoge anadir el programa ha de volver a preguntar el nombre, apellidos y numero de telefono,en caso contrario el programa escribira los datos en un archivo de texto.

El archivo de texto ha de tener el formato siguiente: los dos primeros caracteres son unnumero de orden, a continuacion viene un espacio. Los 15 caracteres siguientes se reservan parael nombre. A continuacion debe aparecer una coma. Los 30 espacios siguientes se dejan paralos dos apellidos. Despues ha de aparecer la palabra Tel y un espacio en blanco. Finalmente seescribe el telefono y se pasa a la lınea siguiente.

En el recuadro siguiente se puede observar un ejemplo de dicho archivo de texto.

01 Pedro, Perez Repitre Tel 56 90 02

02 Ana, Regues Dıaz Tel 11 32 45

03 Juan, Borda Ruiz Tel 34 43 78

04 Antonio, Garcıa Wrkczy Tel 21 32 43

114 TEMA 9. ALGUNOS PROBLEMAS DE INGENIERIA

9.8.2 Agenda telefonica II

Para consultar la lista de telefonos confeccionada con el programa anterior es posible usar lalibreta de notas. En lugar de eso se quiere crear un programa en MATLAB que lea el archivo ypresente en la pantalla la informacion que contiene.

El programa no recibe dato alguno. Su mision consiste en leer el archivo que contiene laagenda y mostrar en la pantalla la lista de nombres, apellidos y telefonos exactamente en lamisma forma en la que aparece en el archivo.

9.8.3 Agenda telefonica III

En una agenda es frecuente que haya que anadir nuevos telefonos o borrar alguno existente .Se ha de realizar un programa que lea el archivo (creado con el programa de 9.8.1), presente sucontenido en pantalla y pregunte al usuario si desea anadir o eliminar algo. En caso de que sedesee anadir el programa preguntara al usuario los datos del mismo modo que en el programa de9.8.1. Si se desea eliminar una entrada de la agenda (una lınea de datos) el programa preguntaraque numero de lınea se desea eliminar. El programa concluye escribiendo un nuevo archivo conlos cambios realizados.

Bibliografıa

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

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

• T. Aranda, Notas sobre MATLAB. Universidad de Oviedo, Servicio de Publicaciones,1999.

• J. Mathews, Metodos numericos con MATLAB. Prentice Hall, 2000.

• C. Perez Lopez, Matematica informatizada con MATLAB, Ra-Ma, 1996.

• K. Sigmon , Introduccion a MATLAB. University of Florida, 1992. (Traduccion de Ce-lestino Montes. Escuela Superior de Ingenieros, Universidad de Sevilla).

• M. J. Soto Prieto, Algebra lineal con MATLAB y MAPLE. Prentice-Hall Internacional,1995.

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