Anda di halaman 1dari 123

Fundamentos de inform atica para Ingeniera Aerona utica

Manuel Ruiz Arahal


Sevilla, octubre de 2003
2
Contenido

Indice 3
1 Introducci on 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 Codicaci on binaria de la informaci on 5
2.1 Sistema binario de numeracion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.1 Conversiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2 Codicacion de n umeros enteros . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3 Codicacion de caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.4 Otros tipos de informacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4.1 N umeros fraccionarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4.2 Formatos gracos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3 Estructura de la computadora digital 13
3.1 Esquema funcional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.2 La memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.2.1 Caractersticas 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 programaci on 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 Resoluci on 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 ujo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.3.1 Smbolos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 Programaci on 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 Codicacion de nuevos programas . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
7.4.1 Legibilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
7.5 Funciones para trazado de gracas . . . . . . . . . . . . . . . . . . . . . . . . . . 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 Programaci on 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 Clasicacion de las variables . . . . . . . . . . . . . . . . . . . . . . . . . . 94
8.4 Fases de la ejecucion de una instruccion . . . . . . . . . . . . . . . . . . . . . . . 97
9 Algunos problemas de ingeniera 99
9.1 Interpolacion con segmentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
c M.R. Arahal 2003 DISA. ESI. US. 7
9.2 Ajuste por mnimos 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 Supercies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
9.6.1 B usqueda de extremos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
9.7 Tratamiento de textos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
9.7.1 Palabras en orden inverso . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
9.7.2 Palndromo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 may usculas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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
Bibliografa 115
8 CONTENIDO
Tema 1
Introducci on y fundamentos
En este primer captulo se denen 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 da los usos de la computadora son bien conocidos por la mayora
de las personas, por lo que algunos aspectos tratados pueden parecer triviales. Sin embargo, es
conveniente denir y delimitar los terminos que se manejaran en este texto para evitar confu-
siones. Junto con tales deniciones se presenta ahora el modelo de computadora que detallara
en el tema 3.
1.1 Informatica y computadoras
La inform atica trata de la adquisicion, representacion, tratamiento y transmision de la in-
formacion. El termino procede de la union de dos palabras: informacion y automatica. La
informacion aludida puede ser de muy diversos tipos: n umeros, texto, sonido, etc. por lo que el
campo de utilizacion de la informatica es muy amplio como es sabido.
Las maquinas que permiten realizar automaticamente las operaciones citadas se denominan
computadoras y tambien ordenadores. Se puede denir la computadora como un elemento
capaz 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 denida como se representa
gracamente en la gura 1.1.
Es conveniente observar que la denicion dada no explicita la forma de los datos ni tampoco
la clase de tratamiento que han de sufrir para proporcionar los resultados. Veremos que la
computadora digital es un dispositivo que cumple con la denicion dada, pero no es el unico.
Muchos de los conceptos que se vierten aqu se pueden aplicar a otros dispositivos, sin embargo
el objetivo de este libro es la computadora digital.
A n de ilustrar las interacciones representadas en la 1.1 considerese una calculadora. Los
1
2 TEMA 1. INTRODUCCI

ON Y FUNDAMENTOS
Figura 1.1: La computadora trata la informacion de entrada (datos) para producir resultados.
datos proporcionados por el operador son n umeros y operaciones a realizar que la calculadora
recibe al ser presionadas ciertas teclas. Los resultados son n umeros que aparecen en el visor.
Los datos se convierten en resultados mediante procesos de calculo en los que el operador ha
intervenido poco (comparado con realizar los calculos a mano). Veremos mas adelante que es
posible automatizar mas a un 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. Los
programas para la redaccion de texto, los programas de dibujo artstico o lineal, los juegos de
accion, las bases de datos, etc. son otros ejemplos de tareas que se realizan con computadoras.
En la actualidad la tecnologa electronica digital domina el tratamiento automatico de la
informacion, pero esto no ha sido siempre as. De hecho, las primeras maquinas de calcular
eran mecanicas. Tambien ha habido computadoras neumaticas y en la actualidad se investiga
en posibles usos de la luz para construir ordenadores opticos.
Los conceptos que se deniran a continuacion son de aplicacion en todos los ejemplos men-
cionados anteriormente, vericandose el diagrama de la gura 1.1, el cual tiene por tanto una
validez 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 smbolos 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 los
datos.
Es conveniente comprender que un programa es una secuencia de instrucciones en un campo
mucho 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, por
ejemplo obtener
x
3
+2
6
. Para resolverlo basta con pulsar una cierta secuencia de teclas. Esto
puede 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 teclas
bastara con proporcionar unicamente el valor de x. En tal caso el trabajo del operador se ve
reducido a:
1. Proporcionar una lista con las pulsaciones de teclas: x
y
, 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 mucho
tiempo y esfuerzo. Esto es, en esencia, lo que realiza una computadora. La lista de teclas a
pulsar hace, en el ejemplo, las veces de programa. Este programa es proporcionado una vez y
puede 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 que
forman el programa. Esta operacion recibe el nombre de programacion. Programar la maquina
es por tanto proporcionar el programa o lista ordenada de instrucciones que resuelve una tarea o
problema. 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 puede
usarse repetidas veces con datos distintos, ahorrando tiempo al operador, pues son muchas las
instrucciones 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 valores
de x basta con cambiar la secuencia de teclas. La misma maquina realiza ahora operaciones
diferentes al activar el programa.
1.2 Estructura funcional de la computadora digital
El esquema de computadora presentado en la gura 1.1 no indica las partes de que consta. Una
descripcion mas detallada mostrara los modulos que realizan tareas concretas. En la historia
de las computadoras se han utilizado diversas estructuras funcionales, pero en la actualidad la
4 TEMA 1. INTRODUCCI

ON Y FUNDAMENTOS
UAL
principal
Unidad de control
u
n
i
d
a
d

d
e

e
n
t
r
a
d
a
/
s
a
l
i
d
a
Periffico 1
Perifrico n
Memoria
informacin
seales
de 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 siguientes
partes:
Memoria principal. Tiene como mision almacenar informacion. Consiste en un conjunto
de 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 informaciones
diversas, como son datos con los que operar, resultados producidos y tambien las instruc-
ciones que forman el programa.
Unidad aritmetico-l ogica. 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 la
unidad 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 entre
los distintos modulos tambien corre a cargo de la unidad de control (UC), por lo que esta
puede considerarse como el director del sistema.
Unidad de entrada y salida. Permite obtener o mandar datos del/al exterior. Las vas
de comunicacion con el mundo externo son los perif ericos, que es el nombre generico
dado 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 la
gura 1.3. Hay que resaltar, que la comunicacion entre bloques es de dos tipos: datos y se nales
de control. Dentro de los datos se incluye todo tipo de informacion adecuadamente representada
incluyendo la informacion proporcionada (datos en sentido habitual), la informacion procesada
(los resultados) y otros.
Las se nales de control son ordenes que la UC manda a los distintos elementos para que se
realicen las operaciones. La UC y la UAL forman la unidad central de proceso (UCP), que es
el responsable de la ejecucion del programa. La memoria tiene un papel pasivo proporcionando
los datos e instrucciones cuando son solicitados por la UCP.
Tema 2
Codicaci on binaria de la
informaci on
Se ha indicado en el tema introductorio que las computadoras digitales solo manejan informacion
en forma de ceros y unos. Sin embargo estamos acostumbrados a ver que las computadoras
permiten utilizar informacion de muchos tipos: texto, gracos, sonidos. Para poder representar
la informacion con ceros y unos es necesario usar un codigo.
Los dispositivos electronicos usados para construir las computadoras digitales se dise nan
para trabajar en torno a dos valores de tension uno de ellos se asocia con el estado 1 y el otro
con el 0. Estos circuitos son capaces de cobijar los valores cero y uno por lo que constituyen
celdas de memoria que almacenan estos valores binarios. En este tema se muestra en que forma
es posible representar informacion diversa usando unicamente los valores cero y uno.
2.1 Sistema binario de numeraci on
Los n umeros se pueden expresar en distintos sistemas de numeracion. Como es sabido, el mas
usual es el sistema en base 10. En este sistema, llamado decimal, se interpretan las cifras como
coecientes de un polinomio en potencias de 10:
N |
10
= d
n
10
n
+ +d
1
10
1
+d
0
10
0
donde los dgitos d
n
a d
0
constituyen el n umero en base 10. Para aclarar ideas considerese el
n umero 1492. En base 10 se interpreta como: un millar mas cuatro centenas mas nueve decenas
mas dos unidades, o lo que es lo mismo:
1492 = 1 10
3
+ 4 10
2
+ 9 10
1
+ 2 10
0
Los dgitos o coecientes del polinomio son las cifras 1, 4, 9 y 2. En el sistema decimal se
trabaja 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. CODIFICACI

ON BINARIA DE LA INFORMACI

ON
posibles coecientes: el cero y el uno. La interpretacion de un n umero escrito en base dos es la
misma que en decimal, pero cambiando la base:
N |
2
= b
n
2
n
+ +b
1
2
1
+b
0
2
0
(2.1)
as el n umero 01001 en base dos (indicado frecuentemente como 01001 |
2)
) se interpreta como la
cantidad
0 2
4
+ 1 2
3
+ 0 2
2
+ 0 2
1
+ 1 2
0
= 9 |
10
Observese que se ha indicado la base utilizada mediante un subndice. Habitualmente se
trabaja en base 10, por lo que se omite dicho subndice. A los coecientes d
i
de la representacion
digital se les llama dgitos, a los de la binaria b
i
se les llama bits
1
.
Los sistemas decimal y binario son solo dos ejemplos de una innidad de posibles sistemas con
base b . En general, el Teorema Fundamental de la Numeracion proporciona el valor decimal de
una cantidad expresada en base b por ciertas cifras. Sean los dgitos g
p
g
p1
g
0
.g
1
g
n
,
donde el punto separa la parte entera de la fraccionaria (en la base en cuestion), entonces el
valor decimal es
N |
b
=
i=p

i=n
g
i
b
i
Otros sistemas de representacion numerica muy usados en informatica son el octal, cuya base
es 8 y por tanto usa las las cifras del 0 al 7 y el hexadecimal, de base 16. Este ultimo sistema
plantea un problema a la hora de escribir n umeros y es que son necesarios 16 dgitos distintos.
En el sistema decimal solo hay diez dgitos: 0, 1, 2, 3, 4, 5, 6, 7, 8 y 9. Para obtener los restantes
seis dgitos se utilizan las letras A, B, C, D, E y F para representar los valores 10, 11, 12, 13, 14
y 15 respectivamente.
2.1.1 Conversiones
Las conversiones permiten obtener las cifras correspondientes a una misma cantidad en distintas
bases. En informatica la conversion mas usada es la de decimal a binario y viceversa, por ello
se van a describir con detalle.
Al realizar una conversion hay que tener en cuenta que la cantidad representada no cambia,
lo que se modica es la forma en que se simboliza dicha cantidad.
Dado un n umero en base dos, es facil hallar su equivalente decimal sin mas que aplicar la
relacion (2.1). Es decir, realizando la suma de potencias de dos. Por ejemplo el n umero 1 |
2)
equivale a 1 2
0
que es el uno en base 10, por tanto 1 |
2)
= 1 |
10)
. Del mismo modo se obtiene
que 101 |
2)
= 1 2
2
+ 0 2
1
+ 1 2
0
= 5 |
10)
.
El paso contrario, es decir, el paso de de decimal a binario, es mas elaborado. Una posibilidad
es dividir sucesivamente el n umero por dos. Los restos de las divisiones dan el n umero en
binario, ledos en sentido ascendente, tal como se muestra en la gura 2.1 donde se obtiene la
representacion en base dos del n umero 214 |
10)
.
1
del 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
3 0
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 n umeros para as realizar conver-
siones de forma rapida sin usar la regla de la division.
potencia decimal binario
2
0
1 1
2
1
2 10
2
2
4 100
2
3
8 1000
2
4
16 10000
2
5
32 100000
2
6
64 1000000
2
7
128 10000000
2
8
256 100000000
2
9
512 1000000000
2
10
1024 10000000000
Ciertas conversiones resultan comodas de este modo. Por ejemplo, para pasar a binario el
n umero decimal 18 basta con observar que 18 |
10)
= 16+2 y por tanto igual a 2
4
+2
1
, por lo que
la representacion en base dos resulta 10000 |
2)
+10 |
2)
= 10010 |
2)
; es decir, 18 |
10)
= 10010 |
2)
.
2.2 Codicaci on de n umeros enteros
La memoria de una computadora esta formada por muchas celulas elementales agrupadas en
registros. Cada celda solo pueden representar los n umeros 0 o 1, pero al considerar un grupo de
ellas (el registro) se pueden codicar n umeros mayores como veremos.
Para representar un n umero entero positivo mediante un conjunto de bits se puede usar la
codicacion del n umero en base 2. De este modo, si se dispone de registros de 16 celdas es
posible almacenar los n umeros entre el 0 y el 2
16
1 = 65535. Si el n umero de celdas es mayor,
digamos 20, es posible ampliar el rango representable desde cero hasta 2
20
1 = 1048575.
La computadoras digitales utilizan registros de una anchura determinada, por lo que existen
lmites a los n umeros que es posible representar. Este hecho caracterstico de los sistemas
digitales 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 que
es largamente utilizada. Ahora bien, y los n umeros negativos?. El signo menos tendra que
8 TEMA 2. CODIFICACI

ON BINARIA DE LA INFORMACI

ON
poder expresarse como un cero o un uno. La idea mas simple es usar el bit mas a la izquierda
del registro para indicar el signo del n umero.

Esta y otras posibles representaciones se explican
a continuacion.
1. Modo signo-valor absoluto. Se reserva un bit de la palabra (normalmente el izquierdo)
para el signo. Los n umeros positivos tienen un valor 0 para este bit y los negativos un
valor 1. Este sistema queda descrito de forma graca 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 n umeros del -
32767 hasta el 32767. En general, para un n umero de bits en la palabra igual a n se
pueden representar los enteros comprendidos en el rango
_
(2
n1
1), 2
n1
1

.
Como ejemplo considerense los n umeros 5 y 4 codicados en un registro de 8 bits:
5 = 00000101, 4 = 10000100
El n umero de celdas n del registro afecta a la representacion de los negativos, pues el bit
de signo debe quedar a la izquierda. A modo de ejemplo vease la representacion de los
n umeros 5 y 4 codicados en un registro de 6 bits
5 = 000101, 4 = 100100
Es indispensable conocer n para saber donde esta el signo.
Otra caracterstica de este sistema es que tiene dos ceros: el positivo (0 00 . . . 0) y el
negativo (1 00 . . . 0).
2. Complemento a 1. Nuevamente se reserva el primer bit para el signo. El resto de la
codicacion es: el n umero en base dos si el signo es positivo o el complemento bit a bit
del valor absoluto si es negativo. Es decir, los n umeros positivos se representan igual que
en el sistema anterior, mientras que, los negativos sufren el cambio de los unos por ceros
y 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). Para
un n umero de bits en la palabra igual a n se pueden representar los enteros comprendidos
en el rango
_
(2
n1
1), 2
n1
1

.
3. Complemento a 2. Los dos sistemas anteriormente vistos presentan dicultades a la
hora de realizar sumas y restas mediante circuitos logicos, por lo que se ha buscado otro
metodo. El complemento a dos de un n umero es igual al complemento a uno mas uno;
es decir, los n umeros positivos se representan igual que en el sistema signo-valor absoluto,
pero los n umeros negativos se codican con el bit de signo igual a uno y el resto como 1
mas el complemento bit a bit del valor absoluto en base dos. Los n umeros negativos se
representan 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 n umeros que se pueden representar usando un registro de n celulas son los enteros
comprendidos en el rango:
_
2
n1
, 2
n1
1

. Se observa que en el lado de los negativos


hay un n umero mas. Esto es consecuencia de que solo existe un cero: (00 . . . 0) que usa el
espacio de un n umero positivo. El n umero 2
n1
tiene siempre la representacion especial
10 0 que corresponde al cero negativo en los metodos anteriores.
2.3 Codicaci on de caracteres
Muchas veces la informacion que la computadora ha de procesar no son n umeros sino caracteres
textuales tales como:
Letras may usculas y min usculas.
Dgitos. Para escribir las cifras de un telefono, o la hora, o n umeros.
Signos: ? ( ) , { } [ ] + $ . . .
Codigos sin representacion graca, pero con funciones de control, por ejemplo el retorno
de carro de la impresora, el aviso sonoro, los codigos de mensaje recibido, n de mensaje,
n de chero, etc. que se transmiten entre dispositivos.
Para transmitir y almacenar informacion de este tipo se creo el ASCII (American Standard
Code for Information Interchange), que es un codigo que asigna arbitrariamente un n umero
entero a cada signo. Los n umeros son luego representados en base dos para poder ser tratados
por la computadora.
El ASCII usa 7 bits, por lo que se pueden representar 2
7
= 128 signos distintos.

Estos
incluyen n umeros, el alfabeto ingles en may usculas y min usculas, signos matematicos y de pun-
tuacion y algunos caracteres de control. Una version posterior de este codigo es el ASCII
extendido, que usa 8 bits, por lo que se pueden representar 256 signos. Esto pemite incluir la
letra n y otras de diversos alfabetos.
El conjunto de signos incluidos en el codigo recibe el nombre de tabla ascii. En la tabla
2.1 se muestran los codigos ascii correspondientes a algunos caracteres. Observese que las letras
van en orden alfabetico a excepcion de la letra n. Las may usculas estan colocadas en la tabla
antes que las min usculas. Tambien es de interes observar que existen codigos sin representacion
graca, que se han marcado como cc pues son codigos de control.
Los caracteres de control son combinaciones de ocho dgitos binarios, al igual que el resto
de la tabla ASCII. Lo que los hace en cierto modo especiales es el modo en que los perifericos
los usan. Al contrario que las letras y signos que aparecen por la pantalla o la impresora, los
codigos de control realizan cierta funcion sobre el dispositivo. La tabla 2.2 resume algunas de las
funciones mas usadas. La primera columna indica el n umero dentro de la tabla ascii, la segunda
es un nombre abreviado de la funcion que realiza, la cual se explica en la tercera columna.
10 TEMA 2. CODIFICACI

ON BINARIA DE LA INFORMACI

ON
Nro. Signo
0 cc
1 cc
2 cc
3 cc
.
.
.
.
.
.
46 .
47 /
Nro. Signo
48 0
49 1
50 2
51 3
.
.
.
.
.
.
57 9
58 :
Nro. Signo
63 ?
64 @
65 A
66 B
67 C
.
.
.
.
.
.
90 Z
Nro. Signo
.
.
.
.
.
.
97 a
98 b
99 c
100 d
101 e
102 f
Nro. Signo
.
.
.
.
.
.
161
162 o
163 u
164 n
165 n
166
a
Tabla 2.1: Fragmentos de la tabla ascii.
Transmisiones Pantalla o impresora
1 SOH comienzo de cabecera 7 BEL se nal audible
2 STX comienzo de texto 8 BS retroceso
3 ETX n de texto 9 HT tabulacion horizontal
4 EOT n de la transmision 10 LF avance de lnea
5 ENQ peticion de transmision 11 VT tabulacion vertical
6 ACK reconicimiento de transmision 13 CR retorno de carro
Tabla 2.2: Algunos codigos de control.
2.4 Otros tipos de informaci on
2.4.1 N umeros fraccionarios
Los n umeros con decimales tambien se pueden expresar en binario, usando para ello potencias
negativas de dos. Por ejemplo, el n umero 101.11 |
2
representa la cantidad 1 2
2
+0 2
1
+1 2
0
+
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 de
interpretarlo. A continuacion se describen dos posibles soluciones
1. Punto jo. Se reservan algunos bits del registro para la parte entera del n umero en
binario y otros para la fraccionaria; es decir, a partir de una posicion predeterminada, los
coecientes multiplican potencias negativas de dos. Este sistema queda descrito de forma
graca del siguiente modo:
2
p
2
1
2
0
2
1
2
2
2
q
.
donde se han reservado p + 1 celdas para la parte entera y q para la fraccionaria. No se
ha tenido en cuenta el problema del signo.
Considerese a modo de ejemplo que se tiene un registro de ocho celdas, y el punto decimal
se ja antes de los dos ultimos bits, entonces el n umero 000001.10 |
2
se interpreta como:
1 2
0
+ 1 2
1
= 1.5 |
10
c M.R. Arahal 2003 DISA. ESI. US. 11
y el n umero 000010.01 |
2
como 2.25 |
10
.
Los circuitos de la UAL se construyen de forma que cada parte del registro es tratada
correctamente de acuerdo a la posicion del punto decimal que es ja. Las operaciones se
realizan adecuadamente en cada parte del registro.
El problema de esta tecnica es que hay que jar el punto decimal en un sitio concreto, por
lo cual no se puede trabajar con n umeros muy dispares (por ejemplo 25000.0 y 0.00052) a
menos que se disponga de un n umero de bits muy alto. Debido a esto, este sistema se usa
poco en la actualidad.
2. Punto otante.
El n umero (N) a representar se transforma en dos (M, E) de forma que N = M 2
E
. La
primera cantidad, M es llamada mantisa, la segunda E el exponente. Puesto que existen
muchas combinaciones de M y E que cumplen N = M 2
E
se eligen adecuadamente
de acuerdo con alguna regla. Las mas comunes exigen que 0.5 | M |< 1, por lo que
representacion binaria de | M | comienza por 0.1. De este modo queda jado M y por
tanto N.
Para aclarar el metodo es mejor pensar en la representacion decimal. Un n umero con
decimales tal y como 340.126 puede expresarse como 3.40126 10
2
o como 0.0340126 10
4
o como 0.340126 10
3
.
Se denomina ajuste fraccionario o normalizaci on al proceso de seleccion de la man-
tisa y el exponente de forma que cumpla con las especicaciones. Despues de la normal-
izacion cada n umero M y N se codica en un trozo de registro.
Queda por resolver el problema de representar el signo tanto de la mantisa como del
exponente. Para ello basta con utilizar alguno de los metodos vistos, como el signo-valor
absoluto o el exceso a 2
n1
.
Existen varios formatos de punto otante con sus reglas especcas como IEEE 754. No se
va a describir con detalle ninguno de estos formatos, baste saber que todos ellos son muy
similares al caso comentado, que puede mostrarse de forma graca como:
s . . . .
. .
mantisa
s . . .
. .
exponente
Dado un n umero n de celdas el punto otante permite representar la misma cantidad de
valores que el punto jo pues las posibles combinaciones con n son las mismas. Ahora bien,
el rango de valores representables es mayor en punto otante, pues el exponente permite
alcanzar n umeros muy altos si es positivo o muy cercanos a cero si es negativo. Esta es la
gran ventaja del punto otante frente al jo y la razon de su uso.
2.4.2 Formatos gracos
Las imagenes pueden representarse mediante conjunto de puntos con un color o tonalidad de gris
dado. Esta es la idea usada por formatos gracos denominados matrices de puntos (llamados
en ingles formatos raster y bitmapped). En la gura 2.2 se representa una silueta en blanco y
negro descrita mediante una matriz de unos y ceros. El cero indica un punto luminoso y el uno
un punto oscuro. Resulta imaginable que teniendo una matriz con muchos elementos se pueden
conseguir imagenes de gran calidad.
12 TEMA 2. CODIFICACI

ON BINARIA DE LA INFORMACI

ON
Figura 2.2: Descripcion de una imagen (izquierda) usando una matriz de valores binarios
(derecha).
7.500 slw
% Ellipse
n 900 1050 525 300 0 360 DrawEllipse gs col-1 s gr
% Polyline
n 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 conseguir
grises se puede denir la misma matriz conteniendo n umeros del 0 al 255, de forma que a cada
nivel de gris le corresponde un n umero, siendo 0 el negro y 255 el blanco. Cada elemento de la
matriz ahora no es un bit, sino un caracter (8 bits). Para obtener el color se puede realizar la
misma operacion 3 veces, una para cada color rojo, verde y azul.
Este formato precisa mucha memoria, por ejemplo, para almacenar una imagen en color
de 200 200 puntos con ocho bits para cada color se necesitan 200 200 3 256 bits, que
aproximadamente son 3.7 Mc.
Un metodo alternativo consiste en describir la imagen mediante ecuaciones correspondientes
a lneas, supercies, etc, de forma que la union de las partes produzca (aproximadamente) la
imagen total. Se habla entonces de gr aficos vectoriales. La codicacion de la imagen se
reduce a la de las ecuaciones de las partes. Estas ecuaciones pueden representarse de muchas
formas. Por ejemplo un segmento queda perfectamente denido por las coordenadas de sus
puntos extremos, una circunferencia por las de su centro y un punto de la misma, etc.
A modo de ejemplo considerese el dibujo de la gura 2.3 consistente en un segmento y una
elipse. Utilizando el formato PostScript estos elementos quedan denidos en la forma en que se
muestra a la derecha.
Los gracos vectoriales son adecuados para dibujos formados por elementos geometricos
simples. Ambos metodos (matrices de puntos y gracos vectoriales) se combinan en los formatos
denominados meta archivos (metales), usados por muchos programas para poder incluir objetos
formados por lneas precisas, como planos y esquemas, junto a otros que quedan mejor descritos
mediante una matriz de puntos como fotografas.
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 tareas
claramente diferenciadas. Recordemos ahora el diagrama de bloques que puede verse en gura
3.1. Hay que resaltar, que la comunicacion entre bloques es de dos tipos: informacion (datos) y
se nales de control. Dentro de los datos se incluye todo tipo de informacion adecuadamente rep-
resentada incluyendo la informacion proporcionada (datos en sentido habitual), la informacion
procesada (los resultados) y otros (direcciones de memoria, estados, etc).
Las se nales de control son ordenes que la UC manda a los distintos elementos para que se
realicen las operaciones. La UC y la UAL forman la unidad central de proceso (UCP), que es
el responsable de la ejecucion del programa. La memoria tiene un papel pasivo proporcionando
los 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. Posteriormente
se explicara en que forma funciona el conjunto.
UAL
principal
Unidad de control
u
n
i
d
a
d

d
e

e
n
t
r
a
d
a
/
s
a
l
i
d
a
Periffico 1
Perifrico n
Memoria
informacin
seales
de 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 forma
mas o menos permanente. Para resolver este problema se han propuesto historicamente solu-
ciones diversas muy imaginativas como lneas de retraso, tubos de mercurio y n ucleos de ferrita.
La memoria en una computadora es un dispositivo capaz de almacenar informacion. Para
servir a los propositos del tratamiento automatico de la informacion la memoria ha de ser capaz
de recuperar cualquier informacion, proporcionandola al exterior solo cuando sea solicitada.
Como ya se ha dicho, las computadoras digitales trabajan con datos binarios, por lo que
la memoria debe poder guardar variables que toman dos valores: 0 o 1. Para ello basta con
agrupar celdas elementales formando registros. Los registros se apilan para formar bloques
mayores, como resultado las memorias actuales tienen capacidad para varios millones de bits.
En la arquitectura de Von Neumann (gura 3.1) la memoria es el bloque que almacena tanto
los datos y resultados como las instrucciones. A peticion de la unidad de control la memoria es
capaz de realizar dos operaciones:
Lectura. Consiste en extraer una copia de cierta informacion. En la mayora de los casos
tal informacion pueden leerse cuantas veces se desee, pues no es destruida por el proceso
de lectura.
Escritura. La escritura permite almacenar informacion dentro de la memoria. Los datos
que se van a almacenar ocuparan algunas celdas de la memoria que previamente contenan
otros valores, por lo tanto el proceso de escritura siempre conlleva la desaparicion de los
datos que ocupaban el lugar donde se introducen los nuevos.
3.2.1 Caractersticas 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. Cualquiera
que sea el soporte de la informacion la memoria queda denida por ciertas propiedades o carac-
tersticas como son:
Tiempo de acceso. Es el que transcurre entre el instante en que se ordena la lectura/escritura
de una informacion y el momento en que esta disponible para su procesamiento. Interesa
que sea lo mas bajo posible, no obstante este requerimiento entra en conicto con el coste.
Capacidad. Es el n umero de unidades de informacion que puede almacenar una memoria.
Como suelen ser n umeros muy altos se usan m ultiplos como kilo y mega.
Modo de acceso. Hay varias formas en las que se puede accceder a la informacion, entre
las que destacan el acceso directo y el secuencial, que se denen a continuacion.
Acceso directo. Para llegar a una determinada informacion no es preciso pasar por las
anteriores. 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 emplean
este tipo de acceso se denominan genericamenete RAM, del ingles Random Access
Memory.
Acceso secuencial. En este tipo de acceso, para llegar a un dato hay que dejar pasar
la informacion que le precede. Esto es lo que sucede, por ejemplo, cuando se usa una
cinta magnetica.
Volatilidad. La informacion almacenada en una memoria es volatil si puede destruirse o
alterarse al cesar el suministro de energa al dispositivo que constituye la memoria. Esta
es la situacion normal en memorias de semiconductores, que necesitan suministro electrico
para 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 estudio
de la computadora digital es la memoria principal. En los equipos actuales esta memoria esta
realizada mediante circuitos semiconductores que forman puertas logicas. De este modo surge la
celda que da cobijo a la unidad fundamental de informacion.

Estos y otros conceptos se denen
a continuacion.
Bit. Se denomina bit a la unidad elemental de informacion binaria. El bit es la informacion
contenida en una celula de memoria, es decir, un cero o un uno. Cualquier informacion
binaria puede codicarse mediante una cadena de bits mas o menos larga.
Caracter. Las celulas de memoria se suelen agrupar formando registros. Una agrupacion
muy 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, mas
popularmente, byte.
Palabra. Los registros de una computadora estan formados por cierto n umero de bits, los
mas usuales son de 16, 32 y 64 unidades. La informacion almacenada en un registro se
denomina palabra.
Se ha de notar la diferencia entre unidades de informacion: bit, caracer y palabra, y el
soporte 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 informaticos
kilo es un prejo que equivale a 2
10
= 1024 unidades, pues es la potencia exacta de dos mas
proxima a mil. Del mismo modo, mega equivale a 2
20
= 1048576 unidades. En la tabla siguiente
se muestran algunos tama nos de memorias expresados de varios modos.
abreviatura cantidad bits caracteres
1 Kc kilocaracter 8 2
10
2
10
1 Mc megacaracter 8 2
20
2
20
1 Gc gigacaracter 8 2
30
2
30
1 Tc teracaracter 8 2
40
2
40
16 TEMA 3. ESTRUCTURA DE LA COMPUTADORA DIGITAL
3.3 Clases de memoria
Aunque el esquema de la gura 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 se
enumeran algunos de los tipos mas habituales de memoria.
Memoria principal. Es la que contiene el programa en el momento de la ejecucion del
mismo. Suele estar constituida por circuitos integrados, que es la forma de almacenamiento
mas rapida. En la mayora de los casos es de tipo volatil y de acceso directo. Esta memoria
suele ser expansible a voluntad del operario; para ello basta con a nadir mas circuitos
integrados a las tarjetas de la computadora.
Memoria auxiliar. La memoria auxiliar es un dispositivo externo
1
que contiene infor-
macion. Entre otros pueden citarse el disco duro, el disco optico y los discos exibles.
Son llamadas tambien memorias masivas. La velocidad de acceso suele ser menor que la
de 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 de
entrada y salida (vease gura 3.1).
3.3.1 Estructura matricial
La memoria principal en los equipos actuales esta constituida por circuitos integrados en cuyo
interior 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 las y columnas,
como se muestra en la gura 3.2. Cada la es un registro de n bits, siendo n el ancho o longitud
de la palabra. El n umero de las N suele ser muy alto como puede suponerse sabiendo la
capacidad normal de las memorias actuales que es de varios megacaracteres. Cada registro
puede ser seleccionado mediante un hilo
2
. Para acceder a los bits individuales que forman la
palabra contenida en el registro se tienen n hilos llamados de lectura/escritura (abreviadamente
l/e).
La lectura se realiza transmitiendo por los hilos de l/e la informacion de cada celda del
registro seleccionado. La escritura realiza el proceso inverso, destruyendo la informacion que
resida previamente en el registro seleccionado.
Cada registro de la memoria tiene asignado un n umero llamado direccion. Es habitual
conceder al registro superior el n umero 0 y al inferior en n umero N 1, siendo N el n umero
total de registros.
Para acceder a la informacion de la memoria es preciso conocer la direccion en la que se
encuentra. Conocida dicha direccion se puede seleccionar el registro en cuestion y proceder
posteriormente a la lectura o escritura.
1
Necesita conexi on especial para unirse al resto de m odulos.
2
Termino heredado de los das en que las memorias eran de n ucleos de ferrita ensartados en los nodos de una
red de hilos conductores.
c M.R. Arahal 2003 DISA. ESI. US. 17
registro
clula de
memoria
hilos de
seleccin
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 hace
actuando sobre el hilo que correspondiente a la direccion dada. Esto lo realiza el decodificador
de direcciones.
La direccion que se proporciona al decodicador es el n umero de la palabra dentro de la
memoria, pero codicado en binario. Si la memoria tiene N = 2
m
palabras es necesario darle
al decodicador un n umero en binario entre 0 y 2
m
1. Para expresar este valor hacen falta
precisamente m dgitos binarios; es decir, la direccion es un n umero binario de m bits.
Para proporcionar al decodicador la direccion se usa un registro llamado de seleccion de
direccion que puede verse en la la gura 3.3 junto con el decodicador de direcciones.
m
m
N = 2
n
1
0
d
e

d
i
r
e
c
c
i
o
n
e
s
d
e
c
o
d
i
f
i
c
a
d
o
r
N-1
Figura 3.3: Diagrama de la memoria organizada matricialmente incluyendo el registro de se-
leccion de direcciones y el decodicador.
3.3.2 La unidad de memoria central
A modo de resumen, y para hacerse una idea de como se enlazan los elementos vistos hasta
ahora relativos a las memorias, se analizara la memoria central de una computadora.

Esta esta
formada por una matriz celular de elementos de memoria, un decodicador de direcciones y una
peque na unidad de control que coordina las operaciones necesarias para leer o escribir; todo ello
dentro de un circuito integrado. Los bloques funcionales se pueden ver en la gura 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 (en
binario, por supuesto) la direccion del registro a seleccionar.
LECM, ESCM. Son dos se nales 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 antesala
de la memoria. Durante una lectura recibe una copia de los n bits contenidos en la posicion
seleccionada. Durante la escritura contiene la informacion que se va a escribir.
S
T
D
e
c
o
d
i
f
i
c
a
d
o
r
m
n
LECM
ESCM
direcciones
datos
Figura 3.4: Diagrama de bloques de la memoria central mostrando los registros y se nales de
gobierno.
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 nal es obtener una copia del contenido de una direccion particular de
la memoria. Los pasos a seguir son:
Seleccionar la direccion que contiene la informacion a recuperar; para ello se ha de
introducir 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 transera una copia de sus bits al
registro 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 de
memoria concreta conocida. Los pasos a seguir son:
Selecionar la direccion que contiene la informacion a recuperar; para ello se ha de
introducir dicha direccion en el registro S.
Copiar en T la informacion que se quiere escribir en la memoria. Para ello se usan
los hilos de bit que conectan cada palabra de la memoria con el registro T.
Activar la se nal de escritura haciendo ESCM=1.
c M.R. Arahal 2003 DISA. ESI. US. 19
3.4 La unidad aritmetico-l ogica
Utilizando circuitos electronicos es posible combinar el contenido de dos registros de memoria
de forma que se obtenga un tercer registro que guarde alguna relacion con los primeros. Por
ejemplo de forma que el registro resultado sea la suma de los registros iniciales.
La gura 3.5 ilustra esta idea. Puede verse que el registro 1 contiene los bits 010010 que
puede interpretarse como el n umero binario 010010 |
2)
que en decimal es 010010 |
2)
= 18 |
10)
.
Similarmente, el registro 2 contiene los bits 000011 que puede interpretarse como el n umero
binario 000011 |
2)
que en decimal es 000011 |
2)
= 3 |
10)
. Es facil comprobar que el circuito
sumador debe combinar la informacion de ambos registros de tal modo que el registro resultado
contenga 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 puede
citar la comparacion de igualdad. Un circuito comparador produce el valor binario 1 si los dos
registros R1 y R2 son iguales y el valor 0 en caso contrario.
La construccion de la UAL se lleva a cabo hoy en da en una pastilla de silicio, agrupando
una serie de circuitos con puertas logicas. Estos circuitos son capaces de realizar tareas concretas
como desplazamientos, sumas, comparaciones, etc. La unidad de control que tambien reside en
la pastilla puede seleccionar la operacion a efectuar gracias a las se nales de control. La activacion
de alguna de estas se nales 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 se
guarda 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 recibe
el nombre de registro acumulador. Para reducir el tama no de la UAL, el acumulador es a
menudo tambien el soporte de uno de los operandos.
La UAL recibe ordenes de la unidad de control que especican la operacion a realizar con
los datos del acumulador y del registro de operando. El resultado de las operaciones queda en
el acumulador a la espera de ser transferido cuando lo indique la unidad de control.
La gura 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
Seales de
control.
A
segundo operando
MULT
SUMA
estado

primer operando
Figura 3.6: Esquema de la Unidad Aritmetico Logica mostrando el acumulador y las se nales de
gobierno.
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 considera
en 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. La
recogida de datos y la evacuacion de resultados se llevan a cabo mediante dispositivos variados
como 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 dispositivos
diferentes 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 caracteres
por segundo, es decir hay 0.05 segundos de espera entre caracter y caracter. Durante estos 0.05
segundos la computadora puede realizar miles de operaciones. Sin embargo otros dispositivos
admiten una velocidad mayor, como por ejemplo los discos y las impresoras. La computadora
ha de adecuar sus operaciones al ritmo de transmision de datos, so pena de perder informacion.
Tpicamente, los perifericos se conectan al enlace de la computadora mediante circuitos que
realizan las adaptaciones necesarias (niveles de tension, formato de la informacion, etc.).

Esta es
la situacion mostrada en la gura 3.7. En el desarrollo del captulo se van a describir brevemente
algunos perifericos, para pasar posteriormente al problema de la comunicacion entre estos y la
UCP.
3.5.1 Perifericos
Como se ha dicho, los perifericos son dispositivos que permiten el trasvase de informacion desde
el exterior a la computadora o al contrario. Los mas comunes son descritos a continuacion:
Teclado Permite tanto introducir texto, n umeros y proporcionar se nales para los programas. Se
compone de pulsadores electromecanicos que mandan un codigo identicador a un espacio
de almacenamiento temporal que la computadora lee y vaca periodicamente. Las teclas
que incluye son:
c M.R. Arahal 2003 DISA. ESI. US. 21
Teclado Monitor Impresora Disco
vdeo
Adaptador
paralelo
Adaptador
Adaptador Adaptador
Teclado
unidad de disco
UCP RAM ROM
Figura 3.7: Perifericos conectados a los enlaces de la computadora.
Letras, n umeros y signos de puntuacion. Esta parte del teclado se asemeja al de una
maquina de escribir convencional.
Tecla INTRO. Tiene dos funciones: en primer lugar permite pasar a la siguiente lnea
en la escritura. Ademas, en programas de uso interactivo sirve para dar entrada a la
informacion tecleada anteriormente de forma que pueda ser procesada. Por ejemplo,
despues de introducir un comando hay que pulsar esta tecla, para que la computadora
ejecute la orden. En algunos teclados aparece el smbolo

|
, o la palabra RETURN o
ENTER.
Teclas de funcion, Numeradas desde la F1 a la F12 sirven para realizar ordenes dentro
de ciertos programas. No tienen un signicado denido, sino que cada programa les
asigna una funcion, lo cual permite ahorrar tiempo de escritura. Por ejemplo, en
algunos editores la tecla F2 sirve para guardar una copia del texto actual en el disco.
Teclado numerico. Ademas de los n umeros, los teclados modernos, suelen traer un
teclado numerico compuesto por los n umeros, el punto decimal y otras, en la parte
derecha del teclado. De esta forma se agiliza la escritura de grandes cantidades de
datos.
Teclas de bloqueo de may usculas, bloqueo de teclado numerico, etc.
Otras teclas especiales, como echas, boton de parada, etc.
Teclas que alteran la funcion de otras teclas.
Tecla MAY
3
. Pulsada simultaneamente con otra produce la escritura de la letra
en may usculas o del signo superior de los dos que aparecen encima en la tecla.
Su funcion normal es en todo igual a las may usculas 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 simultaneamente
la tecla MAY y la tecla de funcion F2 se usa: MAY+F2.
Tecla ALT. Al igual que la tecla de may usculas permite cambiar la funcion de
las teclas de funcion. Ademas sirve para generar los smbolos de la tabla ASCII
manteniendo la tecla pulsada mientras se introduce el codigo correspondiente
en decimal. En muchas aplicaciones esta tecla tiene signicado especial. Por
ejemplo, en los entornos de ventana, sirve para activar funciones dentro de un
men u tecleando ALT+inicial opcion del men u.
3
En algunos teclados aparece como Shift, en otros como una echa vertical .
22 TEMA 3. ESTRUCTURA DE LA COMPUTADORA DIGITAL
Tecla ALT GR. Permite obtener los signos |, [, ], } y { , u otros dependiendo del
sistema.
Tecla CONTROL. Pulsada conjuntamente con algunas letras produce caracteres
de control. Es decir, caracteres ASCII no visibles que tienen funciones de control,
como CONTROL+G, que produce el caracter ASCII n umero 7 que provoca un
zumbido en el altavoz del terminal. Otros caracteres utiles son CONTROL+C
y CONTROL+Z para terminar la ejecucion de programas. Usada en conjuncion
con 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 la
computadora emite un sonido de advertencia.
Rat on Es un dispositivo que sirve para posicionar un puntero graco sobre la pantalla, de
forma rapida. Este puntero permite realizar acciones pulsando los botones del raton. Los
entornos de ventana hacen un uso exhaustivo del raton. Existen diversos tipos, de bola,
optico, por presion.
Monitor de visualizaci on Es el lugar donde usualmente la computadora enva la salida de los
programas, suele ser del tipo TRC (tubo de rayos catodicos), de color o monocromo. Los
equipos portatiles suelen llevar una pantalla de cuarzo llamada de cristal lquido (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 se nal para determinar
la intensidad de luz de cada color de cada punto de la pantalla procede de un circuito
electronico que lee el contenido de una memoria de vdeo que se puede dividir en planos.
El n umero de colores o de tonalidades diferentes de gris que se pueden enviar a la pantalla
depende del n umero de planos.
Para poder usar el monitor, la computadora ha de incorporar un circuito especial llamado
tarjeta de vdeo. La imagen que se presenta en pantalla esta contenida en la memoria de
vdeo. Un circuito especial de la tarjeta se encarga del refresco de la imagen en el tubo,
consistente en redibujar la imagen un cierto n umero de veces por segundo de acuerdo con
el contenido de la memoria. La UCP se limita a colocar en la memoria de vdeo la imagen
y el circuito de refresco la manda a la pantalla.
La cantidad de memoria de vdeo disponible limita las posibilidades gracas. As, una
tarjeta con poca memoria compone las imagenes mediante puntos gruesos y con pocos
colores, como se muestra en la gura 3.8 a la izquierda. Al aumentar la memoria disponible
es posible disminuir el tama no del punto y aumentar la cantidad de colores que pueden
presentarse a un mismo tiempo. De este modo las imagenes resultan mejor denidas como
en la gura 3.8 a la derecha. La capacidad de la tarjeta de vdeo se indica por los puntos
horizontales y verticales y la cantidad de colores disponibles.
Impresora Es un dispositivo que permite reproducir en papel los dibujos o textos realizados
en una computadora. Hay muchos tipos distintos, dependiendo de la tecnica usada para
impregnar el papel. Las mas usadas actualmente son las impresoras de chorro de tinta y
las laser.
La tinta en una impresora de chorro o inyeccion es lanzada gota a gota sobre el papel
formando 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 vdeo distintas. A la izquierda una
imagen de 201 129 puntos; a la derecha una imagen de 402 258 puntos, ambas en blanco y
negro.
de diversos colores). Las gotas son dirigidas mediante campos electricos para que lleguen
al lugar indicado sobre el papel.
La impresora laser permite copiar paginas enteras de una vez. Se basan en un tambor
cargado electrostaticamente, que al ser expuesto a un rayo laser se descarga en algunas
zonas. La tinta en polvo impregna luego esas zonas del tambor. Al pasar cerca del papel
cargado opuestamente al tambor la tinta se adhiere al papel. Finalmente se aplica calor
para que la tinta en polvo funda sobre el papel. Debido a que el laser es muy no, la
calidad de impresion es muy alta.
No hay ning un 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 mediante
men us, por lo que todo lo que uno debe saber es la marca y modelo de la impresora que
tiene conectada. Entre los muchos lenguajes se pueden destacar los siguentes: PCL 1 a
PCL 5 de Hewlett-Packard y PostScript o lenguaje de descripcion de paginas a base de
instrucciones 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 como
Ethernet u otras.
Digitalizador de imagenes Se usan para obtener una version digital de imagenes sobre el
papel. Para ello la imagen es descompuesta en una matriz de puntos de color y posterior-
mente almacenada como un archivo en un formato gr afico, como los conocidos GIF y
TIFF.
En ocasiones la digitalizacion de imagenes tiene por objeto conseguir un chero conteniendo
el texto impreso en la imagen. Es decir, la imagen puede ser una pagina de un periodico
y lo que se desea es el texto contenido en dicha pagina. A partir de la imagen se pueden
usar programas de reconocimiento de caracteres (conocidos como OCR) para obtener el
texto en un chero. Los programas de reconocimiento de caracteres suelen funcionar solo
con letra de imprenta.
Discos magneticos Los dispositivos de almacenamiento masivo como el disco duro, las cintas
magneticas y el disco optico permiten guardar grandes cantidades de datos de forma no
volatil.
Los discos llamados exibles permiten ser extrados de la computadora. Hay discos de
distintos tama nos, siendo los mas usados hoy en da 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)
plstico
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 jos en el interior de la computadora. Su construccion les conere
mayor rapidez y capacidad. Actualmente los discos duros pueden tener capacidades entre
cientos y miles de Megacaracteres. El principio de funcionamiento es el mismo que en el
caso de los discos exibles. En la parte derecha de la gura 3.9 se muestra un diagrama
simplicado 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 cantidad
de datos (aproximadamente 700 Mc). La informacion se guarda en binario en forma de
agujeros o huecos microscopicos en el metal interior del disco. Mediante un rayo laser
se puede obtener una se nal electrica con un voltaje alto o bajo dependiendo del paso de
depresiones bajo el laser a medida que el disco gira.
El CD-ROM es casi identico a los discos compactos para audio que existan 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 es
necesaria 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 se
consigue un medio menos sensible que los discos exibles. El disco tiene los datos grabados
en una unica pista espiral. La lectura sobre la pista es a velocidad constante, por lo que
el disco gira a distintas velocidades seg un el tramo leido. Ver gura 3.10 (a). Los datos
se modulan siguiendo la regla 8 en 14, que usa 14 bits para codicar cada caracter. Se
incluye un codigo de deteccion de errores de tipo CRC. La gura 3.10 (b) muestra la forma
en que los bits quedan grabados en el disco.
Dentro de los discos opticos hay varias clases: hay discos que solo admiten lectura, discos
que se pueden grabar una sola vez desde el equipo personal y discos que admiten ser
regrabados 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 se nales de control que provocan operaciones de los modulos y tambien
transferencias de informacion entre los mismos.
En el esquema de la gura 3.11 se muestran los modulos ya conocidos interconectados por
enlaces. Podemos imaginar que los enlaces son autopistas de varios carriles por las cuales pueden
moverse los bits de forma que pasen de unos registros a otros.
Los elementos con que se va a trabajar y que aparecen en dicha gura son:
1. Un enlace M que une la memoria, la unidad de control y la UAL. La informacion que se
transmite puede ser de diversas clases: datos y resultados de operaciones, instrucciones
del programa y direcciones de memoria.
2. Otro enlace S que une la unidad de control y el selector de posiciones de memoria. Por el
se 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 las
operaciones.
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 lnea M.
P. Contador de pasos de programa. Indica la posicion dentro de la memoria de la
instruccion a ejecutar.
I. Registro de instruccion. Guarda en cada momento la instruccion que se ejecuta en
ese paso.
E. Registro de comunicacion con el exterior. Permite tomar datos del teclado o llevarlos
a la pantalla. Es una forma simple e idealizada de la unidad de control que se ha
descrito anteriormente.
3.6.1 Funcionamiento
El esquema presentado corresponde a una maquina de programa almacenado, por lo que en la
memoria se almacenan tanto datos y resultados como el programa a ejecutar. El funcionamiento
del 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 direccion
de 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
SP EP
INCP
P
D CO MD
ET ST
S
MEM
LECM
ESCM
T
EE SE
EA
SA
SUMA
MULT
EO
A
M
EI
SD
ES
I
S
LEET ESCP
E
M
Figura 3.11: Esquema de una computadora digital mostrando los enlaces y las se nales de gob-
ierno.
necesita disponer de alg un medio que le permita conocer en que posicion de memoria se encuen-
tra localizada la misma. El problema se resuelve colocando las instrucciones secuencialmente
en la memoria y dotando a la unidad de control de un registro de direccion de la instruccion
(registro P en la gura anterior). Este registro es un contador que se incrementa en una unidad
cada 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, donde
se ejecuta activando las se nales de gobierno necesarias. Esta tarea la realiza un modulo de la
unidad de control que a un no se ha mostrado. Finalmente se incrementa P para poder ejecutar
la siguiente instruccion.
Cada instruccion requiere tres componentes para quedar totalmente denida: la operacion,
la forma de direccionamiento y una direccion con la que operar. Estos elementos se codican en
binario 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 identica la operacion que
debe realizarse. Las instrucciones como la suma, la resta, etc. tienen cada una un codigo
distinto.
2. El modo de direccionamiento (MD), que indica la forma en que se ha de interpretar la
direccion 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, seg un
el modo de direccionamiento y la instruccion de que se trate. En un caso simple como la
suma directa, esta direccion es el lugar de la memoria donde reside el dato que se ha de
sumar.
Para aclarar las ideas, considerese la instruccion sumar al acumulador el contenido de la
posici on de memoria 8. Supongase que la codicacion de esta instruccion es:
CO MD D
0101 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
S
P
I
I
S
S
P
I
A
S
P
I
P
8
17
3
7
8
8
17
3
3
8
co | md | 8
co | md | 8
co | md | 8
co | md | 8
17
8 3
co | md | 8 17
co | md | 8
17
8
17 co | md | 8
3
co | md | 8
17
B)
A
A
A)
D) C)
4
4 17
18
8
3 4
7
Figura 3.12: Fases de la ejecucion de la instruccion suma.
0101000000001000. La primera parte (CO) identica la operacion suma, la segunda parte (MD)
indica que se trata de direccionamiento directo, que sera explicado mas adelante. Por ultimo, la
direccion 00000001000 es el n umero 8 codicado en binario, y se interpreta como el lugar donde
reside el n umero que se ha de sumar al registro acumulador.
3.7 Ejecuci on de instrucciones
Para cualquier instruccion el proceso de ejecucion se divide en cuatro fases: b usqueda de la
instruccion, b usqueda del operando, ejecucion de la instruccion y preparacion de la instruccion
siguiente. 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 gura 3.12 muestra de forma esquematica el desarrollo de las cuatro fases para una
instruccion como la suma directa. Como es sabido los registros contienen los n umeros en binario,
sin embargo, para dar mayor claridad al dibujo se han indicado aqu en decimal. Las posiciones
de memoria tambien se han indicado con su direccion en decimal por identico motivo.
La parte A) de la gura representa la b usqueda de la instruccion. Se ha supuesto que esta se
halla en memoria en la direccion 17 por lo que el contenido de P es precisamente 17. Se observa
tambien el direccionamiento de la memoria logrado con el registro S. Mediante una lectura se
pasa la instruccion al registro I.
La parte B) corresponde a la b usqueda del operando; este es el valor contenido en la direccion
de memoria 8, que en este caso es el n umero 3. Una nueva lectura de memoria permite pasar el
operando al registro de operando de la UAL.
En la parte C) se realiza la suma del acumulador que contena el n umero 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 de
informacion entre registros y mediante la transformacion de esta en la UAL. La tarea de la
unidad de control es precisamente coordinar tales transferencias.
3.7.1 Transferencias entre registros
El funcionamiento de la computadora se puede describir mediante transferencias de informacion
entre registros. Para vericar esta armacion se va a explicar a continuacion de forma mas
detallada la ejecucion de la instruccion del ejemplo anterior, sumar al acumulador un dato
almacenado en una direccion de memoria dada.
1. B usqueda de la instruccion: consiste en extraer la instruccion que se va a ejecutar de
la memoria. El registro P contiene la direccion de la instruccion a ejecutar, por lo que
habra de leerse la direccion de memoria indicada por P. Esta fase tiene tres operaciones
elementales:
(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 ser
sustituido por el contenido de P.
(b) Leer de memoria , obteniendose en T la informacion almacenada en la posicion
denida 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. B usqueda del operando: En CO se ha supuesto la existencia del codigo de operacion (que
identica a la suma en este ejemplo). El modo de direccionamiento es directo, por lo tanto
la direccion que gura en D se interpreta como la del operando que hay que sumar al
acumulador. 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 es
copiado en T, con lo que se tiene el n umero a sumar en T.
3. Ejecucion de la instruccion. En este caso, la suma al acumulador del contenido de T. Esto
puede escribirse como: (T)+(A) A, puesto que, como ya se ha dicho, el acumulador
guarda 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 de
pasos del programa: (P)+1 P.
La forma en que se han detallado los pasos a realizar para ejecutar la instruccion suma
consiste en dar las transferencias elementales entre registros. Del diagrama 3.11
resulta claro que para lograr estas transferencias es necesario activar las se nales de entrada y
c M.R. Arahal 2003 DISA. ESI. US. 29
fase transferencias entre registros se nales 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 se nales de gobierno correspondientes a la
instruccion suma.
salida de los registros, tales como: SP, ES, etc. En la tabla 3.1 se muestra de nuevo la secuencia
de operaciones para el mismo ejemplo de la suma, pero incluyendo las se nales de gobierno
necesarias.
La activacion de las se nales de gobierno se realiza de forma automatica durante la ejecucion
del programa. Es una tarea que corre a cargo de la unidad de control como se explicara mas
adelante.
3.7.2 La instrucci on de salto
Se ha indicado que el contador de pasos de programa se incrementa en una unidad cada vez que
se ejecuta una instruccion, de forma que pase a se nalar la direccion de la siguiente instruccion
en la memoria. Esta forma de proceder es adecuada para muchas situaciones, pero esta muy
falta de versatilidad. El llamado salto incondicional permite romper el orden de ejecucion de
las instrucciones, de forma que, tras la instruccion de salto situada en la direccion d, se pasa
a ejecutar otra, situada en una direccion distinta de d + 1. Para ello es necesario y suciente
modicar el registro contador de pasos del programa P. Los pasos necesarios son:
1. B usqueda de la instruccion: Hay que extraer la instruccion que se va a ejecutar de la
memoria. 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 posicion
denida por S: M(S) T
(c) Pasar la instruccion a I: (T) I. Donde sera interpretada.
2. B usqueda del operando: en la parte D del registro I debe gurar la direccion del salto, que
se 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 de
pasos: (D) P.
4. Preparacion de la siguiente instruccion. En este caso no hay que hacer nada pues el
contador de pasos del programa contiene ya la direccion de la siguiente instruccion tras
del salto.
30 TEMA 3. ESTRUCTURA DE LA COMPUTADORA DIGITAL
Tema 4
Lenguajes de programaci on
4.1 C odigo de maquina
El codigo de maquina es la forma mas basica y primitiva en que se puede programar una
computadora digital. En esencia consiste en colocar en la memoria (de alguna manera) los ceros
y 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 se nales 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 a nos 1940 y siguientes se dispona de medios
primitivos para realizar esta tarea. Las tarjetas perforadas, las cintas agujereadas (de papel o de
celuloide) eran metodos habituales. Posteriormente surgieron las cintas magneticas y los discos.
Sea cual fuera el metodo, era preciso que alguna persona dise nara el programa que consista
en una ristra de ceros y unos. A modo de ejemplo considerese la tabla 4.1 que muestra una
serie de instrucciones de una computadora simple. Cada lnea esta formada por 16 celdas que
contiene una instruccion. A la derecha se ha indicado lo que cada instruccion representa.
El programa realiza una tarea muy simple: lee dos n umeros del teclado y los almacena en
memoria. Tras esto, los suma y guarda en la memoria el resultado. Finalmente el resultado se
presenta por pantalla. Para guardar los n umeros ledos se van a usar las posiciones de memoria
con direccion 10 y 11 (que se van a suponer vacas o no usadas). El resultado se almacena en la
direccion 12.
En este ejemplo se ha supuesto que las instrucciones del programa se almacenan codicadas
en la memoria principal comenzando en la direccion 20. De este modo el programa queda en
memoria tal y como muestra dicha tabla. Para ejecutarlo basta con introducir en el contador
de 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 c odigo de
m aquina, pues utiliza unicamente las instrucciones de la maquina codicadas con ceros y unos.
31
32 TEMA 4. LENGUAJES DE PROGRAMACI

ON
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
ledo 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
ledo 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 n umero 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 n umero
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 a
efectuar, a la derecha se tiene el programa en la memoria. El contenido de los registros de la
memoria se ha separado en tres bloques (CO, MD y D) para facilitar el estudio, dicha separacion
no existe en realidad.
Cada UCP tiene su propio juego de instrucciones, por lo que los programas en codigo maquina
no 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 programar
facilmente en codigo maquina. Sin embargo es facil adivinar la complejidad que tendra el codigo
de maquina correspondiente a la programacion de una tarea con muchas mas instrucciones. Para
aliviar este problema surge el codigo mnemotecnico, que se describe en el punto siguiente.
4.1.1 C odigo mnemotecnico
Una forma de simplicar la programacion es reemplazar la codicacion binaria por una mas
inteligible. Tal codicacion ha de ser equivalente al codigo maquina, por lo que en cada sentencia
debe aparecer de manera clara los componentes basicos de cada instruccion, que son la operacion
a realizar, el modo de direccionamiento y el operando.
Una forma sencilla de facilitar la tarea al programador consiste en escribir cada instruccion
por su nombre y los n umeros en decimal, de forma parecida a
El programa del ejemplo anterior podra codicarse del modo que se muestra en la tabla 4.2
Esta forma de codicar necesita una posterior traduccion puesto que en la memoria no se
puede colocar otra cosa que no sea los ceros y unos de las instrucciones y datos. La tarea de
traducir es repetitiva y mecanizable, por lo que se dejaba en manos de personal poco cualicado.
c M.R. Arahal 2003 DISA. ESI. US. 33
PROGRAMA MEMORIA
instruccion
.
.
.
LEER 10
LEER 11
CARGAR 10
SUMAR 11
ALMACENAR 12
ESCRIBE 12
PARAR
.
.
.
direccion CO MD D
.
.
.
20 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0
21 0 1 0 0 0 0 0 0 0 0 0 1 0 1 1
22 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0
23 0 1 0 1 0 0 0 0 0 0 0 1 0 1 1
24 0 0 0 1 0 0 0 0 0 0 0 1 1 0 0
25 0 0 1 1 0 0 0 0 0 0 0 1 1 0 0
26 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 a
efectuar, a la derecha se tiene el programa en la memoria. El contenido de los registros de la
memoria se ha separado en tres bloques (CO, MD y D) para facilitar el estudio, dicha separacion
no existe en realidad.
Posteriormente las propias computadoras fueron programadas para que llevaran a cabo la tarea
de 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 de
maquina. Ademas se les a nadieron otras funciones que aliviaban a un mas la tarea del progra-
mador:
1. Los programas pueden necesitar valores para los calculos, por ejemplo, el valor dos para
hallar 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 dicha
ejecucion. Esta tarea recibe el nombre de establecimiento de valores iniciales o de datos
numericos constantes.
2. Tambien resulta preciso que existan direcciones de memoria libres para almacenar en ellas
las variables del programa. Por ejemplo, para almacenar un resultado calculado. Puesto
que en la memoria se almacenan tanto datos como instrucciones es preciso alg un mecan-
ismo para dejar huecos libres. Es decir, hay que indicar que una determinada posicion
de memoria no va a contener una instruccion sino que ha de dejarse libre para alojar
informacion.
Se crearon entonces las pseudoinstrucciones.

Estas son anotaciones que el programador
escribe para que el programa traductor realice tareas adicionales durante la traduccion, como
por ejemplo dejar espacios vacos en medio del programa o colocar valores constantes para que
el programa los use, una vez traducido, durante su ejecucion.
El conjunto de instrucciones y pseudoinstrucciones forma el lenguaje ensamblador.
34 TEMA 4. LENGUAJES DE PROGRAMACI

ON
A pesar de ser un gran avance, el lenguaje ensamblador sigue siendo de difcil uso. Para
mejorar sus caractersticas se crearon macroinstrucciones, subprogramas y otros desarrollos que
dieron lugar a los modernos lenguajes de programacion. Pero antes de avanzar en este punto se
va a describir el sistema de explotacion.
4.3 Sistema de explotaci on
Los sistemas de explotacion (SE), conocidos tambien como sistemas operativos proporcionan el
medio por el cual el usuario puede interaccionar con la maquina y aprovechar sus recursos, por
lo 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 mayora 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 funciones
que son usadas por los programadores para acceder a la circuitera de cada maquina particular,
lo cual es necesario en casos como el acceso a perifericos desde programas. Estas funciones tienen
por objeto ocultar los detalles de cada computadora, de forma que el programador pueda escribir
programas que funcionen en maquinas con equipos distintos, por ejemplo discos o impresoras de
diferentes marcas.
Todo lo dicho anteriormente sit ua al SE como la conexion entre la maquina, que solo maneja
datos 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 dise no graco,
videojuegos, etc. El SE en cambio se dedica a gestionar el uso de la computadora en s. Las
aplicaciones se apoyan a menudo en el SE para acceder a las entra nas del sistema: los cirtuitos.
En la gura 4.1 se presenta un esquema en el que se hace patente la situacion del SE para
los distintos usuarios del sistema. En primer lugar, el usuario de aplicaciones interacciona con
estas y no ha de preocuparse por los detalles del SE o del equipo que utiliza. A un nivel
inferior trabaja el programador de aplicaciones, que en muchos casos ha de conocer a fondo el
SE, pero que no necesita saber las particularidades de la circuitera de los distintos equipos.
Finalmente, el programador de sistemas ha de enfrentarse a un hecho importante del mundo
real: las computadoras de distintos modelos o fabricantes tienen circuitos distintos, que han de
ser tratados de forma diferenciada.
A la luz de dicha gura se puede decir que el SE es un conjunto de programas que ofrecen a
los usuarios una forma sencilla, exible y rapida de acceso a los recursos ocultando los detalles
del equipo. Este hecho, la ocultacion, es de gran importancia pues permite desarrollar programas
sin conocer los detalles llamados de bajo nivel, como por ejemplo el modo de acceder a un
disco en particular.
c M.R. Arahal 2003 DISA. ESI. US. 35
Sistema de explotacin
Aplicacin
Circuitos de cada mquina particular
Usuario
Programador
Programador SE
Figura 4.1: El sistema de explotacion visto por los distintos usuarios del sistema.
Intrprete de comandos
Nivel intermedio
Ncleo
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 jar la atencion en programas
como el ensamblador y el cargador, pero hay mas: desde rutinas para enviar caracteres a un
dispositivo hasta programas que permiten manejar cheros enteros. De hecho, el SE cubre el
espacio existente entre el usuario y la circuitera de la maquina mediante una estructura en la
que se pueden distinguir varios niveles.
Un SE se compone de modulos con funciones asignadas. El primero es el n ucleo que es un
modulo de servicio para los demas. Los otros se encargan de la memoria, las E/S, memorias
auxiliares, asignacion recursos. De este modo, la organizacion del SE queda como un conjunto
de capas, de forma que las superiores hacen uso de las inferiores como muestra la gura 4.2.
N ucleo. Es el de mas bajo nivel, pues descansa sobre la circuitera de la computadora,
proporcionando servicios a las capas mas altas. Entre las funciones que tiene asignada
destacan la gestion de interrupciones, mediante las cuales es posible realizar tareas como
la asignacion de trabajo al procesador y la comunicacion entre los distintos programas
Nivel intermedio. Aunque puede estar subdividido en varios niveles, se presenta aqu como
uno solo por simplicidad. Las tareas que realiza son : tratamiento de E/S a nivel de cheros
Memoria virtual, etc
Interprete de comandos. Ya se ha indicado que es el responsable de leer las ordenes del
usuario y procesarlas.
El sistema de explotacion se divide en numerosos programas que se hacen cargo de las diversas
tareas. Entendido como un conjunto, el SE no tiene que estar en memoria completo, sino que
36 TEMA 4. LENGUAJES DE PROGRAMACI

ON
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 que
incluye 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 chero o
copiarlo 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 explotaci on
El SE realiza numerosas funciones, todas encaminadas a ayudar al usuario y a mejorar el
rendimiento de la maquina. A continuacion se da una lista no exhaustiva clasicada por el
tipo de tarea.
Entradas y salidas
Los dispositivos perifericos usados para la E/S de datos son muy distintos entre s, lo cual
implica la necesidad de desarrollar comunicaciones especcas para cada tipo. El SE debe limar
estas diferencias, de forma que el programador pueda solicitar operaciones de lectura/escritura
de forma parecida, con independencia del dispositivo usado.
La E/S de datos desde perifericos se realiza por medio de programas concretos. El programa
debe mandar se nales 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 y
sin errores. Todo ello requiere una programacion cuidadosa. Los SE incluyen rutinas que realizan
estas tareas de forma que el programador pueda usarlas. Esto ahorra tiempo al programador y
aumenta la abilidad.
Dentro de los procesos de E/S merece ser destacado el problema de la detecci on de er-
rores. Las operaciones que implican trasvase de informacion estan sujetas a errores provocadas
por ruidos en las lneas de transmision. El sistema de explotacion debe detectar estas situaciones
y actuar de acuerdo a la gravedad del problema: bien recuperando automaticamente los datos
corruptos o avisando de la existencia de errores o incluso parando el sistema. Para detectar los
errores en transmisiones existen tecnicas que se detallan en el captulo dedicado a la codicacion
binaria 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 que
el 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
raz
config programas sistema
cc ens editor
conect grafic
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 perif ericos virtuales surgen de esta idea y se explicaran
en una seccion posterior.
Sistema de archivos
En los dispositivos de almacenamiento masivo como discos, la informacion se agrupa en archivos
o cheros. A su vez, los cheros pueden agruparse para formar directorios o carpetas que
sirven para organizar la informacion, del mismo modo que en un chero convencional se puede
clasicar los asuntos en carpetas y estas en cajones.
Los directorios pueden a su vez formar parte de directorios mayores, dando lugar a una
estructura arborescente. Esta organizacion jerarquica es llamada arbol de directorios. En
la gura 4.3 se muestra una de estas estructuras. A partir de la raz, que es el directorio superior,
parten otros directorios que a su vez pueden contener archivos (indicados en letra cursiva) y otros
directorios. El objetivo de esta organizacion es mantener la informacion estructurada para poder
acceder a ella ecientemente.
Los archivos tienen un nombre que los identica dentro del directorio, por ejemplo los cheros
listin y matriz de la mencionada gura 4.3. Los directorios tambien se identican mediante un
nombre como es el caso de usuarios y pedro.
Las operaciones que se pueden realizar con archivos son: crear, borrar, renombrar, cambiar
la ubicacion dentro del arbol, copiar, a nadir informacion , etc. El SE provee los programas
necesarios para llevar a cabo tales tareas.
Del mismo modo los directorios pueden ser objeto de diversas acciones, como:
Crear. El directorio nace vaco, es decir, sin cheros en el. Hay que especicar el nombre
con el que se va a denominar.
Borrar. El directorio ha de ser previamente vaciado borrando los cheros y subdirectorios
que contiene.
38 TEMA 4. LENGUAJES DE PROGRAMACI

ON
Listar. Consiste en abrir el directorio y leer los cheros 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 unvoca no basta con dar
el nombre. Es necesario especicar el camino de directorios. En el ejemplo de la gura 4.3
mediante raz-usuarios-juan-dietas
1
se designa el camino absoluto para llegar al chero
dietas (se llama absoluto porque parte del directorio raz).
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 graca
cuyos smbolos 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.
Ejecuci on de programas
La ejecucion de un programa implica que el SE debe ceder parte del control de la maquina al
mismo. Al acabar la ejecucion el SE retoma el control. Esta tarea se descompone en varias
operaciones, como son: localizar el programa en el disco, proporcionar un lugar en la memoria
para cargarlo, realizar la carga desde el disco, dar al contador de pasos del programa la direccion
de comienzo y retomar el control al nalizar.
El programa cargador que ha sido aludido numerosas veces tiene por mision colocar en la
memoria 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. Cuando
este naliza, devuelve al SE tal control. En la gura 4.4 se muestra un diagrama del programa
cargador correspondiente a la computadora CESIUS que sirve para ilustrar el proceso descrito.
Cargador
Programa
Programa en
cdigo
mquina
COMPUTADORA
resultado
entrada
COMPUTADORA
Figura 4.4: El programa cargador.
1
En este ejemplo se ha usado el gui on 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 las
zonas 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 SE
incluyen la posibilidad de consultar el manual en lnea; es decir, no una copia en papel sino en
la pantalla.
El manual puede ser mostrado a peticion del usuario introduciendo una palabra clave para
identicar la parte del mismo que interesa. Por ejemplo, el nombre de un comando. Esto ahorra
mucho tiempo al usuario y dinero, pues las copias impresas de algunos manuales son gigantescas.
En los entornos gracos de ventana (McIntosh Systems, Solaris, MS Windows) la ayuda se halla
en tal cantidad que es casi innecesario el manual.
Gesti on de recursos
Los recursos de la computadora son la UCP, la memoria principal y los perifericos. En algunos
sistemas se permite que exista mas de un programa en ejecucion. Esto puede ocurrir porque el
sistema es multiusuario o simplemente multitarea. En tales casos es necesario arbitrar la
adjudicacion de los recursos entre los distintos programas y/o usuarios. El sistema de explotacion
se hace cargo de esta tarea, para lo cual usa reglas encaminadas a obtener un buen rendimiento
del sistema. Estas reglas deben solventar conictos surgidos de peticiones simultaneas de un
mismo servicio.
En los sistemas multitarea la simultaneidad de ejecucion se consigue dividiendo el tiempo
de trabajo en peque nos intervalos y asignandolos a cada programa. En rigor, solo un programa
usa la UCP cada instante de tiempo, puesto que (en sistemas monoprocesador) la UCP solo
ejecuta 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 de
que todos avancen su tarea.
En los sistemas de tiempo compartido varios usuarios utilizan una misma computadora
usando 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 de
las grandes computadoras centrales a partir de los a nos 70.
La gestion de la memoria principal se realiza en base a tecnicas sosticadas destinadas a
proveer de recursos a los programas en ejecucion manteniendo la condencialidad de los datos.
En muchos sistemas la memoria instalada es mas peque na que la suma de espacios que ocupan los
programas que se han de ejecutar simultaneamente, por lo que estos se han de cargar por partes;
2
En teora, claro. La realidad es que cuando el n umero de usuarios conectados es muy alto se nota una
ralentizaci on desesperante.
40 TEMA 4. LENGUAJES DE PROGRAMACI

ON
es decir, teniendo en memoria en cada instante solo el trozo que interesa en cada momento. La
forma mas com un de gestion de memoria es la memoria virtual.
Otras tareas del SE relacionadas con la gestion de recursos son la realizacion de estadsticas
de uso por parte de los distintos usuarios y contabilidad.
Protecci on
En los sistemas multiusuario es deseable que unos usuarios no puedan interferir en el trabajo de
los otros. El sistema de explotacion debe proporcionar mecanismos para mantener la conden-
cialidad de los datos. Se ha de evitar que ning un usuario pueda leer o modicar la informacion
que pertenece a otro, este situada en la memoria principal o en el disco.
Ademas, en sistemas con posibilidad de acceso remoto
3
es indispensable contar con medios
para asegurar que solo las personas autorizadas acceden al sistema. En la mayora de los casos
esto se resuelve asignando a cada usuario un nombre identicativo y una palabra secreta. Cuando
el usuario se conecta a la maquina el sistema pregunta ambos datos y comprueba la concordancia
usando su base de datos. En la historia de las redes informaticas ha habido casos celebres de
personas que han aprovechado mnimos fallos de seguridad para acceder e incluso modicar
informacion restringida.
Otro tipo de proteccion concierne al funcionamiento del sistema. Por ejemplo, no es deseable
que un usuario de un sistema de tiempo compartido consiga ejecutar sus programas mas rapido
que los demas sin el conocimiento de nadie. Esto pudiera lograrse en algunos sistemas cambiando
la tabla de prioridades para la ejecucion de tareas.
Congurar el sistema
Consiste en jar las opciones por omision y otros valores que suelen ser constantes durante una
sesion de trabajo. Un ejemplo puede ser elegir el idioma del usuario, de forma que el teclado
produzca los caracteres correctos. En muchos casos el proceso de conguracion se produce
automaticamente durante el arranque de la computadora. En todo caso, el SE debe ofrecer
medios 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 sera una tarea harto desagradable y pesada si no existiesen
los lenguajes de programacion. Considerese por ejemplo el panorama mostrado en el captulo
8, donde se han ilustrado las venjajas de usar un lenguaje simbolico en lugar de programar en
codigo de maquina. Los codigos mnemotecnicos coneren mayor legibilidad al programa y por
tanto facilitan su depuracion.
3
A traves de redes de computadoras o usando la lnea telef onica 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 la
observacion de que es util disponer de un medio de indicar a la maquina tareas complicadas con
pocas sentencias del programa. Por ejemplo: poder realizar una raz cuadrada sin necesidad de
escribir 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 del
programa 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 sin
grandes 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 de
alto 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-
istan. Ademas, al utilizar lenguaje de alto nivel a menudo se produce el efecto de matar moscas
a ca nonazos. Ilustremos con un ejemplo esta armacion. Consideremos la tarea de sumar dos
n umeros que en codigo de maquina queda resuelta con muy pocas instrucciones. Al usar un
lenguaje de alto nivel se escriben sentencias que son luego traducidas. El traductor proporciona
una serie de instrucciones que realizan la suma, en general aparecen mas instrucciones que el
n umero mnimo necesario. Esto es debido a que el traductor no tiene la neza del programador
humano.
Programar con un lenguaje de alto nivel es equivalente a construir una casa con grandes
bloques 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 los
producidos con un lenguaje de alto nivel, pues estos contienen mas operaciones.
Existen lenguajes de programacion que contienen elementos de alto y bajo nivel. Un buen
ejemplo 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 de
gran potencia cuyo equivalente en codigo de maquina son muchas instrucciones.
Los lenguajes de bajo nivel quedan bien reejados mediante el LS-2 explicado en el captulo
8. 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 PROGRAMACI

ON
Puede observarse que el programa esta escrito usando palabras del idioma ingles y expresiones
parecidas 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 conocido
del captulo 8 el programa ensamblador de dos pasos. Recordemos que tiene como mision
producir las instrucciones del programa a partir del codigo escrito en lenguaje simbolico en la
forma que se muestra en la gura 4.5.
Traductor
Programa en
cdigo
mquina
en LS-2
Programa
COMPUTADORA
Figura 4.5: El programa traductor para LS-2.
Cuando se usan lenguajes de alto nivel es posible utilizar int erpretes 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 chero ejecutable que
puede ejecutarse posteriormente tantas veces como se desee.
La forma de trabajo queda reejada en la gura 4.6. Los bloques marcados como MF
son trozos de programa escritos en el lenguaje de alto nivel y reciben el nombre de modulos
de c odigo fuente. Estos modulos se almacenan en cheros llamados ficheros fuente. El
compilador acepta varios de estos modulos para producir los correspondientes bloques de c odigo
objeto. El codigo objeto consiste en instrucciones de maquina, pero no esta preparado para
funcionar. Es preciso un proceso de montaje, donde se re unen todas las partes para formar el
programa 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 matematicas
o para el manejo de perifericos, etc. que facilitan la tarea del programador. La biblioteca se
compone 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 la
maquina que se este utilizando.
El proceso de creacion de programas usando lenguajes de alto nivel involucra seg un estamos
viendo muchas operaciones. Los programadores cuentan hoy en da con aplicaciones que les
permiten 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 2 M O 1 M O 3
Cargador
Ejecutable en memoria principal
Montador
Fichero ejecutable
Compilador
M F = Mdulo en cdigo fuente
M O = Mdulo en cdigo objeto
Figura 4.6: Compilacion y montaje de modulos para crear un chero ejecutable.
44 TEMA 4. LENGUAJES DE PROGRAMACI

ON
2. Desarrollo y vericacion de un algoritmo.
3. Estudio de la codicacion del algoritmo.
4. Escritura de los cheros 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. Vericar salida proporcionada por el programa.
Se observa que, cada vez que se modica alguna parte del codigo fuente es preciso volver a
compilar y montar. Esto no sucede si se utiliza un interprete, a pesar de ello los interpretes son
poco 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 la
vista de los resultados el usuario puede continuar con otras ordenes hasta que completa la tarea
que precisa realizar.
Las ordenes tpicas son sentencias como y=cos(3)+x/z que permiten al usuario obtener los
resultados de calculos complejos.
Ademas el usuario puede apilar un conjunto de ordenes y enviarlas a la ventana de ordenes
formando un lote. De este modo el usuario puede apartarse un rato de la pantalla y descansar
mientras aparece la respuesta.
EL conjunto de ordenes disponibles en MATLAB permite realizar tares muy diversas, por lo
que constituye un verdadero lenguaje de alto nivel para programar la computadora, aunque hay
que 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 sirva
de banco de pruebas con el cual realizar practicas de programacion.
Tema 5
Resoluci on de problemas
Una vez que se tiene una idea de cual es la estructura y funcionamiento de la computadora digital
es posible preparar el camino para lograr su programacion. En primer lugar hay que dejar claro
que un programa es una realizacion concreta de un algoritmo que resuelve un problema, por lo
que la tarea difcil es en la mayora de los casos la de hallar el algoritmo.
En este tema se van a tratar varios aspectos relacionados con la programacion. En primer
lugar 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 gracas de los
algoritmos llamadas diagramas de ujo. Finalmente, se tratan los problemas que aparecen al
tratar de modicar programas previamente escritos. La solucion a tales problemas pasa por un
conjunto de reglas que, restringiendo la libertad del programador, permiten producir programas
legibles y facilmente modicables.
5.1 Algoritmos y pseudoc odigo
Un algoritmo
1
es un conjunto ordenado y nito de operaciones que permite hallar la solucion de
un problema. No debe confundirse algoritmo con programa, este ultimo es la codicacion del
algoritmo en alg un lenguaje de programacion o en instrucciones de la maquina. La resolucion
de problemas mediante computadora conlleva dos pasos: hallar un algoritmo y su posterior
codicacion. De forma graca se ha ilustrado en la gura 5.1.
Algoritmo
resolucin codificacin
Problema Programa
Figura 5.1: Proceso de resolucion de problemas mediante computadora.
El pseudocodigo es un modo de especicar la solucion de un problema, una expresion de
1
La palabra procede de al-Jwarizmi, sobrenombre del celebre matem atico Moh amed ben Musa.
45
46 TEMA 5. RESOLUCI

ON DE PROBLEMAS
un algoritmo dada en lenguaje natural, por ejemplo una receta de cocina. Los algoritmos con
que trataremos aqu tienen un caracter mas matematico. A modo de ejemplo considerese el
problema consistente en hallar el resto de la division entera de un n umero a entre otro b. Un
ejemplo de pseudocodigo es el siguiente:
1 Hallar el cociente c de a/b
2 Tomar la parte entera del cociente, d = [c]
3 Obtener el resto como a b d
4 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 especicadas en lenguaje nat-
ural. De este modo el pseudocodigo es una receta valida para todo programador, cualquiera
que sea el lenguaje de programacion que vaya a usar. En el ejemplo anterior las operaciones
a realizar vienen dadas en secuencia; esto es, una detras de otra. Pero este no es siempre el
caso, como ocurre en el siguiente ejemplo. Considerese la tarea de hallar el valor absoluto de un
n umero x.
1 Si x es positivo, el resultado es x
2 Si no, el resultado es x
3 Fin
Muchos algoritmos requieren la repeticion de un conjunto de operaciones cierto n umero de
veces. En tales casos es conveniente disponer de un modo para indicar dicha repeticion en lugar
de repetir las sentencias. Por ejemplo, el algoritmo para hallar la norma de un vector v de 10
componentes
2
podra ser el indicado en la tabla siguiente.
1 Iniciar suma parcial sp a cero
2 Iniciar ndice i a uno
3 Hacer:
3.1 Dar a sp el valor sp +v
2
i
3.2 Incrementar i
3.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 y
que seran tratadas con detalle en este captulo.
Los algoritmos no sirven solo para operaciones matematicas; como ha sido el caso de los
ejemplos mostrados, tambien pueden emplearse en otros contextos como el ejemplo de la receta
2
La norma se calcula como la raz cuadrada de la suma de las componentes al cuadrado,

i=10
i=1
v
2
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 pueda
llegarse con exito al objetivo. Tomemos como ejemplo una receta para freir un huevo:
1 Poner aceite en sarten
2 Colocar sarten en fuego
3 Romper huevo haciendo caer el contenido en
sarten
4 Tirar c ascaras a la basura
5 Poner sal en yema
6 Si el huevo est a s olido ir a 7, si no esperar
7 Servir huevo, fregar sarten
8 Fin
Dejando aparte la habilidad manual necesaria, es obvio que si la persona que lee la receta
desconoce el signicado 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 hay
que poner especial cuidado en utilizar solo aquellos elementos que se suponen conocidos por el
lector.
En la literatura especializada se denomina procesador a la entidad que realiza las operaciones
indicadas por el algoritmo. Las acciones que el procesador conoce se denominan primitivas.
En un algoritmo puede haber operaciones no primitivas siempre y cuando sean denidas usando
acciones primitivas.
5.2 Objetos y operaciones
En la descripcion de algoritmos es preciso con frecuencia hacer referencia a objetos que es preciso
manipular. Considerese el ejemplo de hallar el valor absoluto expuesto anteriormente. En el
pseudocodigo hemos utilizado sentencias como Si x es positivo, el resultado es x. En ella hay
un objeto x que, por familiaridad con la notacion matematica, hemos identicado sin problema
como un n umero cualquiera.
En informatica se manejan diversos tipos de informaciones, no solo numericas. Considerese
por ejemplo el problema de cifrar un mensaje para transmitirlo de forma secreta. Un modo
sencillo 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 permite
realizar la tarea de cifrado.
1 Iniciar ndice i a 1
2 Tomar l
i
letra i-esima de la palabra
3 Reemplazar por l
i
+ 1, siguiente en el alfabeto
4 Si l
i
es la ultima letra ir a 6
5 Sumar uno a i
6 Fin
48 TEMA 5. RESOLUCI

ON DE PROBLEMAS
En este caso se ha identicado cada letra de la palabra por un smbolo l
i
. Ademas, se ha
considerado 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 distintos
objetos (como n umeros o letras) usando para ello identicadores o nombres. El identicador
simboliza una cantidad que puede ser constante o que puede variar a lo largo de la tarea. Cada
identicador hace referencia a un unico objeto que es de un tipo determinado (n umero entero,
letra, palabra, n umero real, n umero complejo, etc.)
En resumen, los objetos tienen un unico nombre que lo identica. Poseen tambien un tipo
que no vara durante el algoritmo. El valor o cantidad representado por el nombre puede variar
durante el algoritmo, en tal caso se dice que el objeto es una variable. Por contra, existen
objetos cuyo valor no cambia, son las llamadas constantes.
Para aclarar los conceptos anteriores considerese el problema de obtener dos n umeros n umeros
enteros a y b y hallarles la media.
1 preguntar el valor de a y b
2 la media es m =
a+b
2
3 Fin
La tabla siguiente muestra los atributos de los objetos que aparecen en el algoritmo anterior.
objeto nombre valor tipo
primer n umero a variable n umero entero
segundo n umero b variable n umero entero
media m variable n umero real
dos 2 constante n umero entero
Observese que los valores de a y b pasan de ser indeterminados a tener un valor concreto
tras el paso 1. Por este motivo a y b son variables. La unica constante es el n umero dos, que se
ha representado con el identicador 2.
Los objetos son manipulados mediante operaciones como la suma, la resta, etc. o mediante
otras acciones romper, vaciar. Los enunciados en los que se indican las manipulaciones
son llamados expresiones. Las expresiones muestran la forma en que tal manipulacion se
realiza, 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 el
resultado de sumar a y b y dividir por dos. Las operaciones involucradas son la suma y division
aritmeticas.
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 disposicion
del 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 de
operaciones 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 de
la aritmetica. Hay que destacar sin embargo el uso especial del signo =. En Matematicas se
emplea para establecer una relacion de equivalencia entre dos terminos. Aqu sin embargo se ha
usado para asignar valores a variables. De este modo x = 2 signica que la variable x toma
el valor dos en ese momento, pudiendo mas adelante alterarse dicho valor mediante una nueva
asignacion. 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 para
asignarlos a variables. Esta operacion es llamada lectura y equivale a la entrada de datos
en la computadora. Estos datos pueden provenir de cualquier periferico, la caracterstica que
los distingue es que no son conocidos a la hora de programar, por lo que han de ser obtenidos
durante la ejecucion.
Los tipos de objetos que se utilizaran son tambien los habituales de las Matematicas: n umeros
enteros, reales, vectores y matrices.
Los lenguajes algortmicos tienen reglas para la escritura destinadas a obtener algoritmos
legibles. No hay espacio en este libro introductorio a la informatica para describir en detalle
y con rigor un lenguaje algortmico. Sin embargo podemos citar las siguientes restricciones,
algunas de las cuales han sido ya comentadas.
El lenguaje algortmico 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 identicador.
Cada accion debe escribirse en una sentencia.
El conjunto de acciones primitivas ha de ser especicado con total claridad formando un
conjunto peque no pero suciente.
5.2.1 Fases del proceso de resoluci on de problemas
Es difcil concretar en proceso de resolucion de problemas pues cada problema plantea dicul-
tades especiales. No obstante hay una serie de reglas que conviene observar a la hora de construir
algoritmos.
Denicion del problema, de forma que quede absolutamente claro que es lo que se pretende
resolver. Ademas hay que especicar cuales son los datos y cuales los resultados buscados.
Esbozo de la solucion. El problema debe partirse en trozos para los cuales se sospecha
que puede haber soluciones conocidas. Es preciso asegurarse que al resolver los trozos se
consigue la solucion del problema total.
Resolucion de los subproblemas y prueba de la validez de los mismos.
50 TEMA 5. RESOLUCI

ON 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 sera
tratada 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 ujo
Un diagrama de ujo u organigrama es una representacion graca de las distintas operaciones que
deben 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 gracas. En este texto se va a usar un conjunto de
smbolos para representar acciones y decisiones, conectados por echas que indican el orden en
que se realizan. Hay que hacer notar que la representacion graca de un algoritmo no es exclusiva
de la informatica, sino que puede usarse en cualquier entorno que requiera planicacion. Mas
a un, la representacion del algoritmo es independiente de la programacion en un lenguaje u otro
o de la maquina en que vaya a ser ejecutado.
5.3.1 Smbolos
La gura 5.2 muestra el conjunto de smbolos que se van a usar para realizar diagramas de ujo.
De izquierda a derecha y de arriba a abajo se tiene:
Comienzo de m odulo. Marca el comienzo de un bloque del programa.
Proceso. Este elemento indica la realizacion de operaciones diversas. Equivale a una o mas
acciones del pseudocodigo.
Bifurcaci on condicional. Permite elegir una de entre dos opciones en funcion de cierta
condicion que se ha de especicar. Permite representar operaciones de decision como si
... , entonces ... ; si no ..., como se ha visto en el ejemplo del pseudocodigo para
calcular el valor absoluto de un n umero.
Operaci on 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 las
operaciones de lectura y escritura del pseudocodigo.
Fin de m odulo. Marca el nal de un modulo.
Subprograma. Los subprogramas son bloques de codigo preparados para ser incluidos en
programas, de forma que se ahorre tiempo de preparacion de los mismos. Un subprograma
se hace cargo de una parte de la tarea que puede ser repetida en varias partes del programa
o en programas distintos. Por ejemplo, el calculo de la norma de un vector o el determinante
de una matriz.
c M.R. Arahal 2003 DISA. ESI. US. 51
M odulo. Este smbolo indica que la operacion es realizada por un bloque que se detalla
en otro lugar. Un modulo se diferencia de un subprograma en que este tiene siempre
entidad propia en el codigo, mientras que el modulo es el resultado de una division en la
representacion graca y puede no afectar a la codicacion.
Inicio y actualizaci on. Realizacion de operaciones iniciales de un modulo. Asignacion de
valores iniciales y modicacion de ndices y contadores, usados sobre todo en bucles.
Proceso Entrada o salida Inicio de bloque Bifurcacin
Mdulo Subprograma Actualizacin Fin de bloque
Figura 5.2: Smbolos para la confeccion de diagramas de ujo.
A modo de ejemplo considerese el problema consistente en leer dos n umeros y escribir la
suma. 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, normalmente
el teclado; es decir, la operacion marcada como leer provoca que se obtenga un dato del exterior.
1 Leer primer sumando a
2 Leer segundo sumando b
3 Hallar la suma de los sumandos c = a +b
4 Escribir c
5 Fin
Tabla 5.1: Programa para sumar dos n umeros y escribir el resultado.
La gura 5.3 muestra el diagrama de ujo correspondiente a dicha tarea. Conviene observar
que para asignar su valor a la variable C se ha usado la notacion C A + B, que signica
introducir en C el valor A+B; esto no debe inducir a pensar que C = A + B en el sentido
matematico dado usualmente a tales ecuaciones. La interpretacion correcta es que la variable
C toma en ese instante el valor corrrespondiente a la suma A + B, pudiendo posteriormente
cambiar este valor por otro.
Un ejemplo mas complejo es el correspondiente a un programa que tiene que averiguar si
un n umero entero positivo dado es primo o no. El algoritmo consiste en dividir por todos los
enteros menores que el n umero y ver si en alg un caso el resto vale cero. El pseudocodigo puede
expresarse en la forma indicada por la tabla 5.2
En la gura 5.4 se muestra el diagrama de ujo del programa anterior. Se ha de notar que el
calculo del resultado se ha detallado en un modulo aparte; de este modo resultan dos diagramas
52 TEMA 5. RESOLUCI

ON DE PROBLEMAS
leer dato A
leer dato B
calcular
C A + B
escribir C
fin
inicio
Figura 5.3: Diagrama de ujo de un programa para sumar dos n umeros.
1 Leer n umero x
2 Iniciar resultado al valor CIERTO
3 Iniciar divisor a 2
4 Hacer:
4.1 Dividir x entre divisor
4.2 Si el resto es cero, hacer resultado igual a
FALSO
4.3 Incrementar divisor una unidad
4.4 Si el divisor es igual a x ir a 5, sino ir a 4
5 Escribir resultado
6 Fin
Tabla 5.2: Programa para hallar si un n umero es primo.
separados. El objetivo de la separacion es mejorar la legibilidad del conjunto. En efecto, de un
golpe de vista se puede, a partir del diagrama de la izquierda, reconocer el problema al que se
da solucion, mientras que el diagrama de la derecha explica en detalle el proceso seguido.
5.4 Programaci on estructurada
Es difcil hacer un resumen de las ideas de la programacion estructurada a lectores que no tienen
cierta experiencia en programacion. Esto sucede porque la programacion estructurada pretende
evitar cierto tipo de situaciones que aparecen en programas grandes y medianos, pero que no
se advierten en los ejemplos dados a principiantes. Una de estas situaciones es la siguiente: un
programador escribe un diagrama de ujo tal y como aparece en la parte derecha de la gura 5.5.
Transcurrido cierto tiempo, el mismo programador es requerido para realizar una modicacion
en el mismo.

Este intenta modicar el diagrama, pero la tarea le resulta ardua. Analizando los
motivos 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 clculo
Incrementar
NO
SI
es resto = 0 ?
NO
inicio clculo
escribir
resultado
leer x
calcular resultado
(ser x primo)
fin programa
hallar resto de
dividir x por divisor
resultado SI
divisor 2
Figura 5.4: Diagrama de ujo de un programa que comprueba si el n umero dado es primo.
Figura 5.5: Diagrama de ujo estructurado (izquierda) y no estructurado (derecha).
54 TEMA 5. RESOLUCI

ON DE PROBLEMAS
Es difcil hallar el punto en el cual hay que eliminar un bloque o insertar uno nuevo, pues
todo esta enmara nado.
Incluso aunque el diagrama tuviera una mejor disposicion graca, cuesta trabajo ver si
una modicacion de una parte dara resultados indeseables en otra, debido al gran n umero
de interconexiones que hay.
Y los problemas no acaban ah. Tras realizar los cambios, el programador debera probar el
nuevo programa para comprobar su correcto funcionamiento. Cada vez que se detecte un error
debera volver a repetir el tedioso proceso de modicacion. Los problemas descritos no seran
tales si el programador hubiera podido escribir el diagrama de ujo de forma parecida a la de
la gura 5.5 (izquierda), en la que se aprecia que no existen cruces de lneas y que cada modulo
tiene una entrada y una salida. Sobre estos dos aspectos se insistira mas adelante, por ahora no
es necesario comentar mas las ventajas que para cualquier proyecto supone el tener programas
legibles y comprensibles.
5.4.1 Flujo lineal
Los diagramas se dice que tienen ujo lineal cuando no existen conexiones de vuelta atras o
laterales. El ujo lineal se puede conseguir restringiendo los bloques constructivos a formatos de
entrada unica y salida unica. Es decir, usando para la confeccion del diagrama de ujo bloques
a los cuales llega solo una echa y de los cuales parte solo una echa. La secuencia, la seleccion
entre alternativas y la iteracion forman un conjunto suciente de modulos constructivos para
describir cualquier algoritmo. Es decir, es posible siempre realizar un diagrama de ujo que
contiene solo los bloques citados. En la gura 5.6 se tienen tales bloques; se puede ver que son
de entrada unica y salida unica.
secuencia bucle
NO SI
?

condicin
bifurcacin
condicin

?
cuerpo del bucle
mdulo 1
mdulo 2
opcin 1 opcin 2
Figura 5.6: Bloques constructivos para programas estructurados.
En lo sucesivo se usaran estos bloques para realizar los diagramas de ujo, pero antes de
pasar a los ejemplos es preciso comentar como se va a producir la descomposicion del problema
global en los modulos presentados.
5.4.2 Analisis descendente
En ocasiones se presenta la programacion estructurada como un conjunto de reglas a seguir. En
realidad no hay una denicion 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 an alisis de-
scendente o jerarquizado. Consiste este en identicar las funciones a cumplir por el programa
a nivel global y proceder luego a descomponer estas funciones en otras menores.

Estas a su vez
se vuelven a descomponer en un proceso que termina cuando se alcanza el nivel del lenguaje o
codigo usado. De este modo, el dise no del programa se realiza por niveles. Se comienza por el
nivel mas general y se termina por lo particular o concreto. Antes de pasar al siguiente nivel se
debe comprobar la validez formal de la solucion actual.
fin leer
inicio leer
fin calculo
escribir
resultado
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 ujo.
Al confeccionar el diagrama de ujo de un programa o modulo se ha de usar el analisis
descendente. El resultado es un conjunto de diagramas que describen el programa con un nivel
de detalle creciente. En un primer nivel el diagrama de ujo de cualquier programa puede tomar
la forma dada en la gura 5.7. En un segundo nivel, cada uno de los modulos se detalla en un
diagrama aparte. El proceso continua mientras existan bloques que necesiten explicaciones
adicionales.

Esta ha sido la tecnica usada en el ejemplo del programa que comprueba si un
n umero es primo (ver gura 5.4).
56 TEMA 5. RESOLUCI

ON DE PROBLEMAS
Tema 6
Desarrollo de algoritmos basicos
Antes de comenzar a programar es preciso saber desarrollar algoritmos. Como se ha visto en
el tema anterior, un algoritmo es una descripcion detallada de los pasos a seguir para resolver
una tarea. Los pasos han de ser operaciones capaces de ser llevadas a cabo por el operador al
cual va dirigido el algoritmo. En este tema se va a suponer que el operador es una persona con
conocimientos matematicos sucientes 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 subndices
Por tanto los algoritmos estaran escritos usando estas operaciones elementales, y no otras.
6.1 Calculos en secuencia
Los calculos en secuencia no presentan dicultad alguna desde el punto de vista algortmico.
Los diagramas de ujo resultantes son lineales, sin bifurcaciones o bucles, y por tanto de facil
creacion.
Un programa evoluciona de modo lineal cuando realiza toda la secuencia de instrucciones de
forma continua, sin saltos en la ejecucion. Este es el caso presentado en el ejemplo de la suma
de dos n umeros (ver gura 6.1). La realizacion y representacion en diagrama de ujo de estos
programas no conlleva ninguna dicultad.
Como ejemplos se propone realizar el diagrama de ujo de algoritmos que resuelvan las tareas
siguientes:
57
58 TEMA 6. DESARROLLO DE ALGORITMOS B

ASICOS
leer dato A
leer dato B
calcular
C A + B
escribir C
fin
inicio
Figura 6.1: Diagrama de ujo de un programa para sumar dos n umeros.
Leer dos valores del teclado y escribir media aritmetica.
Leer los coecientes de una ecuacion de segundo grado de la forma x
2
+ bx + c = 0 y
escribir las soluciones.
Leer los coecientes de un polinomio de grado tres de la forma P(x) = x
3
+ax
2
+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 un
bloque bifurcacion puede situarse otro, creando de este modo bifurcaciones anidadas.
Las bifurcaciones permiten que el programa discurra por un camino o su alternativa en
funcion de condiciones. Un ejemplo muy simple es el siguiente: leer un n umero por teclado y
escribir el valor absoluto del mismo. Una forma de resolver el programa es mediante el diagrama
de ujo de la gura 6.2. La idea es hacer que la secuencia de ejecucion pase por la escritura del
n umero o del n umero cambiado de signo en funcion de que sea positivo o negativo.
Las bifurcaciones se pueden encadenar para dar solucion a situaciones mas complejas. Por
ejemplo considerese la funcion: NC(x, y), con (x, y) IR
2
c {1, 2, 3, 4}. Esta funcion de-
vuelve el n umero de cuadrante en que se encuentra el punto (x, y) de IR
2
. El diagrama de la
gura 6.3 presenta una posible solucion mediante el uso de bifurcaciones en cascada.
Desarrolle los diagramas de ujo que resuelven los problemas siguientes:
Leer un n umero 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 ujo con ruptura de secuencia.
es x > 0

?
SI NO

?
es y > 0
SI NO

?
es y > 0
SI 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 sit ua el punto del plano dado por
(x, y).
60 TEMA 6. DESARROLLO DE ALGORITMOS B

ASICOS
Leer las componentes de un vector de IR
2
(x e y). Escribir el n umero del cuadrante en que
se halla. Suponga que ninguna componente es nula.
Leer un n umero del teclado. Si esta en el intervalo (2, 8] escribir en la pantalla un uno, en
caso contrario escribir un cero.
Leer un valor x del teclado y escribir el valor f(x) siendo f una funcion denida a trozos
del siguiente modo:
x f(x)
x [1, 3) 10 x
x > 50 1
resto 0
6.3 Bucles simples
Muchos algoritmos requieren la repeticion de operaciones cierto n umero de veces. Al conjunto
de operaciones que se repite se le llama cuerpo del bucle. El bucle queda completamente denido
por el cuerpo y la condicion de parada o salida. Cada vez que el programa en ejecucion pasa
por el cuerpo del bucle se dice que ha realizado una iteracion.
El bloque constructivo que se ha denominado iteracion permite plasmar en diagramas de
ujo este tipo de procesos. La bifurcacion al nal 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 en
la gura 6.4. De este modo se puede salir del bucle sin haber realizado ninguna operacion.
condicin

?
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 forma
que la componente iesima tenga el valor v
i
= i
2
4. Una posible solucion viene expresada por
el 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 componentes
de un vector de dimension N. Escribir luego el vector.
c M.R. Arahal 2003 DISA. ESI. US. 61
1 Leer dimensi on N
2 Iniciar ndice i 1
3 Si i > N, ir a 6
4 v
i
i
2
4
5 i i + 1
6 ir a 4
7 Fin
v
i
fin programa
inicio programa
leer dimensin N
i i + 1
?

NO
i > 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 IR
n1
, tal que
el elemento kesimo sea v
k
= k
2
3 para k = 1, ..., n.
Leer N y un vector de dimension N. Calcular y escribir la componente de mayor valor (no
usar la funcion de MATLAB max).
Leer N y un vector de dimension N. Calcular y escribir la componente de mayor valor y
su ndice dentro del vector. (no usar max).
Leer v IR
n1
, hallar y escribir m = v
t
v, m IR
Leer del teclado un n umero indeterminado de alturas. Dejar de leer cuando se haya
introducido una altura negativa. Escribir la media de las alturas validas (las no negativas).
Escribir en pantalla los n umeros del 90 al 100 y los caracteres de la tabla ASCII cuyos
codigos son tales n umeros.
Hallar el maximo com un divisor de dos n umeros 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 realiza
el bucle interno un cierto n umero de veces hasta que se produzca la condicion de salida del
mismo. Este es el caso cuando se trabaja con matrices. En la gura 6.5 se presenta un diagrama
de ujo que puede utilizarse para recorrer la matriz. Se ha supuesto que la matriz tiene M las
y N columnas. Observese que cada la (ndice K) se recorre variando el ndice de columnas J
desde 1 a N en el bucle interior. El bucle exterior permite variar K de 1 a M.
62 TEMA 6. DESARROLLO DE ALGORITMOS B

ASICOS
J > N ?
s
no
iniciar ndice de
columnas J a 1
Incrementar J
K > M ?
s
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 mn. Se han de leer del teclado las dimensiones m y n (suponga
que son n umeros enteros positivos). A continuacion se han de leer los elementos a
kj
de
una matriz A de m las y n columnas. Finalmente se presentara en la pantalla la matriz
leda.
Construir una matriz A mn cuyo elemento generico a
kj
viene dado por a
kj
= k
2
j
Dada una matriz A de dimensiones m n, se quiere anular (poner a cero) los elementos
de su diagonal principal y escribir la matriz resultante.
Suma de matrices. Dadas dos matrices A IR
mn
y B IR
mn
se quiere calcular y
escribir la matriz C obtenida como suma de las anteriores C = A + B. (realice la suma
elemento a elemento, sin utilizar la suma matricial que ofrece MATLAB).
Matriz traspuesta. Dada una matriz A IR
mn
calcular su traspuesta B = A
t
(ha de
hacerse mediante bucles, sin usar la apostrofe de MATLAB).
Submatriz triangular. Dada una matriz A IR
mn
se desea mostrar en pantalla los
elementos de su submatriz triangular inferior. Es decir, deben aparecer en la pantalla solo
los elementos de A que estan por debajo de la diagonal principal. Se supone que tanto m
como n son n umeros mayores que uno.
Algoritmo para obtener la multiplicacion de A IR
mn
por B IR
np
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 ley
v
k
= 3 v
k1
k. Tanto n como v
1
son cantidades que han de leerse del teclado.
Dado un n umero x mayor que uno se ha de determinar si es primo. Para ello ha de
comprobar si x es divisible por alg un entero en el intervalo (1, x).
Se desea calcular la suma

n
k=1
1/a
k
siendo los valores a
k
los elementos de la sucesion
dada por a
k
= a
k1
+ a
k2
con a
1
= 1 y a
2
= 1. El lmite n ha de leerse del teclado y se
supone mayor que dos.
6.5.2 Ordenaciones
Dado un vector v de dimension n cuyas componentes son todas positivas o cero se desea
reordenar 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 B

ASICOS
Repetir el ejercicio anterior pero sin usar un vector auxiliar como w. El resultado que se
pretende conseguir es que el propio vector v tenga sus componentes ordenadas.
Igual que el anterior pero suponiendo que v contiene cantidades positivas y negativas, por
ejemplo:
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 vehculo en cinco colores. Para
saber la aceptacion de cada color realiza una encuesta usando un programa en su ordenador
portatil. El programa ha de ayudarle a contar los votos de los encuestados. El encuestador
tecleara el n umero del color elegido (de uno a cinco) cada vez que pregunte a una persona
nueva. Cuando no quiera preguntar a nadie mas introducira el valor -1. En ese momento
el programa le indicara el n umero de votos que cada color ha obtenido. Posteriormente se
han de ordenar los colores seg un los resultados de la votacion.
6.5.3 Calculos
Dada una cantidad positiva N calcular la raz cuadrada entera aproximada r. Se ha de
cumplir 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. Se
han dispuesto en un vector v de dimension N > 2. Dise ne un algoritmo para calcular la
media y la varianza de las longitudes.
Tema 7
Programaci on en MATLAB
MATLAB es una aplicacion informatica que surgio para servir de herramienta en operaciones
matematicas, especialmente en operaciones con matrices.
Con los a nos ha ido incorporando funciones distintas y hoy en da contiene herramientas
para gran cantidad de aplicaciones ingenieriles: vision articial, analisis estadstico, dise no de
controladores, etc.
El usuario de MATLAB suele ser una persona que necesita algo mas que una calculadora
pero 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 permite
crear gracos de muchos tipos y presenta grandes ventajas a la hora de trabajar con n umeros
complejos.
Una incorporacion temprana fue la programacion. Es posible crear nuevas funciones de
MATLAB mediante un lenguaje que es muy parecido a lenguajes de programacion como BASIC
o C. Esto permite que el usuario pueda agrupar sentencias que utiliza frecuentemente dentro
de un programa que puede ser invocado posteriormente. De este modo se ahorra tiempo y
esfuerzo en sucesivas sesiones pues no es necesario escribir todas las sentencias de nuevo como
se mostrara.
Pero no todo son ventajas. Como principal inconveniente hay que se nalar el hecho de que
MATLAB no ha sido concebido como lenguaje de programacion por lo que carece de elementos
o caractersticas 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 una
ventana llamada de ordenes. Por ejemplo, si se escribe
sqrt(16)
65
66 TEMA 7. PROGRAMACI

ON 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 funciones
debidamente 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 n umero complejo a + bi siendo i =

1.
Cuando se trabaja con n umeros reales MATLAB considera simplemente que b = 0.
Finalmente, todos los n umeros son tratados en formato de punto otante. Esto quiere decir
que son n umeros con parte entera, parte decimal y un exponente (vease tema 2).
Estas caractersticas hacen que MATLAB desperdicie memoria con respecto a otros lenguajes
en los cuales las variables pueden ser de otros tipos mas peque nos.
A pesar de que MATLAB trata a todas las variables del mismo modo se va a continuar con la
sana costumbre de indicar en los diagramas de ujo y en los comentarios el tipo de las variables.
De este modo se facilita la deteccion de errores.
7.2.2 Creaci on y destrucci on
Las variables pueden crearse en cualquier momento. Para ello basta con asignarles un valor en
la forma que veremos.
Hay que tener en cuenta que las variables ocupan un espacio en la memoria. Cada vez
que se crea una nueva variable el programa MATLAB pide al SE un trozo mas de la memoria
disponible. A partir de ese momento el trozo en cuestion no puede ser usado para otros nes.
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 y
la liberacion del trozo de memoria ocupado por la misma. Una vez que una variable ha sido
eliminada no es posible recuperar su valor.
7.2.3 Asignaci on
La asignacion se consigue por medio del signo igual =. No hay que olvidar que asignar es una
operacion 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 del
signo = en ambos casos no ayuda nada a claricar la cuestion.
Debido a que la asignacion es una operacion distinta de la igualdad matematica se ha insistido
en temas anteriores en que se utilice un signo diferente . En los diagramas de ujo que vendran
en adelante se mantendra el uso del smbolo para la asignacion.
7.3 Operaciones y funciones incorporadas
La mejor manera de aprender a realizar operaciones con MATLAB es probar el programa con
ejemplos simples y explorar su comportamiento. En este punto se van a mostrar ejemplos en
varias categoras de dicultad creciente. Es muy aconsejable no estudiar de memoria los ejemplos
sino 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 se
ha 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 smbolo >> sirve para indicar al usuario que puede escribir ah su
orden. A menudo recibe el nombre de smbolo inductor pues induce al usuario a escribir.
Puede verse que el resultado viene precedido de ans=. Estas letras son la abreviatura de
answer (respuesta, resultado).
El programa MATLAB admite operaciones con parentesis, como por ejemplo 2 (5 + 3).
68 TEMA 7. PROGRAMACI

ON EN MATLAB
>> 2*(5+3)
ans =
16
>>
Notese que la multiplicacion se indica por medio del asterisco *. Tambien es posible realizar
operaciones menos elementales, como por ejemplo logaritmos en base 10
>> log10(100)
ans =
2
>>
o races cuadradas
>> sqrt(36)
ans =
6
Si uno desea dar nombres simbolicos a los n umeros 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 ha
tomado 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 cierta
cantidad 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 minimizar
mediante una programacion cuidadosa.
Las variables pueden usarse en otras expresiones como si se tratase de n umeros, 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. PROGRAMACI

ON EN MATLAB
Observe que ans (la respuesta) es una variable. Puede comprobar que su valor coincide con
el de la ultima respuesta dada por MATLAB.
Ademas de las operaciones aritmeticas de sobra conocidas existen operaciones logicas, como
por ejemplo la comprobacion de igualdad. Considere el ejemplo siguiente consistente en una
expresion 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 obtenida
es cero, lo cual indica que x no es igual a 7. De forma equivalente la sentencia x == 22.3 produce
un valor 1 al ser evaluada.
>> x==22.3
ans =
1
>>
De estos ejemplos se desprende que las comprobaciones que el valor logico verdadero es
representado en MATLAB mediante el valor numerico 1, mientras que el valor logico falso es
representado 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 siguientes
y 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 puede
realizar.
>> help elfun
Las operaciones que dan como resultado un valor logico se pueden combinar utilizando la
suma 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 si
5 < 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 que
100 y mayor que 5.
Las operaciones que se han comentado se indican en la tabla siguiente de forma mas resumida.
72 TEMA 7. PROGRAMACI

ON 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 debera bastar
para aprenderla por lo que se recomienda que se practiquen los ejemplos indicados y se exploren
las posibilidades que ofrecen.
7.3.2 Funciones incorporadas
De todas las ordenes de MATLAB ninguna debiera ser mas util para el usuario aprendiz que la
funcion de ayuda. Se comentara mas adelante como usar la funcion help, de momento se va a
usar 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 (que
esta 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 a
la 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 vector
la 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 oating point num-
ber.
pow2 Base 2 power and scale
oating point number.
realpow Power that will error out
on complex result.
reallog Natural logarithm of real
number.
realsqrt Square root of number
greater than or equal to
zero.
sqrt Square root.
nextpow2 Next higher power of 2.
Complex.
abs Absolute value.
angle Phase angle.
complex Construct complex data
from real and imaginary
parts.
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 and
remainder.
x Round towards zero.
oor Round towards minus in-
nity.
ceil Round towards plus inn-
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. PROGRAMACI

ON 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 ndice
de 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 v
k
.
Tambien se pueden construir vectores columna. Para ello se separan las las mediante punto
y 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 sola
la o columna. Por este motivo no merece la pena dedicar mas espacio a los vectores y debemos
pasar 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 dos
matrices:
A =
_
0 2 4
1 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 la se separan por espacios (o comas) y una
la 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. PROGRAMACI

ON EN MATLAB
Para realizar la suma se procede igual que si A y B fuesen variables escalares; es decir, se
escribe 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. Por
ejemplo, 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 absoluto
de los elementos de la matriz B.
7.3.5 Cadenas de caracteres
Las cadenas de caracteres son conjuntos de smbolos tomados de la tabla ASCII. Tienen gran
utilidad 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 de
caracteres incluye letras, n umeros y signos como el espacio o la admiracion. Es posible introducir
la 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 smbolos ha de ir encerrado por dos apostrofes. Son las
apostrofes las que diferencian una sentencia como a=barco de a=barco. Vea en el ejemplo el
efecto 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 interpretado
a=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 denido 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 fueron
introducidas en MATLAB para facilitar la programacion, el depurado y el uso de programas.
No obstante proporcionan interesantes posibilidades para desarrollar algoritmos y practicar el
arte 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 el
usuario necesite saber que variables ha creado, cuales son sus caractersticas, cuanto espacio
ocupan, 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 tama nos de las variables y que es de utilidad
cuando se trabaja con matrices. La orden es whos como puede verse en el ejemplo.
>> A=[1 2 3; 3 4 6]
78 TEMA 7. PROGRAMACI

ON 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 tama no o dimensiones de una unica variable,
por ejemplo para saber el n umero de las de una matriz y disponer de este n umero para
posteriores 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 proporciona
el n umero 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 posible
parar una sesion de trabajo y continuar en otro momento sin volver a repetir calculos. La
orden mas simple para guardar es save que puede usarse de varias maneras. En la tabla
siguiente se presenta un resumen.
Orden Operacion realizada
save Crea el archivo de nombre matlab.mat en la carpeta
actual. Dicho archivo contiene todas las variables que
existen en ese momento en el entorno MATLAB.
save nombrearchivo Crea el archivo de nombre nombrearchivo.mat en la
carpeta 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 la
carpeta actual. Dicho archivo contiene unicamente las
variables x, y y z.
c M.R. Arahal 2003 DISA. ESI. US. 79
Recuperaci on 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 tabla
siguiente se muestran tres posibilidades.
Orden Operacion realizada
load 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 que
previamente existe en MATLAB se producira la de-
struccion de la variable existente para dejar su sitio a
la variable del disco.
save nombrearchivo Igual que en el caso anterior, pero leyendo del archivo
nombrearchivo 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 y
que contienen variables o programas utilizables por MATLAB.
7.4 Codicaci on de nuevos programas
Una de las caractersticas del entorno MATLAB es que permite que las ordenes puedan ser
tomadas 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 escribirlas
en un archivo de texto. Posteriormente le indica a MATLAB que lea dicho archivo ejecutando
las ordenes una por una. El efecto es el mismo que si el usuario hubiese escrito las ordenes en
el entorno de MATLAB. Ahora bien, puesto que el archivo de texto se puede guardar en disco
no es preciso volver a escribir las ordenes nunca mas. Cada vez que el usuario desee ejecutar
de nuevo el conjunto de ordenes podra indicar nuevamente a MATLAB que lea el archivo. Esto
supone 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 un
archivo 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, el
editor de MS-DOS, etc. MATLAB incorpora su propio programa para redaccion llamado M le
Editor, o sea redactor de archivos M.
A modo de ejemplo considere las siguientes ordenes de MATLAB que convierten una cantidad
en pesetas a euros.
pesetas=input(Escriba la cantidad en pesetas : )
euros = pesetas/166.386
80 TEMA 7. PROGRAMACI

ON EN MATLAB
Supongamos que se introducen este texto dentro de un archivo al cual se le da el nombre de
cpe.m (el nombre viene de convertidor de pesetas a euros). La forma de indicar a MATLAB que
utilice el archivo es simple: se escribe su nombre en el entorno MATLAB. Se obtiene el resultado
que 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. Pasado
un tiempo sin usar un archivo es posible que uno olvide que tarea realiza exactamente. En tal
caso es necesario mirar el contenido del archivo y repasar su contenido. Es en este punto cuando
se agradece (o se echa en falta) una buena practica de programacion que haga que el codigo sea
legible.
Los siguientes consejos ayudaran sin duda al usuario de MATLAB a conseguir programas
legibles.
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 vistazo
en una ventana mediana. La division no ha de ser arbitraria, sino que los trozos deben
tener cada uno cometidos claros. Normalmente los diagramas de ujo desarrollados con
anterioridad a la codicacion indican como realizar esta division.
A pesar de haber dado estos consejos hemos de ser conscientes de que la buena programacion
solo se logra mediante un proceso de aprendizaje por prueba y error.
7.5 Funciones para trazado de gracas
Uno de los motivos por el que MATLAB ha sido un entorno favorecido por el p ublico es la
facilidad con la que se pueden realizar gracos 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 gracas que pueden ser muy utiles para
ilustrar 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 estacion
meteorologica. 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 graca con el aspecto que muestra
la gura 7.1. Puede observarse que en el eje vertical MATLAB ha representado los valores v
1
,
v
2
, etc. mientras que en el horizontal aparece el subndice correspondiente.
1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6
14
14.5
15
15.5
16
16.5
17
17.5
18
Figura 7.1: Graca obtenida con la orden plot
Continuando con el ejemplo supongamos ahora que se conoce la hora a la que se realizo cada
medida y que deseamos que aparezca en el eje horizontal. Sea t = [4812162024], la orden que
necesitamos 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 gura
7.2. Se observa que el eje horizontal esta ahora marcado con las componentes del vector t.
Puede ser interesante ahora a nadir 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. PROGRAMACI

ON EN MATLAB
4 6 8 10 12 14 16 18 20 22 24
14
14.5
15
15.5
16
16.5
17
17.5
18
Figura 7.2: Graca obtenida con la orden plot usando una variable para el eje horizontal y otra
para el vertical.
>> xlabel(hora)
>> ylabel(temperatura)
>> title(Datos estacion meteorologica)
El resultado nal se muestra en la gura 7.3.
4 6 8 10 12 14 16 18 20 22 24
14
14.5
15
15.5
16
16.5
17
17.5
18
hora
te
m
p
e
ra
tu
ra
Datos estacin meteorolgica
Figura 7.3: Graca con ttulo y letreros en los ejes.
7.6 Sentencias de control
7.6.1 La bifurcaci on
Ya se ha visto en los diagramas de ujo realizados que las bifurcaciones son imprescindibles para
llevar a cabo ciertas tareas. En MATLAB es posible realizar la bifurcacion basica mediante la
sentencia 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 expresion
arroje 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 sentencias
posteriores a end.
De la explicacion anterior debe resultar evidente que al usar la bifurcacion se ejecutan las
sentencias S o las N pero no ambas.
El diagrama de ujo de la gura 7.4 a) corresponde a una bifurcacion generica. Dentro de los
bloques S y N se puede colocar cualquier conjunto de sentencias, incluyendo nuevas bifurcaciones
como 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
condicin
s no
Bloque N Bloque S
Figura 7.4: a) Diagrama de ujo correspondiente a una bifurcacion generica. b) Diagrama de
ujo 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 sera de utilidad en caso de que no dispusiesemos en MATLAB de otros
medios para calcular el valor absoluto.
Un ejemplo igualmente simple es:
84 TEMA 7. PROGRAMACI

ON 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 races son complejas)
else
disp(Las races son reales)
end
Es facil ver que este programa toma como datos los coecientes a, b y c de una ecuacion de
segundo grado ax
2
+ bx + c = 0, los analiza y escribe en la pantalla si las races (soluciones de
la 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 un
conjunto de lneas de codigo que tienen la forma siguiente:
while condicion
sentencias del cuerpo del bucle
end
En la gura 7.5 a) se muestra el diagrama de ujo correspondiente al bucle. La condicion
es una expresion que da como resultado un valor logico, por ejemplo x > 2. El cuerpo del bucle
son sentencias cualesquiera.
Examinando el diagrama de ujo de la gura 7.5 a) es facil deducir que mientras la condicion
se cumpla se repetira el bucle una y otra vez. Es decir, si al evaluar la expresion logica de la
condicion se obtiene un resultado verdadero se pasa a ejecutar el cuerpo del bucle, en caso
contrario 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 diagrama
de ujo equivalente (vease gura 7.5 b).
c M.R. Arahal 2003 DISA. ESI. US. 85
condicin ?
cuerpo
s
no
inicio
Escribir suma
x < 10 ?
Iniciar x a 0
y suma a 0
suma suma + x
s
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 ujo correspondiente a un bucle generico del tipo repetir mientras
la condicion sea cierta. b) Diagrama de ujo correspondiente al ejemplo de uso del bucle
mientras
Para mejorar la legibilidad de los programas es muy aconsejable incluir comentarios y ordenar
la apariencia en la pantalla de las sentencias. De este modo el ejemplo en cuestion resulta mas
facil 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 n umero conocido de veces. Para ello se
puede disponer un bucle con un contador. En cada pasada o repeticion el contador se incrementa
y se comprueba que no se ha sobrepasado el lmite. Estas tareas se realizan facilmente en
MATLAB 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. PROGRAMACI

ON EN MATLAB
sentencias del cuerpo del bucle
end
En la gura 7.6 a) se muestra el diagrama de ujo correspondiente al bucle anterior. En el
se observa que contador es una variable que sirve para controlar el bucle. Esta variable toma
inicialmente el valor especicado por valorinicial. La variable se incrementa al nal de cada
pase o repeticion en una unidad. La condicion de salida del bucle consiste en que el contador
no sobrepase el lmite jado por el valor valorfinal.
contador dentro
de lmites?
cuerpo
s
no
inicio
k 6 ?
Iniciar k a 1
s
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 ujo correspondiente a un bucle generico del tipo para. b)
Diagrama de ujo correspondiente al ejemplo de uso del bucle para
A n de aclarar las ideas se muestra el siguiente ejemplo de bucle usando la sentencia for.
for k = 1:6,
k
end
En la gura 7.6 b) se presenta el diagrama de ujo correspondiente a este ejemplo. Es facil
ver que el bucle no realiza calculo alguno, simplemente escribe en la pantalla los valores sucesivos
que va adquiriendo la variable k.
Este ejemplo revela porque se le llama bucle para. Se observa que para cada valor de k
entre 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 nales no necesariamente son constantes, pueden ser variables como
en 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 realizar
una cuenta atras (mediante decremento del contador) o para saltar de dos en dos, etc. La forma
de 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 programaci on 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 x
k
= 1.001 +
0.01 k. Calcular a continuacion un vector y cuyas 100 componentes vienen dadas por
y
k
=
sen(x
k
)
x
k
. Representar gracamente y frente a x.
Leer una cadena de caracteres. Cifrarla para que pueda ser enviada de forma secreta. La
regla de cifrado es: sumar al codigo de cada caracter la posicion que ocupa dentro del
texto al cuadrado. El mensaje cifrado consiste en la lista de n umeros obtenidos separados
por espacios.
Descifrar un mensaje codicado seg un la regla anterior.
Leer del teclado un par de abcisas x
1
y x
2
. Representar gracamente la funcion y =
x sen(x) utilizando cien puntos equiespaciados entre x
1
y x
2
.
88 TEMA 7. PROGRAMACI

ON EN MATLAB
Utilizar el programa anterior para calcular gracamente la solucion de la ecuacion sen(x) =
x (calculando el paso por cero de la funcion y = xsen(x) mediante llamadas sucesivas al
programa con valores de x
1
y x
2
que esten a izquierda y derecha de dicho pase por cero).
Tema 8
Programaci on de funciones en
MATLAB
Las funciones son fundamentales para realizar programas de cierta envergadura. Por un lado
permiten desarrollar un codigo modular lo cual mejora la legibilidad, pero ademas descargan el
trabajo del programador pues cada funcion constituye un nuevo bloque constructivo en el que
apoyarse.
8.1 Concepto de funci on
Una funcion es un conjunto de ordenes que lleva a cabo una tarea precisa. La funcion es utilizada
dentro de un programa como si de una orden se tratara. La funcion puede calcular resultados
utilizando los datos que se le suministran explcitamente.
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 podamos
verlo.
Realiza una tarea concreta consistente en calcular el seno del n umero 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 ujo. Ademas poseen
una caracterstica que las hace muy utiles: las funciones pueden usarse una y otra vez con datos
distintos. Desde este punto de vista la funcion es una maquina capaz de producir resultados a
partir de datos que se le suministran. Este aspecto es ilustrado por el diagrama de la gura 8.1.
89
90 TEMA 8. PROGRAMACI

ON DE FUNCIONES EN MATLAB
Funcin
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 las
funciones 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. Se
dice habitualmente que la funcion devuelve un resultado que es el equivalente a la variable
dependiente.
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 el
valor de x.
2. La asignacion a la variable y del valor calculado por la funcion sin (que es, logicamente
sen(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 escriba
funciones nuevas. Para ello solo tiene que preparar en un archivo de texto las ordenes de MAT-
LAB que realizan un determinado calculo y posteriormente a nadir una cabecera que permita a
esas ordenes trabajar como debe hacerlo una funcion.
Se va a ilustrar el procedimiento con un ejemplo. Supongamos que se necesita una funcion
que calcule el factorial de un n umero 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 trozo
de codigo debemos recordar siempre que hemos de usar la variable n para el dato. Dicho de otro
modo, este trozo de codigo no sirve si se pretende calcular el factorial de x o de q. Lo que se
necesita es a nadir 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 nombre
se ha escogido para recalcar que es una funcion ma y que calcula el factorial.
Para probar mediante ejemplos que este archivo M es una funcion escribimos en la ventana
de 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 se
la invoca. Notese que esta invocacion, uso o llamada produce un efecto interesante: el valor
que se le proporciona (el valor 5 en el ejemplo) es copiado en la variable n de la funcion, de
modo que las ordenes que se haban escrito y que calculan el factorial de n estan en realidad
calculando el factorial del dato escrito entre parentesis. A este fenomeno se le suele llamar pase
de argumento.
Por otra parte, el resultado que se calcula y que almacena en la variable factorial aparece
tras la llamada en el entorno de MATLAB. Si esto no se entiende del todo considere este otro
ejemplo:
92 TEMA 8. PROGRAMACI

ON 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 este
fenomeno se le da el nombre de devolucion de resultados.
Con esta explicacion ya tiene sentido una frase habitual entre programadores como le pase
a 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 lnea
en 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 nombre
n).
A continuacion se escribiran sentencias de MATLAB incluyendo todo tipo de calculos. Es
obligatorio que en alg un punto se le de valor a la variable resultado pues de otro modo la funcion
no 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 variables
se 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 (seg un indica
el resultado de who) es y.
La respuesta es que estas variables no son visibles desde el entorno de MATLAB pues estan
ocultas dentro de la funcion mi fact. Esta caracterstica es muy util pues de este modo cada
funcion puede usar variables con el nombre que quiera sin que haya que preocuparse porque esta
variable ya exista previamente en otra funcion.
Este hecho se produce con las funciones, pero no con cualquier archivo M. El siguiente
ejemplo puede contribuir a aclarar esta armacion. Considere los dos archivos M que se indican
a 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 ordenada
sobre la recta y = 8x + 2 correspondiente a un punto de abcisa x que es el dato proporcionado
a 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 MATLAB
que 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. PROGRAMACI

ON 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 Clasicaci on de las variables
Las variables pueden clasicarse de varias maneras. Atendiendo al campo donde pueden ser
vistas y utilizadas se distinguen dos grupos:
Globales Estas variables pueden ser vistas y utilizadas desde cualquier chero M y desde el entorno
de MATLAB.
Locales Son variables que solo pueden ser vistas y utilizadas dentro de alguna funcion. Fuera de
la 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 destruye
explcitamente mediante la orden clear. Las variables globales son de este tipo. Tambien
se las suele llamar variables est aticas.
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.
Efmeras Son variables que son creadas por una funcion y desaparecen al terminar la funcion. Las
variables locales suelen ser efmeras. Debido a esto las variables que estan dentro de una
funcion no conservan su valor de una llamada a otra de la funcion. Existe un procedimiento
para convertir las variables locales en persistentes mediante la orden persistent.
Las caractersticas de disponibilidad (global o local) y durabilidad (persistente o efmera)
pueden combinarse dando lugar a varias situaciones. El mejor modo de poner de maniesto
todo esto es utilizando ejemplos como los que se proporcionan a continuacion.
Ejemplo 1. Las variables del entorno de MATLAB son locales.
Para poner de maniesto esta armacion considere la funcion f1 cuyas ordenes se guardan
en 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 intentaremos
hacerlo 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. PROGRAMACI

ON DE FUNCIONES EN MATLAB
Aparece un mensaje de error que nos indica que la variable b no es conocida dentro de la
funcion f1. La explicacion es simple: la variable b pertenece al entorno de MATLAB. No es una
variable global. No puede ser utilizada en el interior de funciones.
Ejemplo 2. Las variables interiores de una funcion son locales y no pueden ser accedidas
desde 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 funcion
f 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 funciones
que 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. Para
poner esto de maniesto 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 modicacion 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 dicho
valor.
>> b=-5
b =
-5
>> f2(1)
ans =
3
La respuesta obtenida es la deseada, con lo que queda probado que las variables globales
pueden ser usadas dentro y fuera de funciones.
8.4 Fases de la ejecuci on de una instrucci on
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 que
se invoca a una funcion. El exito o fracaso de las funciones que uno escriba estara sin duda
inuenciado por el buen conocimiento de estas fases.
98 TEMA 8. PROGRAMACI

ON 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. Envo 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 tienen
lugar y que son necesarias para el desempe no de las tareas encomendadas a una funcion.
Tema 9
Algunos problemas de ingeniera
9.1 Interpolaci on con segmentos
Suponga que se conocen los valores que una funcion f desconocida toma sobre ciertos puntos
{x
1
, x
2
, , x
n
}. Se pretende proporcionar valores aproximados de f en cualquier punto x

interpolando los valores conocidos.


Para precisar se va a llamar X = {x
k
} al conjunto de los valores de x para los cuales se
conoce el valor de f. De forma equivalente se denominara Y = {f(x
k
)} a las ordenadas de
dichos puntos.
Para poder obtener aproximadamente f(x

) mediante interpolacion es necesario que existan


dos valores x
i
y x
d
pertenecientes a X tales que x
i
x

x
d
.
En tal caso la interpolacion produce un valor aproximado

f(x

) que se calcula utilizando la


recta que pasa por (x
i
, y
i
) y (x
d
, y
d
) como se muestra en la gura 9.1. La ecuacion de esta recta
es:
y y
i
=
y
d
y
i
x
d
x
i
(x x
i
)
y en el punto x

toma el valor
y

= y
i
+
y
d
y
i
x
d
x
i
(x

x
i
)
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 abscisas
X = {x
k
} y sus im agenes mediante f denotadas por Y = {f(x
k
)}, siendo f una funci on
99
100 TEMA 9. ALGUNOS PROBLEMAS DE INGENIER

IA
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6
0
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 es
la lnea de puntos. Los valores conocidos se indican con marcas +. Dado el valor x

, la recta
que interpola es la lnea continua.
desconocida, calcular mediante interpolaci on una aproximaci on

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 cumple
que x
k
x
k+1
para todo k.
9.2 Ajuste por mnimos cuadrados
Hay ocasiones en ingeniera en las que se dispone de un conjunto de medidas o datos observados
de dos variables y se quiere hallar la relacion entre ambas. Por ejemplo, la relacion entre altitud
y temperatura media en la estratosfera.
Mediante un globo se puede medir la temperatura en distintas epocas del a no y la altura
correspondiente. Suponga que el resultado de tales mediciones se ha incluido en dos vectores T
de 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 graca que se muestra en la gura 9.2 muestra en el eje vertical (eje y) la altura y en
el horizontal (eje x) la temperatura. Como puede verse, parece existir una relacion entre las
observaciones de ambas variables. Mas a un, 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 +b
proporciona 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 0
20
25
30
35
40
45
50
temperatura (
o
C)
a
l
t
i
t
u
d


(
K
m
s
)
Datos observados
Figura 9.2: Mediciones realizadas con globo en la estratosfera.
Dada una observacion consistente en el par (x
k
, y
k
) se denomina error de ajuste a la diferencia
entre el valor observado y
k
y el valor dado por la recta para el valor de x observado y(x
k
) =
ax
k
+b. La desviacion cuadratica es es cuadrado de dicho error (y
k
y(x
k
))
2
.
El metodo de los mnimos cuadrados permite obtener los valores de a y b que producen el
mejor ajuste posible en cierto sentido
1
.
Las formulas para obtener los valores de a y de b son de sobra conocidas:
a =
n
n

k=1
x
k
y
k

n

k=1
x
k
n

k=1
y
k
n
n

k=1
x
2
k

_
n

k=1
x
k
_
2
b =
n

k=1
y
k
a
n

k=1
x
k
n
Siendo n el n umero de observaciones. Aplicadas a los datos de altitud y temperatura se
obtienen los valores
a =
11(10840) (379)(353)
11 15177 143641
= 0.6242
1
La recta de mnimos cuadrados, como indica su nombre, es la que hace mnima la suma de las desviaciones
cuadr aticas.
102 TEMA 9. ALGUNOS PROBLEMAS DE INGENIER

IA
b = (353 a (379))/11 = 53.6
En la gura 9.3 se muestran de nuevo los datos de temperatura y altitud incluyendo ademas
la recta de ajuste obtenida con las formulas anteriores y = 0.624x + 53.6.
60 50 40 30 20 10 0
20
25
30
35
40
45
50
temperatura (
o
C)
a
l
t
i
t
u
d


(
K
m
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 medidas
consistentes en pares (x
i
, y
i
) hallar la resta de ajuste por mnimos cuadrados.
9.3 Calculo aproximado de areas
Como es sabido, la integral denida de una funcion equivale al area que queda bajo la curva de
dicha funcion entre los lmites de integracion. Por ejemplo, la integral indenida (o primitiva)
de y = 1 es
_
1dx = x, por tanto la integral denida entre las abscisas 1 y 5 es:
_
5
1
1dx = (5 1) = 4
Este resultado puede comprobarse de manera inmediata sin mas que trazar la graca de
y = 1 y observar que el area del rectangulo es igual al producto de la base por la altura 4 1 = 4.
Seg un lo anterior, parece claro que para calcular el area de y =f(x) entre dos abscisas x
i
,
x
f
basta con hallar la primitiva de f(x), digamos g(x) =
_
f(x)dx y luego obtener la diferencia
g(x
f
)g(x
i
).
Este metodo presenta un inconveniente, y es que existen funciones para las cuales no se
conocen primitivas. Este es el caso, por ejemplo de la funcion f(x) = e
x
2
.
c M.R. Arahal 2003 DISA. ESI. US. 103
El calculo aproximado de integrales consiste en hallar un valor numerico h(x
i
, x
f
) que sea lo
mas parecido posible al area que se desea calcular g(x
f
)g(x
i
).
Un metodo muy simple consiste en dividir el area en rectangulos como los que se muestran
en la gura 9.4. Observese que se ha dividido el intervalo [x
i
, x
f
] en n trozos iguales, resultando
los subintervalos: [x
1
, x
2
], [x
2
, x
3
], ... [x
n
, x
n+1
], siendo x
1
= x
i
y x
n+1
= x
f
. La altura de
cada rectangulo se calcula mediante el valor de la funcion. As, para el primer rectangulo la
altura es f(x
1
), para el segundo rectangulo f(x
2
) y para el ultimo rectangulo (el n) es f(x
n
).
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(x
i
, x
f
, n) el valor de dicha suma. Puesto que la base de todos ellos
es igual a d = (x
f
x
i
)/n se tiene que:
h(x
i
, x
f
, n) = d
n

k=1
f(x
k
) (9.1)
La suma anterior puede llevarse a cabo mediante un programa de computador. Notese que la
formula (9.1) solo contiene variables y funciones conocidas. Se supone que aunque no se conoce
la expresion analtica de la funcion primitiva g(x) s se conoce la de f(x) y tambien se supone
que los valores de f(x) se pueden calcular para cualquier x [x
i
, x
f
].
El problema que se pretende resolver puede enunciarse como: dados dos valores x
i
, x
f
(x
i
< x
f
) y una funci on f(x), hallar el area bajo la curva f de forma aproximada.
Resulta evidente que el resultado de (9.1) depende del n umero 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 nos a costa de un tiempo de calculo elevado. En el algoritmo que se va a realizar se
dejara que n sea una variable a elegir por el usuario.
104 TEMA 9. ALGUNOS PROBLEMAS DE INGENIER

IA
9.4 Integraci on numerica de ecuaciones diferenciales
9.4.1 Introducci on
Un problema clasico en ingeniera 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. Por
ejemplo la ecuacion
dx
dt
+x = 0
En esta ecuacion x no representa un n umero sino una funcion del tiempo x(t). La solucion
de la ecuacion es una funcion tal que derivada respecto al tiempo y sumada a s misma produzca
el valor cero.
En algunos casos es posible obtener la solucion utilizando herramientas del calculo. En el
ejemplo mostrado es simple pasando dt al segundo miembro y tomando integral.
dx
dt
+x = 0
dx
dt
= x

dx
xdt
= 1

dx
x
= 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 mediante
x(0) = x
0
se tiene que:

_
t
0
dx
x
=
_
t
0
dt
(ln x ln x
0
) = (t 0)
(ln
x
x
0
) = t
(ln
x
x
0
) = t
c M.R. Arahal 2003 DISA. ESI. US. 105
x
x
0
= e
t
x(t) = x
0
e
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 en
las cuales aparecen terminos que no son lineales.
Como ejemplo considere el problema de un paracaidista cayendo en la atmosfera. La cada
esta gobernada por la accion de la fuerza de gravedad y la fuerza de rozamiento con el aire.
F
g
F
r
= m
dv
dt
donde F
g
es la fuerza de la gravedad que atrae al paracaidista hacia el suelo, F
r
es la fuerza
de rozamiento que se opone a la cada, v es la velocidad vertical hacia abajo con la que viaja el
movil y m es su masa.
Se sabe que F
g
= mg siendo g = 9.8m/s
2
, por otra parte la resistencia aerodinamica depende
de muchos factores. Simplicando mucho se puede considerar que F
r
= kv
2
. Es decir, la
resistencia es proporcional al cuadrado de la velocidad.
La ecuacion diferencial queda entonces:
mg kv
2
= m
dv
dt
dividiendo por m y reagrupando terminos se obtiene:
dv
dt
= g Bv
2
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
dx
dt
= f(t) con condicion inicial x(0) = x
0
.Por tanto, en el instante de tiempo
t = 0 se sabe que x(t) = x
0
. Ademas se sabe que
x(0) = f(0) = lim
t0
x(t) x
0
t 0

x(h) x
0
h
tomando un valor h = t sucientemente peque no. Es decir, que el valor de x(t) en un instante
h proximo a cero es aproximadamente x(h) x
0
+ hf(0). Del mismo modo, para el instante
106 TEMA 9. ALGUNOS PROBLEMAS DE INGENIER

IA
2h se puede escribir x(2h) x(h) +hf(h), como x(h) no es conocido se puede utilizar su valor
aproximado x(h) = x
0
+ hf(0). Queda claro que de este modo se puede obtener una secuencia
de valores aproximados { x(kh)}, k = 0, 1, 2, . Notese que este metodo equivale a hacer una
extrapolacion lineal con la derivada en cada punto.
Para ilustrar el metodo de Euler se parte de la situacion mostrada en la gura 9.5 (a). El eje
horizontal representa la variable t, en el eje vertical se ha colocado el valor x(0) = x
0
. A partir
de este punto se traza una recta con pendiente f(0). Sobre esta recta se halla el punto de abcisa
h y ordenada x(h) = x
0
+ hf(0). La nueva situacion es la mostrada en 9.5 (b): ahora se toma
x(h) como punto de partida para trazar una nueva recta de pendiente f(h) y obtener sobre ella el
punto de abcisa 2h y ordenada x(2h) = x(h)+hf(h). En la gura 9.5 (c) se muestra el resultado
obtenido 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 los
puntos (kh, x(kh)), de forma que se obtiene una aproximacion mediante trozos rectos. En la
citada gura se muestra tambien con trazo punteado la solucion exacta obtenida resolviendo
dx
dt
= cos(t), con x(0) = 0 que da como resultado x(t) =sen(t).
0
x
^
x(h)
h
t
0
^
x(h)
^
x(2h)
t
2h
x
0 h
0
0 0.5 1 1.5 2 2.5 3
0
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 ecuaci on diferencial
de primer orden en la forma
dx
dt
= f(t) con condici on inicial x(0) = x
0
calcular de forma
aproximada mediante el metodo de Euler los valores de la trayectoria x(t) para t = h, 2h, , Nh
siendo h el paso de integraci on dado y N el n umero de pasos (tambien dado).
9.5 Ecuaciones trascendentes
Existen ecuaciones cuyas soluciones no pueden hallarse con lapiz y papel intentando despejar la
variable buscada.

Este es el caso de ecuaciones como cos(x) = x.
El problema se puede replantear como la b usqueda del punto de corte con el eje horizontal
de la funcion y = cos(x) x. Para calcular (de forma numerica) el paso por cero de y(x) se
pueden 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 bisecci on
Se quiere resolver el problema de hallar el paso por cero (o raz) de una funcion y = f(x) dentro de
un cierto intervalo [x
i
, x
f
]. Se sabe que f es continua y tambien que en los extremos del intervalo
toma valores de distinto signo. Sin perdida de generalidad se puede suponer que f(x
i
) > 0 y
f(x
f
) < 0 (en caso contrario basta con buscar el corte por cero de f(x)).
La situacion comentada aparece descrita en la gura 9.6. De la propiedad de continuidad de
la funcion f se obtiene que debe existir al menos un paso por cero en el intervalo citado. Interesa
calcular 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 peque no que siga
conteniendo el punto de corte. Este procedimiento se repite varias veces hasta que el intervalo
es lo bastante peque no. Llegado este momento se puede tomar como valor aproximado del cero
el punto medio del ultimo intervalo.
Para realizar la biseccion se toma el punto medio del intervalo actual x
m
= (x
i
+x
f
)/2. Se
eval ua la funcion en dicho punto, pueden darse tres casos:
a) la funcion en x
m
es del mismo signo que f(x
i
). En tal caso se toma como nuevo intervalo
el [x
m
, x
f
] y se repite el proceso.
b) la funcion en x
m
es del mismo signo que f(x
f
). En tal caso se toma como nuevo intervalo
el [x
i
, x
m
] y se repite el proceso.
c) f(x
m
) = 0 en tal caso no es preciso buscar mas, se ha hallado un pase por cero de la
funcion.
El metodo de la biseccion termina o bien cuando se halla un punto en el que la funcion vale
cero o cuando el intervalo es lo sucientemente peque no. Por ejemplo, si se necesita conocer el
pase por cero con dos decimales nada mas el metodo ha de aplicarse hasta que el intervalo tenga
una longitud menor o igual a 0.01.
En la gura 9.7 se muestra como actuara el metodo de la biseccion con la misma funcion de
la gura 9.6. Se han representado tres etapas con los pasos descritos anteriormente (indicadas
mediante un n umero encuadrado situado en la parte superior de cada graca). La longitud
108 TEMA 9. ALGUNOS PROBLEMAS DE INGENIER

IA
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 con
respecto a la anterior.
Para ilustrar el metodo se va a considerar la funcion cos xx. El intervalo en el que existe un
pase por cero se obtiene facilmente recordando que cos 0 = 1, por lo que f(0) = cos 00 = 1 > 0
y 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 [x
i
, x
f
] = [0, /2]. El punto medio de este
intervalo es x
m
= (x
i
+x
f
)/2 = /4. Al evaluar la funcion se obtiene que f(x
m
) = 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 guran en la tabla siguiente:
Intervalo Punto medio x
m
Valor de f(x
m
) 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 x
f
x
i
.
Puede observarse que el valor en cada etapa es la mitad que en la anterior. Esta cantidad tiene
gran importancia en el metodo. Observese que si se toma x
m
como valor aproximado de x

el error cometido no sera nunca mayor que la longitud del intervalo. Por tanto, si se desea la
solucion aproximada con un decimal exacto esta se puede tomar como 15/64; si se precisan dos
decimales exactos entonces hay que tomar 245/1024.
La gura 9.8 muestra la funcion f(x) = cos x x. Los crculos y las lneas verticales indican
los valores de x
m
en las cuatro primeras etapas. Los n umeros que guran encima de los crculos
indican la etapa en la que han sido obtenidos. Puede comprobarse que en la primera etapa se
obtiene (por casualidad) un valor muy cercano al paso por cero.
El problema que se pretende resolver puede enunciarse como: dada una funci on 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 [x
i
, x
f
] tales que f(x
i
) f(x
f
) < 0 aplicar el metodo de la bisecci on hasta que el
intervalo resultante tenga una longitud menor que cierto valor dado . El algoritmo dar a como
resultado el intervalo nal.
9.6 Supercies
Una supercie z = f(x, y) denida en un rectangulo [x
i
, x
f
] [y
i
, y
f
] puede representarse medi-
ante un conjunto discreto de alturas medidas en algunos puntos del dominio. Por ejemplo, si se
toma una rejilla en el rectangulo con n
x
n
y
puntos, las alturas de los puntos (x
j
, y
i
) seran los
valores z
ij
= f(x
j
, y
i
) para i = 1, , n
y
y j = 1, , n
x
que se pueden incluir en una matriz
Z IR
n
y
n
x
.
A modo de ejemplo considere la funcion z = f(x, y) = x
2
+y
2
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.00
4.25 2.50 1.25 0.50 0.25 0.50 1.25 2.50 4.25
4.00 2.25 1.00 0.25 0.00 0.25 1.00 2.25 4.00
4.25 2.50 1.25 0.50 0.25 0.50 1.25 2.50 4.25
5.00 3.25 2.00 1.25 1.00 1.25 2.00 3.25 5.00
_
_
_
_
_
_
La gura 9.9 muestra la rejilla en el rectangulo considerado y la supercie z = f(x, y) calcu-
lada en los puntos de la rejilla.
Una supercie cualquiera, como por ejemplo la formada por las monta nas y valles del terreno,
puede ser representada aproximadamente por una matriz. Usando esta representacion es posible
110 TEMA 9. ALGUNOS PROBLEMAS DE INGENIER

IA
2 1 0 1 2
1.5
1
0.5
0
0.5
1
1.5
rejilla
x
y
2
1
0
1
2 1
0
1
0
1
2
3
4
5
superficie f(x,y)
x
y
Figura 9.9: Ejemplo de uso del metodo de la biseccion.
resolver algunos problemas de ingeniera.
9.6.1 B usqueda de extremos
Dada una matriz de alturas como la descrita en 9.6 con n
y
las y n
x
columnas se desea determinar
los maximos y mnimos. El problema es equivalente a buscar las cimas y depresiones de un
terreno.
Para concretar mas lo expuesto considerese la supercie mostrada en la gura 9.10 y su
correspondiente graco de curvas de nivel. Puede observarse que existe mas de una cumbre y
mas de una depresion. El objetivo no es hallar la cumbre mas alta o la sima mas profunda sino
indicar en que lugares existe alguna de estas caractersticas del terreno.
10
20
30
40
50
60
10
20
30
40
50
10
20
30
j
superficie
i
10 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 m ultiples 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 terreno
que 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 alg un elemento a
i,j
con la propiedad de ser mayor que sus vecinos.
Por ejemplo, en la matriz siguiente
_
_
_
_
_
_
_
_
_
_
0 0 1 2 2 1 0 0 0
0 0 2 2 2 2 1 0 0
0 0 2 2 2 2 1 0 0
0 1 1 2 3 1 1 0 0
0 0 1 1 2 1 1 0 0
0 0 1 1 2 1 1 0 0
0 0 1 1 2 1 0 0 0
_
_
_
_
_
_
_
_
_
_
hay una sola cumbre, correspondiente al elemento a
4,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 de
abajo, el de la izquierda, el de la derecha y tambien los cuatro situados en las diagonales; es
decir, 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 las primera y ultima
y los de las columnas primera y ultima) no pueden ser comprobados porque no tienen todos sus
vecinos, por ello se dejan fuera del analisis.
El algoritmo para detectar cumbres debera analizar cada uno de los elementos interiores de
la 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 se
lee la frase Hola amigo. se ha de escribir en la pantalla .ogima aloH que es la frase escrita de
derecha a izquierda.
9.7.2 Palndromo
Problema Leer una palabra y decidir si es palndromo. El nal de la palabra es indicado con
el punto. Para ser palndromo debe ocurrir que exista un eje de simetra en la palabra. La
palabra puede tener un n umero par o impar de caracteres; en este ultimo caso el eje de simetra
contendra el caracter central.
Ejemplos: abba, abcba.
112 TEMA 9. ALGUNOS PROBLEMAS DE INGENIER

IA
9.7.3 Mensaje oculto
Una frase puede cambiarse para que resulte irreconocible. Una forma muy simple consiste en
cambiar cada caracter por el siguiente del alfabeto. Por ejemplo, la palabra IBM se convierte en
HAL.
El programa que se desea construir ha de codicar, mediante esta tecnica simple, una frase
que se leera del teclado. Considere que la frase leda consiste unicamente en una palabra formada
por letras (sin n umeros ni otros caracteres).
Para simplicar 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 n umeros y signos de puntuacion. Los unicos caracteres
que se han de modicar 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 simplicar 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 codicado proporcionar la frase
original.
El programa ha de leer del teclado una frase codicada, como por ejemplo >Rvfebnpt b
mbt 6i?. Como resultado el programa ha de escribir en la pantalla el mensaje sin codicar
>Quedamos a las 6h?.
Para simplicar 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 un
problema para ser codicada pues no existe otra letra posterior. Una forma de resolver este
problema es asignar de forma articial la a como letra siguiente a la z. De este modo una
frase como zona 3 se codica en apob 3.
Para simplicar 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 may usculas
Se desea cambiar una frase de forma que todas las letras queden en may usculas. El programa
leera una frase del teclado y escribira como resultado la misma frase pero con las letras cambiadas
de forma que todas esten en may usculas. 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 may usculas se quedan igual. Los caracteres que
no son letras no se ven afectados.
Para simplicar no tenga en cuenta el caso de letras con tilde o dieresis.
9.8 Tratamiento de archivos
9.8.1 Agenda telef onica
Se desea crear una agenda telefonica. Esta agenda consiste en un archivo de texto en el que
aparecen nombres, apellidos y n umeros de telefono.
Esta tarea puede realizarse con la libreta de notas, pero en lugar de eso queremos desarrollar
un 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 n umero de telefono de una
persona. Posteriormente preguntara si desea a nadir otra persona a la agenda o grabar los datos.
Si escoge a nadir el programa ha de volver a preguntar el nombre, apellidos y n umero 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 un
n umero de orden, a continuacion viene un espacio. Los 15 caracteres siguientes se reservan para
el nombre. A continuacion debe aparecer una coma. Los 30 espacios siguientes se dejan para
los dos apellidos. Despues ha de aparecer la palabra Tel y un espacio en blanco. Finalmente se
escribe el telefono y se pasa a la lnea 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 Daz Tel 11 32 45
03 Juan, Borda Ruiz Tel 34 43 78
04 Antonio, Garca Wrkczy Tel 21 32 43
114 TEMA 9. ALGUNOS PROBLEMAS DE INGENIER

IA
9.8.2 Agenda telef onica II
Para consultar la lista de telefonos confeccionada con el programa anterior es posible usar la
libreta de notas. En lugar de eso se quiere crear un programa en MATLAB que lea el archivo y
presente en la pantalla la informacion que contiene.
El programa no recibe dato alguno. Su mision consiste en leer el archivo que contiene la
agenda y mostrar en la pantalla la lista de nombres, apellidos y telefonos exactamente en la
misma forma en la que aparece en el archivo.
9.8.3 Agenda telef onica III
En una agenda es frecuente que haya que a nadir 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 su
contenido en pantalla y pregunte al usuario si desea a nadir o eliminar algo. En caso de que se
desee a nadir el programa preguntara al usuario los datos del mismo modo que en el programa de
9.8.1. Si se desea eliminar una entrada de la agenda (una lnea de datos) el programa preguntara
que n umero de lnea se desea eliminar. El programa concluye escribiendo un nuevo archivo con
los cambios realizados.
Bibliografa
P. Anasagasti, Fundamentos de los computadores. Paraninfo, 1990.
M. R. Arahal, Fundamentos de informatica. Escuela Superior de Ingenieros, Universidad
de 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.

Anda mungkin juga menyukai