Você está na página 1de 227

Materia:

Programacion (67A)
Trabajo de Desarrollo de:

Unidad I, II, III, IV.


Alumno:
E10020484 - Ortega Siles Horacio Rafael
Profesor:
Ing. Margarito Espinoza Lara
Horario:
10:00 11:00 hrs
Especialidad:
Ing. Mecnica
Fecha de entrega:
Lunes 14 de Diciembre del 2015.

Contenido
1.

PROGRAMACIN VISUAL (POO).....................................................................


1.1 Introduccin a la Programacin Orientada a eventos................................
1.2 Programas Secuenciales, Interactivos Y Orientados A Eventos..................
1.3 Eventos......................................................................................................
1.4 Propiedades y Mtodos..............................................................................
1.5 Visual Significa Visual................................................................................
1.6 Formularios Y Controles.............................................................................
1.7 Objetos Y Propiedades...............................................................................
1.8 Nombres De Objetos..................................................................................
1.9 Orden De Disparo De Eventos..................................................................
1.10 Eventos Generales: Carga Y Descarga De Formularios..........................
1.11 KeyPress, KeyUp y KeyDown..................................................................
1.12 DragOver y DragDrop............................................................................
1.13 Agregando Cdigo Al Formulario Y Controlar Eventos............................
1.14 Conclusin.............................................................................................

2.

Diseo de Interfaces visuales.....................................................................


2.1 Introduccin.............................................................................................
2.2 Anlisis centrado en el usuario................................................................
2.3 El escenario.............................................................................................
2.4 Aproximaciones al diseo........................................................................
2.5 Modelo de procesador humano................................................................
2.6 Modelo de desarrollo de tareas................................................................
2.7 Modelo objetoaccin sintcticosemntico (SSOA)................................
2.8 Estructura del modelo conceptual...........................................................
2.9 Anlisis de tareas.....................................................................................
2.10 Conclusiones..........................................................................................

3.

Algoritmos para programacin en tiempo real.........................................113


3.1

Introduccin........................................................................................ 113

3.2

Justificacin........................................................................................ 113

3.3

Motivacin.......................................................................................... 113

3.4

Objetivos............................................................................................ 113

3.5

Caractersticas de los Algoritmos:......................................................116

3.6

Ejemplo de Algoritmo:........................................................................116

3.7

SISTEMAS DE PROCESAMIENTO DE LA INFORMACIN:.......................117


2

3.8

CONCEPTO DE ALGORITMO:...............................................................118

3.9

Tipos de instrucciones:.......................................................................119

3.10 Tipos de lenguajes:............................................................................. 119


3.11 DATOS, TIPOS DE DATOS Y OPERACIONES PRIMITIVAS:......................121
3.12 CONSTANTES Y VARIABLES:................................................................122
3.13 EXPRESIONES: TIPOS Y OPERADORES:...............................................123
3.14 FUNCIONES INTERNAS:.......................................................................127

1. PROGRAMACIN VISUAL (POO)


El trabajo identificar conceptos de programacin orientada al evento
confrontndola con lenguajes visuales y orientados a objetos, asimismo, y
manejar el ambiente de desarrollo de Visual Basic en la construccin de
interfaces grficas para demostraciones de eventos.

Introduccin a la Programacin Orientada a eventos.


Los lenguajes visuales orientados al evento y con manejo de componentes dan
al usuario que no cuenta con mucha experiencia en desarrollo, la posibilidad de
construir sus propias aplicaciones utilizando interfaces grficas sobre la base
de ocurrencia de eventos.
Para soportar este tipo de desarrollo interactan dos tipos de herramientas, una
que permite realizar diseos grficos y, un lenguaje de alto nivel que permite
codificar los eventos. Con dichas herramientas es posible desarrollar cualquier
tipo de aplicaciones basadas en el entorno.
Visual Basic es uno de los lenguajes de programacin que ms entusiasmo
despiertan entre los programadores de computadoras, tanto expertos como
novatos. En el caso de los programadores expertos por la facilidad con la que
desarrollan aplicaciones complejas en poqusimo tiempo (comparado con lo
que cuesta programar en Visual C++, por ejemplo). En el caso de los
programadores novatos por el hecho de ver de lo que son capaces a los pocos
minutos de empezar su aprendizaje. El precio que hay que pagar por utilizar
Visual Basic es una menor velocidad o eficiencia en las aplicaciones.
Visual Basic es un lenguaje de programacin visual, tambin llamado lenguaje
de 4ta. Generacin. Esto quiere decir que un gran nmero de tareas se realizan
sin escribir cdigo, simplemente con operaciones grficas realizadas con el
ratn sobre la pantalla.
Visual Basic es tambin un programa basado en objetos, aunque no orientado
a objetos como Visual C++. La diferencia est en que Visual Basic utiliza
objetos con propiedades y mtodos, pero carece de los mecanismos de
herencia y polimorfismo propios de los verdaderos lenguajes orientados a
objetos como Java y C++. En este trabajo se presentar las caractersticas
generales de Visual Basic, junto con algunos ejemplos sencillos que den idea
de la potencia del lenguaje orientado a eventos, y del modo en que se utiliza.

Programas Secuenciales, Interactivos Y Orientados A


Eventos
Existen distintos tipos de programas. En los primeros tiempos de los
ordenadores los programas eran de tipo secuencial (tambin llamados tipo
4

batch). Un programa secuencial es un programa que se arranca, lee los datos


que necesita, realiza los clculos e imprime o guarda en el disco los resultados.
De ordinario, mientras un programa secuencial est ejecutndose no necesita
ninguna intervencin del usuario. A este tipo de programas se les llama tambin
programas basados u orientados a procedimientos o a algoritmos (procedural
languages). Este tipo de programas siguen utilizndose ampliamente en la
actualidad, pero la difusin de los PCs ha puesto de actualidad otros tipos de
programacin.
Los programas interactivos exigen la intervencin del usuario en tiempo de
ejecucin, bien
para suministrar datos, bien para indicar al programa lo que debe hacer por
medio de mens. Los programas interactivos limitan y orientan la accin del
usuario.
Por su parte los programas orientados a eventos son los programas tpicos de
Windows, tales como Netscape, Word, Excel, PowerPoint y otros. Cuando uno
de estos programas ha arrancado, lo nico que hace es quedarse a la espera
de las acciones del usuario, que en este caso son llamadas eventos.
El usuario dice si quiere abrir y modificar un fichero existente, o bien comenzar
a crear un fichero desde el principio. Estos programas pasan la mayor parte de
su tiempo esperando las acciones del usuario (eventos) y respondiendo a ellas.
Las acciones que el usuario puede realizar en un momento determinado son
variadsimas, y exigen un tipo especial de programacin: la programacin
orientada a eventos. Este tipo de programacin es sensiblemente ms
complicada que la secuencial y la interactiva, pero con los lenguajes visuales
de hoy, se hace sencilla y agradable.
Antes de continuar es necesario definir algunos conceptos de los elementos de
Programacin Orientada a Eventos.

Eventos.
Ya se ha dicho que las acciones del usuario sobre el programa se llaman
eventos. Son eventos tpicos el click sobre un botn, el hacer doble click sobre
el nombre de un fichero para abrirlo, el arrastrar un icono, el pulsar una tecla o
combinacin de teclas, el elegir una opcin de un men, el escribir en una caja
de texto, o simplemente mover el ratn. Ms adelante se vern los distintos
tipos de eventos reconocidos por Windows 95 y por Visual Basic. Cada vez que
se produce un evento sobre un determinado tipo de control, Visual Basic
arranca una determinada funcin o procedimiento que realiza la accin
programada por el usuario para ese evento concreto. Estos procedimientos se
llaman con un nombre que se forma a partir del nombre del objeto y el nombre

del evento, separados por el carcter (_), como por ejemplo txtBox_click, que
es el nombre del procedimiento que se ocupar de responder al evento click en
el objeto txtBox.

Propiedades y Mtodos.
Adems de los eventos, la mayor parte de los objetos, como los formularios y
los controles, son suministrados con propiedades y mtodos. Son conceptos
fundamentales e importantes.

Propiedades.

Una propiedad es una asignacin que describe algo sobre un objeto como un
formulario. Dependiendo de la propiedad, se la puede asignar en tiempo de
diseo usando la ventana Propiedades y/o en tiempo de ejecucin al
programar.
A continuacin se describen dos ejemplos de las propiedades del formulario de
Visual Basic:

MinButton. Esta propiedad puede asignarse como TRUE (verdadero) o


FALSE (falso). Dependiendo de la asignacin, el formulario tendr o no
tendr un botn minimizar.

BackColor. Asignando esta propiedad a un valor expresado como


hexadecimal RGB (Rojo Verde Azul) o como una constante se cambia el
color del fondo del formulario. Se pueden consultar las constantes
usando el examinador de objetos (Seleccione VER, EXAMINADOR DE
OBJETOS) y en la Biblioteca VBRUN (Columna clase) bajo
"ColorConstants" y "SystemColorConstants".

Mtodos.

Los mtodos son funciones que tambin son llamadas desde programa, pero a
diferencia de los procedimientos no son programadas por el usuario, sino que
vienen ya pre-programadas con el lenguaje. Los mtodos realizan tareas
tpicas, previsibles y comunes para todas las aplicaciones. de ah que vengan
con el lenguaje y que se libere al usuario de la tarea de programarlos. Cada
tipo de objeto o de control tiene sus propios mtodos.
En general solo pueden ser ejecutados en tiempos de ejecucin no en tiempo
de diseo. Algunos ejemplos de mtodos de formularios son el mtodo MOVE,
que mueve un formulario en un espacio de dos dimensiones en la pantalla, y el
mtodo ZORDER que sita el formulario delante o detrs de otras ventanas.

Los mtodos son invocados dando nombres al objeto y cuyo mtodo se est
llamando, listando el operador punto (.), y despus listando el nombre del
mtodo. Como cualquier rutina los mtodos pueden incorporar argumentos por
ejemplo:

Form1.Show 1

Este mtodo Show carga y muestra un formulario, dos acciones distintas que
forman ambas partes del proceso de nacimiento o inicio a un formulario (al
ejecutar el formulario de inicio se carga tambin primero el formulario y
despus se muestra). El mtodo Show puede ser invocado como no modal o
modal. Modal significa que no se ejecuta ningn cdigo posterior hasta que el
formulario se oculte o se descargue. Cuando se muestra un formulario modal
no se puede producir ninguna entrada de usuario (de teclado o click del ratn)
excepto para los objetos del formulario modal. Si se activa el estilo 1 (uno) es
modal y 0 (cero) es no modal.

Visual Significa Visual.


Como el nombre lo indica, una gran parte de la programacin con Visual Basic
se realiza visualmente. Esto significa que durante el tiempo de diseo usted
tiene la capacidad de ver la forma en el programa se vera al ejecutarse Esta es
una gran ventaja sobre otros lenguajes de programacin debido a que se tiene
la capacidad de cambiar y experimentas con el diseo hasta que se est
satisfecho con los colores, proporciones e imgenes que incluya en su
programa.
Programas Para El Entorno Windows.

Visual Basic est orientado a la realizacin de programas para Windows,


pudiendo incorporar todos los elementos de este entorno informtico: ventanas,
botones, cajas de dilogo y de texto, botones de opcin y de seleccin, barras
de desplazamiento, grficos, mens, etc. Prcticamente todos los elementos de
interaccin con el usuario de los que dispone Windows 95 pueden ser
programados en Visual Basic de un modo extraordinariamente sencillo. En

ocasiones bastan unas pocas operaciones con el ratn y la introduccin a


travs del teclado de algunas sentencias para disponer de aplicaciones con
todas las caractersticas de Windows 95.
Modo De Diseo Y Modo De Ejecucin.
La aplicacin Visual Basic de Microsoft puede trabajar de dos modos distintos:
en modo de diseo y en modo de ejecucin. En modo de diseo el usuario
construye interactivamente la aplicacin, colocando controles en el formulario,
definiendo sus propiedades, desarrollando funciones para gestionar los
eventos. La aplicacin se prueba en modo de ejecucin. En ese caso el usuario
acta sobre el programa (introduce eventos) y prueba cmo responde el
programa. Hay algunas propiedades de los controles que deben establecerse
en modo de diseo, pero muchas otras pueden cambiarse en tiempo de
ejecucin desde el programa escrito en Visual Basic, en la forma en que ms
adelante se ver. Tambin hay propiedades que slo pueden establecerse en
modo de ejecucin y que no son visibles en modo de diseo.

Formularios Y Controles

Cada uno de los elementos grficos que pueden formar parte de una aplicacin
tpica de Windows 95 es un tipo de control: los botones, las cajas de dilogo y
de texto, las cajas de seleccin desplegables, los botones de opcin y de
seleccin, las barras de desplazamiento horizontales y verticales, los grficos,
los mens, y muchos otros tipos de elementos son controles para Visual Basic.
Cada control debe tener un nombre a travs del cual se puede hacer referencia
a l en el programa. Visual Basic proporciona nombres por defecto que el
usuario puede modificar.

En la terminologa de Visual Basic se llama formulario (form) a una ventana. Un


formulario puede ser considerado como una especie de contenedor para los
controles. Una aplicacin puede tener varios formularios, pero un nico
formulario puede ser suficiente para las aplicaciones ms sencillas. Los
formularios deben tambin tener un nombre, que puede crearse siguiendo las
mismas reglas que para los controles.

Objetos Y Propiedades.
Los formularios y los distintos tipos de controles son entidades genricas de las
que puede haber varios ejemplares concretos en cada programa. En
programacin orientada a objetos (ms bien basada en objetos, habra que
decir) se llama clase a estas entidades genricas, mientras que se llama objeto
a cada ejemplar de una clase determinada. Por ejemplo, en un programa
puede varios botones, cada uno de los cuales es un objeto del tipo de control
command button, que sera la clase.

Cada formulario y cada tipo de control tienen un conjunto de propiedades que


definen su aspecto grfico (tamao, color, posicin en la ventana, tipo y tamao
de letra, etc.) y su forma de responder a las acciones del usuario (si est activo
o no, por ejemplo). Cada propiedad tiene un nombre que viene ya definido por
el lenguaje.

Por lo general, las propiedades de un objeto son datos que tienen valores
lgicos (true, false) o numricos concretos, propios de ese objeto y distintos de
las de otros objetos de su clase. As pues, cada clase, tipo de objeto o control
tiene su conjunto de propiedades, y cada objeto o control concreto tiene unos
valores determinados para las propiedades de su clase.

Casi todas las propiedades de los objetos pueden establecerse en tiempo de


diseo y tambin -casi siempre- en tiempo de ejecucin. En este segundo caso
se accede a sus valores por medio de las sentencias del programa, en forma
anloga a como se accede a cualquier variable en un lenguaje de
programacin. Para ciertas propiedades sta es la nica forma de acceder a
ellas. Por supuesto Visual Basic permite crear distintos tipos de variables, como
ms adelante se ver.

Se puede acceder a una propiedad de un objeto por medio del nombre del
objeto a que pertenece, seguido de un punto y el nombre de la propiedad,
como por ejemplo optColor.objName.

Nombres De Objetos
En principio cada objeto de Visual Basic debe tener un nombre, por medio del
cual se hace referencia a dicho objeto. El nombre puede ser el que el usuario
desee, e incluso Visual Basic proporciona nombres por defecto para los
diversos controles. Estos nombres por defecto hacen referencia al tipo de
control y van seguidos de un nmero que se incrementa a medida que se van
introduciendo ms controles de ese tipo en el formulario (por ejemplo VScroll1,
para una barra de desplazamiento -ScrollBar- vertical, HScroll1, para una barra
horizontal, etc.).
Los nombres por defecto no son adecuados porque hacen referencia al tipo de
control, pero no al uso que de dicho control est haciendo el programador. Por
ejemplo, si se utiliza una barra de desplazamiento para introducir una
temperatura, conviene que su nombre haga referencia a la palabra
temperatura, y as cuando haya que utilizar ese nombre se sabr exactamente
a qu control corresponde. Un nombre adecuado sera por ejemplo hsbTemp,
donde las tres primeras letras indican que se trata de una horizontal scroll bar,
y las restantes (empezando por una mayscula) que servir para definir una
temperatura.
Existe una convencin ampliamente aceptada que es la siguiente: se utilizan
siempre tres letras minsculas que indican el tipo de control, seguidas por otras
letras (la primera mayscula, a modo de separacin) libremente escogidas por
el usuario, que tienen que hacer referencia al uso que se va a dar a ese control.
La Tabla 1.1 muestra las abreviaturas de los controles ms usuales, junto con
la nomenclatura inglesa de la que derivan.

Abrebiatura Control

Abrebiatura Control

chk

check box

cbo

combo y drop-list
box

Cmd

command
button

dir

dir list box

drv

drive list box

fil

file list box

frm

form

fra

Frame

hsb

horizontal scroll img

Image

10

bar
lbl

label

lin

Line

lst

list

mnu

Menu

opt

option button

pic

Picture

shp

shape

txt

text edit box

tmr

timer

vsb

vertical scroll bar

Tabla 1.1. Abreviaturas para los controles ms usuales

Orden De Disparo De Eventos.


Para controlar con xito la aparicin y el comportamiento de los formularios (y
tambin de los controles) en tiempos de ejecucin, debe comprenderse en que
orden se disparan los eventos. Las consideraciones del orden de disparo de los
eventos deciden generalmente por el usuario donde debe ser colocada una
parte determinada de cdigo de respuesta de un evento. Los eventos de
formularios pueden ser divididos en los grupos siguientes:

Inicio.

Respuesta a una accin (de usuario).

Vinculacin.

Cierre.

Es importante tambin comprender que un evento inicia automticamente con


frecuencia a otro evento, produciendo un efecto en cascada. Por ejemplo un
evento KeyPress no puede ser disparada sin disparar tambin lo eventos
KeyUp y KeyDown. El secreto para trabajar con esta clase de situaciones es
una comprensin clara de que es lo que dispara cada evento en la secuencia;
el peligro de la codificacin es iniciar un cadena sin fin de llamada a eventos
circulares recursivos.

11

Eventos Generales: Carga Y Descarga De Formularios


Cuando se arranca una aplicacin, o ms en concreto cuando se visualiza por
primera vez un formulario se producen varios eventos consecutivos: Initialize,
Load, Activate y Paint. Cada uno de estos eventos se puede aprovechar para
realizar ciertas operaciones por medio de la funcin correspondiente.

Para inicializar las variables definidas a nivel de mdulo se suele utilizar el


evento Initialize, que tiene lugar antes que el Load. El evento Load se activa al
cargar un formulario. Con el formulario principal esto sucede al arrancar la
ejecucin de un programa; con el resto de los formularios al mandarlos cargar
desde cualquier procedimiento o al hacer referencia a alguna propiedad o
control de un formulario que no est cargado. Al descargar un formulario se
produce el evento Unload. Si se detiene el programa desde el botn Stop de
Visual Basic (o del men correspondiente) o con un End, no se pasa por el
evento Unload. Para pasar por el evento Unload es necesario cerrar la ventana
con el botn de cerrar o llamarlo explcitamente. El evento QueryUnload se
produce antes del evento Unload y permite por ejemplo enviar un mensaje de
confirmacin.

QueryUnload. Se dispara por un evento Unload de formulario, antes de que se


ejecute ningn cdigo del evento Unload. QueryUnload da la oportunidad de
detener la descarga del formulario de la memoria cuando sea apropiado, por
ejemplo, cuando el usuario haya cambiado valores del formulario sin guardar
los cambios. El formulario no ser descargado si la variable Cancel est
asignada como True en el procedimiento del evento QueryUnload. Es una
prctica comn asignar esta variable como True a continuacin de una consulta
del usuario a lo largo de las lneas de "Guardar los cambios? S, No,
Cancelar" cuando el usuario responde cancelando. La funcin MsgBox puede
usarse fcilmente para dar al usuario una oportunidad de cancelar una
descarga.
Unload. Se dispara cuando un usuario cierra el formulario usando el comando
Cerrar en el men Control o cuando se ejecuta en cdigo un mtodo Unload.
Unload dispara inmediatamente un evento QueryUnload como acabamos de
describir. Se pude usar el evento Unload (as como QueryUnload) para realizar
tareas de cierre como guardar y convalidar datos. Terminate. Se produce
cuando se eliminan de la memoria todas las referencia a una instancia de un
formulario.
12

El evento Load de un formulario se suele utilizar para ejecutar una funcin que
d valor a sus propiedades y a las de los controles que dependen de dicho
formulario. No se puede utilizar para dibujar o imprimir sobre el formulario, pues
en el momento en que se produce este evento el formulario todava no est
disponible para dichas operaciones. Por ejemplo, si en el formulario debe
aparecer la salida del mtodo Print o de los mtodos grficos Pset, Line y
Circle puede utilizarse el evento Paint u otro posterior (por ejemplo, el evento
GotFocus del primer control) pero no puede utilizarse el evento Load. Se puede
ocultar un formulario sin descargarlo con el mtodo Hide o haciendo la
propiedad Visible = False. Esto hace que el formulario desaparezca de la
ventana, aunque sus variables y propiedades sigan estando accesibles y
conservando sus valores. Para hacer visible un formulario oculto pero ya
cargado se utiliza el mtodo Show, que equivale a hacer la propiedad Visible =
True, y que genera los eventos Activate y Paint. Si el formulario no haba sido
cargado previamente, el mtodo Show genera los cuatro eventos mencionados.

Cuando un formulario pasa a ser la ventana activa se produce el evento


Activate y al dejar de serlo el evento Deactivate. En el caso de que el formulario
que va a ser activo no estuviera cargado ya, primero sucederan los eventos
Initialize, Load y luego los eventos Activate y Paint. Se han de crear dos
formularios (frmPrincipal y frmSecundario). El primero de ellos contendr dos
botones (cmdVerSec y cmdSalir) y el segundo tres (cmdHide, cmdUnload y
cmdTerminate). El formulario principal ser el primero que aparece, y slo se
ver el segundo si se clica en el botn Cargar Formulario. Cuando as se haga,
a medida que los eventos antes mencionados se vayan sucediendo, irn
apareciendo en pantalla unas cajas de mensajes que tendrn como texto el
nombre
del evento que se acaba de producir. Segn con cual de los tres botones se
haga desaparecer el segundo formulario, al volverlo a ver se producirn unos
eventos u otros, segn se puede ver por los mensajes que van apareciendo
con cada evento.
' cdigo del form. principal
Private Sub cmdCargar_Click()
frmSecundario.Show
End Sub

13

' cdigo del form. secundario


Private Sub cmdHide_Click()
Hide
End Sub
Private Sub cmdUnload_Click()
Unload Me
End Sub

Private Sub cmdTerminate_Click()


Hide
Set Form2 = Nothing
End Sub
Private Sub Form_Activate()
MsgBox ("Evento Activate")
End Sub
Private Sub Form_Deactivate()
MsgBox ("Evento Deactivate")
End Sub
Private Sub Form_Initialize()
MsgBox ("Evento Initialize")
End Sub
Private Sub Form_Load()
MsgBox ("Evento Load")

14

End Sub
Private Sub Form_Paint()
MsgBox ("Evento Paint")
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
MsgBox ("Evento QueryUnload")
End Sub
Private Sub Form_Terminate()
MsgBox ("Evento Terminate")
End Sub
Private Sub Form_Unload(Cancel As Integer)
MsgBox ("Evento Unload")
End Sub

Es muy interesante realizar este ejemplo y seguir la secuencia de eventos que


se producen al hacer aparecer y desaparecer los formularios.
Paint.

El evento Paint sucede cuando hay que redibujar un formulario o PictureBox.


Esto sucede cuando esos objetos se hacen visibles despus de haber estado
tapados por otros, tras haber sido movidos otras haber sido modificados de
tamao.
El foco (focus)
En todas las aplicaciones de Windows, en cualquiera de sus versiones,
siempre hay un nico control, formulario o ventana que puede recibir clicks del
ratn o entradas desde teclado. En cada momento ese control, ventana o
formulario es el que dispone del "foco" (focus). El objeto que posee el foco est

15

caracterizado por estar resaltado con letra negrita, con un contorno ms vivo o
teniendo parpadeando el cursor en l. Este foco puede ser trasladado de un
objeto a otro por cdigo o por interacciones del usuario, como por ejemplo
clicando con el ratn en distintos puntos de la pantalla o pulsando la tecla Tab.
Cada vez que un objeto pierde el foco se produce su evento LostFocus y,
posteriormente, el evento GotFocus del objeto que ha recibido el foco.
Dos propiedades de muchos controles relacionadas con el foco son TabIndex y
TabStop.

TabStop determina si el foco se va o no a posar en el objeto al pulsar la tecla


Tab (si TabStop est a False no se puede obtener el foco mediante el
tabulador) y TabIndex determina el orden en el que esto va a suceder. As al
cargar un formulario, el foco estar en aquel objeto cuyo TabIndex sea 0.
Al pulsar la tecla Tab el foco ir al objeto que tenga TabIndex = 1 y as
sucesivamente. Para retroceder en esta lista se pulsa Maysculas+Tab. La
propiedad TabIndex se puede determinar en tiempo de diseo por medio de la
caja de propiedades, del modo habitual. Cuando a un control se le asigna un
determinado valor de TabIndex, Visual Basic ajusta automticamente los
valores de los dems controles (si tiene que desplazarlos hacia arriba o hacia
abajo, lo hace de modo que siempre tengan nmeros consecutivos). Para que
un formulario reciba el foco es necesario que no haya en l ningn control que
sea capaz de recibirlo. Un grupo de botones de opcin tiene un nico TabIndex,
es decir, se comporta como un nico control. Para elegir una u otra de las
opciones se pueden utilizar las .y
flechas

del teclado

KeyPress, KeyUp y KeyDown.


El evento KeyPress sucede cuando el usuario pulsa y suelta determinada tecla.
En este evento el nico argumento KeyAscii es necesario para conocer cul es
el cdigo ASCII de la tecla pulsada. El evento KeyDown se produce cuando el
usuario pulsa determinada tecla y el evento KeyUp al soltar una tecla.
Los eventos KeyUp y KeyDown tienen un segundo argumento llamado Shift
que permiten determinar si esa tecla se ha pulsado estando pulsadas a la vez
cualquier combinacin de las teclas Shift, Alt y Ctrl. En un apartado prximo se
explica cmo se identifican las teclas pulsadas a partir del argumento Shift.
Eventos Relacionados Con El Ratn. Click y DblClick.

16

El evento Click se activa cuando el usuario pulsa y suelta rpidamente uno de


los botones del ratn. Tambin puede activarse desde cdigo (sin tocar el
ratn) variando la propiedad Value de uno de los controles. En el caso de un
formulario este evento se activa cuando el usuario clica sobre una zona del
formulario en la que no haya ningn control o sobre un control que en ese
momento est inhabilitado (propiedad Enabled = False). En el caso de un
control, el evento se activa cuando el usuario realiza una de las siguientes
operaciones:

Clicar sobre un control con el botn derecho o izquierdo del ratn. En el


caso de un botn de comando, de un botn de seleccin o de un botn
de opcin, el evento sucede solamente al darle un click con el botn
izquierdo.

Seleccionar un registro de alguno de los varios tipos listas desplegables


que dispone Visual Basic.

Pulsar la barra espaciadora cuando el foco est en un botn de


comando, en un botn de seleccin o en un botn de opcin.

Pulsar la tecla Return cuando en un formulario hay un botn que tiene su


propiedad Default = True.

Pulsar la tecla Esc cuando en un formulario hay un botn que tiene su


propiedad Cancel = True.

Pulsar una combinacin de teclas aceleradoras (Alt + otra tecla, como


por ejemplo cuando de despliega el men File de Word con Alt+F)
definidas para activar un determinado control de un formulario.

Tambin se puede activar el evento Click desde cdigo realizando una de las
siguientes operaciones:

Hacer que la propiedad Value de un botn de comando valga True.

Hacer que la propiedad Value de un botn de opcin valga True

Modificar la propiedad Value de un botn de seleccin.

El evento DblClick sucede al clicar dos veces seguidas sobre un control o


formulario con el botn izquierdo del ratn.
MouseDown, MouseUp y MouseMove.

17

El evento MouseDown sucede cuando el usuario pulsa cualquiera de los


botones del ratn, mientras que el evento MouseUp sucede al soltar un botn
que haba sido pulsado. El evento MouseMove sucede al mover el ratn sobre
un control o formulario.

Los eventos MouseUp y MouseDown tienen algunos argumentos que merecen


ser comentados. El argumento Button indica cul de los botones del ratn ha
sido pulsado o soltado, y el argumento Shift indica si adems alguna de las
teclas alt, shift o ctrl est tambin pulsada. La lista con todos los posibles
valores de estos argumentos se muestra abajo.

Cte simblica Valor Accin Cte simblica Valor Accin


vbLeftButton 1 Botn izdo pulsado o soltado vbShiftMask 1 Tecla SHIFT
pulsada
vbRightButton 2 Botn dcho pulsado o soltado vbCtrlMask 2 Tecla CTRL
pulsada
vbMiddleButton 4 Botn central pulsado o soltado vbAltMask 4 Tecla ALT
pulsada
Valores de los argumentos de los eventos MouseUp y MouseDown
Con estos valores se aplica la aritmtica booleana, lo cual quiere decir que si
se pulsan simultneamente los botones izquierdo y derecho del ratn el
argumento Button valdr 3 (1+2) y si se pulsan las tres teclas shift, ctrl y alt
simultneamente el argumento Shift valdr 7 (1+2+4).

DragOver y DragDrop.
El evento DragOver sucede mientras se est arrastrando un objeto sobre un
control. Suele utilizarse para variar la forma del cursor que se mueve con el
ratn dependiendo de si el objeto sobre el que se encuentra el cursor en ese
momento es vlido para soltar o no. El evento DragDrop sucede al concluir una
operacin de arrastrar y soltar. El evento DragOver requiere de los argumentos
que se muestran a continuacin:

18

Private Sub Text1_DragOver(Source As Control, _


X As Single, Y As Single, State As Integer)
...
End Sub
Los argumentos de este evento son Source que contiene el objeto que est
siendo arrastrado, X e Y que indican la posicin del objeto arrastrado dentro del
sistema de coordenadas del objeto sobre el que se est arrastrando y State
(que es propio del DragOver, pero no aparece en el DragDrop) que vale 0, 1
2 segn se est entrando, saliendo o permaneciendo dentro del mismo objeto,
respectivamente. Es importante sealar que el evento DragOver es propio del
objeto sobre el que se arrastra, no del objeto que es arrastrado.

Agregando Cdigo Al Formulario Y Controlar Eventos.


Se han mostrados ya las formas generales en las que se agrega cdigo
ejecutable a los procesos que controlan eventos. Es importante, sin embargo,
revisar explcitamente cmo acceder al marco propio de los eventos en el cual
se sita ese cdigo. Esto le permitir escoger la forma ms rpida y fcil de
acceder al marco de control de los eventos que necesita para agregar su
cdigo. Una vez que aceda al procedimiento adecuado para el manejo de los
eventos, puede agregar cdigo con slo teclearlo en la ventana Cdigo, como
hemos mostrado en los ejemplos anteriormente. Las prcticas herramientas del
lenguaje le ayudan a encontrar la sintaxis real en cualquier situacin.
Es importante tener en cuenta, como hemos sealado antes, que el cdigo
realcionado con un procedimiento de control de eventos consistir con
frecuencia simplemente en llamadas a procedimientos. En este caso los
procedimientos llamados contendrn el cdigo real ejecutable. Una razn para
disear un programa de esta forma es que el mismo procedimiento puede ser
llamado desde diferentes controladores de eventos, simplificando as,
abreviando y aclarando la arquitectura del programa. Una tcnica comn es
pasar a un procedimiento llamado desde un controlador de eventos un
parmetro que indique qu controlador lo ha llamado. La ejecucin en el
procedimiento le ha llamado (determinado por el parmetro).
A continuacin se indican las tres formas de "alcanzar" un marco de
procedimiento para el manejo de eventos:

19

Asegrese de que est abierta la ventana Proyecto ( si es necesario,


seleccione el Explorador de proyectos en el men Ver). Seleccione el
formulario al que desee agregar cdigo de eventos. (Si est agregando
un evento a un control que ha sido situado en un formulario, seleccione
al formulario que se encuentre en el "padre" del control.) Haga click en el
botn Ver cdigo. (Tambin puede hacer click con el botn derecho en el
icono del formulario y seleccionar Ver Cdigo en el men de contexto.)
En el cuadro de lista Objeto, seleccione el formulario o bien otro objeto
(por ejemplo, un control) al cual desee agregar cdigo de evento. A
continuacin, desde el cuadro de lista Procedimiento, seleccione el
controlador del procedimiento al que va a agregar cdigo. Observe que
los procedimientos controladores de cdigo con cdigo adjunto estn en
negrita en el cuadro de lista Procedimiento, mientras que los que no
tienen cdigo adjunto no lo estn.

Conclusin.
La Programacin Orientada a Eventos facilita el proceso de programacin
visual por su practicidad al generar rpidamente algunas aplicaciones basadas
en objetos visuales. Ayuda al programador novato en el rpido aprendizaje de
desarrollo de nuevos programas con alta calidad en muy poco tiempo.

2. Diseo de Interfaces visuales

Introduccin
Los sistemas interactivos se caracterizan por la importancia del dilogo con el
usuario. La interfaz de usuario es por tanto, una parte fundamental en el
proceso de desarrollo de cualquier aplicacin y por tanto se tiene que tener en
cuenta su diseo desde el principio. La interfaz es la parte (hardware y
software) del sistema informtico que facilita al usuario el acceso a los recursos
del ordenador. En este sentido, THIMBLEBY [THI90] sugiere que la interfaz
determinar en gran medida la percepcin e impresin que el usuario poseer
20

de la aplicacin. El usuario no est interesado en la estructura interna de la


aplicacin, sino en cmo usarla. No se puede realizar la especificacin, disear
las funciones y estructuras de datos y es-cribir el cdigo y una vez casi
terminado el proceso de desarrollo de la aplicacin plantearse el diseo de la
interfaz de usuario. Siguiendo esta forma de trabajo lo mas seguro es que se
obtengan diseos de interfaces muy dependientes de los diseos que se han
realizado de las datos y de las funciones, sin tener en cuenta que esos datos
han de ser obtenidos y representados por y para el usuario.
Una vez tenemos hecha la especificacin, propuesto un diseo y el cdigo est
im-plantado, es muy difcil cambiar las caractersticas de la interaccin y
presentacin de la informacin, excepto pequeas cosas. Por tanto, deberemos
empezar con un idea clara de cmo queremos la interfaz y como sern las
interacciones con el usua-rio para despus, desarrollar las especificaciones
funcionales que sirvan de gua al diseo posterior.
En el desarrollo de aplicaciones interactivas se podrn aplicar las tcnicas de la
in-geniera de software, pero teniendo en cuenta que hemos de modificar
algunos as-pectos de los mtodos de diseo clsico para adaptarlos a las
peculiaridades de es-tos sistemas. Hay que tener en cuenta que un aspecto
fundamental es el anlisis y diseo de la parte interactiva, y que para realizarlo,
necesitaremos aplicar de tcni-cas de anlisis y diseo especficas.
El desarrollo de un sistema interactivo deber tener en cuenta a los
participantes que van a intervenir en el mismo: el usuario, que posee la
capacidad de eleccin y actuacin, la computadora, que ofrece un programa y
mecanismos para su acceso, y el diseador, el encargado de anticipar las
posibles acciones del usuario y codificarlas en el programa. Todo ello se
articula a travs de la interfaz de Usuario de la aplicacin.
La tendencia hacia interfaces de usuarios fciles de usar provoca que su
diseo sea cada vez ms complejo. La interfaz de usuario, como medio de
comunicacin entre el humano y la computadora se caracteriza por su
apariencia (presentacin) y su capacidad de gestin del dilogo. Podemos
encontrar multitud de productos que permiten la descripcin y generacin
automtica de la apariencia externa de una aplicacin mediante la utilizacin de
paletas de recursos (botones, mens, etc.) herramientas visuales, toolkits, etc.
Sin embargo, estas herramientas no suministran suficiente ayuda en el anlisis
del comportamiento dinmico de la interfaz, en su descripcin y sobre todo, no
aseguran su correccin. A continuacin introduciremos una aproximacin de
ingeniera para el diseo de sistemas interacti-vos.

Anlisis centrado en el usuario


El diseo de un sistema interactivo debe satisfacer las demandas de los
usuarios que lo van a utilizar. El ordenador es una herramienta para realizar un
determinado trabajo o actividad, y para que sea una buena herramienta, deber
21

ser adecuada, cmoda y eficiente para realizar estos cometidos. Para lograr un
buen diseo, deberemos partir de un anlisis profundo del contexto donde se
desarrolla el trabajo [HAC98]. Para ello deberemos analizar las caractersticas
del usuario, las actividades que realiza y el escenario donde se desempea su
actividad. Todos estos factores permitirn conocer los requisitos que se deben
satisfacer en el diseo del sistema.
Los usuarios
En primer lugar, a la hora de disear el sistema, deberemos tener en cuenta las
peculiaridades de los usuarios potenciales del mismo. Esta necesidad de
incorporar el factor humano en el diseo viene dada por el reconocimiento del
mal diseo que se ha hecho en gran cantidad de aplicaciones y el deseo de
crear productos que ayuden de forma efectiva al usuario. Adems, la
caractersticas de los usuarios pueden afectar al modo de trabajo y condicionar
el proceso de comunicacin con el sistema. Por ejemplo, los factores humanos
pueden condicionar el tiempo de aprendizaje, el rendimiento (tiempo para
realizar una tarea), la frecuencia de errores cometidos, grado de retencin
(memoria de uso) o de satisfaccin del usuario. A la hora de di-sear la
aplicacin, se puede realizar por encargo directo (por lo que existe un clien-te),
o bien, dirigirlo a un colectivo ms o menos amplio de potenciales usuarios (nios, profesionales, estudiantes, etc.).
El anlisis del usuario implica conocer aspectos tales como:

Habilidades fsicas y sensoriales. Estas habilidades determinarn en


gran medida la adaptacin del entorno de trabajo a las caractersticas del
usuario (tamao de los botones, tipo de dispositivos, etc.). Podemos encontrar
ca-sos en los que el diseo debe ser preferentemente ergonmico por las limitaciones en movilidad de los usuarios, como por ejemplo, la discapacidad por
parlisis cerebral, o tener en cuenta pequeas alteraciones como por ejemplo
el daltonismo (ver captulo Accesibilidad).

Habilidades cognitivas. Estas diferencias en la capacidad de


razonamiento y conocimiento estn motivadas por el grado de experiencia que
posee el usuario tanto de su propio trabajo como del uso del ordenador como
herra-mienta. Podemos tener una gran variedad de usuarios desde los
expertos a los noveles, usuarios cotidianos u ocasionales, motivados o no, etc.

Diferencias de personalidad. Las diferencias en la personalidad puede


provocar alteraciones en la propia comunicacin. As, personas tmidas tendrn un comportamiento ms cauto y prudente ante el ordenador que una
persona extrovertida y nerviosa.

Diferenciacin cultural. Tambin podemos encontrar diferencias motivadas por el entorno sociocultural donde se encuentra el usuario, que puede

22

afectar al lenguaje utilizado, expresiones y terminologa, modo de trabajar, etc.


(ver captulo Internacionalizacin)
Este conjunto de caractersticas relevantes de los usuarios sern de gran
ayuda en las etapas posteriores de diseo. Para ello, podemos partir de una
tabla en la cual se recoja los distintos tipos de usuarios (secretaria, director,
tcnico..) y sus caracte-rsticas relevantes (grado de utilizacin del sistema,
nivel de experiencia, etc.).
Las tareas
Otro factor importante a tener en cuenta en el diseo son las tareas que
realizan los usuarios. Nuestra forma de actuar est dirigida por objetivos (goals)
como se recoge en el modelo de NORMAN (ver captulo El factor humano).
Para lograr ese objetivo (por ejemplo comer), debemos llevar a cabo una serie
de actividades (encender, coger, poner...) sobre unos objetos (microondas,
pizza, temporizador...) encaminadas a lograr ese objetivo. A la hora de realizar
estas tareas mediante un sistema interactivo deberemos tener en cuenta que
sigan siendo familiares al usuario, es decir, la forma de llevarlas a cabo, su
representacin as como la se-cuencia de acciones debe ser similar a la que
realiza en el entorno real. Si esto no se satisface, el usuario requerir un
esfuerzo adicional para comprender las tareas que realiza cotidianamente.

El escenario
Las personas no realizan su trabajo de forma aislada, sino que se ven
condicionadas por el escenario donde se desempea esta labor. Los aspectos
ms relevante a te-ner en cuenta son:

Entorno fsico. El entorno es fundamental para poder trabajar.


Deberemos prestar atencin a las caractersticas ergonmicas del mismo (tipo
de ubica-cin, iluminacin, espacio, etc.) as como las peculiaridades del
entorno (rui-do, polucin, calor, etc.). Puede haber casos de especial
importancia como sitios de alto riesgo (central nuclear) o condiciones extremas
(submarino, aeronave..)

Entorno social. El entorno social implica el trabajo dentro de un grupo


don-de existen unas normas de comportamiento. Podemos encontrar
situaciones en las cuales pueda haber cooperacin para el trabajo (ayuda),
compartir datos o recursos, dependencias jerrquicas, etc.
Algunas de estas caractersticas pueden condicionar el diseo, ya que un
trabajo en equipo fuertemente acoplado (con alto nivel de cooperacin y
comparticin de datos) requerir de una aplicacin groupware para trabajo en
grupo (ver captulo Trabajo cooperativo con ordenador).
2

Ciclo de vida de la interfaz de usuario

23

La construccin de un sistema interactivo implica un proceso cclico de diseo,


desa-rrollo y evaluacin. La realimentacin que proporciona la evaluacin sobre
el diseo es fundamental para refinar y pulir aspectos que son muy
dependientes de los usua-rios finales (el factor humano) una vez que el sistema
se ha puesto en marcha. En la siguiente figura se muestran algunas de las
peculiaridades de ciclo de vida como son la importancia del usuario (tanto en la
fase de anlisis como de evaluacin) y la naturaleza cclica del diseo (con
continua realimentacin a partir de la evaluacin).
Las primeras interfaces las realizaban los propios programadores para los
progra-mas que ellos mismos utilizaban. Sin embargo, los diseos deben ir
dirigidos a usuarios con diferentes habilidades, y no necesariamente tienen que
ser expertos en informtica. Los ordenadores son herramientas con las cuales
las personas pueden realizar sus tareas, por lo que deberemos tener esto en
cuenta a la hora del diseo, ya que si el usuario percibe que algo es difcil de
usar, cometer errores, o bien no realizar la tarea adecuadamente. Para que
esto no suceda, es muy importante basar el diseo del sistema sobre aquellos
conceptos que maneja el usuario y fundamentarse sobre criterios consistentes
y fundamentos tericos y no en meros juicios intuitivos.
Un buen diseo depende del conocimiento (fundamentos) y experiencia de los
dise-adores. Esta informacin se puede organizar y estructurar para que
pueda servir a otros diseadores. Podemos disponer de varias fuentes de
informacin con diferente grado de rigor y normativa, entre las que podemos
destacar:

Principios. Son objetivos generales que pueden ser tiles para organizar
el diseo. Aconsejan al diseador cmo debe proceder. Sin embargo, no se
especifican mtodos para obtener esos objetivos, y est limitado al uso prctico
(por ejemplo: conocer al usuario, minimizar el esfuerzo para rea-lizar una tarea,
mantener la consistencia, etc.).

Guas (guidelines). Conjunto de recomendaciones que deben ser


aplicados a la interfaz y que son cuantificables. Deben ser generales para que
puedan ser aplicadas en diferentes contextos. Pueden deducirse de teoras
cogniti-vas, ergonoma, sociologa, de la experiencia etc. (por ejemplo, no
disponer mas de siete tems en un men).

Estndares. Son principios y guas que se deben seguir por imposicin


in-dustrial. Existen estndares de facto (Macintosh Toolbook, MS Windows, IBM
SAA/CUA). Estos estndares se disean para proteger la uniformidad y la lnea
de productos desarrollados. Con ello, mejoran la eficiencia del usua-rio
(beneficio de una interfaz comn para muchos programas). Existen otros
estndares en otros mbitos: ANSI, ISO, DIN, MILSTD, NASASTD.

24

Este conocimiento puede ayudar en el diseo, aunque sin embargo no es


suficiente, por lo que deberemos partir de los requisitos del sistema,
conocimiento del usuario y aplicar una metodologa para un desarrollo efectivo
del sistema. Deberemos aplicar tcnicas de anlisis y especificacin para la
descripcin de aquellos aspectos que sean relevantes dentro del sistema.
Un diseo centrado en el usuario requiere de una continua evaluacin del
producto a desarrollar. Por este motivo, cobran gran importancia los siguientes
aspectos:

Mtodos formales. Permiten una especificacin precisa y sin


ambigedad del diseo a generar. Permite una verificacin formal de
propiedades y en algunos casos se puede generar la implementacin
automticamente.

Herramientas de desarrollo de interfaces modelados (MBUID). Estas


herramientas obtienen el interfaz a partir del anlisis de los requisitos de
usuario. Su labor fundamental es la generacin de aplicaciones a partir del
diseo aunque tambin se pueden considerar como herramientas de prototipado. Actualmente los lenguajes de programacin visuales tambin disponen
de libreras (ej. AWT en Java) que permiten implementar las tcnicas de interaccin y presentacin de la informacin. (ver captulo Herramientas).

Prototipado. Los prototipos son documentos, diseos o sistemas que


simu-lan o tienen implementadas partes del sistema final. El prototipo es una
he-rramienta muy til para hacer participar al usuario en el desarrollo y poder
evaluar el producto ya en las primeras fases del diseo (modelo del ciclo de
vida basado en prototipos).
No obstante, el desarrollo de sistemas interactivos sigue siendo una labor difcil
y con un alto coste en tiempo y esfuerzo. Un motivo de esta complejidad es por
la necesidad de adaptar el diseo a una gran variedad de usuarios, a diferentes
come-tidos y sobre diferentes contextos.

Aproximaciones al diseo
El desarrollo de Sistemas Interactivos es una tarea compleja para la cual
necesita-remos de herramientas y metodologas que nos permitan realizar un
diseo satisfac-torio centrado en el usuario. Existen dos aproximaciones para
realizar el diseo:

Aproximacin emprica. El diseo se basa en la propia experiencia del


di-seador o bien en la de otros diseadores que se recoge mediante compendios de recomendaciones (guas, reglas de oro, estndares, etc.) ms o menos
relevantes para la construccin de un interfaz con xito. Estos resul-tados
generalmente estn avalados por unos estudios de evaluacin por el usuario
(tests de usabilidad).

25


Aproximacin metodolgica. Se basa en unos fundamentos tericos y en
la aplicacin de una serie de pasos para la realizacin del diseo.
La aproximacin metodolgica posee bastantes aportaciones de otras
disciplinas, sobre todo de las teoras cognitivas ya que aportan mecanismos
para la descripcin del conocimiento que el usuario posee del sistema. De
hecho, la aproximacin emprica se basa en las aportaciones ms relevantes
(enunciadas como reglas de diseo) de las aportaciones tericas (ver captulo
Estndares y guas). En este captulo nos centraremos en una aproximacin
metodolgica para el desarrollo de sistemas interactivos, analizando las
peculiaridades de este tipo de sistemas y los mecanismos existentes para su
anlisis y diseo.
En el mbito del los sistemas interactivos se ha utilizado el trmino diseo con
mu-chas connotaciones. De hecho, el concepto de diseo abarca desde
aspectos de anlisis (de usuarios, tareas, del entorno, propiedades), aspectos
de modelado (ar-quitectura) hasta cuestiones relativas propiamente de diseo
(apariencia, codifica-cin, etc.).
Modelo mental y modelo conceptual
Un aspecto muy importante en el diseo de sistemas interactivos es el factor
hu-mano (ver captulo El factor humano), por lo que deberemos partir de
modelos cognitivos que nos permita estudiar y representar cmo es asimilada y
procesada la informacin por una persona. La obtencin del conocimiento
acerca de una aplicacin basada en ordenadores se realiza mediante un
aprendizaje. Para ello, se introducen dos trminos para identificar el grado de
asimilacin y comprensin del usuario del entorno:

Modelo conceptual: Es una abstraccin externa que describe, mediante


diagramas y notaciones ms o menos formales, el conocimiento que debe
poseer una persona acerca de un sistema. Este modelo es realizado por el
analista y debe ser completo, consistente y exacto (sin ambigedad).

Modelo mental (o modelo de usuario): Es la abstraccin del


conocimiento interno que posee el usuario. Este modelo nos da una medida
real de lo que el usuario piensa/conoce acerca del sistema informtico. Este
modelo gua las intenciones del usuario para realizar una tarea en el sistema.
Adems, este modelo mental se puede ir modificando conforme se interacciona
con el sistema.
El modelo conceptual est basado en un conjunto de elementos y de relaciones
que se pueden observar en un determinado sistema, representando el
conocimiento que cualquier usuario debera adquirir sobre el sistema. Este
modelo se deber definir mediante una notacin formal y comprensible que
evite la ambigedad del lenguaje.

26

El modelo conceptual debe suministrar informacin al usuario acerca de qu


hace el sistema y los mecanismos para llevarlo a cabo. Su importancia radica
en que debe favorecer el aprendizaje del sistema, es una gua para predecir el
comportamiento del sistema, y adems, el usuario utilizar este modelo para
establecer estrategias encaminada a resolver sus problemas. Los principios en
los que debe estar basado el modelo conceptual sern por tanto que sea
asimilable (mediante el uso de concep-tos familiares), consistente (coherente y
bien formulado) y simple (uso de descripciones comprensibles por un usuario
medio).

Figura 4 Modelo conceptual (con notacin formal)


Para poder realizar el modelo conceptual de un sistema, deberemos conocer y
apli-car modelos tericos cognitivos que estn fundamentados en el
mecanismo de razonamiento humano. Los ms relevantes son:

Modelo de procesador humano


CARD y MORAN [CAR83] presentan este modelo en el que se expone la forma
de percibir, procesar y manipular la informacin. Este modelo identifica
diferentes procesadores y sistemas de memoria, donde cada uno de ellos tiene
asignado pa-rmetros cuantitativos importantes como ciclos de tiempo o
capacidades. El modelo del procesador humano est compuesto de tres
sistemas: el sistema perceptual, que maneja los estmulos sensoriales
externos, el sistema motor, que controla las acciones y por ltimo, el sistema
cognitivo, que suministra el conocimiento suficiente para conectar ambos.

Modelo de desarrollo de tareas


Norman, en 1986, propone un modelo de desarrollo de tareas que identifica
siete etapas de ejecucin y evaluacin de acciones de usuario. El modelo
representa las etapas de actividad mental que implica que el usuario alcance
un objetivo y que son:
1)

establecer el objetivo que se quiere alcanzar,

2)

formalizar la intencin para la accin que alcanzar el objetivo,

3)

especificar la secuencia de accin correspondiente a la intencin,

4)

ejecutar la accin,

5)

percibir el estado del sistema,

6)

interpretar el estado, y por ltimo

7)

evaluar la interpretacin del estado con respecto al objetivo inicial.

27

Este modelo proporciona una base para representar y entender las


consecuencias cognitivas de diseos particulares.

Modelo objetoaccin sintcticosemntico (SSOA)


Este modelo descrito originalmente por SHNEIDERMAN en 1980 [SHN92],
propone que los usuarios poseen un conocimiento sintctico y semntico del
dominio del problema y de los mecanismos de interaccin. En este
conocimiento se almacenan detalles de los dispositivos (tipos, modo de uso),
conocimientos semnticos sobre las actividades y conceptos del ordenador.
Este conocimiento se estructura mediante una coleccin de objetos que
componen el sistema (cursor, icono, ventana..) y de las acciones que se
pueden llevar a cabo sobre cada uno de esos objetos (mover, cambiar,
redimensionar, etc.).

Estructura del modelo conceptual


El modelo conceptual es muy importante, ya que permiten identificar, organizar
y realizar razonamientos sobre los componentes y comportamiento de un
sistema in-teractivo, ser la gua para el proceso de diseo del software y
puede usarse poste-riormente como una referencia para evaluar un diseo
particular, razonar sobre la solucin realizada y el posible espacio de
soluciones existente. Por tanto, la correcta especificacin del modelo
conceptual ser crucial en toda la etapa del proceso de diseo. Algunas de
estas notaciones del modelo conceptual estn basadas en mto-dos formales
(con un fundamento basado en lgica matemtica), lo que permitir una
descripcin precisa y sin ambigedad.
Partiendo de las teoras cognitivas presentadas anteriormente, se podra
realizar la descripcin conceptual del sistema mediante uno de estos modelos:

Modelo de caja negra: El usuario no tiene idea del funcionamiento


interno, y simplemente conoce que ciertas entradas producen una serie de
resulta-dos. Este es una visin mgica del sistema, en la cual el usuario no
tiene bases para predecir nuevos comportamientos ni causas que provocan los
errores. El usuario se ve forzado a considerar los resultados verdaderos, y no
sabe cmo juzgar su validez.

Modelo funcional jerrquico: Las funciones suministradas por el sistema


se agrupan en jerarquas, permitiendo reducir la complejidad del sistema
mediante la aplicacin de tcnicas de particin en el dominio del problema
(mtodo de divide y vencers).

Modelo basado en estados: El sistema se define como un conjunto de


es-tados. Las transiciones son provocadas por eventos claramente definidos. El
usuario puede observar los cambios en el estado del sistema. Un ejemplo es el
sistema de comunicacin por telfono (diferentes pitidos para estados del
sistema: ocupado, llamada, etc.)
28


Modelo basado en objetos y acciones: Se trabaja directamente sobre
entidades (fsicas o abstractas), sobre las cuales podemos realizar acciones. El
usuario debe conocer la existencia de objetos, de sus posibles atributos y
acciones aplicables. Por ejemplo, los iconos (acciones asociadas y atribu-tos).
Con estas posibles estructuraciones de la informacin que residen en el
modelo con-ceptual, podramos optar por centrarnos en la descripcin del
conocimiento que el usuario debe tener del sistema (siendo irrelevante la
arquitectura del sistema) o vi-ceversa (dando ms importancia al modelo del
sistema respecto al conocimiento del usuario). A menudo, estas son dos
alternativas (en algunos casos complementarias) para el diseo de sistemas
interactivos. Una descripcin basada en el conocimiento del usuario nos llevar
a un modelo de tareas, mientras que una descripcin del sistema nos conducir
a un modelo arquitectnico.
Los modelos de tareas analizan y describen el conocimiento que el usuario
debe poseer acerca del sistema para su correcta utilizacin. En ese sentido, se
ha traba-jado en dos vertientes. Por un lado, se debe caracterizar el proceso de
adquisicin de la informacin por parte del usuario, y por otro, se busca un
mecanismo para expresar el rendimiento humano para la ejecucin de unas
determinadas activida-des. Estos mtodos se basan en el anlisis de tareas y
generalmente usan una descripcin funcional jerrquica.
Los modelos arquitectnicos representan la estructura interna del sistema. Se
describe la composicin del sistema en base a una descripcin modular que
facilita la composicin de componentes simples para la definicin de elementos
mas com-plejos. Estos modelos se basan en el concepto de interador, objeto
activo o agente interactivo como un objeto especializado que va a formar parte
del sistema inter-activo y que posee un estado y reacciona ante eventos
(estmulos externos al Objeto). Normalmente se usa una descripcin basada en
estados o bien en objetos y acciones (aproximacin que se adapta bien a las
metodologas orientadas a objetos existentes).
Otra alternativa diferente son los modelos abstractos (basados en un modelo
de caja negra), los cuales se utilizan para describir las propiedades ms
relevantes del sistema (consistencia, visibilidad, etc.) en base a las entradas y
salidas que se pro-ducen en el sistema, y sin tener en cuenta su estructura
interna. El modelo PIE pro-puesto por A. DIX [DIX91] es el ms conocido.
Estos tres modelos no tienen por qu ser excluyentes entre s, ya que
bsicamente se diferencian los aspectos relevantes del estudio y en el nivel de
abstraccin con el que se analiza el sistema.

Anlisis de tareas
El anlisis de tareas es un trmino que cubre diferentes tcnicas orientadas a
des-cribir las interacciones entre las personas y los entornos de una manera
29

sistemtica. El anlisis de tareas se puede definir como el estudio de lo que un


usuario tiene que realizar en trminos de acciones y/o procesos cognitivos para
conseguir un objeti-vo. Es por tanto una metodologa que esta soportada por un
conjunto de tcnicas para ayudar en el proceso analtico de recogida de
informacin, organizarlo y usarlo para realizar valoraciones o decisiones de
diseo.
Conceptos iniciales:

Una de las premisas de cualquier aproximacin con la que abordemos el


di-seo es la de conocer el usuario y las actividades que realiza.

Esta informacin se recoge en la fase de anlisis de las tareas con una


notacin que permita su formalizacin y estudio.

Para ello, consideraremos una tarea como una unidad significativa de


tra-bajo en la actividad de una persona.
El anlisis de tareas nos proporciona informacin muy relevante acerca del
sistema a disear que a menudo no se recoge con las tcnicas de requisitos
tradicionales de la ingeniera del software. Dentro del proceso de anlisis de
tareas, hay dos fases muy importantes:

Obtencin de la informacin necesaria para comprender las actividades


que realiza el usuario (fase de anlisis)

Representacin de esta informacin sobre un modelo adecuado (fase de


modelado)
Mediante estos pasos, se obtiene una descripcin formal del conjunto de
acciones que debe realizar el usuario para la consecucin de un determinado
objetivo o finali-dad. Estos mtodos parten de las teoras cognitivas para
realizar una representacin del usuario y su interaccin con la interfaz. Se
modela su comprensin, conocimien-to, intenciones y mecanismo de
procesamiento. El nivel de representacin depende del modelo concreto (desde
tareas y objetivos hasta el anlisis de la actividades motoras). En concreto,
esta informacin puede ser muy til para:

Comprender el dominio de la aplicacin: identificacin de las actividades


ms importantes y sus relaciones.

Facilitar discusiones interdisciplinares: el conocimiento de las tareas


puede ser til al diseador, usuarios, analistas, psiclogos, socilogos, etc.

Diseo de la nueva aplicacin de forma consistente con el actual modelo


conceptual, preservando las caractersticas ms relevantes del funciona-miento
lgico.

30


Anlisis y evaluacin de usabilidad. Se puede predecir el rendimiento humano e para identificar problemas de uso.
Definiciones bsicas:

Objetivo: Es el estado o logro que el usuario quiere alcanzar dentro de


una aplicacin

Tarea: Es la actividad necesaria para conseguir un objetivo. Pueden ser


tanto actividades mentales como fsicas.

Accin: Es cada uno de los pasos a seguir para cumplimentar una tarea.
Podemos considerar una accin como una tarea que no implica una solucin
de un problema o una estructura de control.
Proceso de obtencin y anlisis
En el anlisis de tareas deberemos identificar las tareas ms relevantes del
sistema. La obtencin de esta informacin se puede realizar mediante las
siguientes tcnicas:

Entrevistas y reuniones

Cuestionarios

Observacin del usuario en su trabajo

Identificacin de actividades en el contexto del entorno

Estudio de la documentacin actual, programas de formacin, etc.

Mediante esta tcnicas, obtendremos informacin relevante para identificar las


ta-reas. En concreto, nos deberemos centrar en:

Informacin que necesita el usuario para realizar la tarea (qu hacer)

Terminologa y smbolos del dominio del problema (elementos).

Descripcin de cmo esas tareas se realizan actualmente (cmo).

Casos de uso (situaciones)

Tipos de usuarios

El resultado de este anlisis es una lista de tareas relevantes con algn tipo de
in-formacin adicional (atributos, restricciones, preferencias, etc.). De esta
infor-macin deberemos abstraer aquellos conceptos que son relevantes para
el diseo de la aplicacin como son:

El modelo de dilogo: cmo se va a realizar la comunicacin persona


ordenador, bajo qu paradigma y estilo.
31

Modelo de tareas: Especificacin de las tareas en el sistema nuevo.

Dominio de sistema: Descripcin de los componentes y arquitectura del


sis-tema.

Modelo de usuarios: Identificacin del tipo de usuarios, papel que


desempe-an en el sistema y sus interrelaciones.

Propiedades del sistema. Estudio de las caractersticas del sistema y de


los requisitos que satisface (seguridad, robustez, etc.).
Mtodos de anlisis de tareas
Para llevar a cabo el anlisis de tareas, podemos utilizar diferentes mtodos
que se diferencian en el grado de formalismo de su notacin, poder de
expresividad y finali-dad. Si bien todos ellos representan las tareas del sistema,
la finalidad del estudio puede ser diferente:

Mtodos de competencia o cognitivos. Estos mtodos identifican secuencias de comportamiento correctas, representando el tipo de conoci-miento
que debe poseer un usuario acerca del uso del sistema. Partiendo de la
descripcin de tareas generan una especificacin del conocimiento del usuario.

Mtodos predictivos para la evaluacin del rendimiento humano. Describen secuencias de comportamiento y el conocimiento que necesita el usuario
para su ejecucin. Anlisis centrado en rutinas de comportamiento.

Mtodos descriptivos. Permiten obtener una descripcin ms o menos


completa del sistema a partir de la informacin obtenida de las tareas.
En la siguiente tabla se detallan algunos de estos mtodos con sus
caractersticas ms relevantes.
Mtodo

Tipo

Notacin

Especificacin

HTA Cognitivo
Grfico
SemiInformal
descomposicin del conocimiento

Comentarios
Modelo

GOMS
Cognitivo
Textual
SemiInformal
lenguajes para describir el conocimiento

de

Familia

de

UAN Cognitivo
Grfico
manipulacin directa

SemiInformal

KLM Predictivo
humano

Textual

Tiempo

Medicin

TAG Predictivo

Textual

Esquemas

Medida de la consistencia

32

Notacin para el estilo de


del

rendimiento

CTT Descriptivo Grfico


al anlisis y verificacin.

Lgica temporal

Herramientas de soporte

Anlisis jerrquico de tareas (HTA)


El anlisis jerrquico de tareas (HTA Hierarchical Task Analysis) desarrollado
por ANNETT y DUNCAN [ANN67], es la tcnica de anlisis de tareas ms
conocido y ms antiguo.
En HTA se realiza una descripcin de tareas en trminos de operaciones y
planes. Las operaciones (descomposicin en subtareas) son actividades que
realizan las per-sonas para alcanzar un objetivo, y los planes son una
descripcin de las condiciones que se tienen que dar cuando se realiza cada
una de las actividades. Las operacio-nes se pueden descomponer de forma
jerrquica y se asigna un plan a cada una de las subtareas que aparecen. Se
define un objetivo como un estado determinado del sistema que puede quiere
alcanzar el usuario. Aunque se habla de objetivos y tareas, la representacin
que se realiza describe nicamente la descomposicin jerrquica en subtareas
de las tareas que aparecen en el sistema.
El formato grfico se parece a un rbol con ramas y subramas en funcin de
las necesidades [SHE89]. A la hora describir la descomposicin de una tareas
en sub-tareas podemos representar cuatro tipos de descomposiciones:

Secuencia. Descomposicin en un conjunto ordenado temporalmente de


una secuencia de tareas.

Seleccin. Conjunto de tareas de las que se tendr que elegir una de


ellas.

Iteracin. Repeticin de un subconjunto de tareas.

Tarea unitaria. Actividad indivisible (segn el nivel de detalle dado)

El anlisis de tarea implica tres etapas enlazadas: recogida de informacin,


diagra-macin y anlisis. Los procedimientos de recogida de informacin
incluyen la revisin de la documentacin existente (por ejemplo, manuales de
funcionamiento, procedi-mientos, informes de seguridad, estudios de anlisis
de tareas previos, diseos, imgenes, prototipos, etc.), que permitan establecer
qu hacen las personas en cir-cunstancias especificas (normales y anormales),
entrevistas y cuestionarios (des-cripciones por parte de personas
experimentadas como hacen las cosas, que infor-maciones necesitan y como
determinan si la tarea se puede realizar satisfactoria-mente).
Algunas tareas se pueden desglosar con mayor detalle en secuencias. Un plan
des-cribe el conjunto de operaciones necesarias para llevar a cabo una

33

actividad, o bien, muestra las circunstancias por las que una operacin es
realizada antes que otra. Estos planes se aaden a la tabla jerrquica.
La descripcin de la informacin se realiza en forma de tabla o en forma de diagrama de rbol que describa las relaciones entre tareas y subtareas.
0. Hacer t
1. Calentar el agua
1.1 Llenar cazo
1.2 Encender fuego
1.3 Poner cazo en fuego
1.4 Esperar
1.5 Apagar fuego
2. Vaciar tetera
3. Poner hojas de t en tetera
4. Verter el agua
5. Esperar
6. Servir el t
Plan 0: hacer 1.
si tetera est llena,
entonces hacer 2 al mismo tiempo
hacer 3-4-5
Cuando el t ha reposado, hacer 6
Plan 1: hacer 1.1-1.2-1.3-1.4
Cuando el agua est hirviendo, hacer 1.5
El anlisis de la informacin es la fase final. Usaremos esta informacin como
base para decisiones de diseo y puede servir como gua para las actividades
de diseo. La metodologa para utilizar HTA como anlisis de tareas sera la
siguiente:

Etapa inicial. Definicin de las tarea principal, que puede ser dividida
entre cuatro y ocho subtareas.

34


Etapa intermedia. Decidir el nivel de detalle que se requiere y en que
punto acabar la descomposicin

Parte final. Revisin y evaluacin del trabajo realizado para comprobar


su consistencia
GOMS
GOMS (propuesto por CARD/MORAN [CAR83]) comprende a una familia de
lenguajes (que incluye a NGOMSL, KLM) que se basan en la visin del usuario
como un sistema procesador de informacin (modelo de procesador humano)
[EBE94]. El modelo GOMS se basa en el mecanismo de razonamiento humano
para la resolucin de problemas y realiza la formalizacin de aquellas
actividades (fsicas y mentales) que intervienen en esa labor. Para cada tarea
se describe el objetivo a satisfacer (Goal), el conjunto de operaciones
(Operations) que el sistema pone a disposicin del usuario para la interaccin,
los mtodos disponibles para llevar a cabo esas operaciones (Methods) y por
ltimo, un conjunto de reglas de seleccin (Selection) para determinar la
alternativa ms conveniente en cada caso (descritas mediante estructuras de
control ifthen). Cada tarea se podra descomponer en otras tareas primitivas
formando un rbol jerrquico.
Los objetivos son las metas que se propone el usuario (lo que desea obtener).
Los objetivos pueden servir como un punto de referencia en caso de un error.
Un objeti-vo contiene informacin de la intencin del usuario. Para ello, debe
realizar una serie de operaciones bsicas. Las operaciones son unidades
elementales de percepcin, motoras o actos cognitivos cuya ejecucin es
necesaria para cambiar algn aspecto del modelo mental del usuario, o bien,
para modificar el entorno. Este tipo de accio-nes puede afectar al sistema
(pulsar una tecla) o bien, slo al estado mental del usuario (leer el cuadro de
dilogo). Existe un grado de flexibilidad acerca de la granularidad de las
operaciones (amplitud de cada operacin). Para llevar a cabo estas
operaciones, existen varias posibilidades de descomposicin de una tarea en
subtareas. Por ejemplo, en un gestor de ventanas, se puede cerrar la ventana
mediante ratn en un men o teclado (atajo). Cada una de estas posibilidades
ser un mtodo.
GOAL: CERRAR-VENTANA
[select GOAL: USAR-METODO-RATON
MOVER-RATON-A-MENU-VENTANA
ABRIR- MENU
CLICK-SOBRE-OPCION-CERRAR

35

GOAL: USAR-METODO-TECLADO
PULSAR-TECLAS-ALT-F4]
Cuando hay ms de una alternativa, podemos indicar una serie de condiciones
y re-glas para tomar la mejor alternativa (mtodo):
METHODS: IF (USUARIO-EXPERTO)USAR-METODO-TECLADO
ELSE USAR-METODO-RATON]
Podemos descomponer los objetivos en subobjetivos.
GOAL: EDITAR-DOCUMENTO
GOAL: ABRIR-DOCUMENTO
La descomposicin de tareas nos suministra una comprensin de estrategias
para resolver problemas del dominio de la aplicacin. El objetivo del anlisis
jerrquico de tareas es la de producir una descomposicin de tareas, de modo
que se pueda seguir paso a paso el mtodo de resolucin.
GOMS puede servir tambin para medir rendimientos. La profundidad de
subtareas se puede usar para estimar los requerimientos de la memoria de
corto plazo (MCP) (ver captulo El factor humano) e incluso para estimar
tiempo de respuesta (asu-miendo tiempos constantes para cada operacin).
En este ejemplo tenemos una descripcin de la tarea de mover una pieza en
una partida de ajedrez.
GOAL: MOVER-PIEZA
. GOAL: DETERMINAR-TURNO
. . [select GOAL: CONOCER-ULTIMO-MOVIMIENTO
. .

MOVER-A-LA-HISTORIA-DE-MOVIMIENTOS

. .

DETERMINAR-ULTIMO-MOVIMIENTO

. .

COMPROBAR-SI-NO-ERES-TU

. .

GOAL: CONOCER-MOVIMIENTO-SIGUIENTE

. .

MOVERSE-AL-TABLERO

. .

IDENTIFICAR-POSICION-DEL-RELOJ

. .

COMPROBAR-SI-RELOJ-ESTA-EN-TU-POSICION]

. GOAL: ELEGIR-MEJOR-ESTRATEGIA

36

. GOAL: REALIZAR-MOVIMIENTO
. . GOAL: SELECCIONAR-PIEZA-ADECUADA
. .

. [select GOAL: IDENTIFICAR-PIEZA

. .

SELECCIONAR-TECLADO

. .

ESCRIBIR-IDENTIFICACION-PIEZA

. .

CONFIRMAR

. .

GOAL: COGER-PIEZA

. .

MOVER-CURSOR-A-PIEZA

. .

PULSAR-BOTON-RATON]

. . GOAL: ELEGIR-DESTINO
. .

. [select GOAL: IDENTIFICAR-DESTINO

. .

MOVER-CURSO-ARRASTRANDO-PIEZA

. .

ESCRIBIR-IDENTIFICACION-POSICION

. .

CONFIRMAR

. .

GOAL: SOLTAR-PIEZA

. .

MOVER-CURSOR-ARRASTRANDO-PIEZA

. .

SOLTAR-BOTON-RATON]

. GOAL: CONFIRMAR-MOVIMIENTO
. .

. [select GOAL: TECLA-CONFIRMACION

. .

. .

GOAL: PARAR-RELOJ

. .

MOVER-CURSOR-RELOJ

. .

PULSAR-BOTON-RATON]

PULSAR-ENTER

Selection Rule for GOAL: DETERMINAR-TURNO


Si es una visualizacin grfica, usar el mtodo CONOCER-MOVIMIENTOSIGUIENTE
en otro caso usar el CONOCER-ULTIMO-MOVIMIENTO

37

Selection Rule for GOAL: SELECCIONAR-PIEZA-APROPIADA


Si no tienes ratn usar el mtodo IDENTIFICAR-PIEZA,
en otro caso usar el mtodo COGER-PIEZA
Selection Rule for GOAL: ELGIR-DESTINO
Si no tienes ratn usar el mtodo IDENTIFICAR-DESTINO,
en otro caso usar SOLTAR-PIEZA
Selection Rule for GOAL: CONFIRMAR-MOVIMIENTO
Si estas usando el teclado usar el mtodo TECLA-CONFIRMACION,
en otro caso usar el mtodo PARAR-RELOJ
El modelo GOMS fue uno de los primeros mtodos utilizados para el diseo de
interfaces de usuario, teniendo gran repercusin en investigaciones
posteriores. Permite describir cmo un experto realiza tareas y las descompone
en subtareas. Sin embargo, una de sus puntos dbiles es que slo considera
comportamientos sin errores y tareas secuenciales.
KLM
Uno de los modelo GOMS ms simple es el KLM (KeyStroke Level Mode), que
simplifica el conjunto de operaciones disponibles a la pulsacin de teclas y
movimiento de ratn. Esta simplificacin permite obtener predicciones del
tiempo que una persona emplear para la realizacin de una tarea.
Estas mediciones parten de unos valores experimentales que determinan
mediciones concretas para la realizacin de actividades elementales. A partir
de estos resultados experimentales, se puede deducir que por trmino medio:

El tiempo de planificacin de una tarea se puede estimar que dura 2-3


seg. si ya est definida, y de 5 a 30 seg. si hay que pensarla.

El tiempo de respuesta del usuario para una accin vara notablemente


se-gn el tipo de dispositivo y de la destreza del usuario. Podramos crear una
tabla donde aparecen las operaciones ms usuales sobre los dispositivos
(pulsar tecla, mover ratn, etc.) y su tiempo en funcin de las habilidades del
usuario.
Operador
K

Descripcin Segundos

Pulsacin de teclado:

Buen mecangrafo (135 ppm)

38

Habilidoso (90ppm)
Normal (40ppm)
Malo
0.08
0.12
0.28
1.20
P

Apuntar con el ratn

Ubicar las manos en teclado

D(ND,ID)

0.40

Dibujar un trazo

(N: n segmentos, I: longitud)


M

1.10

0.9ND+.016ID

Preparacin mental 1.35

Por ejemplo, podemos comparar el tiempo de respuesta entre el diseo de dos


mens con mucha profundidad o con mucha ramificacin. En un men basado
en ordenes numeradas (16 opciones). Partiendo de las siguientes hiptesis:

Opciones con igual probabilidad

Usuario experto mecangrafo

Podramos concluir con la siguiente medicin. Una seleccin de un men por


su posi-cin (1-16) necesitara de los siguientes operadores:

Operador M para buscar y visualizar el men

Uno o dos operadores K para introducir el nmero de tem + 1K


(pulsacin de tecla ENTER)
M + K (1er dgito) + 0.44K* (2 dgito) + K (Enter)
1.35 + 0.20 + 0.44(0.20) + 0.20 = 1.84 seg.
* Usado para las opciones de la 10-16. Probabilidad 7/16 = 0.44
Se puede comparar con la utilizacin del ratn para la eleccin del men. Para
ello bastarn los siguientes operadores:
M + P + K (click ratn)
1,35 + 1.10 + 0.20 = 2.65 seg.

39

Como vemos, KLM para este caso podra predecir que la seleccin por teclado
sera ms rpida (efectiva) que la seleccin por men.
Se puede utilizar para analizar igualmente el balanceo de los mens
(profundidad), selecciones de elementos por identificador o apuntando, etc.
Otra utilidad que posee este mtodo es la de hacer explcito el conocimiento
implcito que debe poseer el usuario acerca del sistema.
TAG
Este es otro tipo de formalismo para representar el conocimiento del usuario.
TAG (Task Action Grammar) describe el conocimiento del usuario para realizar
una deter-minada tarea en base a una gramtica con caractersticas [HAR90].
El conocimiento que posee el usuario del tipo "como puedo hacer..." se puede
expresar mediante un esquema que engloba a un conjunto de reglas
individuales. Un esquema estar for-mado por una estructura sintctica definida
a partir de un conjunto de caractersti-cas. Las caractersticas (features) son
atributos que definen la semntica de la ta-rea. La tareas que tenga estructuras
sintcticas diferentes tendr un esquema dife-rente. A partir de esta
aproximacin, se podr medir la complejidad del interfaz me-diante la
identificacin de caractersticas en la accin de tareas y de su agrupamien-to
en esquemas. El nmero de esquemas puede dar una orientacin de la
consisten-cia del lenguaje de la interfaz; a menos esquemas, el usuario puede
inferir el comportamiento esperado del sistema a partir de un conocimiento
parcial. Se parte del hecho que la simplificacin del esquema es comprensible
por el usuario. De este modo, la consistencia ayuda al aprendizaje, ya que
podemos inferir nuevas tareas a partir de las conocidas.
Para abordar la especificacin de un interfaz mediante TAG se deben seguir los
si-guientes pasos:

Identificar tareas simples que el usuario puede realizar sin resolucin de


problemas (sin incluir estructuras de control)

Describir las tareas simples en un diccionario (como conjuntos de


compo-nentes semnticos), reflejando la categorizacin de las tareas.

Definicin de reglas de reescritura que trasladan tareas simples en una


es-pecificacin de acciones, donde los tokens son etiquetados con caractersticas semnticas procedentes del diccionario de tareas simples. Las etique-tas
permiten la generalizacin.
Por ejemplo, podemos utilizar TAG para estudiar la consistencia del conjunto de
r-denes de un Sistema Operativo (copy, rename, delete). Para ello, partimos
de las descripcin gramatical de estas tareas, y analizaremos cmo se pueden
agrupar en esquemas:

40

Tareas simples
Copiar fichero nombre_fichero nombre_fichero
Copiar disco nombre_disco nombre_disco
Renombrar fichero nombre_fichero nombre_fichero
Borrar fichero nombre_fichero
Primeramente, deberemos identificar las caractersticas que aparecen en estas
ta-reas y sus posibles valores. En este caso, las caractersticas corresponden
con el tipo de atributo y sus posibles valores. Tambin deberemos tener en
cuenta cuando el objeto fuente y destino es el mismo, ya que en tal caso, se
produce un cambio en el objeto (y es una caracterstica a tener en cuenta):
Objeto_antiguo [fichero disco, vacio]
Objeto_nuevo

[fichero, disco, vacio]

Produce_cambio [si, no]


Una vez obtenidas las caractersticas y sus valores, se debern reescribir las
tareas simples mediante estas caractersticas, de modo que definan
unvocamente su signi-ficado:
Copiar fichero [Obj_antiguo=fichero, Obj_nuevo=fichero, cambio= no]
Copiar disco [Obj_antiguo=disco, Obj_nuevo=disco, cambio= no]
Renombrar fich [Obj_antiguo=fichero, Obj_nuevo=fichero, cambio= si]
Borrar fichero [Obj_antiguo=fichero, Obj_nuevo=vacio, cambio= no]
A partir de estas tareas podramos obtener un nico esquema a partir de tres
carac-tersticas que lo definen.
Task [obj_ant, obj_nuevo, cambio] :=
Orden[obj_ant, obj_nuevo, cambio]+param1[Obj_ant]+param2[obj_nuevo]
Cada orden vendra dada por un nombre (de la tarea a realizar) y dos
parmetros. Los valores para estos argumentos vendran dados unvocamente
por el valor de las caractersticas:
tarea[obj_ant=fichero, obj_nuevo=fichero, cambio=si] := "ren"
tarea[obj_ant=fichero, obj_nuevo=fichero, cambio=no] := "copy"
tarea[obj_ant=disco, obj_nuevo=disco, cambio=no] := "diskcopy"
tarea[obj_ant=fichero, obj_nuevo=vacio, cambio=no] := "delete"
41

param1[obj_ant=vacio] := NULL
param1[obj_ant =fichero] := drive-id + "nombre_fichero"
param1[obj_ant=disco] := drive-id
param2[obj_nuevo=vacio] := NULL
param2[obj_nuevo =fichero] := drive-id + "nombre_fichero"
param2[obj_nuevo=disco] := drive-id
drive-id := NULL | "A:" | " "B:" | "C:" | ...
TAG no realiza predicciones absolutas de rendimiento. Mas bien, se puede
utilizar para generar hiptesis que deben ser probadas experimentalmente.
TAG se ha utilizado para medir la consistencia de lenguajes de rdenes (UNIX,
MSDOS), aunque tambin se puede generalizar para acciones de manipulacin
direc-ta, ubicacin de rdenes en mens, etc.
Consistente Inconsistente
copy src_file target_file

copy src_file target_file

rename src_file target_file rename target_file in src_file


delete src_file

make src_file deleted

La evaluacin de la consistencia del lenguaje del interfaz de usuario puede ser


muy sencillo de estimar con TAG. As por ejemplo, podramos detectar
rpidamente inconsistencias en el lenguaje de rdenes como en este ejemplo,
donde las rdenes no poseen la misma estructura. El esquema tiende a ser
menos consistente conforme aumenten los esquemas. Como consecuencia, el
nmero total de reglas no es importante, slo el numero de esquemas.
La consistencia est muy relacionada con la facilidad de aprendizaje.
Podramos estimar que existe una relacin directa entre el tiempo de
aprendizaje necesario y el nmero de esquemas que aparecen del lenguaje.
UAN
Las tcnicas basadas en gramticas no resultan adecuadas para la descripcin
de la interaccin en interfaces grficas de usuario basadas en el paradigma de
manipula-cin directa ya que no permiten describir la realimentacin visual
(feedback) del sistema. A esto se une la dificultad de especificar tareas
basadas en el arrastre de iconos ya que su semntica depende del lugar donde
se suelte. En este sentido, UAN (User Action Notation) es una notacin
centrada en el usuario para descripcin de tareas. Su principal caracterstica es

42

la descripcin fsica de las acciones a realizar en el proceso de interaccin


[HAR95].
Una especificacin en UAN se realiza mediante una tabla dividida en 3
columnas des-cribiendo las acciones de usuario, la realimentacin de la interfaz
y el estado del sis-tema tras la accin. Las acciones de usuario y la
realimentacin poseen una notacin donde explcitamente se designa la
manipulacin que se realiza sobre los objetos de la interfaz. As por ejemplo,
las acciones Mv y M^ denotan el efecto de pulsar y soltar el botn del ratn,
~[fichero] representa el movimiento del ratn en el con-texto del objeto fichero
mientras que fichero > ~ significa que el objeto fichero se est arrastrando. Del
mismo modo podemos especificar la respuesta del sistema (feedback) para
cada accin tales como la una seleccin en vdeo inverso de un icono
(fichero!), vdeo normal (fichero-!), o un parpadeo (fichero!!). La siguiente
descripcin especifica la tarea de borrar un fichero mediante tcnicas de
arrastre.
UAN Realimentacin

Estado

1)

~[fich] Mv

fich!, forall(fich!): fich-!

2)

~[x,y]* outline(fich) > ~

3)

~[papelera] outline(fich) > ~, palelera!

4)

M^

Borrar(fich), papelera!!

Seleccin = fich

Seleccin = null

Esta especificacin nos permite especificar la tarea de arrastrar un fichero a la


pa-pelera mediante el proceso que se muestra grficamente en la Figura 7.

Figura 7 Manipulacin directa descrita mediante UAN


ConcurTaskTrees (CTT)
CTT es una notacin desarrollada por FABIO PATERN [PAT00] cuyo principal
finalidad es la de poder representar las relaciones temporales existentes entre
las actividades y usuarios que son necesarios para llevar a cabo en las tareas.
En concreto, esta notacin es especialmente til para aplicaciones CSCW (ver
captulo Trabajo coope-rativo con ordenador).
Una de las principales ventajas de esta notacin es su facilidad de uso, lo que
hace que sea aplicable a proyectos reales con aplicaciones de un tamao
mediolargo y que con llevan especificaciones de cierta complejidad. La
notacin genera una repre-sentacin grfica en forma de rbol de la
descomposicin jerrquica de las tareas existentes en el sistema. Se permite la
43

utilizacin de un conjunto de operadores, sacados de la notacin de LOTOS,


para describir las relaciones temporales entre ta-reas (secuencialidad,
concurrencia, recursin, iteracin...)
Podemos reutilizar partes de especificacin para la creacin de rboles de
tareas concurrentes e identificarlo como un patrn de tarea. Podemos
identificar 4 catego-ras de tareas en funcin del actor que la llevar a cabo.

Tareas del usuario. Tareas realizadas completamente por el usuario, son


tareas cognitivas o fsicas que no interactan con el sistema. Describen
procesos realizados por el usuario usando la informacin que recibe del
entorno (por ejemplo seleccionar dentro de un conjunto de informacin la que
se necesita en un instante determinado para la realizacin de otra tarea).

Tareas de la aplicacin. Tareas realizadas por la aplicacin y activadas


realizadas por la propia aplicacin. Pueden obtener informacin interna del
sistema o producir informacin hacia el usuario. Como ejemplo podemos ver
una tarea que presente los resultados obtenidos de una consulta a una base de
datos.

Tareas de interaccin. Son tareas que realiza el usuario interactuando


con la aplicacin por medio de alguna tcnica de interaccin. Un ejemplo puede
ser seleccionar un elemento de una lista desplegable.

Tareas Abstractas . Tareas que requieren acciones complejas y que por


ello no es fcil decidir donde se van a realizar exactamente. Son tareas que
van a ser descompuestas en un conjunto de nuevas subtareas.
Para la descripcin se utilizan adems una serie de operadores temporales que
facili-tan la descripcin de las relaciones temporales existentes entre tareas.
Estos opera-dores se han obtenido como una extensin de los operadores
existentes en LOTOS [EIJ89]. El uso de estos operadores facilita la descripcin
de comportamientos com-plejos. Los operadores temporales que podemos
usar son:
T1 ||| T2. Entrelazado (Concurrencia independiente). Las acciones de las dos
tareas pueden realizarse en cualquier orden.

44

T1 |[]| T2. Sincronizacin (Concurrencia con intercambio de Informacin). Las


dos tareas tiene que sincronizarse en alguna de sus acciones para intercambiar
informa-cin.
T1 >> T2. Activar (enabling). Cuando termina la T1 se activa la T2. Las dos
tareas se realizan deforma secuencial.
T1 []>> T2. Activar con paso de informacin. Cuando termina T1 genera algn
valor que se pasa a T2 antes de ser activada.
T1 [] T2. Eleccin. Seleccin alternativa entre dos tareas. Una vez que se esta
reali-zando una de ellas la otra no esta disponible al menos hasta que termine
la que esta activa.
T1 [> T2. Desactivacin. Cuando se da la primera accin de T2, la tarea T1 se
des-activa.
T1 [][> T2. Desactivacin con paso de informacin. Igual que la anterior pero
pa-sando informacin de una tarea a la otra.
T1*. Iteracin. La tarea T1 se realiza de forma repetitiva. Se estar realizando
hasta que otra tarea la desactive.
T1(n). Iteracin finita. La tarea T1 puede darse n veces. Se utiliza cuando el
dise-ador conoce cuantas veces tiene que realizarse la tarea.
[T1]. Tarea opcional. No es obligatorio que se realice la tarea. Cuando
describimos las subtareas existente en la tarea de rellenar un formulario
algunas de las subta-reas pueden ser opcionales (las de los campos que sean
opcionales).
A la descripcin jerrquica de las tareas se le aade la descripcin de los
objetos que son manipulados por las distintas tareas. Estos objetos pueden
clasificarse en dos grupos:

Objetos perceptibles. Son objetos grficos que sirven para presentar informacin al usuario (ventanas, tablas, grficos...) o elementos sobre los que el
usuario puede interactuar (mens, iconos...).

Objetos de aplicacin. Elementos que pertenecen al dominio de la


aplica-cin. La informacin que almacenan estos objetos tiene que ser
mapeada a alguno de los otros para poder ser percibida por el usuario.
Cada objeto puede ser manipulado por mas de una tarea. Como ejemplo de
especificacin utilizando los ConcurTaskTrees podemos ver una parte de una
aplicacin para acceder a informacin sobre un museo. En la Figura 8 se
muestra el modo de introducir la informacin por parte del usuario sobre el tipo

45

de artista que est buscando y el sistema le presenta la informacin asociada a


el.

Figura 8 Tarea de acceso a un museo mediante CTT


Se comienza con la tarea Acceso_Museo_Virtual que puede ser interrumpida
en cualquier momento ([>) por la tarea Cerrar. En un siguiente nivel podemos
ver la tarea de interaccin Selecc_Tipo_Arte con la que se describe la
seleccin del tipo de arte sobre el que se requiere informacin, seguido (>>)
por la seleccin del periodo histrico en el que esta encuadrada la obra del
artista. La siguiente tarea a realizar es el acceso a la informacin del artista
para ello se ha obtenido informacin de las tareas anteriores ( []>> operador
activacin con paso de informacin). Algunas de estas tareas se van a
descomponer en nuevas tareas de manera jerrquica. As la tarea
Selecc_adicional permite seleccionar un artista mediante una lista alfabtica o
mediante una lista ordenada por periodos histricos.
La descripcin de tareas cooperativas consiste en tareas que requieren de la
partici-pacin de ms de un usuario para poder llevarla a cabo. Esta
descripcin se puede realizar creando un rbol donde aparecern las tareas
cooperativas, que se denota-rn con un identificador especial. Por ejemplo, una
solicitud de informacin se podra modelar del siguiente modo:

Figura 9 Tarea cooperativa con CTT


5

Modelos arquitectnicos

Los modelos arquitectnicos son una alternativa (en algunos casos


complementaria) para la representacin de sistemas interactivos. En este caso,
se pretende obtener un modelo del sistema a desarrollar, centrndose en los
aspectos computacionales bsicos en los que debe estar basado.
Los primeros modelos que se proponen en este sentido son para describir el
sistema interactivo en su conjunto recogiendo sus caractersticas esenciales. Si
bien los pri-meros modelos como Seeheim o ARCH se centraban en aspectos
funcionales, las ltimas propuestas definen una arquitectura modular basada
en componentes como MVC o PAC. Tambin podemos encontrar propuestas
encaminadas hacia un diseo basado en modelos concretos del sistema con
herramientas para su obtencin auto-mtica como puede ser MOBID,
HUMANOID, etc. (ver captulo Herramientas).
Los aspectos ms relevantes de estas propuestas se centran en la
modelizacin de los componentes interactivos (estructura) y mecanismo de
interaccin (dilogo).
46

Modelos de componentes interactivos


Los modelos basados en componentes realizan la descripcin del sistema
como una coleccin de interadores, elementos bsicos que encapsulan
interacciones elementa-les con las que se pueden construir interacciones ms
complejas.Estos modelos defi-nen las caractersticas de los objetos con los que
interacta el usuario (como listas, deslizadores, ventanas, etc.). El modelo
conceptual debe reflejar los aspectos rele-vantes del cualquier componente
interactivo (apariencia, eventos, comunicacin, etc.). Normalmente esta
arquitectura es modular por lo que permite la composicin de componentes
para crear sistemas ms complejos.
Uno de los modelos que ms se ha utilizado para la especificacin de sistemas
inter-activos es el denominado interador (de York) [DUK95]. Un interador
(interactor) consiste en un estado y un conjunto de acciones que puede percibir
e invocar el entorno a travs de una interfaz bien definido. Esta definicin
recoge los elementos esenciales de cualquier elemento interactivo (su estado
actual, visualizacin y even-tos para su manipulacin. Una parte importante de
esta interfaz es la representacin grfica del componente (presentacin), que
es perceptible por el usuario del sistema. Bajo este modelo, podemos describir
elementos interadores abstractos, que posteriormente se plasmar en los
lenguajes de especificacin.
El concepto de interador ha sido utilizado ampliamente para construir
metodologas de diseo de sistema interactivos. La mayor diferencia entre ellas
es el lenguaje de especificacin utilizado, Z, Lotos, lgebra de procesos, etc.

Figura 10 Modelo de interador de York


Podemos realizar una descripcin ms detallada de un interador utilizando para
ello conceptos que aparecen en los sistemas concurrentes. As, un interador es
un mo-delo abstracto basado en procesos, canales de comunicacin y
seales de control que definen un componente interactivo con capacidad de
representacin grfica y modificacin dinmica. Su estructura favorece la
interconexin de interadores para realizar modelos de interaccin complejos.
En el siguiente esquema se detallan los procesos que definen su funcionalidad,
as como las comunicaciones entre los mismos. La idea que se recoge bajo el
paradigma del interador es la de representar un componente activo que posee
una apariencia grfica y una medida que representa el valor actual del interador
(o estado). Este valor puede modificar la apariencia del interador, as como
externamente podemos variar la forma de obtencin de la medida. Podemos
sincronizar los distintos procesos mediante seales de control.

47

Un interador se puede describir mediante cuatro procesos. Collection


proporciona una descripcin de alto nivel de la apariencia grfica del objeto.
Feedback se encar-ga de producir la apariencia externa del objeto. Measure
obtiene un dato de un nivel inferior, y Control, se encarga de generar una nueva
medida para el nivel superior. Las entradas y salidas del interador se definen
por medio de canales de comunica-cin: im, oc, od y eo. La sincronizacin se
realiza mediante dos seales de control: it y ot.

Figura 11 Esquema de un interador


Podemos trasladar el concepto de interador a diferentes lenguajes de
especificacin. La definicin formal de un interador mediante LOTOS [EIJ89,
FAC92] es la siguiente:
Specification Interactor [ot, oc, od, eo, im, it] : noexit
Behaviour
Hide me, oc, cf, md, in
((COLLECTION [ot, oc, cf, cm] | [cf]) |
(FEEDBACK [cf, me, eo]) | [cm, me]) |
(MEASURE [im, it, cm, me, md] | [md]) |
(CONTROL [od ,md]))
Where
Process COLLECTION [ot,oc,cf,cm] : noexit :=
oc; COLLECTION [ot, oc, cf, cm]
[] oc; cm; cf; COLLECTION [ot, oc, cf, cm]
endproc
Process FEEDBACK [cf, me, eo] : noexit :=
cf; me; eo; FEEDBACK [cf, me, eo]
[] me; eo; FEEDBACK [cf, me, eo]
endproc
Process MEASURE [im, it, cm, me, md] : noexit :=
cm; me; MEASURE [im, it, cm, me, md]

48

[] im; me; MEASURE [im, it, cm, me, md]


[] it; md; MEASURE [im, it, cm, me, md]
endproc
Process CONTROL [od, md] : noexit :=
md; od; CONTROL [od, md]
endproc
endspec
En la especificacin se describen las distintas sincronizaciones que se deben
garanti-zar sobre los procesos que conforman la estructura del interador. As,
por ejemplo, el proceso feedback se encarga de producir su apariencia grfica
producto de una modificacin de la medida (me) o bien de un cambio de
apariencia (cf). Podemos asociar a cada canal de comunicacin informacin
acerca del tipo de dato que transporta. Por ejemplo el canal de comunicacin
eo definir sus datos de tipo grfico: eo?p : Picture, especificado en ACT ONE.
Una de las ventajas que tiene LOTOS (y en general todos los mtodos basados
en lgebra de procesos) es que explicitan todas las sincronizaciones que
aparecen en un sistema interactivo.
Se han desarrollado metodologas para disear sistemas interactivos utilizando
los interadores en las que se describen las posibles formas de interconectarlos
para describir interacciones complejas.
En la siguiente imagen podemos ver como se interconectaran tres interadores
para describir parte de un sistema en el que se van a utilizan iconos para
representar objetos como ficheros, directorios y unidades de disco. El usuario
puede manipular los iconos por medio del ratn y puede modificar el estado de
los iconos usando tambin entradas de un men.
Se pueden utilizar otros formalismos para la descripcin de interadores como
por ejemplo la lgica temporal. En [DUK95] se realiza una combinacin de un
modelo de interador con lgica. Los axiomas se especifican en lgica modal de
acciones (MAL), de forma que, junto a los predicados basados en lgica de
primer orden, se extiende con un conjunto de operadores modales, que
controlan las acciones que se pueden provocar en el sistema. MAL incluye el
concepto de agentes (humanos y ordenador) y las responsabilidades mutuas
entre ellos. Los operadores usuales son el permiso (per) y la obligacin (obl)
bajo un paradigma deontolgico.

Figura 12 Red de interadores para controlar iconos

49

En la Figura 13 se observa cmo se pueden especificar mediante lgica modal


el modelo de interador. El concepto de estado se recoge en la coleccin de
atributos, mientras que la interaccin se refleja en la seccin de acciones
disponibles en el en-torno para su manipulacin. Cada accin o componente
del estado posee calificado-res, indicando si posee apariencia grfica (vis:
visual), o limitacin en cuanto a su utilizacin por el usuario (any: cualquier
modalidad).
interactor button
attributes
vis
selected : B // botn seleccionado o no
vis
enabled : B // botn habilitado o no
actions
any
select
any
toggle
axioms
[1] enable selected = B [select] selected = B
[2] enabled = B [toggle] enabled = B
[3] per(select) enabled
Figura 13 Especificacin de un botn
Podemos encontrarnos axiomas con predicados de la forma "P [A] Q" , de
modo que si se satisface P, cuando se realice la accin A, Q ser cierto. Otro
operador, per(A) denota permiso para que la accin A pueda ocurrir, mientras
que obl(A) indi-ca que esa accin obligatoriamente debe ocurrir.
Modelos del dilogo
En el diseo de sistemas interactivos, existen muchos aspectos a considerar, el
con-texto organizacional, los tipos de usuarios, los dispositivos de
comunicacin, los esti-los de interaccin, la influencia de la aplicacin
subyacente, etc. Sin embargo, un aspecto fundamental en estos sistemas es la
50

estructura del dilogo, la descripcin de la comunicacin de cada participante.


Uno de los componentes cruciales en los sistemas interactivos es la
descripcin del dilogo. Su complejidad y naturaleza di-nmica hace
aconsejable la utilizacin de un modelo que permita su correcta especi-ficacin.
Gramticas
Las gramticas nos permiten describir secuencias, eleccin e iteraccin como
ele-mentos bsicos del proceso del dilogo. Se puede utilizar herramientas
tales como lex&yacc para obtener un prototipo de la comunicacin. Las
gramticas describen el dilogo como reglas de produccin. BNF enfatiza la
relacin entre sintaxis y las ac-ciones necesarias para realizar una orden. Una
gramtica basada en producciones describe un lenguaje como un conjunto de
reglas que especifican los literales correc-tos en el lenguaje. La gramtica
consiste en:

Smbolos terminales (palabras reservadas del lenguaje). Representan


ac-ciones que el usuario tienen que aprender y recordar.

Smbolos no terminales. Representan conjuntos de acciones agrupadas


para realizar una actividad/tarea.

Metasmbolos. ::= (definicin), | alternancia, () agrupacion, [ ] opcional

Este mtodo es muy adecuado para estilos de dilogo basados en rdenes.


Una ex-tensin de este modelo (las gramticas multiparty) permite identificar
al participan-te que acta en la interaccin (U: usuario, C: computadora):
<Sesin> ::= <U: Open> <C:Respuesta>
<U:Open> ::= LOGIN <U: Name>
<C: Respuesta> ::= HELLO [<U: Name>]
Sin embargo, uno de los mayores inconvenientes que posee es que no permite
representar conceptos sensibles al contexto, junto a su dificultad para su comprensin con especificaciones largas.
Diagramas de transicin de estados (STN)
Ha sido uno de los primeros mtodos utilizado para la descripcin del dilogo.
Con diagramas STN podemos expresar los posibles estados del sistema as
como las transiciones entre ellos. El diagrama de transiciones est formado por
nodos y en-laces. Los nodos representan los posibles estados del sistema. Los
enlaces repre-sentan las posibles transiciones entre estados. Podramos
incluso identificar el actor que ha provocado la accin. Las acciones del usuario
ser aquellas transiciones realizadas directamente por la participacin directa
del usuario.

51

U: Usuario
S: Sistema
T: transicin temporal

Figura 14 STN de una lmpara


Este tipo de especificacin muestra el flujo de acciones y determina el estado
tras una accin. Con el mismo, podemos describir las posibles acciones de
usuario, as como los estados crticos del sistema. Por ejemplo, la descripcin
del mecanismo de encendido de una lmpara se puede describir del siguiente
modo.
Se puede utilizar para la descripcin de mecanismos de interaccin ms
complejos, como por ejemplo, para la especificacin de un portapapeles.
Sin embargo, un problema asociado a este tipo de descripcin es la explosin
combi-natoria de estados en cuanto existan dilogos concurrentes. Por
ejemplo, las dife-rentes opciones para el estilo del texto (itlica, negrita,
subrayado, etc.) provocan una explosin combinatoria de 2n estados, con n
siendo el nmero de opciones.

Figura 15 Descripcin de un portapapeles


Redes de Petri
Si consideramos los sistemas interactivos como un caso particular de sistemas
reac-tivos, podramos utilizar todas las tcnicas y herramientas que se
disponen para la especificacin y diseo de sistemas concurrentes. Existen
abundantes referencias de la utilizacin de Redes de Petri, CSP o LOTOS para
la descripcin de procesos, sin-cronizaciones, eventos y no determinismo.
Dentro de todos estos formalismos uno de los mas usados a la hora de
especificar la naturaleza concurrente de un sistema interactivo son las Redes
de Petri.

Figura 16 Red de Petri para las opciones del texto


Es uno de los formalismos ms antiguos en computacin para una
representacin grfica de actividades concurrentes. En un STN, el sistema se
encuentra en un es-tado en cualquier instante y se puede simular el
comportamiento siguiendo los arcos. La red de Petri es similar, pero con la
diferencia que puede tener varios estados al mismo tiempo. Una red de Petri se

52

compone de lugares (crculos) transiciones (rec-tngulos) y marcas (que


pueden cambiar de lugar mediante una transicin). Por ejemplo, para
especificar la concurrencia de opciones (negrita, cursiva) para el texto se puede
realizar de forma sencilla con redes. Las acciones del usuario estn explcitamente recogidas as como el estado del sistema (mediante las Marcas).
Los lugares elpticos representan las acciones del usuario. La regla de las
redes de Petri es que si todos los lugares de una transicin poseen Marca
(estn Marcados), la transicin se puede disparar. En este ejemplo, la accin
del usuario pulsar negri-ta provocar la transicin T1 que desactiva la negrita.
La siguiente pulsacin del usuario pulsar negrita provocara que en este caso,
se disparase la transicin T2. Se puede describir arcos inhibitorios, como por
ejemplo, no puede suceder T3 mien-tras que est el contador en Negrita (on).
Diseo orientado a objetos
Los interfaces de usuario son muy adecuados para un desarrollo basado en el
para-digma de objetos [COX93], ya que el sistema est formado por
componentes de naturaleza manipuladora (interactiva) con representacin
grfica y en la que existe una gran vinculacin (mediante herencia) de unos
componentes con otros.
Una estructura tpica del modelo conceptual es un conjunto de objetos capaces
de realizar una serie de acciones (modelo objetoaccin).

Objetos: Un objeto es un elemento de informacin sobre el que el


usuario tiene algn control. El conjunto de objetos posee usualmente alguna
estruc-tura. Dicho conjunto es una visin abstracta de la informacin
gestionada por el sistema (modelo).

Acciones: Una accin es una operacin que el usuario puede realizar


con un objeto. El conjunto de acciones define la capacidad funcional del
sistema. El conjunto de acciones no tiene que ser necesariamente ortogonal al
de los objetos. Estas acciones sern las tareas que debe realizar el usuario
para manipular los objetos del dominio de la aplicacin.
Ejemplo: Flexo. Un flexo dispone de una bombilla, un interruptor y una clavija
de enchufe. El interruptor puede estar en una de dos posiciones (encendido o
apagado), la clavija se puede conectar y desconectar a una base de enchufe.
Cuando la clavija est conectada a una base en buen estado y el interruptor
esta en la posicin de encendido, la bombilla se ilumina.
Podemos identificar dos tipos de objetos: a) aquellos que aparecen en la
comunica-cin entre el usuario y el sistema y que tpicamente pertenecen a la
interfaz (obje-tos de control), y b) los que son propios de la aplicacin (objetos
intrnsecos). Por ejemplo, una barra de iconos, una regla o una ventana son
objetos intrnsecos con acciones propias (mover, ocultar, redimensionar, etc.)
53

mientras que el registro de una persona es un objeto de control susceptible de


aplicarle acciones del dominio de la aplicacin (insertar, modificar, ver DNI,
etc.). Para la descripcin de los objetos y de las acciones podemos usar
metforas que ayuden a comprender su significado y utilizacin (ver captulo
Metforas, estilos y paradigmas).
Para la especificacin del sistema deberemos identificar tanto a los objetos
como a sus acciones asociadas. Los objetos se describen identificando sus
atributos ms relevantes. Uno de los ms importantes es su representacin
grfica. Para describir las acciones se puede utilizar una notacin de dilogo
basada en diagramas de esta-do y lenguaje de rdenes (secuencia). El
lenguaje de rdenes nos dara informacin necesaria acerca del protocolo (qu
accin se realiza), mientras que el diagrama de estado indicara cmo cambia
el estado de los objetos con las modificaciones (cmo implementarlo).
Lenguaje de rdenes
En un sistema interactivo basado en objetos, podemos identificar un conjunto
de rdenes que deben aparecer en el modelo para poder representar y
manipular los objetos del interfaz de modo grfico e interactivo. Alguna de ellas
son:

Seleccin/deseleccin de un objeto

Bsqueda/Identificacin de un objeto

Creacin/eliminacin de objetos

Mover/copiar objetos

Obtener/cambiar valores de los atributos del objeto

Visualizacin del objeto

Adems podemos encontrarnos con objetos complejos que poseen acciones


especfi-cas:

Agrupacin. Es un objeto formado por otros objetos. Se pueden ubicar y


eliminar componentes as como conocer sus valores.

Coleccin. Es un objeto que contiene un nmero variable de objetos. Se


pueden aadir nuevos objetos, eliminar, ordenar/clasificar, etc.
Lenguaje modal
Un modo es un estado (o conjunto de estados) en cual se puede realizar un
conjunto de posibles tareas de interaccin por el usuario [FOL90]. Ejemplos de
dilogos modales son:

54


Estado en el cual se permite que un conjunto de rdenes se pueda
aplicar nicamente al objeto/s seleccionado/s (modos sobre selecciones).

Estado en el cual se debe completar un cuadro de dilogo antes de


hacer otra operacin (ventana modal).

Estado en el cual se usa un programa externo para modificar un objeto


(grfico, diagrama, etc.).
Los modos pueden aparecer por la estructura que posea el lenguaje de
rdenes. Las sintaxis del lenguaje puede tener las siguientes estructuras:
1)
AccinObjeto. En primer lugar se identifica la accin a realizar y a
continua-cin se aplica sobre el/los objeto/s. A nivel de sintaxis esto est
asociado a la posibilidad de que existan producciones del tipo
O ::= c c
en las que el significado de ambas opciones sea diferente ( =copiar,
=borrar). En tal caso el lenguaje es modal, ya que la interpretacin de una
entrada depende del estado (previo) de la aplicacin.
2)
ObjetoAccin. En este caso, primeramente se selecciona el objeto de
inte-rs al que se va a aplicar la accin. Se puede utilizar la seleccin mltiple.
Esta sintaxis es especialmente adecuada para paradigmas basados en la
manipula-cin directa, ya que primeramente se identifica el objeto sobre el que
se quiere actuar.
Los modos pueden ser beneficiosos o perjudiciales segn el uso que se haga
de ellos. Los dilogos modales que no son perceptibles (visibles por el usuario)
y que no tienen un significado coherente aumentan la probabilidad de error por
parte del usuario y su dificultad de aprendizaje. Un dialogo modal bien
diseado deber indicar claramente el modo actual (por ejemplo
insercin/sobreescritura en un editor), suministrar informacin acerca de las
rdenes disponibles y disponer de significados intuitivos para las acciones
asociadas.
6

Modelos abstractos

El estudio de los sistemas interactivos como sistemas reactivos permite


estudiar pro-piedades relacionadas con estos sistemas tales como la ausencia
de interbloqueos o inanicin. Sin embargo, desde el punto de vista de la
interaccin con el usuario, las propiedades deseables del sistema estn
relacionadas con la parte de interaccin con el humano, tales como: las
propiedad de comenzar nuevamente (Restartability), deshacer la ltima accin
en cualquier momento (Undo), utilizar toda la funcionalidad de la aplicacin
(completitud), capacidad para cancelar en cualquier momento la ejecucin de

55

una tarea, observacin en todo momento del estado del sistema (Observabilidad), etc.. Bsicamente este tipo de propiedades de inters se pueden
re-sumir en los siguientes casos:
1)
Predecibilidad. Se trata de reconocer y predecir cual ser el efecto futuro
del sistema ante una nueva interaccin. Esta propiedad permite medir la
consistencia del sistema.
2)
Alcanzabilidad. Esta propiedad permite razonar y determinar si el usuario
tie-ne acceso en todo momento a la funcionalidad del sistema. Esta propiedad
permite medir la completitud del sistema.
En este sentido, los mtodos que se utilizan son meramente descriptivos. La
nota-cin y el fundamento matemtico en el cual estn basados permiten
expresar propiedades y por tanto, se podrn utilizar para razonar y verificar ese
tipo de propiedades.
El Modelo PIE
El modelo PIE [DIX91] ofrece una visin externa del sistema, donde se recoge
el comportamiento visible por parte del usuario. Bajo este modelo de caja
negra, PIE describe el sistema en base al efecto perceptible que produce la
interaccin (entra-das de usuario) sobre el sistema. Las entradas son un
conjunto de rdenes (P) que forman parte de un programa. El efecto (E)
observado por el usuario es resultado de un proceso de interpretacin (I), de
modo que para cada entrada posible, podemos obtener su interpretacin
como una funcin de transformacin del dominio de las entradas al dominio de
los efectos:

Figura 17 RedPIE
En este modelo abstracto, P representa las entradas de usuario, E representa
el efecto producido, mientras que I es la funcin de interpretacin.
Un problema de predecibilidad se podra expresar formalmente mediante la
pro-piedad de monotona, del siguiente modo:
p1,p2 P: I(p1) = I(p2) p P : I(p1p) = I(p2p)
es decir, en el caso que dos tipos de entradas de usuario posean la misma
interpre-tacin, esto significa que el efecto ser siempre equivalente, cualquiera
que sea el estado del sistema (dado por acciones previas). En caso de no
satisfacerse esta propiedad, tendramos un sistema ambiguo en donde no
podramos predecir el resul-tado de las acciones a partir de la interaccin del
usuario, el sistema no es determi-nista.

56

Desde este punto de vista, el concepto de efecto es muy amplio, por lo que
usual-mente se utilizar el modelo redPIE que extiende el modelo anterior
para diferenciar el efecto que es percibido por el usuario (D) del resultado que
es alcan-zado por el sistema (R).

Figura 18 RedPIE
Mediante esta aproximacin, se podra establecer relaciones entre el estado
del sis-tema (R) y la observacin del usuario (D). El problema de los sistemas
no pre-decibles puede estar ocasionado porque existan efectos que modifican
el estado del sistema y que no sean percibidos por el usuario (no son
observados). Por tanto, se deber enunciar la predecibilidad desde el punto de
vista de la percepcin del usua-rio, es decir:
p1,p2 P: d(I(p1)) = d(I(p2)) p P : I(p1p) = I(p2p)
La propiedad de alcanzabilidad garantiza que se puede realizar cualquier tarea
so-bre la interfaz de usuario, independientemente del estado actual del
sistema, es de-cir:
p,q Pr P : I(pr) = I(q)
La opcin de deshacer una orden (undo) ser un caso particular de
alcanzabilidad.
Este mecanismo es simple pero potente para hablar de propiedades. Sin
embargo, el modelo es demasiado abstracto como para su utilizacin para el
diseo y desarrollo de sistemas interactivos, y no permite la descripcin de
sistemas asncronos debido a su carcter determinista.
7

Estrategia de diseo

Con los modelos que se disponen de las tareas y de la arquitectura del


sistema, de-beremos guiar el diseo para obtener una implementacin
correcta. Este proceso en algunos casos puede ser automtico, pero en la
mayora de los casos, requerir de un profundo reconocimiento de los aspectos
ms delicados del proceso de diseo y que est directamente relacionados con
el dilogo con la mquina y la presentacin de la informacin. Nos centraremos
en los mecanismos bsicos de interaccin y el dilogo con la aplicacin y la
capa de presentacin.
Tareas de interaccin
Cuando el usuario realiza una interaccin con el ordenador, introduce una
unidad de informacin que posee significado en el contexto de la aplicacin. EL
tipo de interac-ciones que se pueden realizar en el sistema son [FOL90]:

57


Posicionamiento. Obtencin de una posicin u orientacin. La posicin
puede ser en cualquier dimensin (2D, 3D). Se puede usar para dibujo, si-tuar
ventanas, arrastrar elementos, etc.

Valor. Obtencin de un dato cuantificable, ya sea numrico (por ejemplo,


el nmero de pgina, n de copias, etc.) o porcentual (p.e. barra de progresin).

Texto. Introduccin de un texto o identificador (nombre de fichero, apellidos, etc.).

Seleccin. Obtencin de una alternativa (de entre varias posibles). Se


pue-de distinguir entre la seleccin sobre un conjunto finito o bien de tamao
variable, en el cual la opciones pueden ser alternativas disyuntivas o no.

Arrastre. Secuencia de posiciones entre una posicin inicial y otra final


(por ejemplo movimiento de una carpeta con el ratn).
A cada una de estas interacciones podemos aplicarles un conjunto de tcnicas
que nos permitan facilitar y flexibilizar el modo de obtencin de la informacin.
Tarea de posicionamiento
Esta tarea consiste en la obtencin de una coordenada 2D o 3D. La accin que
se realiza es la de mover un cursor por pantalla para introducir un valor, o
introducir la coordenada directamente. Algunos de los aspectos a tener en
cuenta son:

Sistema de coordenadas. El movimiento del objeto puede ser en funcin


de un sistema de coordenadas del propio objeto, de la pantalla o del mundo.
Este factor es muy importante en los sistemas de modelado de posicionamiento 3D (Realidad Virtual).

Resolucin: En caso de movimiento con un dispositivo (cursor) las


posiciones pueden ser discretas o continuas. Habr que tener en cuenta la
relacin Control/Display (C/D) para mecanismos de posicionamiento indirecto,
es de-cir, la distancia que hay que mover el puntero (ratn) en la mesa para
obtener una nueva posicin diferente en pantalla.

Restricciones. Se puede utilizar elementos que ayudan al


posicionamiento como la rejilla (grid) que facilitan la introduccin de los puntos
ajustados a valores. Esta rejilla puede ser direccional (sobre una nica
direccin) modu-lar (restringido a una retcula) o gravitacional (a unos puntos
sensitivos).

Realimentacin. La realimentacin puede ser espacial (visualizacin


grfica del cursor en pantalla), relacionada con otros elementos), o lingstica
(re-presentando el valor numrico en coordenadas cartesianas).
58

Figura 19 Diferentes tcnicas de ayuda en el posicionamiento


Tarea de seleccin
Esta tarea bsica consiste en la seleccin de un elemento de entre un conjunto
(de rdenes, atributos, objetos..). El conjunto puede ser:

Tamao fijo: Elementos invariables (rdenes, etc.)

Tamao variable: Elementos de la aplicacin (objetos)

La tarea de seleccin se puede realizar de los siguientes modos:

Mediante identificador: La seleccin se realiza introduciendo el


identificador del objeto (nombre)

Apuntando: Bsqueda espacial del objeto mediante un dispositivo


apuntador (ratn)

Figura 20 Seleccin en lista variable de objetos (grficos)


La seleccin sobre conjunto de objetos de tamao variable se organiza sobre
listas dinmicas o bien en ventanas (que actan como contenedores) donde se
disponen los elementos con diferentes alternativas de presentacin (grfica,
textual, icnica, etc.) y modo de ordenacin.
La seleccin sobre conjuntos de tamao fijo utiliza otros mecanismos de
representa-cin. Uno de los ms utilizados es la presentacin mediante mens
y se usa para la seleccin de rdenes. Cada orden es un tem dentro del men,
y se pueden utilizar diferentes tcnicas para estructurar el conjunto de
elementos (jerarquas, separa-ciones, atajos, etc.).

Figura 21 Organizacin de un men


Otras posibles representaciones para la seleccin son los botones (o conjuntos
de botones agrupados en barras de iconos). Los botones pueden tener una
representa-cin grfica icnica o bien estar basado en el texto. Se pueden
inhabilitar botones (representados en un tono claro) en caso que la orden no
est activa en ese mo-mento.

Figura 22 Barra de botones (icnica)

59

Otras estructuras para la seleccin son la listas en sus diferentes


representaciones (desplegables) o fijas.
Para el caso de seleccin sobre valores lgicos, se utilizan elementos que
represen-ten dos posibles estados (seleccionado o no). Generalmente se utiliza
la casilla de verificacin como elemento grfico que representa un valor lgico
(si no aparece pulsada equivale a falso/no). En caso de seleccionarse la casilla,
aparece un smbolo () que recuerda a una marca hecha con bolgrafo.
En caso de casillas de verificacin, podemos encontrarnos conjuntos de
cuestiones donde las opciones son mutuamente excluyentes (slo se puede
seleccionar una de las casillas). Para diferenciar estos dos tipos de casillas
grficamente, tradicional-mente se ha utilizado una representacin circular para
las selecciones excluyentes y cuadrada para las casillas de comprobacin.
Estas casillas pueden estar incluidas en los mens.

Figura 23 Casillas de verificacin


En ambos casos de seleccin, ya sea de tamao fijo o variable, un factor muy
importante es la ubicacin espacial de los tems (rdenes, objetos) para su
rpida seleccin, el texto del identificador (para su reconocimiento) y la
organizacin se-mntica (para recordar su posicin).
Tarea de introduccin de texto
Esta tarea consiste en la introduccin de informacin textual. Existen
alternativas a la introduccin de texto por teclado como son los reconocedores
de caracteres (OCR) y de gestos. Un aspecto importante relacionado con el
texto es su resolucin (tamao en pantalla), que se mide en puntos o pxels. Se
deben utilizar tamaos y tipos de letra que sean legibles y proporcionales a la
resolucin de pantalla que po-sea en ese momento el usuario. El texto puede
ser longitud variable y ocupar ms de una lnea, por lo que se consideran dos
tipos de presentacin, una entrada de tamao fijo (con posible control del
formato) o un rea de texto (con uso de deslizadores).
Tarea de introduccin de valor
Esta tarea consiste en la introduccin de un dato cuantificable. En caso de
identificar un nmero, la forma habitual es mediante el teclado numrico,
aunque en deter-minados casos, se utilizan representaciones grficas (diales,
deslizadores, etc.) que ayudan a una introduccin mediante ratn.

Figura 24 Deslizador

60

En caso de valores porcentuales (sobre un valor de tamao variable o de


tiempo para completar una accin) tambin se pueden utilizar
representaciones, pero en este caso, no son directamente manipulables por el
usuario (son informativas).

Figura 25 Barra de progresin y de posicin


Tarea de arrastre
Esta tarea consiste en la introduccin de una secuencia de posiciones que
denotan un movimiento. Esta tarea tpicamente se ha utilizado para describir
explcitamente manipulaciones de objetos grficos (mover, rotar, escalar), y que
ha sido utilizada para dar significado a las operaciones de un sistema de
escritorio (drag and drop) y en operaciones de diseo grfico. Esta tarea
requiere de una realimentacin continua del objeto desplazado (puede ser una
instancia, una lnea/caja elstica, un punto de una curva, etc.).
Gestin de entradas del usuario
La gestin de entradas se puede hacer mediante distintas tcnicas de
interaccin entre aplicacindispositivo [OLS98]. Esta interaccin se puede
realizar en diferentes modos: preguntarespuesta, ordenes, etc. Los eventos es
el principal mecanismo para la comunicacin entre el usuario y el sistema
interactivo. Cuando el usuario interacciona con los dispositivos, estas acciones
se trasladan a eventos software que se distribuyen a la ventana apropiada (en
un sistema de ventanas). Todos los even-tos estn identificados (mediante un
tipo de evento) que permite al software que los recibe distinguir la informacin
que se pretende comunicar.
Se puede establecer tres mecanismos de comunicacin entre usuario y
aplicacin:

Peticin (request). El programa espera hasta que se produzca una entrada. Los Dispositivos estn en espera. Es un dilogo dirigido por la aplicacin.

Muestreo (sample). Ambos trabajan concurrentemente. Consulta del estado del dispositivo al realizar una peticin. Los datos no son almacenados, por
lo que se consulta el estado actual.

Evento (event). Se provee de una cola de sucesos por parte del


dispositi-vo. La aplicacin est dirigida por los datos, y permite entradas
asncronas.
Los sistemas interactivos son programas dirigidos por eventos, y su estructura
difiere de las aplicaciones tradicionales de procesamiento y de clculo. El

61

cuerpo principal del programa es simplemente un ciclo de obtencin de


eventos.
Inicializacin
While(not salir) {
Obtener siguiente evento E
Gestionar evento E
}
Cola de eventos. Existen diferentes modelos para distribuir los eventos a los
obje-tos. Al manipular el sistema interactivo, los eventos se ponen en una cola
de even-tos. Todos los sistemas de ventanas poseen rutinas para obtener el
siguiente evento de la cola. A menudo, los eventos no poseen suficiente
informacin como para ser procesados o son irrelevantes (movimiento
continuado del ratn, pulsacin de teclas no habilitadas), por lo que se deben
proveer mecanismos de filtrado para eliminar aquellos eventos que no son
significativos.
Algunos de los tipos de eventos que podemos encontrar son:

Eventos de entrada. Son los generados por el usuario. Clasificacin:


even-tos del ratn. El evento del ratn siempre posee la posicin actual del
ratn. Teclado: Se puede considerar un array de botones de ratn (uso de
modifi-cadores)

Eventos de las ventanas. Se reciben de la propia ventana. La mayora


de los sistemas de ventanas envan un evento de creacin/destruccin de la
ventana, que permite al cdigo de la aplicacin gestionar la accin pertinen-te.
Tipos de eventos: crear/destruir, abrir/cerrar, iconificar/deiconificar, redimensionar, mover, etc.

Eventos definidos por el usuario. Eventos de alto nivel creados por software.
Comunicacin entre objetos
Un punto importante de la gestin de eventos es la comunicacin con otros
objetos interactivos. Un ejemplo de ello es el movimiento de la barra de
deslizamiento, que provoca el cambio del texto presentado (relacin entre dos
componentes interacti-vos). Esta comunicacin se realiza mediante pseudo
eventos (eventos que han sido creados por la comunicacin entre objetos, y no
son realmente eventos de entrada).
En sistemas de ventanas no orientados a objetos, un evento consiste en un
registro de un tipo (entero), informacin estndar y otra adicional suministrada
62

por el objeto que origina el evento. Existen tres modelos bsicos para este tipo
de comunicacin:

Modelo de llamadas (callbacks). Permite asociar un procedimiento (cdigo C) a un widget en tiempo de ejecucin. Por ejemplo, se utiliza en sistemas
de ventanas como Motif, y primeras versiones de Xwindows y lenguajes como
Xtk, TK.

Modelo de notificacin. Cada componente interactivo notifica a su


ventana padre (de la que depende jerrquicamente) la ocurrencia de un evento
significativo. Este modelo se utiliza en las primeras versiones de MS Win-dows.

Modelo de conexin o delegacin. Permite a un objeto comunicarse con


cualquier otro objeto (u objetos) mediante registro de los objetos recepto-res
para un determinado evento. Modelo utilizado en NexTStep o Java.
1)
Modelo callbacks. Un callback es un procedimiento que se ejecuta
inmediata-mente despus que se produce el evento. En Tcl/Tk, la conexin
entre objetos (interactivos) evento y procedimiento se realiza mediante la
siguiente orden
bind .boton1 <Left-Button> { puts "Boton %b situado en %x,%y" }
Con esta orden se asocia al objeto interactivo .boton1 cuando sucede el
evento <Left-Button> (pulsacin del botn izquierdo del ratn) una secuencia
de rdenes entre llaves.
2)
Modelo de notificacin. Suministra un mecanismo interactivo ms
estructurado. Los componentes notifican a la ventana de nivel superior el
evento sucedido. La ventana padre posee todo el cdigo para decidir qu
realizar con los eventos recibidos. Se puede prestar atencin a eventos
especficos (por ejemplo a eventos de aceptarrechazar dentro de una ventana
de opciones), que dirigen el modo de consulta y obtencin del resto de eventos.
3)
Modelo de conexin de objetos. Permite a los objetos comunicarse
directa-mente entre ellos. Por ejemplo: comunicacin entre la barra de
desplaza-miento con el editor de textos, invocando un mtodo del objeto editor
de tex-tos.
La organizacin de la informacin afecta a la impresin general del interfaz.
Debe incluir los siguientes elementos:

Diseo (formato de pantalla, organizacin general)

Representacin de la informacin (mtodos de codificacin)

Realimentacin (seguimiento)

Comunicacin con el usuario (errores, mensajes de estado, etc.)


63

En el nivel de presentacin se debe mostrar la informacin de forma que sea


com-prensible y asimilable por el usuario. Se puede pecar de exceso de
informacin (pro-vocando fatiga y desbordamiento al usuario) o demasiado
sobria (la falta de informacin puede causar incertidumbre). Hay que tener en
cuenta que el espacio donde se presenta la informacin es escaso, por lo que
deberemos hacer un uso racional de este recurso. La distribucin (no oclusiva)
de la informacin es un factor muy importante, y podemos jugar con diferentes
tipos de diseo: uso de zonas fijas o que se puedan ocultar (de forma
dinmica), disposicin del rea trabajo: mens, mensajes, informacin de
estado, etc.
Para la representacin de objetos deberemos utilizar una simbologa y
codificacin para que sea fcilmente identificable, econmica en recursos
(tamao en pantalla) y consistente (iconografa, colores, texto, etc.) (ver
captulo El diseo grfico).
Diseo de la presentacin
El significado de una imagen puede ser ms fcilmente percibido por el
observador si posee claridad visual. Deberemos por tanto enfatizar la
organizacin lgica de la informacin. Para conseguir una buena organizacin
se puede utilizar las reglas de Gestalt, que permiten mejorar la claridad visual
de la informacin. Estas reglas se basan en cmo organiza el observador los
estmulos visuales (de forma global) y que se pueden resumir en los siguientes
principios:

Similitud. Objetos similares prximos se


representa-cin conjunta/agrupada

interpretan

como

una

Proximidad. Elementos visuales con propiedad comn se interpretan


como agrupados

Cierre (clausura). Elementos visuales que tienden a cerrar un rea se interpreta como cerrada

Continuidad (determinacin de formas). Discriminacin de elementos diferentes segn la continuidad natural

Figura 26 Reglas de claridad visual (Gestalt)


Estas reglas se aplican frecuentemente al diseo visual de los sistemas
grficos, como por ejemplo en la colocacin de los botones, elementos de
men, organizacin general del interfaz, etc.

64

La claridad visual afecta a la impresin general de la interfaz. Al reforzar la


claridad visual, promovemos las relaciones lgicas entre elementos (por
ejemplo, mi-nimizando el movimiento ocular para obtener informacin).

Figura 27 Aplicacin de reglas a ventana de dilogo


Podemos organizar la pantalla de la interfaz siguiendo algunas reglas efectivas
de diseo.

Balanceado. Consiste en el ajuste de la visin con el rea de


visualizacin. El balanceado es la bsqueda de equilibrio entre los ejes
horizontal y vertical en el diseo. Si se asigna un peso a cada elemento visual,
se debe conse-guir que la suma en cada eje sea similar. Se debe buscar un
centro de gra-vedad en sentido horizontal y vertical, ya que de lo contrario, se
creara una inestabilidad.

Figura 28 Pantalla balanceada (izda.) e inestable (dcha.)

Simetra. Consiste en duplicar la imagen visual a lo largo de un eje de


simetra. Esta tcnica automticamente asegura el balance.

Figura 29 Pantallas con diferentes simetras

Regularidad. Tcnica visual para establecer uniformidad ubicando los


ele-mentos de acuerdo con una distribucin regular en filascolumnas.

Alineamiento. Puntos de alineacin que existen en el diseo. Se debera


minimizar.

Enrejillado. Separacin y acentuacin la organizacin entre reas.

Figura 30 Pantalla con enrejillado y alineamiento (izda.)


Para obtener estas distribuciones de contenedores y componentes dentro de la
pan-talla, deberemos utilizar los controladores geomtricos (layout manager)
que nos facilitan las libreras de diseo de interfaces. Podemos utilizar desde
los ms simples (posiciones absolutas, ordenacin de izda. a dcha.) a los ms
complejos, que asignas proporciones relativas para cada elemento, tamao de
expansin, offset, etc.

65

Figura 31 Controlador geomtrico reticular con restricciones


Realimentacin
La realimentacin es de gran importancia en los sistemas interactivos, ya que
el usuario debe estar informado en cada momento de las acciones que realiza.
Cuando por ejemplo una tarea tarda ms tiempo del razonable, se deber
informar me-diante algn tipo de mensaje de ese proceso para no provocar
incertidumbre. Sin embargo, un problema que deberemos tener en cuenta es
que tenga una gestin rpida, ya que en tal caso puede no coincidir el estmulo
con la respuesta del sis-tema. Algunos ejemplos de realimentacin son:

Sobre las rdenes. Mostrar efectos, errores, confirmacin, indicadores

Sobre la seleccin. Resaltar de forma no ambigua la orden activa

Esta realimentacin debe ser fcil de leer y entender. Para ello se debe
fomentar la consistencia, y en algunos casos puede condicionar la estructura
de datos del mo-delo, ya que sea necesario almacenar informacin adicional
para realizar el feedback.
Para su diseo, se debe estudiar las acciones de cada tarea y ver como es la
inter-accin (realimentacin del propio gesto), confirmacin (seleccin,
mensajes, ilumina-cin) y posibles errores (pantalla de aviso) La realimentacin
informa al usuario acerca de su interaccin con el sistema. Indica qu est
haciendo y le ayuda a realizarlo correctamente. Se puede utilizar cualquier
combinacin de canales sensoriales (sonoro, visual, tctil, etc. ).
Se puede clasificar la realimentacin por su dimensin temporal:

Futura. Realimentacin de una accin antes de llevarla a cabo. Indica


qu suceder si se realiza una accin (por ejemplo, etiqueta informativa de los
botones).

Presente. Realimentacin durante la interaccin. Indica qu esta


sucedien-do actualmente (p. e. borrado de ficheros, formateando, mover
cursor..).

Pasada. Informacin de lo que ha sucedido, y cmo ha cambiado el sistema (p. e. informacin de finalizacin de tareas).
Gestin de errores
Sobre un sistema, un factor crtico desde el punto de vista del usuario, es cmo
se organizan los mensajes de error y su explicacin. Normalmente ocurren por
un des-conocimiento por parte del usuario que puede ser motivado por
diferentes causas:

66


Errores por acciones del usuario. Error en la traslacin entre la intencin
del usuario y su accin (intencin correcta, pero realizacin incorrecta). La
solucin es mejorar el diseo ergonmico, mejorar los aspectos fsicos del
diseo (ubicacin de mens, tamao, posicin, visibilidad, color, etc.)

Errores por las intenciones del usuario. El usuario realiza una accin
equivocada. El modelo de usuario no es correcto. La solucin es mejorar el
modelo mental. Es importante buscar posibles causas ya que el usuario est
asumiendo un modelo mental incorrecto.
El usuario, ante un error, debe reconocer qu ha sucedido, para evitar
confusin. Algunas tcnicas que se deben evitar en los mensajes de error son:

Tono imperativo. Aumenta la ansiedad del usuario. Dificulta la correccin


del error ("Accin ilegal", "error fatal", terminacin anormal del progra-ma).

Mensajes genricos o confusos. Ofrecen poca informacin ("error sintctico", run time error n. XXXX).
Un estudio de la distribucin y frecuencia de errores puede ayudar al diseador,
al mantenimiento del producto y al posible usuario mediante una conveniente
documen-tacin.

Conclusiones
En este captulo hemos visto las caractersticas ms relevantes de los sistemas
in-teractivos y las dificultades que se plantean a la hora de realizar un diseo
efectivo. Si bien para el diseo de sistemas interactivos existe abundante
bibliografa, la ma-yora est basada en recomendaciones, consejos y guas de
estilo para el diseo que estn recogidas de la experiencia de los autores. Sin
embargo, raramente aportan una metodologa clara para llevar a cabo de forma
sistemtica el proceso de diseo. En este captulo hemos incluido diferentes
propuestas metodolgicas basadas en teoras cognitivas para el diseo
defectivo de aplicaciones interactivas.
Para ello, deberemos aplicar notaciones que permitan analizar las tareas que el
usuario realiza en su entorno de trabajo, y utilizar tcnicas para su traduccin a
conceptos de diseo. Posteriormente, hemos visto modelos arquitectnicos que
proponen la arquitectura bsica (sobre la base de componentes interactivos)
que debe poseer el sistema, y por ltimo, hemos aplicado una serie de tcnicas
que nos permitan trasladar de forma efectiva el modelo conceptual del sistema
a un modelo computacional basado en eventos y componentes grficos.

67

Se llama mecanizacin a la incorporacin de mquinas en la realizacin de determinadas tareas. As,


se habla de la mecanizacin del campo, cuando a las
tareas agrcolas se han incorporado mquinas por todos
conocidas como el tractor, el arado o la cosechadora.
Tambin se habla del mecanizado de piezas en
un taller, cuando para su fabricacin se utilizan mquinas
como tornos o fresadoras, es decir, cuando se
abandona la fabricacin manual y se sustituye por procesos
mecanizados que permiten mejores acabados y
mayor rapidez en la confeccin de elementos.
Un paso ms all es la automatizacin, considerada
como la supresin parcial o total de la intervencin
de las personas en la realizacin de tareas productivas,
como las tareas agrcolas, industriales o administrativas.
Los autmatas son un caso muy conocido de control,
ya tradicional, que se ha venido aplicando a aquella
clase de mquinas en las que una fuente de energa
acciona un mecanismo, que permite imitar los movimientos
de los seres animados. Se conocen autmatas
que fueron construidos por los griegos en el templo de
Ddalo; sin embargo, uno de los casos ms difundidos
es el del Pato de Vaucanson (Grenoble 1709-Pars
1782) construido en 1738, que era un pato artificial
capaz de batir las alas, zambullirse, nadar, tragar grano

68

e incluso expeler una sustancia parecida al excremento.


Otro caso de autmatas clebres aunque ms
prximo a nuestro tiempo es el del jugador de ajedrez
de Torres Quevedo, construido en 1912, capaz de jugar
finales de partida (rey contra rey y torre). Pero debe
ponerse de manifiesto que los autmatas siempre repiten
el mismo modelo de actuacin, no son reprogramables
y tampoco son capaces de variar sus acciones
en funcin del entorno o la situacin.
El control numrico es la supervisin y regulacin
de determinadas tareas mecnicas de precisin, realizadas
por una mquina herramienta. El control de estas
tareas se realiza de forma automtica para evitar,
de este modo, que el control se lleve a cabo por un operario
que, en ocasiones, podra verse sometido a ciertos
riesgos en un proceso donde es imposible erradicar
los errores humanos. De esta forma, se ajusta al mximo
la precisin en la confeccin de piezas estandarizadas
y se libera al operario de su control, mejorando la
calidad y la cantidad del trabajo realizado. Un ejemplo
de control automtico es el control de la velocidad
de giro de un taladro o la velocidad y control de avance
de un torno o fresadora. Otro sistema de control automtico
es el servocontrol. Consiste en controlar, de
forma automtica, las acciones de una mquina en funcin
de unos parmetros definidos y sus variaciones.
Por ejemplo, el servocontrol se puede utilizar para controlar

69

la velocidad de giro de un torno, de forma que


se mantenga fija dentro de unos lmites. Otro ejemplo
de servocontrol podra ser el del freno de algunos vehculos en los que la fuerza transmitida a las ruedas es
proporcional a la fuerza aplicada por el conductor sobre
el pedal del freno; de esta funcin se encarga un
mecanismo servocontrolado que se llama servofreno.
La robotizacin es tambin una automatizacin de
procesos sin la intervencin humana, pero en este caso
se da un paso ms; hay desplazamiento de cargas, manipulacin
de objetos y un fuerte componente de realimentacin.
Es decir, este tipo de automatizacin permite
la manipulacin automtica y programable de acciones
y objetos. La realimentacin es un proceso imprescindible
en la robotizacin, ya que dota a un proceso
de capacidad para captar informacin que, una vez
procesada por la mquina, permite modificar su comportamiento
(sus acciones). Una mquina que posea la
capacidad de realimentacin, es capaz de modificar
sus respuestas en funcin de las variaciones de su entorno.
Centrando el anlisis en las diferencias que existen
entre automatizacin y robotizacin, puede decirse
que una mquina automatizada (autmata) responde
siempre de igual manera ante sucesos de idntica naturaleza.
Mientras que por el contrario un robot, es decir,
una mquina robotizada, se caracteriza porque puede
manejar objetos y, lo ms interesante, es un dispositivo

70

multifuncional y reprogramable. Una mquina robotizada


es capaz de hacer trabajos totalmente diferentes y
adaptarse al medio, ya que puede tomar decisiones en
funcin de las condiciones exteriores.
La totalidad de los procesos de mejora y control de
la produccin pueden sintetizarse en tres fundamentales:
Procesos de mecanizacin, procesos de automatizacin
y procesos de robotizacin. Las principales caractersticas
de cada uno de estos tres grupos se exponen
en el cuadro de la figura 1.
La Computadora
Como Sistema de Control
La aparicin del computador en la dcada de los
40, acelera vertiginosamente el desarrollo de autmatas
y robots. La cuestin es: podemos hacer servir lal
PC como un autmata o un robot?. Para poder respon53
der es preciso verificar si se cumplen las siguientes
condiciones:
Podemos conectarle sensores?
Podemos conectarle actuadores?
Podemos programarlo (y reprogramarlo) para
que tome decisiones en funcin de los sensores y de
instrucciones previas para que los actuadores operen
en consecuencia?
La respuesta a las tres cuestiones es afirmativa ya
que:

71

La PC cuenta para comunicarse con sus perifricos,


incluso en su versin ms bsica, con diversos dispositivos
de entrada: puertos paralelo y serie, USB,
joystick, micrfono... Adems,
es posible agregarle
tarjetas especializadas
que aaden otras muy diversas
clases de entradas
Tambin cuenta con
varios dispositivos de salida:
puertos paralelo y serie,
USB, sonido, video...
Asimismo, se pueden aadir
tarjetas especializadas
que expanden el nmero y
tipo de entradas.
Por otras parte, son
muchos los lenguajes de
programacin utilizables
en la PC que permiten leer
las entradas y modificar
las salidas: BASIC, LOGO,
Pascal, C, Ensamblador,
etc. (figura 2).
El Puerto de la PC Introduccin
Hace aos, IBM dise el puerto paralelo para
manejar impresoras desde su gama de microcomputadores

72

PC/XT/AT. Un conector estndar macho de 25


pines apareca en la parte trasera de la PC con el solo
propsito de servir de interfaz con la impresora. El
sistema operativo DOS cargado en dichas PCs soporta
hasta tres puertos paralelos asignados a los identificadores
LPT1, LPT2 y LPT3, y cada puerto requiere tres
direcciones consecutivas del espacio de E/S (entradasalida)
del procesador para seleccionar todas sus posibilidades.
Desde el punto de vista del hardware, el puerto
consta de un conector hembra DB25 con doce salidas
Figura 1
Figura 2
54
latch (poseen memoria/buffer intermedio) y
cinco entradas, con
ocho lneas de tierra.
Desde el punto de
vista del software, el
puerto paralelo consta
de tres registros (datos,
estado y control) de 8
bits cada uno, que
ocupan tres direcciones
de E/S (I/O) consecutivas
de la arquitectura
x86 (figura 3).

73

La funcin normal del


puerto consiste en
transferir datos a una
impresora mediante 8
lneas de salida de datos,
usando las seales
restantes como control
de flujo. Sin embargo,
puede ser usado como
un puerto E/S de propsito
general por
cualquier dispositivo o
aplicacin que se ajuste
a sus posibilidades
de entrada/salida.
Descripcin del
Conector Fsico
La conexin del
puerto paralelo al mundo
exterior se realiza
mediante un conector
hembra DB25. Observando
el conector de
frente y con la parte
que tiene mayor nmero
de pines hacia arriba
(figura 4), se numera

74

de derecha a izquierda
y de arriba a
abajo, del 1 al 13
(arriba) y del 14 al 25
(abajo).
Figura 3
Figura 4
55
En este conector tenemos:
8 lneas (pines) son para salida de datos (bits de
DATOS). Sus valores son nicamente modificables a
travs de software, y van del pin 2 (dato 0, D0) al pin
9 (dato 7, D7).
5 lneas son de entrada de datos (bits de ESTADO),
nicamente modificables a travs del hardware
externo. Estos pines son: 11, 10, 12, 13 y 15, del ms
al menos significativo.
4 lneas son de control (bits de CONTROL), numerados
del ms significativo al menos: 17, 16, 14 y 1.
Habitualmente son salidas, aunque se pueden utilizar
tambin como entradas y, por tanto, se pueden modificar
tanto por software como por hardware.
Las lneas de la 18 a la 25 son la tierra.
En la tabla de la figura 5 se detallan la nomenclatura
y descripcin de cada lnea.
La columna Centronics pin se refiere a las lneas
del conector tipo Centronics usado en las impresoras.

75

La columna E/S se refiere al dato visto desde el lado


del PC. El nombre de cada seal corresponde a la misin
que cumple cada lnea con relacin a la impresora,
el perifrico para el que fue diseado el puerto paralelo.
Las seales activas a nivel bajo aparecen con
la barra de negacin (por ejemplo, Strobe). Cuando
se indica alto o bajo se refiere a la tensin en el pin
del conector. Alto equivale a ~5V en TTL y bajo a ~0V
en TTL..
Figura 5
56
Acceso al puerto
El puerto paralelo se identifica por su direccin de
E/S (entrada/salida, I/O) base y se reconoce en sistemas
MS-DOS por el nmero LPT (lp en Unix/Linux).
Cuando arranca la mquina, la BIOS (Basic Input Output
System) chequea direcciones especficas de E/S en
busca de puertos paralelos y construye una tabla de las
direcciones halladas en la posicin de memoria 40h:8h
(o 0h:0408h).
Esta tabla contiene hasta tres palabras de 16 bits,
cada palabra con el byte bajo primero seguido por el
byte alto. Cada palabra es la direccin de E/S base
del puerto paralelo (que denominaremos LPT_BASE en
lo sucesivo). La primera corresponde a LPT1, la segunda
a LPT2 y la tercera a LPT3. Hay que agregar que,
en MS-DOS tenemos el dispositivo PRN que es un alias

76

a uno de los dispositivos LPT (generalmente es LPT1, pero


se puede cambiar con la orden MODE).
Las direcciones base estndar para los puertos paralelos
son:
03BCh
0378h
0278h
Las direcciones son chequeadas en este orden.
La tabla de la figura 6 muestra, como ejemplo, la
memoria en un PC con dos puertos paralelo instalados
en las direcciones hexadecimales 378 y 278.
Registros
El puerto paralelo estndar (SPP) consta, como se
mencion antes, de tres registros de 8 bits localizados
en direcciones adyacentes del espacio de E/S del PC
(vea la tabla de la figura 7). Los registros se definen relativos
a la direccin de E/S base (LPT_BASE) y son:
LPT_BASE + 0: registro de DATOS
LPT_BASE + 1: registro de ESTADO
LPT_BASE + 2: registro de CONTROL
Se har referencia a cada bit de los registros como
una inicial que identifica el registro seguido de un nmero que identifica el nmero de bit, siendo 0 el LSB
(bit menos significativo) y 7 el MSB (bit ms significativo).
Por ejemplo, D0 es el bit 0 del reg. de datos, S7
es el bit 7 del reg. de estado y C2 es el bit 2 del reg.
de control.

77

Se indican con una barra de negacin los bits que


utilizan lgica negativa.
En lgica positiva, un 1 lgico equivale a alto (~5V
TTL) y un 0 lgico a bajo (~0V TTL). En lgica negativa
1 equivale a bajo (~0V) y 0 equivale a alto (~5V). Lo
expresado lo podemos observar en el diagrama del
conector de la figura 8.
Es preciso no confundir la lgica que sigue el puerto
con la lgica que mantiene la impresora. Por ejemplo,
la impresora pone a alto Busy (pin 11) para indicar
que est ocupada. Pero en realidad, al leer el registro
de estado, Busy la interpretamos como 0 (puesto
que el pin 11 se corresponde con S7). Es decir, es como
si fuera activa en bajo (Busy).
Registro de datos (D): El registro de estado se haFigura
7
Figura 6
57
lla en LPT_BASE. Se
puede leer y escribir.
Escribir un dato en el
registro causa que dicho
dato aparezca en
los pines 2 a 9 del conector
del puerto. Al
leer el registro, se lee
el ltimo dato escrito

78

(NO lee el estado de


los pines; para ello
hay que usar un puerto
bidireccional). En la figura
9 se describe el
nombre que toma cada
bit de este registro.
El estndar es que las salidas sean LS TTL (low
schottky TTL), aunque las hay que son de tipo OC (colector
abierto). La corriente que pueden entregar (modo
source) es de 2,6mA mximo y pueden absorber
(modo sink) un mximo de 24mA. En el puerto original
de IBM hay condensadores de 2,2nF a masa. Las
tensiones para el nivel bajo son entre 0 y 0,8V y el nivel
alto entre 2,4V y 5V.
Registro de estado (S): El registro de estado est
en LPT_BASE+1. Es
de slo lectura (las
escrituras sern ignoradas).
La lectura d
el estado de los cinco
pines de entrada
al momento de la lectura.
En la figura 10
los nombres de los
pines se dejaron en
ingls porque es como

79

generalmente se
identifican. La lnea
Busy tiene, generalmente,
una resistencia
de pull-up interna.
El estndar es
que sean entradas tipo
LS TTL.
Registro de control
(C): El registro
de control (figura 11) se encuentra en LPT_BASE+2. Es
de lectura/escritura.
Los cuatro bits inferiores son salidas. La lectura devuelve
lo ltimo que se escribi a dichos bits. Son TTL
a colector abierto con resistencias de pull-up de
4.7kW, por lo que un dispositivo externo puede forzar
el estado de los pines sin daar el driver. Esto permite
utilizar estas cuatro lneas como entradas. Para ello, se
ponen en alto las cuatro salidas (escribiendo 0100b,
es decir, 4h, en LPT_BASE+2) lo que hace que las saFigura
8
Figura 9
Figura 10
58
lidas floten. Ahora, un dispositivo externo puede forzar
a bajo alguna de las salidas con lo que, leyendo el
puerto, sabemos si esto sucedi o no.

80

Es posible realizar esta tcnica en salidas totem-pole


(como D0-D7) pero no se recomienda su uso porque
habra que tener un conocimiento preciso de la corriente,
ya que se puede sobrecargar los transistores de salida
y daar el driver (especialmente en puertos integrados
LSI).
Bit de puerto bidireccional (compatible PS/2): El bit
C5, est disponible slo si se trata de un puerto bidireccional;
en los puertos comunes no se utiliza, al igual
que los bits C6 y C7. Si C5=1, el buffer de los datos
de salida se pone en alta impedancia, desconectando
dicho buffer de los pines 2 a 9 del conector del
puerto (D0 a D7). Si se escribe al registro de datos, se
escribe al buffer pero no a la salida. Esto permite que
al leer el puerto, se lea el estado de las entradas y no
lo que hay en buffer. Cuando C5=0 el puerto retorna al
modo salida, su estado por defecto.
En las computadoras IBM PS/2, para habilitar el
puerto paralelo bidireccional, adems de lo antes descrito,
se debe poner a 1 el bit 7 del registro del puerto
102h (opciones de configuracin).
En computadoras que no tengan puerto paralelo bidireccional
compatible PS/2, hay que modificar uno o
ms bits de algn puerto especfico correspondiente al
chipset de la placa. A veces se habilita por el Setup o
por jumper en la placa del puerto.
Bit de interrupcin: En trabajos normales de impresin,

81

ni el BIOS ni el DOS hacen uso de la interrupcin.


El hecho de poseer una lnea de interrupcin que est
conectada directamente al PIC (Programmable Interrupt
Controller), lo hace muy til para experimentacin en
data-loggers por ejemplo. El bit de interrupcin est conectado
al control de un buffer de tres estados. Cuando
C4=1, se activa el
buffer y su entrada,
S6, se conecta a la lnea IRQ (en general es
IRQ7 o IRQ5). La lectura
del bit, nos devuelve
el estado del mismo
(es decir si el buffer est
en alta impedancia
o no).
Se producir una
interrupcin, cuando haya un flanco descendente en el
pin correspondiente a S6. A continuacin, se describen
los pasos para poder utilizar interrupciones. Finalmente,
en la figura 12 se muestra una tabla que rene las
caractersticas hardware y software del puerto paralelo.
Protocolo del Puerto de Impresora
El handshaking (apretn de manos o protocolo) es
un conjunto de reglas que ambos extremos de un sistema
de comunicacin tienen que seguir para que la comunicacin
sea correcta. El puerto paralelo, usado con una

82

impresora, transmite datos y transmite/recibe las seales


de protocolo. Las principales son Strobe, Ack y Busy. La
secuencia a seguir para enviar datos sera:
Colocar el byte a enviar en el registro de datos.
Verificar que la impresora no est ocupada (Busy =
bajo, S7 = 1).
Indicarle a la impresora que acepte los datos (Strobe
= bajo , C0 = 1, pulso >5us).
En ese instante la impresora indica que est ocupada
recibiendo los datos (Busy = alto, S7 = 0).
Finalmente, la impresora enva un pulso de aceptacin
indicando que se recibieron los datos y que se
puede volver al paso 1 (Ack = bajo, S6 = 0, pulso de
entre 5 ms y 15 ms segn impresora).
Las otras seales sirven para verificar el estado de
la impresora (Error, PaperEnd), para reiniciarla (Init) y
para configurarla (AutoFeed, Select).
En los nuevos puertos, estas seales adquieren otra
funcin, a veces parecida y otras totalmente distintas.
Interrupciones con el Puerto Paralelo
En primer lugar, se debe habilitar el buffer que conecta
la lnea ACK con la lnea IRQ. Esto lo hacemos
poniendo a 1 el bit 4 del registro de control (LPT_BAFigura
11
59
Figura 12
60

83

SE+2). Luego se debe preparar una ISR (Interrupt Service


Routine) que atienda la interrupcin recordando enviar
la seal EOI (20h) al registro de control del PIC
(puerto 20h) al salir de la rutina. La interrupcin software
corresponde a la nmero 0Dh para IRQ5 y 0Fh para
IRQ7. Finalmente se habilita con 0 la interrupcin
IRQ5 (o IRQ7) escribiendo al bit 5 (o 7) del registro de
interrupciones del PIC (puerto 21h). Para desinstalar la
ISR, se deshabilita la IRQ5 (o IRQ7) escribiendo un 1
al bit 5 (o 7) del registro de interrupciones del PIC
(puerto 21h). Luego se hace que C4=0.
Velocidad
Un puerto paralelo ISA normal toma un ciclo-ISA
para leer o escribir. En un sistema cuya velocidad de
bus sea 1,3MHz, se puede decir que la lectura se puede
hacer cada 1 ms (idealmente, ya que siempre existen
otras instrucciones software, etc; en la prctica pueden
ser desde 1.2 ms a 2 ms). Algunos puertos soportan
un modo turbo que elimina los 3 estados de espera
de la CPU, con lo que la velocidad de lectura/escritura
del puerto se duplica (2,7MHz).
Acceso Bsico al Puerto Paralelo
Programacin bsica de la E/S en Basic: Para realizar
el control de dispositivos mediante el puerto paralelo
debemos hacer uso de las funciones de QBasic que
permiten acceder a los puertos hardware. Daremos
unos ejemplos bsicos de la programacin de la E/S

84

por el puerto paralelo. Estos ejemplos se presentan con


un grado de estructuracin creciente en el estilo de programacin.
En el primer ejemplo se supone que la PC
est equipada con un puerto paralelo de tipo estndar
localizado en la direccin 0x378, como suele ser habitual
en Windows 98, de modo que el registro de datos
se localiza en esa misma direccin y el de estado en
0x378+1. En el ejemplo (al que llamamos CTRL.BAS)
se enva un byte a las lneas de datos y se recibe un byte
de las lneas de estado con las funciones OUT e INP
utilizando un estilo de programacin muy bsico, tal
como se sugiere en la tabla 1.
En el siguiente ejemplo se supone que la PC est
equipada con un puerto paralelo de tipo bidireccional
localizado en la direccin 0x378 de modo que el registro
de datos se localiza en esa misma direccin y el de
control en 0x378+2. El bit C5 del registro de control se
utiliza como conmutador del modo salida (escritura en
las lneas de datos) al modo entrada (lectura de las lneas de datos). En el ejemplo, mostrado en la tabla 2
y al que llamamos CTRL_0.BAS, se enva y se recibe un
byte de las lneas de datos del puerto aprovechando su
capacidad bidireccional utilizando las funciones OUT e
INP sin mayores complicaciones en la programacin.
El siguiente ejemplo es funcionalmente idntico al
anterior, aunque se hace uso de las constantes de BASIC
para dotar al programa de mayor elegancia y claTabla

85

1
61
Tabla 2
Tabla 3
62
ridad. Tambin, facilita la reprogramacin en caso de
que, por ejemplo, el puerto no se halle en la direccin
supuesta.
Obsrvese en la tabla 3 que la constante 0x378 slo aparece ahora una vez en el cdigo fuente, frente a
las cuatro veces que lo haca en CTRL_0.BAS. Se ha
hecho uso asimismo de la notacin hexadecimal para
los valores que activan y desactivan el bit C5 del registro
de control.
En el siguiente ejemplo, esta vez no es slo maquillaje.
Cuando en los casos anteriores hemos activado y
desactivado el bit C5, pudimos tambin modificar el estado
del resto de los bits del registro de control. Normalmente,
es de buen gusto respetar el estado original
del puerto cuando uno finaliza la ejecucin de su programa.

As pues, en el siguiente ejemplo se lee (tabla 4,


CTRL_2.BAS) en primer lugar el estado del registro de
control y se almacena en un byte (que llamamos ctrl%).
Cuando utilizamos OUT, lo hacemos de modo que nicamente
modificamos individualmente el bit deseado, y
no todos. Finalmente escribimos el byte ctrl% al registro

86

de control para recuperar el estado original. Obsrvese


que se usa el operador ~ para realizar el complemento
a 1 de C5ON, de modo que nos ahorramos el
definir otra constante simblica para la condicin de bit
apagado.
Ahora un cambio significativo: vamos a determinar,
y no a suponer, dnde se halla situado el puerto paralelo
(consltese la seccin correspondiente de El Puerto
Paralelo del PC para conocer los detalles acerca de
cmo determinar cuntos puertos se hallan instalados y
qu direcciones de E/S ocupan).
Para ello accedemos a la zona de memoria donde
se registran las direcciones de los puertos paralelos presentes
en el PC (en la zona de las variables de la
BIOS), por mediacin de la funcin PEEK. Una vez detectados
los puertos presentes, nos quedamos con el
primero y programamos la entrada-salida exactamente
igual que en CTRL_2.BAS. Vea la programacin de esTabla
4
63
te ejemplo (CTRL_3.BAS) en la tabla 5. Por ltimo, integraremos
el cdigo que localiza la direccin del
puerto en ua funcin que devuelve dicha direccin. Para
ello definimos la funcin PuertoDir%, sin argumentos
y de tipo entero.
Si dicha funcin no localiza ningn puerto devuelve
un 0, lo que brinda al programa una posibilidad de

87

terminar la ejecucin cuando en un PC no existe puerto


paralelo disponible (tabla 6).
Actividades
Es recomendable que ponga en prctica lo dictado
hasta aqu y para ello le sugerimos realizar algunos
ejemplos bsicos.
Encendiendo un LED
Realcese el montaje elemental esquematizado en
la figura13. Puesto que se trata de un montaje inicial,
Tabla 5
64
en el que se es posible sacrificar el orden respecto de
la sencillez, se puede llevar a cabo uniendo directamente
con regletas los componentes a los cables, e introduciendo
stos en las hembras del conector de la PC.
Por supuesto, es preferible realizar montajes ms estables,
pero de ello nos ocuparemos ms adelante.
Nota: no es preciso puentear exteriormente entre s
las lneas 18-25 puesto que cada una de ellas es ya la
tierra del puerto. En este montaje se ha conectado un
LED (salida digital) en el pin 2 del puerto (bit D0 del
registro de datos) y un interruptor (entrada digital) en el
pin 15 (bit S3 del registro de estado).
A los fines prcticos, intente realizar un programa
en QBasic para la iluminacin del LED y para la detecTabla
6
Figura 13

88

65
cin del estado del interruptor (vase el programa
CTRL.BAS de la tabla 1 de la pghina
60).
Ahora haga un montaje como el de la figura
14, donde se supone que el puerto paralelo
tiene capacidad bidireccional y se ha
conectado el interruptor (entrada digital) en
el pin 3 del puerto (bit D1 del registro de datos).
Haga un programa en QBasic para la
iluminacin del LED y para la deteccin del
estado del interruptor (vase el programa
CTRL_0.BAS).
Interfaces Bsicos de E/S
con el Puerto Paralelo
Circuito sin Alimentacin Externa
Se trata de un circuito muy sencillo que usa un mnimo de componentes y proporciona un test funcional
de 8 bits. Cada bit de la entrada puede ser individualmente
controlado y visualizado en los LED de salida.
Los diodos LED que actan de display se alimentan nicamente
con la corriente proporcionada por las propias
salidas del puerto. Sera preferible alimentar los
LED y utilizar la corriente absorbida para iluminarlos,
pero el conector no
proporciona una seal de alimentacin

89

(Vcc), de modo que se


necesitara una fuente
externa. Elctricamente,
el puerto paralelo
entrega seales TTL y
como tal, tericamente,
se le puede conectar
cualquier dispositivo
que cumpla con los
niveles de voltaje especficos
de la lgica
TTL, sin embargo el
hardware del puerto
paralelo est muy limitado
en cuanto a su
capacidad de manejo
de corriente, por sta
razn se debe ser
muy cuidadoso con el
manejo de las seales del puerto: un cortocircuito puede
daar permanentemente la tarjeta madre del PC.
Sin embargo, experimentalmente se comprueba que
en la mayora de los PC el puerto proporciona corriente
suficiente para una clara indicacin visual de los
LED. El circuito se muestra en la figura 15.
Las lneas de datos (D0-D7, pines 2-9) se utilizan
como lneas de salida, e iluminan los LED cuando en

90

ellas se fija por software un 1 lgico (+5V). Cuando se


fija un 0 lgico, los LED se apagan. Como entradas se
utilizan, como nibble (semibyte) bajo, las cuatro lneas
Figura 14
Figura 15
66
asociados al registro de
control (C0,C1,C2 y C3,
pines 1, 14, 16 y 17) y,
como nibble alto, cuatro
de las lneas asociadas
al registro de estado
(S4,S5,S6 y S7, pines
13, 12, 10 y 11).
Obsrvese que las lneas de control se utilizan
normalmente como
salidas. Sin embargo,
aqu deben ser configuradas
como entradas.
Obsrvese, asimismo,
que cuatro de las lneas
de entrada se corresponden
con bits que utilizan
lgica negativa (C0, C1,
C3 y S7). Esto habr de
tenerse en cuenta cuando

91

se realice el programa
de control de esta interfaz.
Los detalles sobre el
montaje de ste y los
posteriores circuitos se
pueden consultar en la
pgina web: http://cfievalladolid2.net/tecno/cyr_01
Circuito con
Alimentacin
Externa
Fijmonos ahora solamente
en una de las lneas de entrada y en
una de las lneas de salida.
Un circuito como el
de la figura 16 utiliza
una fuente externa de
+5V para alimentar los
diodos LED y las seales
de entrada.
Un 1 lgico en D7
(bit 7 del puerto de DATOS)
produce que el LED Figura 17
Figura 16
67
se apague. Un 0 lgico produce la iluminacin del

92

LED. El interruptor normalmente abierto S produce que


aparezca un 1 lgico (+5V) en la entrada Busy (registro
de ESTADO, S7). Cuando se cierra S un 0 lgico
(GND) se aplica a la entrada Busy.
Un circuito como el precedente para las 8 lneas
de entrada y salida es un alternativa al propuesto en
la seccin anterior. Las aplicaciones y programas
prcticos para este circuito no son objeto der esta
obra, pero las puede bajar de: http://cfievalladolid2.net/tecno/cyr_01
Circuito con Alimentacin
Externa y Etapa Separadora
Para disminuir lo ms posible el riesgo de daos
al puerto, se puede utilizar un circuito integrado
74LS244 como etapa separadora en las lneas de salida.
Al mismo tiempo se mejora la capacidad de manejo
de corriente, de forma que se pueden conectar
sin riesgo la serie de diodos LED que indican la actividad
en las lneas de datos del puerto paralelo. El circuito
se detalla en la figura 17.
Por cada lnea de entrada que tomamos directamente
del puerto paralelo existe una etapa amplificadora-separadora
dentro del circuito integrado
74LS244 que nos permite trabajar con una tasa de entrega
de corriente suficiente para desplegar en los diodos
emisores de luz la informacin escrita en las lneas
de datos del puerto. Adems es posible habilitar deshabilitar
el despliegue del nibble de orden inferior

93

superior del byte escrito en el puerto.


Colocando en un nivel lgico alto el pin 1 del CI
74LS244 inhabilitamos el despliegue del nibble de orden
bajo y un nivel lgico alto en la patita 19 evita el
despliegue del nibble de orden alto. Por comodidad,
se conectan las patitas 1 y 19 permanentemente
a tierra de tal manera que sea posible visualizar
la actividad en los diodos LED.
Este circuito, al igual que otros presentados
en este texto, necesita de alimentacin externa.
Se puede alimentar directamente mediante una
fuente de +5V, o construir sta usando una pila
de 9V o un adaptador universal, y un regulador
de voltaje 7805.
El 7805 puede regular cualquier voltaje de
entre 7 y 25V c.c. hasta los 5V que precisa el
circuito (vea el diagrama de conexin del regulador
en la figura 18.
Circuito Bidireccional
con Alimentacin Externa
El circuito de la figura 19 aprovecha la capacidad
bidireccional del puerto paralelo de la prctica totalidad
de los PCs actuales. As, las 8 lneas de datos del
puerto (D0-D8) se pueden utilizar a modo de un bus de
datos que, en ocasiones contiene los valores que sern
ledos por la computadora y, otras veces, transporta
los datos que sta enva a la salida digital. No es preciso

94

ahora utilizar las lneas de estado y de control del


puerto a modo de entradas, como se haca en el circuito
sin alimentacin externa (figura 15).
Este circuito utiliza los siguientes CI:
74LS573: un registro octal latch D transparente
usado como puerto de salida para iluminar los diodos
LED, o cualquier dispositivo al que se le quieran enviar
seales digitales.
74LS245: un transceptor octal bidireccional que
proporciona un puerto de entrada de 8 lneas; toma datos
de entrada de 8 interruptores o de cualquier dispositivo
desde el cual se quiera leer informacin digital.
Ambos integrados se controlan mediante el bit C0
del registro de control. Cuando el pin 1 se halla en alto,
los datos escritos por el puerto se transfieren a los
LED mediante el 74573, mientras que el 74245 est
aislado del bus de datos. Cuando el pin 1 est bajando,
los datos a su entrada se conservan en la salida.
Cuando el pin 1 est bajo el 74245 se habilita y los
datos presentes en su entrada se transfieren a su salida
y pueden ser ledos por el programa.
El bit C5 se utiliza como control de las operaciones
de lectura/escritura del puerto bidireccional. El
programa debe fijar tanto C0 como C5 a 0 para realizar
una escritura (es decir, debe escribir un valor deFigura
18
68

95

cimal 0 el el registro de control). Para llevar a cabo una


lectura ambos bits deben ser establecidos a 1 (es decir,
debe escribir un valor hexadecimal 0x21, o decimal
33, en el registro de control).
Display de 7 Segmentos
Una posibilidad es sustituir, en los montajes anteriores,
el sistema de visualizacin mediante 8 diodos LED
por un display numrico de 7 segmentos (figura 20)
ms un punto decimal. El circuito resulta as ms compacto.
Si se trata de un display de nodo comn hay que
alimentar con Vcc= +5V las dos lneas sealadas como
comunes en la figura, y es preciso poner a tierra la lnea correspondiente al segmento que se quiere iluminar.
Si se trata de un display de ctodo comn, hay que
alimentar con +5V el segmento que se desea iluminar y
poner a tierra las dos lneas comunes.
As, en un display de ctodo comn, las lneas 1-8
se pueden conectar directamente a las lneas de datos
del puerto (pines 2-9 del conector DB25), y las dos lneas comunes se pueden conectar a cualquiera de las
patillas de tierra del conector, por ejemplo, la 25.
Reiteramos que si Ud. desea realizar los montajes
Figura 19
69
de los circuitos propuestos, o si quiere analizar con
mayor profundidad lo que aqu se expone, puede visitar
la pgina de Internet:

96

http://cfievalladolid2.net/tecno/cyr_01.
Cabe aclarar que los circuitos se pueden montar
sobre una placa tipo "protoboard" y utilizar cable rgido para realizar las conexiones necesarias entre los
componentes.
Las entradas/salidas del circuito hacia el PC se
pueden reunir en un conector DB25 macho unido a la
placa por lneas de cable rgido o de cable plano. A
su vez, el conector macho se puede unir directamente
al conector hembra de la PC mediante un cable de extensin
paralelo, lo que normalmente resulta ms cmodo para acceder a la parte trasera de la PC donde
se sita el conector hembra.
Para simplificar los circuitos que utilizan interruptores
a modo de entradas digitales, stos se pueden reunir
en un nico DIP switch de ocho posiciones.
Lgicamente, para cada circuito podemos realizar
diferentes actividades, pero ese tema, desarrollado
por el autor en la web, ser objeto de otras publicaciones.
Distinguiendo los Sistemas Operativos
Sin hilar muy fino, podemos decir que un sistema
operativo debe fijar reglas claras para todo fabricante
de software que desee ejecutar programas en l, ya
que al utilizar una PC, estamos abiertos a ejecutar
aplicaciones de distintos orgenes. Por lo tanto, se debe
asegurar derechos y obligaciones para que los
programas dentro de un sistema no se interfieran (y

97

perjudiquen) entre ellos.


Como conclusin y grandes rasgos podremos decir
que el Sistema Operativo sirve de intermediario entre
los programas y el hardware. (Figura 21)
No hay dudas que en el mercado y en la comunidad
de usuarios podemos hallar 3 Sistemas Operativos
que se destacan, o al menos hemos odo hablar de
la mayora.
Windows: sin dudas, es el sistema operativo mejor
afianzado en el mercado (ms que por eleccin de
los usuarios, por costumbre). Casi todo usuario que ingresa
al mundo de las PCs, lo hace a travs de Windows,
lo asumimos casi de manera natural porque no
importa dnde vayamos, siempre hay una mquina
con Windows cerca.
Linux: considerado como el sistema de los
nerds, ha ido evolucionando hasta convertirse en un
sistema operativo amigable que puede llegar a superar
en estabilidad a la plataforma Windows. Est diseado y probado sobre la base de las contribuciones
de miles de usuarios y programadores independientes
en distintas partes del mundo que aportan su granito
de arena para que el sistema crezca y progrese. Sin
embargo, tiene en contra la tendencia cultural impuesta
por Windows que le impide difundirse ampliamente.
Figura 20
Figura 21

98

70
DOS: si bien ese trata de un sistema operativo en
desuso, podra considerarse como el ms veloz y sencillo
de los tres (incluso podra considerarse ideal para
tareas dedicadas. Sus comandos todava pueden utilizarse
cuando utilizamos el smbolo de sistema de
Windows XP o la terminal de Linux. No existe una definicin
clara de driver para esta arquitectura, ya que
tericamente cualquier aplicacin puede hacer E/S en
forma directa.
Los Drivers, Comunicando Hard&Soft
Definiremos como drivers o controladores a las herramientas
o rutinas necesarias para que el sistema
operativo interacte con el hardware. Tendremos drivers
de sonido, puertos, unidades de disco, etc.
El driver por s mismo no es un programa accesible
por el usuario. Las aplicaciones interactan indirectamente
con el dispositivo a travs de llamadas del sistema,
las cuales luego se traducen por el SO en instrucciones
de entrada salida.
Los sistemas operativos actuales no tienen por qu
saber de fbrica, como funciona todo el hardware existente
en el mercado. Si esto fuera posible, acarreara
cantidades enormes y mayormente innecesarias de informacin.
Lo que suele hacerse es armar un paquete
que recopile versiones estables (libres de errores) de los
drivers de dispositivos comerciales de uso comn.

99

Soporte de Programacin
Refirindonos a los drivers o controladores, no existe
un driver genrico multiuso que sirva para todos los
tipos de sistemas operativos. Es ms, generalmente se
programa un driver para varias versiones de un sistema
determinado. Por lo tanto, si desarrollamos un proyecto
de hardware, deberemos considerar en qu sistemas
y/o PCs lo vamos a conectar. Sobre los sistemas anteriores
podemos decir:
Microsoft ofrece para sus sistemas Windows un
set de libreras llamado DDK (Driver Development Kit).
Consiste en numerosas ayudas, ejemplos y herramientas
destinadas a programas de un nivel avanzado. Este
paquete tiene un costo, y se entrega para la ltima
versin de Windows disponible en el momento de su
compra.
Respecto al soporte de drivers de Linux, con un
poco de paciencia podemos encontrar mucha informacin
gratuita en Internet, con una muy buena documentacin.
Pero nuevamente se exige un alto conocimiento
de programacin.
Molestando un poco ms con DOS, podemos decir
que existe mucha bibliografa escrita, y an puede
encontrarse informacin en la red sobre E/S con este
sistema, sigue siendo la alternativa ms simple.
Simple vs Complicado
DOS es ms simple, ya que se trata de un sistema

100

monotarea (trabaja con una aplicacin a la vez). Linux


y Windows son sistemas multitarea (ms de una aplicacin
a la vez...) por lo que necesitan controlar estrictamente
que es lo que maneja cada aplicacin para que
en ningn momento se produzcan situaciones conflictivas
(por ejemplo, dos aplicaciones queriendo imprimir
a la vez). Para lograr su cometido, los sistemas multitareas
han tenido que perfeccionar niveles y permisos
que les permitan decidir en qu momento una aplicacin
accede a un dispositivo.
Niveles de Trabajo
Para explicar este concepto necesitaremos aclarar
la idea de proceso: un programa puede estar constituido
por varios procesos simultneos que realizan distintas
tareas. Cada proceso tiene asignado para s recursos
determinados (direcciones E/S disponibles, servicios
disponibles, cantidad de memoria asignada, prioridad
frente a otros procesos)
Con la aparicin de los procesadores 386, se empez
a hablar de niveles de privilegio o de ejecucin,
estos se clasificaban en:
El nivel 0, nivel Kernel o Monitor: aqu un proceso
tiene acceso irrestricto al hardware tiene acceso al
hardware. En este nivel se ejecuta el ncleo del sistema
operativo. Evidentemente el fallo de un programa en nivel
cero, tiene por consecuencia la cada inexorable de
la mquina.

101

Los niveles 1 y 2 estaban destinados a ejecutar


los drivers del sistema. En el caso de Microsoft, se opt
por ejecutarlos a nivel Kernel (nivel 0), Linux sigui
la misma tendencia.
71
El nivel 3 o nivel Usuario: All se ejecutan los
programas de usuario, los cuales slo pueden acceder
al hardware o a los recursos del sistema, a travs de
los niveles anteriores.
Un sistema operativo en si tiene numerosos procesos,
que se ejecutan en diferentes niveles, segn las necesidades
y operaciones a cumplir por cada uno. Podramos
hacer una analoga con una estructura de una
empresa, los gerentes (nivel 3) pueden decidir sobre el
destino de una planta de procesamiento, pero los operarios
(nivel 0) son los que trabajan directamente con
las mquinas y herramientas. Con esto podemos decir
que una instruccin desde el nivel de usuario puede
desencadenar varias operaciones a nivel de kernel sobre
el hardware.
A la vez, el nivel de usuario nos permite generalizar
ciertas operaciones. De esta manera, si un desarrollador
de software deseara reproducir un sonido,
no necesita aprender el funcionamiento interno de cada
placa de sonido existente, sino entregarle al sistema
operativo la orden de reproducir y ste, a travs
de drivers provistos por el fabricante del hardware instalado,

102

realizar la operacin.
Las transiciones de nivel (desde que se pide una
accin, hasta que se ejecuta una operacin E/S), slo
pueden hacerse a travs de puertas de tarea asignadas
por el ncleo (coordinador
supremo) del sistema. Ningn
proceso tiene acceso directo al
hardware con lo cual se evitan
cadas del sistema por errores
de programacin (al producirse
un error de programa en el
nivel 3, el sistema operativo toma
control, informa del error y
limpia totalmente la tarea y
restos de ella)
Un ejemplo: en la Figura
22 podemos ver el recorrido
de acciones que se van sucediendo
cuando una aplicacin
requiere acceder a un dispositivo
de almacenamiento externo
(por ejemplo, un disco rgido).
El acceso directo al dispositivo
se produce solamente
desde los procesos dentro del
ncleo.
Adquisicin de Datos Placa Interna

103

Cuando hablamos de adquisicin de datos, nos


referimos a tomar un valor analgico o digital (proveniente
de sensores, interruptores, etc.), convertirlo a
dato manipulable por la PC y almacenarlo en una direccin
de memoria determinada. Si bien los sensores
son externos, el dispositivo adquisidor puede ser interno
(en forma de placa de expansin con entradas analgicas
o digitales). Empezaremos mencionando los
distintos mtodos de comunicacin entre el elemento
adquisidor interno y la PC:
Por interrupciones: en este caso, un mdulo o
dispositivo (ya sea un puerto externo o elemento interno)
posee cierta inteligencia que le permite informar al
sistema acerca de nuevos datos entrantes. El mdulo
en cuestin produce una seal, el sistema operativo
interrumpe momentneamente sus operaciones en
respuesta a esa seal ejecutando una rutina, que puede
servir tanto para tomar datos de entrada como para
producir una salida.
A travs de Encuesta: en este caso, el sistema
consulta al dispositivo acerca del estado de los datos,
o toma directamente una lectura sin ninguna verificacin.
El dispositivo adquisidor adopta una actitud
ms bien pasiva, no reacciona a menos que el sistema
Figura 22
72
provoque una operacin de entrada o salida. A su vez,

104

los mtodos de encuesta se pueden distribuir en dos clasificaciones


fundamentales:
Utilizando de DMA: en este caso, el sistema informa
al dispositivo que se prepare a entregar o recibir
una cantidad determinada de datos con no ms de 3
instrucciones. A partir de ese momento, el dispositivo
mismo toma control del sistema, escribe o lee los datos
directamente de la RAM sin intervencin del microprocesador,
y al terminar el volcado de memoria devuelve
el control al sistema operativo.
A travs de operaciones directas de E/S: este es
un mtodo ms lento. A diferencia del DMA, el microprocesador
tiene que realizar registro por registro las
operaciones de E/S entre la memoria y el dispositivo
adquisidor. Por ejemplo, supongamos que tenemos que
volcar en memoria 256kbytes alojados en los registros
de un dispositivo adquisidor: por cada byte transferido,
el procesador primero tendra que leer cada dato del
registro del dispositivo adquisidor, procesarlo y luego
escribirlo en la memoria. Todo esto llevara varias instrucciones
de programa y de proceso, muchas ms que
con DMA, pero nos permitira ir evaluando dato por
dato antes de escribirlo a memoria (con DMA primero
volcamos a memoria, luego trabajamos con los datos
transferidos)
Instantneamente surge una duda, como hacemos
para implementarlo?. Hemos visto lo simple que es programar

105

microcontroladores (el assembler de PIC pinta


feo de lejos, pero al aprenderlo nos damos cuenta que
con unas pocas lneas podemos armar una buena secuencia
de automatismo).
En este caso, es un poco ms complicado: cualquier
proyecto de E/S utilizando los sistemas operativos
Linux o Windows no es tarea fcil... demanda conocimientos
de programacin que exceden el bsico y
requiere conocimientos de drivers y programacin.
Adquisidor Externo
Segn la aplicacin, los dispositivos adquisidores
pueden considerarse como cajas negras externas, conectadas
a los sensores e interruptores pon un lado, y
a un puerto externo de la PC por el otro. Este tipo de
elementos nos da gran portabilidad, ya que no necesitamos
desarmar la PC para trasladar el elemento adquisidor.
Los sistemas operativos actuales ofrecen libreras
o al menos nos dan la posibilidad de trabajar con los
puertos a travs de drivers provistos por el sistema. Uno
de los protocolos ms definidos por la diversidad de
aplicaciones es el RS-232 (o puerto serie), presente en
muchos PLCs y Dataloggers.
Como vimos, las Aplicaciones entran dentro del
modo Usuario y se comunican con el hardware a travs
de drivers y llamadas al sistema, los cuales se regulan
por restricciones y prioridades. Cada uno de los sistemas
vistos tiene sus peculiaridades con respecto a la

106

E/S directa.
Si bien DOS es el nico sistema de los mencionados
que soporta E/S directa, se considera obsoleto por
la comunidad informtica en Gral.
Windows en forma nativa no soporta E/S directa
desde una aplicacin.
Linux soporta E/S directa desde una aplicacin,
pero solamente si el que ejecuta esa aplicacin tiene
privilegios de root (administrador de sistema).
Tambin vimos que hay distintas maneras de comunicarse
con una placa conectada a la PC usando Interrupciones,
DMA y E/S. Pero lo que no aclaramos fue
que todos estos tipos de transferencia requieren en algn
momento E/S directa, tanto para programar el controlador
de DMA, como el de Interrupciones.
E/S en DOS
Las PCs recin adoptaron las caractersticas de seguridad
y enfoques de capa de usuario y de Kernel a
partir de la dcada del 90, con el surgimiento de Linux
y las versiones de Windows NT (que requeran una mayor
estabilidad que las versiones hogareas de Windows).
Por este motivo, cualquier lenguaje de programacin
de alto nivel que corra en DOS soporta E/S directa.
La industria nos ha llevado a ir escalando los sistemas
operativos y entornos ms amigables, ms tareas
simultneas, desechando lo anterior. De todas maneras,
este tipo de lenguajes y plataformas. puede ser

107

bastante til para tareas didcticas, ya que con pocos


conocimientos de programacin y con computadoras
73
de bajas prestaciones, se pueden realizar numerosos
proyectos que pueden llegar a ser vistosos, no tanto
por los colores de ventanas vistas en pantalla, sino por
los elementos controlados. Esto puede posibilitar que
muchas escuelas con escasos recursos puedan aprovechar
equipos antiguos para diseo de proyectos de
E/S.
Si poseemos una versin de DOS viejita, podemos
llegar a encontrar BASICA y GW-BASIC, variantes del
lenguaje de programacin BASIC. A partir de MSDOS
5.0 y hasta Windows 95 inclusive se incluy el
QBASIC (basado en el QuickBasic 4.5, pero sin compilador).
Tanto QBASIC como BASICA y GW-BASIC
son slo intrpretes (son siempre necesarios para ejecutar
los programas). Microsoft dej de proveer el
QBASIC en las versiones siguientes de Windows.
QBASIC nos provee dos simples instrucciones:
INP(Puerto): devuelve un byte (8 bits) desde un
puerto de E/S
OUT Puerto, dato:. enva un byte a un puerto de
E/S.
Recuadro 1
DEFINT A-Z
Cuenta=5000

108

CLS
PRINT Secuencia de Luces
PRINT Pulse una tecla para terminar...
DO
FOR I = 0 TO 7
Salida = 2 ^ I
OUT &h378,Salida
Retrasa Cuenta
NEXT
FOR I = 6 TO 0 STEP -1
Salida = 2 ^ I
OUT &h378,Salida
Retrasa Cuenta
NEXT
LOOP UNTIL INKEY$<>
END
SUB Retraso (Ciclos%)
FOR P% = 0 TO Ciclos
NEXT P%
END SUB
Figura 23
74
Dentro del Recuadro 1 podemos ver un simple
ejemplo donde a travs de un programa en QBASIC
ya travs del puerto paralelo hacemos una secuencia
de luces tipo Auto Fantstico.
En este ejemplo definimos una variable Cuenta, sta

109

nos permite acomodar la velocidad en que se desplazan


los leds a travs de la subrutina Retraso, cuya nica
funcin es hacer que el programa pierda tiempo de
la misma manera que podramos poner varias instrucciones
NOP en un programa de un PIC.
Se incluyen dos bucles FOR que determinan el desplazamiento
del bit que enciende cada led desde un
extremo hacia el otro y un bucle exterior que finaliza
cuando se presiona una tecla, terminando el programa.
Se debe aclarar que se ha tomado
la direccin &H378 (correspondiente al
LPT1). Segn la configuracin de su sistema,
puede ser que el puerto paralelo
donde se conectan los led responda a
la citada direccin o que deba cambiarse
por &h278 o &h3BC (esta ltima
direccin era muy utilizada en las PCs
que tenan placa de video con puerto
paralelo incluido). En caso de no saber
cul es la direccin que corresponde a
nuestro puerto, no rompemos nada con
intentar ver cul de las tres funciona, ya
que son direcciones destinadas especficamente a estos puertos. Escribir en ellas no provocar
ningn conflicto con ningn otro elemento de hardware
conectado.
En la figura 23 vemos una de tantas implementaciones

110

circuitales que puede utilizarse para demostrar este


ejemplo, en este caso colocamos un buffer 74LS244
para proteccin del puerto.
Los 5V que alimentan este circuito integrado pueden
obtenerse de la misma fuente de alimentacin de
la PC a travs de cualquiera de los cables rojos que alimentan
a los discos rgidos, disqueteras o lectoras de
CD-ROM.
Algo muy importante: para evitar daos, no olvide
verificar el circuito antes de conectarlo al puerto.
Tabla 1 - Instrucciones provistas por IO.DLL
Instruccin Uso
PortOut Escribe un byte al puerto especificado
PortWordOut Escribe una palabra (de 16 bits) al puerto especificado
PortDWordOut Escribe una palabra doble (de 32 bits) al puerto especificado
PortIn Lee un byte del puerto especificado.
PortWordIn Lee una palabra (16 bits) del puerto especificado
PortDWordIn Lee un palabra doble (32 bits) del puerto especificado
SetPortBit Setea en 1 el bit especificado del puerto indicado
ClrPortBit Setea en 0 el bit especificado del puerto indicado
NotPortBit Invierte el estado del bit especificado del puerto indicado
GetPortBit Lee el estado del bit especificado
RightPortShift Provoca una rotacin a la derecha del contenido del puerto
haciendo que LSB pase a MSB
LeftPortShift Provoca una rotacin a la izquierda el contenido del puerto
haciendo que MSB pase a LSB
IsDriverInstalled Devuelve un valor distinto de 0 si la DLL est cargada en
memoria

111

NOTA: LSB=Least Significative Bit (Bit Menos Significativo)


MSB=Most Significative Bit (Bit Ms Significativo)
Recuadro 2
Licencia y Cdigo Fuente
IO.DLL es completamente gratis! Sin embargo, usted no podr:
Cobrar esta librera de ninguna manera. Por ejemplo, usted no puede
venderla como un producto individual.
Esconder la IO.DLL detrs de un control OCX (utilizado por los lenguajes
de Microsoft) o control Delphi. Esto tambien se considera como trabajo
derivado y tambin debe proveerse gratuitamente.
Asumir la propiedad intelectual.
El autor no se hace responsable de las consecuencias de usar IO.DLL.
No se ofrecen garantas.
El cdigo fuente est disponible por u$s1000 (s, mil!) dlares. El autor
ofrece tambin la posibilidad de hacer una adaptacin a medida en el caso
de que algn usuario la requiera (con su tarifa, claro).
75
E/S directa con Windows
Windows 95/98 tiene una cierta permisividad sobre
las operaciones de E/S directas desde aplicaciones,
aunque esto es aplicable slo en algunas versiones
de lenguajes de programacin. (por ejemplo se
puede hacer un artilugio para tener E/S desde una
aplicacin realizada en Delphi 1.0, pero no se puede
con la versin 2.0). Adems, este tipo de operaciones
E/S requiere un poco de conocimientos de assembler
de 80x86, complicando ms la tarea de programacin.

112

A partir de Windows NT y sus sucesores (2000


y XP) el criterio de E/S es mucho ms estricto, implementaciones
de E/S que funcionan en Windows
95/98 probablemente no funcionen en Windows
2000/XP, salvo que sean implementadas a travs de
drivers (programables a travs del Microsoft DDK, que
junta 2 caractersticas problemticas: caro y difcil para
el programador principiante)
IO.DLL: un recurso ms que til
Aplicaremos una librera externa(IO.DLL) diseada
por Fred Bulback, un programador independiente, totalmente
ajeno a Microsoft (podemos ver su pgina
http://www.geekhideout.com). Esta librera permite
desarrollar aplicaciones que funcionen desde Windows
95 hasta Windows XP, pasando por todas las
versiones intermedias. Es muy verstil y provee varias
funciones que facilitan la tarea de Entrada-Salida, no
se necesitan conocimientos de assembler. Slo se requieren
conocimientos mnimos de algn lenguaje de
alto nivel como Visual Basic, C, o Delphi. El autor especifica
claramente en su pgina cuales son los lmites
de utilizacin, los conceptos bsicos legales se pueden
observar en el Recuadro 2. En la tabla 1 vemos
las instrucciones provistas por IO.DLL
Un Ejemplo en Visual Basic
A modo de ejemplo, veremos cmo realizar E/S en
Visual Basic a travs de IO.DLL. Para poder utilizar esta

113

librera basta con copiar el archivo IO.DLL en la carpeta


donde est el programa en desarrollo y agregar en
un mdulo BAS las siguientes declaraciones: vea el cuadro
3. Si bien es un ejemplo que puede parecer bastante
tonto, se quiere mostrar que con pocas lneas de programa
podemos lograr respuestas por parte del hardware
a travs de eventos ocurridos en la PC. De la misma
manera, a travs de las funciones de entrada PortIN y
PortWordIN, podramos guardar el contenido del puerto
en una variable para su manipulacin y posible emisin
de una nueva salida.
Con conocimientos mnimos de cualquier lenguaje
de programacin podramos adaptar el ejemplo en
DOS para utilizarlo en Windows, ya que existe la instruccin
OUT de Qbasic y el PortOut de IO.DLL son similares,
as como tambin hay similitud entre la funcin
INP de Qbasic y su correspondiente PortIN de la libreRecuadro
3
Private Declare Sub PortOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As
Byte)
Private Declare Sub PortWordOut Lib "IO.DLL" (ByVal Port As Integer, ByVal
Data As Integer)
Private Declare Sub PortDWordOut Lib "IO.DLL" (ByVal Port As Integer, ByVal
Data As Long)
Private Declare Function PortIn Lib "IO.DLL" (ByVal Port As Integer) As Byte
Private Declare Function PortWordIn Lib "IO.DLL" (ByVal Port As Integer) As
Integer
Private Declare Function PortDWordIn Lib "IO.DLL" (ByVal Port As Integer) As
Long

114

Private Declare Sub SetPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As
Byte)
Private Declare Sub ClrPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As
Byte)
Private Declare Sub NotPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As
Byte)
Private Declare Function GetPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal
Bit As Byte) As Boolean
Private Declare Function RightPortShift Lib "IO.DLL" (ByVal Port As Integer,
ByVal Val As Boolean) As Boolean
Private Declare Function LeftPortShift Lib "IO.DLL" (ByVal Port As Integer,
ByVal Val As Boolean) As Boolean
Private Declare Function IsDriverInstalled Lib "IO.DLL" As Boolean
76
ra de Fred Bulback. Si hablamos del puerto paralelo, podremos
encontrar mucha informacin en la web referida
al tema con proyectos relacionados al control desde PC
de montajes electrnicos.
En el Recuadro 3 encontraremos varias direcciones
tiles con implementaciones interesantes a travs del
puerto paralelo en otros lenguajes de programacin.
Ojal que este tema sea disparador de grandes ideas,
De esta manera damos por finalizada esta obra aclarando
que al momento de escribir erstas lneas estamos
preparando otro tomo de la coleccin del C lub Saber
Electrnica destinado a explicar diferentes sistemas de
adquisicin de datos y manejo de circuitos a travs de los
diferentes puertos de la PC.

115

3. Algoritmos para programacin en tiempo real


3.1

Introduccin

En el siguiente trabajo pretendemos presentar una serie de concepto y


definiciones propios del estudio de los Algoritmos, su anlisis y diseo.
En el mismo podremos encontrar los conceptos de algoritmo y algunos de
sus componentes, anlisis y diseo. Tambin veremos los diferentes tipos de
formas y tamaos o medidas en que se pueden almacenar y representar los
datos y estructuras en un algoritmo o programa. En ese mismo orden
encontraremos las diferentes tcnicas para disearlos como son el mtodo
de la fuerza bruta, el voraz, divide y vencers, programacin dinmica, de
vuelta atrs, entre otros.
De igual forma podremos ver las definiciones y algunas caractersticas,
reglas, normas, tipos de algoritmos de bsqueda y ordenacin as como sus
aplicaciones.
Finalmente veremos los que es la verificacin y derivacin de programas,
donde daremos los conceptos bsicos de semntica y sus tipos haciendo
mayor nfasis en la semntica axiomtica, la recursividad e iteracin, los
diseos de estos ltimos, as como los tpicos ciclos utilizados en algoritmos
y programas y los paso a tener en cuenta al momento de desarrollar un
algoritmo iterativo o recursivo.

3.2

Justificacin

Es importante el estudio y conocimiento de lo que hoy conocemos como


Algoritmos Computacionales, que desde su aparicin hasta nuestros das es,
y seguir siendo; vital para el desarrollo de aplicaciones para computadoras
116

y el manejo y dominio de la lgica de programacin para resolver


problemas.

3.3

Motivacin

Como estudiantes de la Facultad de Ciencias y Tecnologa Escuela de


Informtica y Computacin de la Universidad Dominicana Organizacin y
Mtodos O&M con aspiraciones de iniciarnos como Ingeniero en Sistemas y
Computacin. Con el objetivo inmediato de aprobar con los mejores meritos
la asignatura de Algoritmos Computacionales.

3.4

Objetivos

Posibilitar la estudiante alcanzar una visin sistemtica de lo que


conocemos sobre Los Algoritmos Computacionales.

1.4.2 Especficos :
Introducir los conceptos propios sobre Algoritmo, su importancia en el
mundo de las aplicaciones para computadoras y el manejo de lgica de
programacin.

Proporcionar una idea de su uso.

Visualizar sus ventajas e importancia.

Definir sus tipos y variantes.

Proporcionar conceptos sobre su anlisis y diseo.

Proporcionar concepto sobre las tcnicas de diseo.

Desglosar sus variantes (ordenacin, bsqueda, etc. ).

1.2 Marco Historico


Un algoritmo es un conjunto de operaciones y procedimientos que deben
seguirse para resolver un problema. La palabra algoritmo se deriva del
nombre latinizado del gran Matemtico rabe Mohamed Ibn Al Kow Rizmi, el
cual escribi sobre los aos 800 y 825 su obra Quitad Al Mugabala, donde se
recoga el sistema de numeracin hind y el concepto del cero. Fue
Fibinacci, el que tradujo la obra al latn y el inicio con la palabra: Algoritmi
Dicit.
El lenguaje algortmico es aquel por medio al cual se realiza un anlisis
previo del problema a resolver y encontrar un mtodo que permita
resolverlo. El conjunto de todas las operaciones a realizar y e orden en que
se deben efectuarse, se le denomina algoritmo.

117

Es un mtodo para resolver un problema mediante una serie de datos


precisos, definidos y finitos.

1.3 Generalidades
El programador de computadoras es ante que nada una persona que
resuelve problemas, por lo que para llegar a ser un programador eficaz se
necesita aprender a resolver problemas de un modo riguroso y sistemtico.
A la metodologa necesaria para resolver problemas mediante programas se
denomina Metodologa de la Programacin. El eje central de esta
metodologa es el concepto, ya tratado, de algoritmo.
Un algoritmo es un mtodo para resolver un problema. Aunque la
popularizacin del trmino ha llegado con el advenimiento de la era
informtica, algoritmo proviene de Mohammed al-Khowarizmi, matemtico
persa que vivi durante el siglo IX y alcanzo gran reputacin por el
enunciado de las reglas para sumar, restar, multiplicar y dividir nmeros
decimales; la traduccin al latn del apellido de la palabra algorismus derivo
posteriormente en algoritmo. Euclides, el gran matemtico griego (del siglo
IV antes de Cristo) que invento un mtodo para encontrar el mximo comn
divisor de dos nmeros, se considera con Al-Khowarizmi el otro gran padre
de la algoritmia (ciencia que trata de los algoritmos).
El profesor Niklaus Wirth, inventor de Pascal, Modula-2 y Oberon, titulo uno
de sus mas famosos libros, Algoritmos + Estructuras de Datos = Programas,
significndonos que solo se puede llegar a realizar un buen programa con el
diseo de un algoritmo y una correcta estructura de datos. Esta ecuacin
ser de una de las hiptesis fundamentales consideradas en esta obra.
La resolucin de un problema exige el diseo de un algoritmo que resuelva
el problema propuesto.

Los pasos para la resolucin de un problema son:


1.
Diseo de algoritmo, que describe la secuencia ordenada de pasos
que conducen a la solucin de un problema dado. (Anlisis del problema y
desarrollo del algoritmo).

118

2.
Expresar el algoritmo como un programa de lenguaje de
programacin adecuado. (Fase de codificacin.)
3.

Ejecucin y validacin del programa por la computadora.

Para llegar a la realizacin de un programa es necesario el diseo previo de


algoritmo, de modo que sin algoritmo no puede existir un programa.
Los algoritmos son independientes tanto del lenguaje de programacin en
que se expresan como de la computadora que lo ejecuta. En cada problema
el algoritmo se puede expresar en un lenguaje diferente de programacin y
ejecutarse en una computadora distinta; sin embargo, el algoritmo ser
siempre el mismo. As, por ejemplo, en una analoga con la vida diaria, una
receta de un plato de cocina se puede expresar en espaol, ingles o francs,
pero cualquiera que sea el lenguaje, los pasos para la elaboracin del plato
se realizaran sin importar el idioma del cocinero.
En la ciencia de la computacin y en la programacin, los algoritmos son
ms importantes que los lenguajes de programacin o las computadoras.
Un lenguaje de programacin es tan solo un medio para expresar un
algoritmo y una computadora es solo un procesador para ejecutarlo. Tanto
el lenguaje de programacin como la computadora son los medios para
obtener un fin: conseguir que el algoritmo se ejecute y se efecte el proceso
correspondiente.
Dada la importancia del algoritmo en la ciencia de la computacin, un
aspecto muy importante ser el diseo de algoritmos. El diseo de la
mayora de los algoritmos requiere creatividad y conocimientos profundos
de la tcnica de la programacin. En esencia, la solucin de un problema se
puede expresar mediante un algoritmo.

3.5

Caractersticas de los Algoritmos:

Las caractersticas fundamentales que debe cumplir todo algoritmo son:

Un algoritmo debe ser preciso e indicar el orden de realizacin de


cada paso.

Un algoritmo debe estar definido. Si se sigue un algoritmo dos veces,


se debe obtener el mismo resultado cada vez.

Un algoritmo debe ser finito. Si se sigue un algoritmo se debe


terminar en algn momento; o sea, debe tener un numero finito de pasos.
La definicin de un algoritmo debe definir tres partes: Entrada, Proceso y
Salida. En el algoritmo de receta de cocina citado anteriormente se tendr:
Entrada: ingrediente y utensilios empleados.

119

Proceso: elaboracin de la receta en la cocina.


Salida: terminacin del plato (por ejemplo, cordero).

3.6

Ejemplo de Algoritmo:

Un cliente ejecuta un pedido a una fbrica. Esta examina en su banco de


datos la ficha del cliente; si el cliente es solvente entonces la empresa
acepta el pedido; en caso contrario rechazara el pedido. Redactar el
algoritmo correspondiente.
Los pasos del algoritmo son:
1.

inicio

2.

leer el pedido

3.

examinar la ficha del cliente

4.
si el cliente es solvente aceptar pedido; en caso contrario, rechazar
pedido
5.

fin

1.6 Diseo del Algoritmo:


En la etapa de anlisis del proceso de programacin se determina que hace
el programa. En la etapa de diseo se determina como hace el programa la
tarea solicitada. Los mtodos mas eficaces para el proceso de diseo se
basan en el conocido por Divide y Vencers, es decir, la resolucin de un
problema complejo se realiza dividiendo el problema en sub problemas y a
continuacin dividir estos sub problemas en otros de nivel mas bajo, hasta
que pueda ser implementada una solucin en la computadora. Este mtodo
se conoce tcnicamente como diseo descendente (Top Down) o modular.
El proceso de romper el problema en cada etapa y expresar cada paso en
forma ms detallada se denomina refinamiento sucesivo.
Cada sub programa es resuelto mediante un modulo (sub programa) que
tiene un solo punto de entrada y un solo punto de salida.
Cualquier programa bien diseado consta de un programa principal (el
modulo de nivel mas alto) que llama a sub programas (mdulos de nivel
mas bajo) que a su vez pueden llamar a otros sub programas. Los
programas estructurados de esta forma se dice que tienen un diseo
modular y el mtodo de romper el programa en mdulos ms pequeo se
llama Programacin Modular. Los mdulos pueden ser planeados,
codificados, comprobados y depurados independientemente (incluso por
diferentes programadores) y a continuacin combinarlos entre si. El proceso
implica la ejecucin de los siguientes pasos hasta que el programa se
termina:

120

programar modulo.

Comprobar el modulo.

Si es necesario, depurar el modulo.

Combinar el modulo con los mdulos anteriores.

El proceso que convierte los resultados del anlisis del problema en un


diseo modular con refinamiento sucesivo que permitan una posterior
traduccin al lenguaje se denomina diseo de algoritmo.
El diseo del algoritmo es independiente del lenguaje de programacin en el
que se vaya a codificar posteriormente.

3.7
SISTEMAS DE PROCESAMIENTO DE LA
INFORMACIN:
Un ordenador es una mquina de procesamiento de informacin. Es
una mquina porque tiene cables, chips,... , procesa porque es capaz de
procesar cosas, e informacin porque maneja conjuntos ordenados de
datos).
Para procesar la informacin est el hardware (microprocesador,
RAM,...), y el software (que sirve para manejar el hardware).

3.8

CONCEPTO DE ALGORITMO:

El algoritmo trata de resolver problemas mediante programas.


Fases:
Anlisis preliminar o evaluacin del problema: Estudiar el problema en
general y ver que parte nos interesa.
Definicin o anlisis del problema: Ver que es lo que entra y que es lo
que sale, las posibles condiciones o restricciones, ...
-

Diseo del algoritmo: Disear la solucin.

121

El programa: Codificacin del algoritmo en un lenguaje de


programacin.
Ejecucin del programa y las pruebas: Ver si el programa hace lo que
queramos.
Qu es un algoritmo?:
Es una formula para resolver un problema. Es un conjunto de acciones
o secuencia de operaciones que ejecutadas en un determinado orden
resuelven el problema. Existen n algoritmos, hay que coger el ms efectivo.
Caractersticas:
-

Tiene que ser preciso.

Tiene que estar bien definido.

Tiene que ser finito.

La programacin es adaptar el algoritmo al ordenador.


El algoritmo es independiente segn donde lo implemente.

1.9. EL LENGUAJE DE PROGRAMACIN:


Existen diferentes tipos, de bajo nivel y de alto nivel.
Instrucciones en una computadora y sus tipos:
Una instruccin es cada paso de un algoritmo, pero que lo ejecuta el
ordenador. Un programa es un conjunto de instrucciones que ejecutadas
ordenadamente resuelven un problema.

3.9

Tipos de instrucciones:

E/S: Pasar informacin del exterior al interior del ordenador y al revs.

Aritmtico-lgicas: Aritmticas: +,-,*,... ; Lgicas: or, and, <, >, ...

Selectivas: Permiten la seleccin de una alternativa en funcin de una


condicin.
Repetitivas: Repeticin de un nmero de instrucciones un nmero
finito de veces.

122

3.10

Tipos de lenguajes:

Lenguaje mquina: Todo se programa con 1 y 0, que es lo nico que


entiende el ordenador.
Ventaja: No necesita ser traducido.
Inconveniente: La dificultad, la confusin, para corregir errores, es propia de
cada mquina.
De bajo nivel o ensamblador: Se utilizan mnemotcnicos
(abreviaturas).
Ventaja: No es tan difcil como el lenguaje mquina.
Inconvenientes: Cada mquina tiene su propio lenguaje, necesitamos un
proceso de traduccin.

El programa escrito en ensamblador se llama programa fuente y el


programa que se obtiene al ensamblarlo se llama programa objeto.
-

Lenguajes de alto nivel: Los ms cercanos al lenguaje humano.

Ventaja: Son independientes de cada maquina (los compiladores aceptan las


instrucciones estndar, pero tambin tienen instrucciones propias).
Inconveniente: El proceso de traduccin es muy largo y ocupa ms recursos.
Aprovecha menos los recursos internos.

1.9.3 Proceso de traduccin y ejecucin de un programa escrito en un


lenguaje a alto nivel:
Usamos un editor y obtenemos el programa fuente, y el compilador
es el que traduce el programa al lenguaje mquina. El compilador
internamente ha sido diseado para traducir.
El compilador obtiene el programa o el fichero objeto. El compilador
tiene que buscar los errores.
Normalmente no sale un ejecutable, sino que necesita elementos,
libreras, ...
Mediante un linkador juntamos el programa objeto y las libreras, y se
forma un programa ejecutable.
Cuando se ejecuta el programa, el cargador lleva al programa a
memoria para que ste pueda ser ejecutable.
Debbuger: Depura el programa ejecutndolo paso a paso, viendo la
memoria paso a paso para encontrar el error.

123

Programa fuente (Editor)

Compilador

Error

Programa objeto

Librerias

Linkador

Ejecutables

Para traducir puedo utilizar el compilador o un interprete, con el compilador


cojo todo el programa al completo y el interprete lee cada instruccin y lo
va ejecutando.
El interprete es ms rpido, pero menos eficiente.
Todos los lenguajes tienen compiladores, pero no todos tienen interpretes.
LISP (Lenguaje de inteligencia artificial) : Slo tiene interpretes.

124

3.11
DATOS, TIPOS DE DATOS Y OPERACIONES
PRIMITIVAS:
- Dato: Es un objeto o elemento que tratamos a lo largo de diversas
operaciones.
Tienen 3 caracteristicas:
-

Un nombre que los diferencia del resto.

Un tipo que nos determina las operaciones que podemos hacer con
ese dato.
-

Un valor que puede variar o no a lo largo de la operacin.

Existen diferentes tipos de datos.


1.10.1 Caracteristicas de los tipos:
Cada tipo se representa o almacena de forma diferente en la
computadora.
Bit:1/0; Byte=8 bits.
-

Un tipo agrupa a los valores que hacen las mismas operaciones.

Si tiene definida una relacin de orden es un tipo escalar.

Cardinalidad de un tipo: Nmero de valores distintos que puede tomar


un tipo.
Pueden ser finitos (caracteres), y si son infinitos el ordenador los toma como
finitos porque esta limitado por el tamao de los bytes en el que la cifra es
almacenada.
1.10.2 Los datos pueden ser:
-

Simples: Un elemento.

Compuestos: Varios elementos.

1.10.3 Los tipos pueden ser:


-

Estandar: Que vienen en el sistema por defecto.

No estandar: Son los que crea el usuario.

1.10.4 Los tipos simples ms importantes son:


-

Numricos.

125

Lgicos.

Caracteres.

Numricos:

Entero: Subconjunto finito del conjunto matemtico de los numros


enteros. No tiene parte decimal. El rango de los valores depende del tamao
que se les da en memoria.
Real: Subconjunto finito del conjunto matemtico de los nmeros
reales. Llevan signo y parte decimal. Se almacenan en 4 Bytes
(dependiendo de los modificadores). Si se utilizan nmeros reales muy
grandes, se puede usar notacin cientfica que se divide en mantisa, base y
exponente; tal que el valor se obtiene multiplicando la mantisa por la base
elevada al exponente.

Lgicos o booleanos:

Aquel que slo puede tomar uno de los dos valores, verdadero o falso
(1/0).

Carcter:

Abarca al conjunto finito y ordenado de caracteres que reconoce la


computadora (letras, digitos, caracteres especiales, ASCII).
Tipo de cadena o String: Conjunto de caracteres, que van a estar entre .
El propio lenguaje puede aadir ms tipos, o se pueden aadir
modificadores.
Entero : Int Long int
En algunos lenguajes se definen tipos especiales de fecha y hora, sobre todo
en los ms modernos.

3.12

CONSTANTES Y VARIABLES:

Constantes: Tienen un valor fijo que se le da cuando se define la


constante y que ya no puede ser modificado durante la ejecucin.
Variables: El valor puede cambiar durante la ejecucin del algoritmo,
pero nunca varia su nombre y su tipo.
Antes de usar una variable hay que definirla o declararla, al hacerlo hay que
dar su nombre y su tipo. El nombre que le damos tiene que ser un nombre
significativo, va a ser un conjunto de caracteres que dependiendo del
lenguaje hay restricciones. Tiene que empezar por una letra, y el tamao
depende del lenguaje.
Identificador: Palabra que no es propia del lenguaje.
126

El valor de la variable si al declararla no se la inicializa, en algunos


lenguajes toma una por defecto. En cualquier caso el valor de la variable
podemos darle uno incial o podemos ir variandolo a lo largo de la ejecucin.
Las constantes pueden llevar asociados un nombre o no, si no lo
llevan, se llaman literales. Su valor hay que darlo al definir la constante y ya
no puede cambiar a lo largo de la ejecucin, y en cuanto al tipo,
dependiendo de los lenguajes en algunos hay que ponerlo, y en otros no
hace falta ponerlo porque toma el tipo del dato que se le asigna. Const
PI=3,1416.
Hay que inicializar todas las variables.
< > Hay que poner algo obligatoriamente.
[ ] Puede llevar algo o no llevarlo.
La ventaja de usar constantes con nombre es que en cualquier lugar
donde quiera que vaya la constante, basta con poner su nombre y luego el
compilador lo sustituira por su valor.
Las constantes sin nombres son de valor constante: 5, 6, a, hola.
Cuando una cadena es de tipo carcter, se encierra entre a.
Relacin entre variables y constantes en memoria:
Al detectar una variable o una constante con nombre, automaticamente se
reserva en memoria espacio para guardar esa variable o constante. El
espacio reservado depende del tipo de la variable.
En esa zona de memoria es en la que se guarda el valor asociado a la
variable o constante y cuando el programa use esa variable, ira a esa zona
de memoria a buscar su valor.

3.13

EXPRESIONES: TIPOS Y OPERADORES:

Una expresin es una combinacin de constantes, variables, signos


de operacin, parntesis y nombres especiales (nombres de funciones
estandar), con un sentido unvoco y definido y de cuya evaluacin resulta un
nico valor.
Toda expresion tiene asociada un tipo que se corresponde con el tipo
del valor que devuelve la expresion cuando se evalua, por lo que habr
tantos tipos de expresiones como tipos de datos. Habra expresiones
numricas y lgicas.

127

Numricas: Operadores aritmticos.


Son los que se utilizan en las expresiones numricas (una
combinacin de variables y/o constantes numricas con operadores
aritmticos y que al evaluarla devuelve un valor numrico.
+, -, *, /.
Operacin resto: Lo que devuelve es el resto de una divisin entera.
Mod: Pascal. 5 mod 3 = 2
%: C.
Divisin entera: Nos devuelve el cociente de una divisin entera (en la que
no se sacan decimales).
Div: Pascal.

5 div 3 = 1

\: C.
Potencia: ^ 5^2.
Todos estos operadores son binarios (el operador se situa en medio),
el menos tambien puede ser unario (lleva un nico operando) y significa
signo negativo.
Reglas de precedencia:
El problema es cuando una expresin entera segn como la evalue
pueda dar diferentes valores.
7*3+4 25
49
La solucin es aplicar prioridad entre los operadores, de modo que
ante la posibilidad de usar varios siempre aplicaremos primero el de mayor
prioridad.
Cada lenguaje puede establecer sus propias reglas de prioridad o
precedencia de operadores. Si no nos acordamos, siempre podemos poner
( ).
1) ^
2) * / div mod
3) + Entre dos operaciones que tienen la misma precedencia para resolver
la ambigedad, hay que usar la regla de la asociatividad. La ms normal es
la de la asociatividad a izquierdas (primero lo de la izquieda).

128

1.13 Expresiones lgicas: Operadores relacionales y lgicos.


Una expresin lgica es aquella que slo puede devolver dos valores
(Verdadero o Falso). Los valores que pueden aparecer en una expresin
lgica son de 2 tipos: lgicos y relacionales.
La particularidad de las expresiones lgicas es que mientras en una
expresin numrica por devolver un valor numrico los operandos solo
pueden ser nmeros, en una expresin lgica los operandos no tienen
porque ser booleanos aunque se devuelva un valor booleano. Esto es lo que
ocurre cuando en la expresin lgica utilizamos operadores relacionales con
lo cual se obtienen valores lgicos o booleanos a partir de otros que no lo
son.
En cambio cuando los operadores son lgicos los operandos
obligatoriamente tambien tienen que ser lgicos.
Operadores relacionales:
<
>
=
<> en C: !=

< Operando1> operador < Operando2>


5

>

Verdadero

Cmo se evalua una expresin relacional?:


-

Primero se evalua el primer operando y se sustituye por su valor.

Luego se evalua el seguno operando y se sustituye por su valor.

Finalmente se aplica el operador relacional y se devuelve el valor


booleano correspondiente.
((3*2)+1-5^2) < (2-1)
-18

<

Verdadero.

El problema del tipo real:


Desde la informtica, los numeros reales son finitos, ya que tenemos
un mximo de cifras decimales. Cuando trabajamos con un =,
matematicamente da un valor exacto, pero informaticamente no es exacto.

129

1/5 * 5 =1
1.0/5.0 *5.0 <>1.0
Soluciones:
La que nos aporte el propio lenguaje de programacin. Se considera
un valor de error.
-

Trabajar con nmeros enteros siempre que sea posible.

Utilizar las comparaciones <> en vez de si es posible.

Si hay que preguntar por igual, cambiar la condicin utilizando


valores absolutos y un valor mnimo de error.
Si la diferencia < 0.00000001 y ABS (A-B)< min ; son iguales.
Operadores lgicos:
El problema es que a veces queremos preguntar o evaluar por ms de
una condicin al mismo tiempo y para esto estan los operadores lgicos.
Y and &&
O or !!
No not ~!

Y, O, son operadores binarios (necesitan 2 operandos de tipo logico).


Operando 1 Operador Operando 2
El No es unario y se coloca primero el No, y despues el operando.
El resultado es lgico y depende de:
Operando 1 Operando 2 AND
V

OR

El No niega :
NOT

1/0
130

Prioridades de los operadores:


-

Lo ms prioritario es el NOT

Luego el Y y el O.

<, > =,...

Tabla de prioridades:
^ NO
/ div mod y
+-O
<, >, =, <>,...

3.14

FUNCIONES INTERNAS:

Son funciones matemticas diferentes de las operaciones bsicas


pero que se incorporan al lenguaje y que se consideran estandar. Dependen
del lenguaje. Normalmente se encuentran en la librera de matemticas del
lenguaje de programacin.
Frmulas:
Abs (x)
Arctan (x)
Cos (x)
Sen (x)
Exp (x)
Ln (x)
Log 10 (x)
Redondeo (x)
Trunc (x)
Cuadrado (x)
Raiz (x)

131

1.15 . OPERACIN DE ASIGNACIN:


Consiste en atribuir un valor a una variable. El valor sera una
expresin (constante, variable,...).

Otros lenguajes = , :=

Variable a la que se le asigna el valor el valor que le vamos a asignar.


A5

En C A = = B Comparacin
A = B Asignacin
En Pascal A:=B Asignacin
A=B Comparacin
El proceso de asignacion se realiza en 2 fases:
Se evala la expresin de la parte derecha de la asignacin
obteniendose un nico valor.
-

Se asigna ese valor a la variable de la parte izquierda.

Qu es lo que hay que tener en cuenta?:


-

En la parte izquierda slo puede haber una variable.

La variable a la que se le asigna el valor pierde su valor anterior.

La variable que aparece en la derecha ya que como se evalua primero


la de la derecha cuando se tenga que evaluar el valor de esa variable se
tomara su valor antiguo.
EL TIPO DEL VALOR QUE SE OBTIENE AL EVALUAR LA PARTE DERECHA
TIENE QUE SER EL MISMO QUE EL TIPO DE LA VARIABLE DE LA PARTE
IZQUIERDA, ES DECIR A UNA VARIABLE SOLO SE LE PUEDEN DAR VALORES
DE SU MISMO TIPO.
- En Pascal da un error.
- En C, no da error porque el compilador trunca el numero.
A: entero
A2

132

A 3*A + A = 8

1.15 . ENTRADA Y SALIDA DE LA INFORMACIN:


Las dos operaciones bsicas de cada salida son las de lectura y de escritura.
La lectura es equivalente a la asignacin en cuanto que va a haber una
variable que recibe un valor, pero este valor no resulta de evaluar ninguna
expresin, sino que el valor lo vamos a leer de un dispositivo externo de
entrada.
Leer (nombre de la variable)
El valor introducido por el dispositivo externo, tiene que ser del mismo tipo
del que la variable que se le asigne.
La operacin de escritura lo que hace es mostrar el valor de una variable en
un dispositivo externo de salida.
Escribir (variable)
La operacin de escritura no es una operacin destructivo en memoria.
Al pedir un valor al usuario hay que decirle que es lo que se le quiere
pedir escribiendo un mensaje.

2. ANALISIS DE ALGORITMOS

Recursos De Computadores Y Complejidad


Algoritmo: Conjunto de reglas para resolver un problema. Su ejecucin
requiere unos recursos.

Un algoritmo es mejor cuantos menos recursos consuma, su facilidad de


programarlo, corto, fcil de entender, robusto, etc.
Criterio empresarial: Maximizar la eficiencia.
Eficiencia: Relacin entre los recursos consumidos y los productos
conseguidos.
Recursos consumidos: Tiempo de ejecucin.
Memoria principal: Entradas/salidas a disco.
Comunicaciones, procesadores, etc.

133

Lo que se consigue: Resolver un problema de forma exacta, forma


aproximada o algunos casos.

Recursos consumidos:
Ejemplo. Cuntos recursos de tiempo y memoria consume el siguiente
algoritmo sencillo?
i:= 0
a[n+1]:= x
repetir
i:= i + 1
hasta a[i] = x
Respuesta: Depende.
De qu depende? De lo que valga n y x, de lo que haya en a, de los tipos
de datos, de la mquina...
En general los recursos dependen de:Factores externos.
El ordenador donde lo ejecutemos: 286, Pentium III, Cray,...
El lenguaje de programacin y el compilador usado.
La implementacin que haga el programador del algoritmo. En particular, de
las estructuras de datos utilizadas.
Tamao de los datos de entrada.
Ejemplo. Calcular la media de una matriz de NxM.
Contenido de los datos de entrada.Mejor caso. El contenido favorece una
rpida ejecucin.
Peor caso. La ejecucin ms lenta posible.
Caso promedio. Media de todos los posibles contenidos.
Los factores externos no aportan informacin sobre el algoritmo.
Conclusin: Estudiar la variacin del tiempo y la memoria necesitada por un
algoritmo respecto al tamao de la entrada y a los posibles casos, de forma
aproximada (y parametrizada).
externos no aportan informacin sobre el algoritmo.
Normalmente usaremos la notacin T(N)=..., pero qu significa T(N)?

134

Tiempo de ejecucin en segundos. T(N) = bN + c.


Suponiendo que b y c son constantes, con los segundos que tardan las
operaciones bsicas correspondientes.
Instrucciones ejecutadas por el algoritmo. T(N) = 2N + 4.
Tardarn todas lo mismo?
Ejecuciones del bucle principal. T(N) = N+1.
Cunto tiempo, cuntas instrucciones,...?
Sabemos que cada ejecucin lleva un tiempo constante, luego se diferencia
en una constante con los anteriores.
Asignacin de tiempos, para el conteo de instrucciones. Algunas reglas
bsicas.
Operaciones bsicas (+, -, *, :=,...): Una unidad de tiempo, o alguna
constante.
Operaciones de entrada salida: Otra unidad de tiempo, o una constante
diferente.

Bucles FOR: Se pueden expresar como una sumatoria, con los lmites del
FOR.
IF y CASE: Estudiar lo que puede ocurrir. Mejor caso y peor caso segn la
condicin. Se puede predecir cundo se cumplirn las condiciones?
Llamadas a procedimientos: Calcular primero los procedimientos que no
llaman a otros.
Bucles WHILE y REPEAT: Estudiar lo que puede ocurrir. Existe una cota
inferior y superior del nmero de ejecuciones? Se puede convertir en un
FOR?
El anlisis de algoritmos tambin puede ser a posteriori: implementar el
algoritmo y contar lo que tarda para distintas entradas.
Ejemplo. Programa cifras.exe:
N= 4, T(4)= 0.1 ms
N= 5, T(5)= 5 ms
N= 6, T(6)= 0.2 s
N= 7, T(7)= 10 s
N= 8, T(8)= 3.5 min

135

Qu conclusiones podemos extraer?


Anlisis a priori: Evitamos la implementacin, si el algoritmo es poco
eficiente. Podemos hacer previsiones. Podemos comparar con otros
algoritmos.

Medidas Asintoticas
Notacin asinttica:
El tiempo de ejecucin T(n) est dado en base a unas constantes que
dependen de factores externos.
Nos interesa un anlisis que sea independiente de esos factores.
Notaciones asintticas: Indican como crece T, para valores suficientemente
grandes (asintticamente) sin considerar constantes.
O(T): Orden de complejidad de T.
W(T): Orden inferior de T, u omega de T.
Q(T): Orden exacto de T.
Orden de complejidad de f(n): O(f)
Dada una funcin f: N R+, llamamos orden de f al conjunto de todas las
funciones de N en R+ acotadas superiormente por un mltiplo real positivo
de f, para valores de n suficientemente grandes.
O(f)= { t: N R+ / $ c R+, $ n0 N, " n n0:

t(n) cf(n) }

Nota:
O(f) es un conjunto de funciones, no una funcin.
Valores de n sufic. Grandes...: no nos importa lo que pase para valores
pequeos.
Funciones acotadas superiormente por un mltiplo de f...: nos quitamos
las constantes.
La definicin es aplicable a cualquier funcin de N en R, no slo tiempos de
ejec.

Propiedades
P1. Si f O(g) y g O(h) entonces f O(h).
Si f W(g) y g W(h) entonces f W(h)

136

Ej. 2n+1 O(n), n O(n2) 2n+1 O(n2)


P2. Si f O(g) entonces O(f) O(g).
Cmo es la relacin para los W?
P3. Dadas f y g de N en R+, se cumple:
i) O(f) = O(g) f O(g) y g O(f)
ii) O(f) O(g) f O(g)
La relacin de orden entre O(..) es completa? Dadas f y g, se cumple
O(f)O(g) O(g)O(f)?
P4. Dadas f y g, de N en R+, O(f+g) = O(max(f, g)).
W(f+g) = W(max(f+g))
Y para los Q(f+g)?
Es cierto que O(f - g) = O(max(f, -g))?
P5. Dadas f y g de N en R+, se cumple:
i) limn f(n) R+ O(f)=O(g), W(f)=W(g), Q(f)=Q(g)
g(n)
ii) limn f(n) = 0 O(f) O(g), W(g) W(f)
g(n)
P5. Ej. Qu relacin hay entre O(log2 n) y O(log10 n)?
P6. Dadas f y g de N en R+, O(f)=O(g) Q(f)=Q(g) f Q(g) W(f)=W(g)
P7. Dadas f y g de N en R+, se cumple:
i) limn f(n) R+ O(f) = O(g)
g(n)
ii) limn f(n) = 0 O(f) O(g)
g(n)
iii) limn f(n) = + O(f) O(g)
g(n)

Notacin con varios parmetros:

137

En general, el tiempo y la memoria consumidos pueden depender de


muchos parmetros.
f: Nm R+ (f: Nx...m..xN R+)
Ej. Memoria en una tabla hash. M(B,n, l, k) = kB+l+n+2kn
Orden de complejidad de f(n1, n2, ..., nm): O(f)
Dada una funcin f: Nm R+, llamamos orden de f al conjunto de todas las
funciones de Nm en R+ acotadas superiormente por un mltiplo real
positivo de f, para valores de (n1, ..., nm) suficientemente grandes.
O(f)= { t: Nm R+ / $ c R+, $ n1, n2, .., nm N, " k1 n1 ,
k2 n2 ,..," km nm : t(k1, k2, ..., km) cf(k1, k2, ..., km) }
De la misma forma, podemos extender los conceptos de W(f) y Q(f), para
funciones con varios parmetros.
Las propiedades se siguen cumpliendo Demostrarlo.
Ejemplo. T(N) = T(N, a, b) = aN + b
El tiempo depende del tamao del problema N, y del tiempo de
inicializacin b y de ejecucin de un paso a.
Podemos suponerlos constantes T(N), o variables T(N,a,b).
Qu relacin hay entre los siguientes rdenes?
O(n+m), O(nm)

O(n2), O(n+2m)

Notaciones condicionales:
En algunos casos interesa estudiar el tiempo slo para ciertos tamaos de
entrada.
Ejemplo. Algoritmo de bsqueda binaria: Si N es potencia de 2 el estudio se
simplifica.
Orden condicionado de f(n): O(f | P)
Dada una funcin f: N R+, y P: N B, llamamos orden de f segn P (o
condicionado a P) al conjunto:
O(f | P)= { t: N R+ / $ c R+, $ n0 N, " n n0:
P(n) t(n) cf(n) }
De igual forma, tenemos W(f | P) y Q(f | P).
O(f) = O(f | true). Para cualquier f y g, f O(g | false).
138

O(f) O(f | P)?

Ordenes De Complejidad
Uso de los rdenes de complejidad:
Dado un tiempo t(n), encontrar la funcin f ms simple tal que t O(f), y
que ms se aproxime asintticamente.
Ejemplo. t(n) = 2n2/5 + 3p/2; t(n) O(n2).Relacin de orden entre O(..) =
Relacin de inclusin entre conjuntos.O(f) O(g) O(f) O(g) Para toda t
O(f), t O(g)Se cumple que:
O(c) = O(d), siendo c y d constantes positivas.
O(c) O(n)
O(cn + b) = O(dn + e)
O(p) = O(q), si p y q son polinomios del mismo grado.
O(p) O(q), si p es un polinomio de menor grado que q.

Orden inferior u omega de f(n): W(f):


Dada una funcin f: N R+, llamamos omega de f al conjunto de todas las
funciones de N en R+ acotadas inferiormente por un mltiplo real positivo
de f, para valores de n suficientemente grandes.
W(f)= { t: N R+ / $ c R+, $ n0 N, " n n0:

t(n) cf(n) }

La notacin omega se usa para establecer cotas inferiores del tiempo de


ejecucin.
Relacin de orden: igual que antes.
Orden exacto de f(n): Q(f):
Dada una funcin f: N R+, llamamos orden exacto de f al conjunto de
todas las funciones de N en R+ que crecen igual que f, asintticamente y
salvo constantes.
Q(f) = O(f) W(f) == { t: N R+ / $ c, d R+, $ n0 N, " n n0:
cf(n) t(n) df(n) }
Notacin o pequea de f(n): o(f):
Dada una funcin f: N R+, llamamos o pequea de f al conjunto de todas
las funciones de N en R+ que crecen igual que f asintticamente:

139

o(f)= { t: N R+ / lim t(n)/f(n) = 1}n


Esta notacin conserva las constantes multiplicativas para el trmino de
mayor orden.
Ejemplo. t(n) = amnm + am-1nm-1 + ... +a1n + a0t(n) o(amnm) o(nm)
o(amnm) O(amnm)? o(t) O(t)?

Costa de complejidad con frecuencia


Algunas relaciones entre rdenes frecuentes:
O(1) O(log n) O(n) O(nlog n) O(n(log n)2) O(n1.001...) O(n2) O(n3)
... O(2n) O(n!) O(nn)
Qu pasa con las omegas? Y con los rdenes exactos?
El orden de un polinomio anxn+...+a1x+a0 es O(xn).
n

1 = n O(n);
i=1

i = n(n+1)/2 O(n2);
i=1

im O(nm+1)
i=1

Si hacemos una operacin para n, otra para n/2, n/4, ..., aparecer un orden
logartmico O(log2 n). Los logaritmos son del mismo orden,
independientemente de la base.

2.2 RESOLUCIN DE PROBLEMAS CON COMPUTADORA Y HERRAMIENTAS DE


PROGRAMACIN:

2.2.1. RESOLUCIN DE PROBLEMAS:


La resolucin de un problema desde el punto de vista algortmico tiene 3
fases:
-

Anlisis del problema: Comprensin.

Diseo del algoritmo: Resolucin algortmica.

Resolucin en computadora: Implantacin del algoritmo en un


lenguaje de programacin.

140

2.2.2. ANLISIS DEL PROBLEMA:


El objetivo de sta fase es comprender el problema para lo cual como
resultado tenemos que obtener la especificacin de las entradas y salidas
del problema. Tiene que quedar claro que entra y que sale.

2.2.3. DISEO DEL ALGORITMO:


Una vez comprendido el problema se trata de determinar que pasos o
acciones tenemos que realizar para resolverlo.
Como criterios a seguir a la hora de dar la solucin algortmica hay
que tener en cuenta:
1.
Si el problema es bastante complicado lo mejor es dividirlo en partes
ms pequeas e intentar dividirlo en partes ms pequeas e intentar
resolverlas por separado. Esta metodologa de divide y vencers tambin
se conoce con el nombre de diseo descendente.
2.

Las ventajas de aplicar esto son:

Al dividir el problema en mdulos o partes se comprende ms


fcilmente.
Al hacer modificaciones es ms fcil sobre un mdulo en particular
que en todo el algoritmo.
En cuanto a los resultados, se probarn mucho mejor comprobando si
cada mdulo da el resultado correcto que si intentamos probar de un golpe
todo el programa porque si se produce un error sabemos en que mdulo ha
sido.

Una segunda filosofa a la hora de disear algoritmos es el refinamiento por


pasos, y es partir de una idea general e ir concretando cada vez ms esa
descripcin hasta que tengamos algo tan concreto para resolver. Pasamos
de lo ms complejo a lo ms simple.
La representacin de los algoritmos:
Una vez que tenemos la solucin hay que implementarla con alguna
representacin. Las representaciones ms usadas son los flujogramas, los
diagramas NS y el pseudocdigo.

141

Tambin la solucin se puede escribir en algunos casos en lenguaje


natural pero no se hace porque es muy ambiguo, e incluso otras formas de
expresin como frmulas matemticas.
Escritura del algoritmo:
Al escribir el algoritmo hay que tener en cuenta:
Las acciones o pasos a realizar tienen que tener un determinado
orden.
-

En cada momento solo se puede ejecutar una accin.

Dentro de las sentencias del algoritmo pueden existir palabras


reservadas (palabras propias del lenguaje de programacin que tienen para
el compilador un determinado significado).
Si estamos utilizando pseudocdigo tenemos tambin que usar la
identacin (aumenta la legibilidad del problema para que se pueda leer
mejor).

2.2.4. RESOLUCIN EN LA COMPUTADORA:


Es hacer entender nuestro algoritmo a la computadora para que lo
pueda hacer.
1.

Codificamos el algoritmo en un leguaje de programacin.

2.

Ejecutar el programa antes compilado.

3.

Comprobar los resultados y si no funciona, corregirlo.

2.2.5. FLUJOGRAMAS:
Es una notacin grfica para implementar algoritmos. Se basa en la
utilizacin de unos smbolos grficos que denominamos cajas, en las que
escribimos las acciones que tiene que realizar el algoritmo.
Las cajas estn conectadas entre s por lneas y eso nos indica el
orden en el que tenemos que ejecutar las acciones.
En todo algoritmo siempre habr una caja de inicio y otra de fin, para
el principio y final del algoritmo.
Los smbolos:

142

Lneas de flujo: Una lnea con una flecha que sirve para
conectar los smbolos del diagrama y la flecha indica la secuencia en la que
se van a ejecutar las acciones.

Smbolo de proceso: Indica la accin que tiene que realizar la computadora.


Dentro escribimos la accin.

Representa las acciones de entrada y salida. Dentro colocaremos las


acciones de lectura y escritura.

Condicin: Dentro se va a colocar una condicin. Sirve para representar


estructuras selectivas y repetitivas y lo que se hace al encontrar ese signo
es evaluar la condicin que hay dentro tal que segn la condicin sea
verdadera o falsa iremos por caminos distintos.

Principio y fin: Dentro del smbolo ira la palabra inicio o fin del algoritmo.

Subprograma: Dentro se coloca el nombre del subprograma al que se llama.

Conectores: Nos sirven cuando un flujograma no me cabe en una columna


de la hoja y hay que seguir en otra columna:
-

Si es en la misma hoja:

143

Si es en hoja distinta:

Los conectores se ponen uno donde termina la columna y otra donde


empieza.

Es una aclaracin para entender mejor el cdigo, pero no es parte del


cdigo, no se ejecuta.

Otros smbolos:
- Pantalla: Cuando una salida es por pantalla.

- Teclado: Para representar una entrada por teclado.

- Impresora:

- Entrada/Salida por disco:

144

*Problema:
Queremos hallar el producto de varios nmeros positivos introducidos
por teclado y el proceso termina cuando se meta un nmero negativo.
1.

Iniciar la variable del producto.

2.

Leer el primer nmero.

3.

Preguntar si es negativo o positivo.

4.

Si es negativo nos salimos y escribimos el producto.

5.
Si es positivo, multiplicamos el nmero ledo y luego leemos un nuevo
nmero, y se vuelve al paso 3.

Inicio

P1

Leer num

Num >= 0

145

Escribir P

P P * num

Fin

Leer num

3 TECNICA DE DISENO DE ALGORITMOS

Diseo de Algoritmos:
Hasta ahora se han realizado algunos comentarios respecto a la necesidad
de disear algoritmos correctos y eficientes utilizando los elementos de un
lenguaje de programacin .Es necesario en este momento mencionar algo
sobre como hacerlo. El acto de disear un algoritmo puede considerarse
como una tarea que difcilmente podr ser del todo automatizada.
Todo problema algortmico es un reto para su diseador, algunos resultan
inmediatos de resolver, otros son bastante complejos. La investigacin en
esta rea ha permitido descubrir un conjunto de mtodos o esquemas de
diseo hacia los cuales puede orientarse la realizacin de muchos
algoritmos.
No obstante, y a pesar de que resulta mas adecuado en bastantes casos
utilizar alguno de estos esquemas que realizar un diseo desde cero, idear
un algoritmo continua siendo una labor bastante creativa donde los
conocimientos y la experiencia del propio diseador tiene un papel
fundamental.
El diseo de un algoritmo que resuelva un problema es, en general, una
tarea difcil. Una forma de facilitar esta labor consiste en recurrir a tcnicas
conocidas de diseo de algoritmos, se decir, a esquemas muy generales que
pueden adaptarse a un problema particular al detallar las partes generales
del esquema.
Muchos problemas pueden resolverse buscando una solucin fcil y directa
pero, a la vez bastante ineficiente. Este mtodo, llamado de fuerza bruta,
puede ser muy directo, pero con un poco de anlisis puede encontrarse
algoritmos ms eficientes. El esquema mas sencillo quizs sea el llamado
divide y vencers, basado en la descomposicin de un problema en
subproblemas. Otros esquemas requieren un anlisis minucioso del
problema de forma que la solucin se vaya construyendo en etapas. Si
puede preverse que decisin conviene en cada etapa para producir cierto
tipo de mejor resultado, tenemos una solucin voraz, si la decisin en una

146

etapa, solo puede tomarse tras considerar varias soluciones de otras etapas
mas simples, la solucin es dinmica. Aun as, hay problemas cuya solucin
no puede hallarse sino mediante un proceso de bsqueda, a pesar de lo
complejas que son las operaciones de bsqueda, su uso adecuado mediante
el esquema de bsqueda con retroceso (o backtracking) permite ganar gran
eficiencia respecto a soluciones de fuerza bruta. Por ultimo, conviene
conocer otros mtodos de diseo de algoritmos que tambin resultan de
utilidad prctica.
Nos estamos refiriendo a mtodos basados en la mejora de la eficiencia (por
ejemplo, el uso de parmetros de acumulacin al resolver problemas
utilizando divide y vencers, y el empleo de tablas como estructura auxiliar
para la resolucin eficiente de problemas donde se aplica programacin
dinmica), y a mtodos basados en transformaciones del dominio para
encontrar una solucin mas fcilmente a un problema en un dominio
transformado, siendo dicha solucin finalmente adaptada al dominio
original.

Consideraciones generales
Si el hbil programador dispone de un recetario de algoritmos de donde
poder seleccionar el ms adecuado para cada problema, su tarea se
simplifica.
Supongamos que disponemos de una especificacin precisa, completa y
consistente del problema a resolver y queremos obtener un algoritmo en el
que, dados uno datos de entrada valido, se produzca cierto resultado. Si no
nos importa la eficiencia del algoritmo, podramos utilizar un algoritmo
general llamado algoritmo del museo britnico. Se programa un computador
de manera que parta de un conjunto de axioma matemticos y los que use
para reducir aleatoriamente teoremas validos.

Aprender los principios bsicos del diseo de algoritmos podemos


preguntarnos por un mtodo aceptable. El mas entendido, y quizs el mejor,
es organizar el diseo sobre un esquema de algoritmo o una tcnica de
diseo que haya demostrado su utilidad para otros problemas. Este mtodo
de trabajo es practicable, puesto que existe un nmero reducido de
esquema y tcnicas de diseo.
El conocimiento de tcnicas de diseo es solo un primer paso para el
diseador, que debe completarse con otros conocimientos y, sobre todo,
con la experiencia.

Mtodo de fuerza bruta

147

Comenzamos el estudio de esquemas algortmicos con un mtodo sencillo,


pero que debe evitarse siempre que se pueda, dad su ineficacia; la fuerza
bruta. En realidad, no es un esquema algortmico, si no mas bien calificativo
Para una forma de disear algoritmos: tomar una solucin directa, poco
reflexionada. En principio, esto no es malo, pero dado que no se ha
analizado apenas el problema, es muy probable que no se hayan
aprovechado propiedades deducibles del problema y que la solucin sea
terriblemente ineficiente.
Una solucin por fuerza bruta tambin puede resultar adecuada como
primera aproximacin a la solucin final, porque su desarrollo puede
permitir profundizar ms sobre el problema y conocer propiedades que sean
utilizadas para obtener otra versin ms eficiente.
Por ejemplos:
Algunos algoritmos de bsqueda de un elemento en un vector. Uno de ellos
realizaba una bsqueda secuencial con complejidad lineal sobre el tamao
del vector y poda usarse con cualquier vector. Otro algoritmo realizaba un
bsqueda dicotomica o binaria, con complejidad logartmica, y solo se poda
usar cuando el vector estuviese ordenado. El algoritmo primero responde a
un razonamiento ms sencillo, por lo que uno puede sentirse tentado a usar
siempre. Esta es la solucin de fuerza bruta: una solucin directa, pero poco
reflexionada. Lo ms razonable es comprobar si el vector esta ordenado y,
en caso positivo, aprovechar esta circunstancia para usar el algoritmo ms
eficiente: el de bsqueda binaria.

Tcnicas de los Parmetros Acumuladores y de Tabulacion


La recurcion es un mecanismo que permite obtener, en combinacin con
otras contrucciones, una solucin funcional a muchos problemas. Muchos
algoritmos recursivos resultan eficientes, pero no todos: hay algunos
fcilmente formulables, pero muy ineficientes. En estos casos, dichos
algoritmos pueden servir como una primera aproximacin al algoritmo
definitivo, pero debe mejorar su rendimiento para que sea prctico.
Veremos dos parmetros para la mejora de eficiencia de algoritmos
recursivos: el uso de parmetros acumuladores y el uso de tablas. Cada una
se ilustra con un ejemplo distinto.

Parmetros Acumuladores
Veamos primero una solucin ineficiente que intentaremos mejorar.
Ejemplo: Nmeros de Fibonacci

148

Los nmeros de fibonacci suele especificarse como:


Fib(0)=1
Fib(1)1
Fib(n+2)=fib(n)+fib(n+1)
Esta especificacin de los nmeros de fibonacci tienen una formulacin
recursiva inmediata en estilo funcional.
Un modo de evitar problema lo proporciona la tcnica de los parmetros
acumuladores, cuya idea bsica se expone a continuacin. La funcin
principal usa una funcin auxiliar que tiene los parmetros de aquellas ms
algunos adicionales. La funcin principal simplemente realiza una llamada a
esta funcin auxiliar en los que los parmetros de aquellas se modifican y
los parmetros nuevos toman un valor inicial adecuado .
Los parmetros adicionales tienen como misin ir acumulando resultados
principales durante el proceso recursivo.

Tabulacion
No todos los algoritmos recursivos ineficientes pueden optimizarse con la
tcnica de los parmetros acumuladores.
Otra tcnica til es el uso de tablas.
La intencin es que la primera vez que se realiza un clculo, se almacena
en una tabla, donde puede consultarse otras veces que se necesite. Esta
tcnica tambin se suele emplear con la programacin dinmica.
Ejemplo:
Sea el problema de la competicin. Hay dos participantes (deportistas o
equipos, no importa que), A,B, que juegan una competicin que es ganada
por el primero que venza en n partidos, siendo ( n ) mayor que( 0 ).
Por sencillez , se supone que ambos participantes tienen cualidades y
preparacin similar . De forma que cada uno tiene un 50% de posibilidades
de ganar cada partido. De todas formas, la modificacin para incorporar
probabilidades diferentes es evidente y no complica el problema.

Divide y vencers:
Consiste en descomponer un problema en un subproblema, resolver
independientemente los subproblemas para luego combinar sus soluciones
y obtener la solucin del problema original. Esta tcnica se puede aplicar

149

con xito a problemas como la multiplicacin de matrices, la ordenacin de


vectores, la bsqueda en estructuras ordenadas,etc.
Ejemplo. Bsqueda de una palabra en un diccionario
Como ejemplo sencillo de aplicacin de esta estrategia puede considerarse
la bsqueda de una palabra en un diccionario de acuerdo con el siguiente
criterio.
Se abre el diccionario por la pagina centrar(quedando dividido en dos
mitades) y se comprueba si la palabra aparece all o si es lxico
grficamente anterior o posterior. Si no ha encontrado y es anterior se
procede a buscarla en la primera mitad., si es posterior, se buscara en la
segunda mitad. El procedimiento se repite sucesivamente hasta encontrar la
palabra o decidir que no aparece.

Mtodo voraz:
Este mtodo trata de producir tipo de mejor resultado a partir de conjunto
de opciones candidatas .Para ello, se va procedimiento paso a paso
realizndose la mejor eleccin (usando una funcin objetivo que respeta un
conjunto de restricciones ) de entre las posibles. Puede emplearse en
problemas de optimizacin, como el conocido de la mochila, en la bsqueda
de caminos mnimos sobre grafos, la planificacin en el orden de la
ejecucin de unos programas en un computador,etc.
Ejemplo. Dar un cambio utilizando el menor nmero de monedas
Considrese ahora el problema de la devolucin del cambio al realizar una
compra (por ejemplo, en una maquina expendedora de tabaco). Suponiendo
que se disponga de cantidad suficiente de ciertos tipos diferentes de
monedas de curso legal, se trata de dar como cambio la menor cantidad
posible usando estos tipos de monedas. La estrategia voraz aplicada
comienza devolviendo, cuando se pueda, la moneda de mayor valor ( es
decir, mientras el valor de dicha moneda sea mayor o igual al cambio que
resta por dar), continua aplicndose el mismo criterio para la segunda
moneda mas valiosa, y as sucesivamente. El proceso finaliza cuando se ha
devuelto todo el cambio.

Consideraciones y Criterios para Disear Algoritmos


Algunas consideraciones estilsticas pueden contribuir a mejor la calidad de
los algoritmos (y programas ) mediante la reduccin del numero de errores
que aparecen al desarrollar los. Tambin influyen haciendo que nuestro
algoritmo resulten ms fciles de leer y entender para otras personas.

150

Los criterios de estilo pueden reflejarse en un conjunto de normas de estilo


de codificacin. Ello asegura que tanto algoritmos como programa resulten
legibles y puedan modificarse fcilmente en caso de necesidad.
Generalmente, estas normas de estilo se dirigen hacia aspectos como la
forma de construir los nombres de variables o tipo de datos que aparezcan.,
la tipografa seguida ala hora de escribir nombres de variables,
subprogramas, palabras claves, etc. El modo de encolumnar las distintas
partes de un algoritmo para facilitar su lectura y comprensin, y la normas
sobre como y donde deben de introducirse los comentarios.
Estilo y calidad de los programas van fuertemente unidos. Ante la pregunta
Cules son las caracterstica de un buen algoritmo?, las siguientes
respuestas reflejan, cierta medida, los factores que identifican la calidad en
ellos .
1.

Correccin, el algoritmo debe funcionar.

2.
Nunca se debe olvidar que la caracterstica ms simple e importante
de un algoritmo es que funcione. Pude aparecer obvio, pero resulta difcil de
asegurar en algoritmos complejos.
3.
Eficiencia, el algoritmo no debe desaprovechar recursos. La eficiencia
de un algoritmo se mide por los recursos que este consume. En particular,
se habla de la memoria y del tiempo de ejecucin . A pesar de que con la
reduccin de los costes del hardware es posible disear computadores ms
rpidos y con ms memoria, no hay que desperdiciar estos recursos y tratar
de desarrollar algoritmos ms eficientes.
4.
Claridad, el algoritmo debe estar bien documentacin. La
documentacin ayuda a comprender el funcionamiento de los algoritmos.
Ciertos detalles o algunas partes especiales de los mismos pueden olvidarse
fcilmente o quedar oscura si no estn adecuadamente comentadas.
En realidad, y de acuerdo con los puntos de vista anteriores, la calidad de
un algoritmo tiene muchas facetas y todas ellas importantes. Resumiendo,
lo ideal es que nuestro algoritmo resulte correcto, eficiente, claro, fiable y
fcil de mantener.

Algoritmos voraces
Esquema voraz
Hay muchos problemas en los que se pretende obtener un subconjunto de n
elementos que satisfaga ciertas restricciones y que optimice alguna medida.
Se supone que un problema de esta clase tiene al menos una solucin.
Puede haber varias soluciones optimas, en cuyo caso no importa cual se
elija. Por ejemplo, sea el problema de encontrar un subconjunto de los arcos
de un grafo. Otro ejemplo se da cuando, dados unos ficheros almacenados

151

en una cinta de que el tiempo de recuperacin de un fichero cualquiera sea


el mnimo en promedio. A menudo, el problema incluye restricciones
adicionales que limitan el nmero posible de soluciones.
Normalmente, estos problemas no se intentan resolver de golpe ,
encontrando de una sola vez la solucin completa y ptima. Es ms
frecuente que el subconjunto de la solucin se vaya formando paso a paso,
analizando durante cada etapa que elemento conviene aadir a la solucin
parcial ya existente. La dificultad principal para resolver esta clase de
problemas estriba en el anlisis necesario para poder formular un algoritmo
que halle la solucin en varios pasos.
Un algoritmo voraz sigue el esquema anterior, pero con la fortuna de que
cada vez que aade un elemento a la solucin se tiene la certeza de haber
realizado la mejor eleccin posible. Esta caracterstica hace que aunque el
anlisis del problema sea arduo, la solucin voraz siempre resulte sencilla.
La nica complicacin es comprobar que se siguen satisfaciendo las
restricciones del problema.
Por lo que se ha descrito del esquema voraz, ste es un proceso repetitivo
sencillo que trata sucesivamente los diferentes elementos del problema.
Para facilitar la descripcin de este proceso, puede llamarse candidato al
elemento tratado en cada paso. Inicialmente, el conjunto de candidatos que
forman la solucin est vaco. En cada paso se intenta aadir el mejor de los
candidatos restantes a dicha solucin parcial. Si este conjunto ampliado
sigue siendo vlido, es decir, si satisface las restricciones del problema y,
por tanto, permite formar una solucin del problema, el candidato se
incorpora definitivamente. Al contrario, si dicho conjunto no es vlido, se
desecha el candidato. Si el algoritmo voraz se ha diseado correctamente,
la primera solucin encontrada es ptima. Por tanto, la dificultad principal al
disear un algoritmo voraz reside en encontrar un criterio en encontrar un
criterio de seleccin que garantice la optimalidad de la solucin.
Segn esta descripcin, el problema parte de:

Una funcin objetivo que da el valor de una solucin. Obviamente,


sta es la funcin por optimizar.

Un conjunto de restricciones sobre el valor de los datos de entrada y


sobre la solucin final del problema.
A su vez, la solucin consta de:

Un conjunto de candidatos

Una funcin de seleccin que en cada momento determine que


candidato de los an no usados parece ser el mejor.

Una funcin que determine si cierto conjunto de candidatos es vlido;


es decir, si permite formar alguna solucin del problema.

152

Obsrvese que las funciones de validez y completitud no se preocupan de la


optimalidad del la solucin, pero si la funcin de seleccin es la adecuada,
cada solucin vlida y completa es optima.
3.1 . PSEUDOCDIGO:
Es un lenguaje de especificacin de algoritmos, pero muy parecido a
cualquier lenguaje de programacin, por lo que luego su traduccin al
lenguaje es muy sencillo, pero con la ventaja de que no se rige por las
normas de un lenguaje en particular. Nos centramos ms en la lgica del
problema.
El pseudocdigo tambin va a utilizar una serie de palabras clave o
palabras especiales que va indicando lo que significa el algoritmo.
1.

Inicio y Fin: Por donde empieza y acaba el algoritmo.

Begin /end : Pacal.


{

} : En C.

2.

S <cond>

Entonces <acc1> If then else


Sino <acc2>
3.Mientras <cond> /hacer while do
4. Repetir / hasta repeat until
5. Desde /hasta for .. to
Segn sea Case

6.

Swith

Los comentarios van encerrados entre llaves.

Hay que utilizar la identacin.

Algoritmo <nombre alg>


Var
<nombre>: <tipo>
Inicio
<Instrucciones>
Fin

153

Algoritmo Producto
Var
P, num: entero
Inicio
P1
Leer num
Mientras num >=0 hacer
P p*num
Leer num
Fin mientras
Escribir p
Fin

1. Realizar un programa que convierta los grados a radianes.

Algoritmo convertir
Var
Grados, rad: real
Inicio
Escribir Introduce los grados
Leer grados
Si grados >= 360
Entonces grados grados mod 360
Fin si
Rad grados / 180

154

Escribir rad radiantes


Fin

2. Realizar un algoritmo que pida un valor entero que equivale a un nmero


de duros y me calcule a cuantos billetes de 5000, 1000, monedas de 200,
25, 1.

Algoritmo cambio
Var
Duros: real
Inicio
Escribir Introduce los duros
Leer duros
Duros duros * 5
Escribir duros div 5000 billetes de 5000
Duros duros mod 5000
Escribir duros div 1000 billetes de 1000
Duros duros mod 1000
Escribir duros div 200 monedas de 200
Duros duros mod 200
Escribir duros div 25 monedas de 25
Duros duros mod 25
Escribir duros monedas de 1
Fin

3. Realizar un programa que pida al usuario la velocidad en m/s y el radio de


la circunferencia de la pista, y resultada el programa devuelve el tiempo que
tarda el atleta en dar 2 vueltas a la pista, sabiendo que el atleta descansa 1
minuto cada 1000 metros.

155

Algoritmo recorrido
Var
Velocidad,radio,tiempo,longitud: entero
Inicio
Escribir Introduce la velocidad
Leer velocidad
Escribir Introduce el radio
Leer radio
Longitud 4 * 3.1416 * radio
Descanso longitud div 1000
Tiempo longitud div velocidad + descanso * 60
Escribir tiempo
Fin

3.2 ESTRUCTURA GENERAL DE UN PROGRAMA

3.2.1 CONCEPTO DE PROGRAMA:


Un programa es un conjunto de instrucciones que al ser ejecutadas
resuelven un problema.
Un programa tiene 3 partes:
1.
Entrada de datos: Normalmente se va a ejecutar a travs de
instrucciones de lectura, y en lo que se le pide al usuario la informacin que
el programa va a necesitar para ejecutarse y se hace a travs de lecturas.
2.
Acciones de un algoritmo: Parte en la que se resuelve el problema
usando los datos de entrada.
3.
Salida: Mostrar en un dispositivo de salida los resultados de las
acciones anteriormente realizadas. Son acciones de escritura.
En la parte de las acciones a ejecutar se distinguirn dos partes:
-

Declaracin de variables.

Instrucciones del programa.

156

3.2.2. INSTRUCCIONES Y TIPOS:


Para que una instruccin se ejecute tiene que ser llevada a memoria.
En cuanto al orden de ejecucin de las instrucciones, el programa puede ser
de dos tipos:
Programas lineales: Se va ejecutando una instruccin ms otra y el
orden de ejecucin es igual al orden de escritura.
Programas no lineales: Las instrucciones no se ejecutan en el mismo
orden en el que aparecen escritas, sino que se realizan saltos que nos
mandan de unas instrucciones a otras.

Nunca se deben hacer saltos no lineales.

Tipos de instrucciones:
1.

Inicio y fin.

2.

Asignacin: Dar un valor a una variable.

3.

Lectura / escritura: Introducir o sacar informacin por dispositivos E/S.

4.
Instrucciones de bifurcacin: Alternan el orden de ejecucin del
programa. Salto a otra instruccin que no es la siguiente.
4.1. Bifurcacin incondicional: El salto se produce siempre que el
programa vaya a esa instruccin: Goto Ir a.
4.2. Bifurcacin condicional: Se ejecutan un conjunto de instrucciones u
otras dependiendo del valor devuelto al evaluar una condicin.
Es la que vamos a usar.

3.2.3. ELEMENTOS BSICOS DE UN PROGRAMA:


Qu es la sintaxis de un lenguaje?:
Conjunto de reglas que tenemos que seguir a la hora de escribir un
programa en ese lenguaje tal que si no seguimos esas reglas de sintaxis el
compilador da errores.

Elementos del lenguaje de programacin:

157

1.
Palabras reservadas: Son un conjunto de palabras especiales que nos
sirven para definir la estructura del programa, y solo se pueden usar para el
fin para el que estn reservadas.
2.
Identificadores: Son los nombres que aparecen en el programa dados
por el usuario. Son por tanto los nombres de variables, de constantes, de
subprogramas y nombres de tipos creados por el usuario.
3.
Caracteres especiales: Sirven como separadores entre sentencias, por
ejemplo el ;.
4.
Instrucciones: De 3 tipos, secuenciales, repetitivas y selectivas, y
pueden aparecer elementos especiales (bucles, contadores, interruptores y
acumuladores).

Bucle: Un conjunto de instrucciones que se repiten un nmero finito


de veces. Lleva asociado aparte de las instrucciones una condicin que es la
que determina cuando se termina un bucle. Ejecucin de un bucle
(iteracin). Los bucles se pueden anidar unos dentro de otros, y puede
haber varios bucles al mismo nivel, pero nunca se entrelazan.

Contador: Un elemento cuyo valor se incrementa o decrementa en un


valor constante en cada iteracin de un bucle, y se utiliza para controlar la
condicin del bucle.

Acumulador: Es una variable que tambin se suele usar en los bucles


y que se incrementa o decrementa en cada iteracin del bucle, pero no en
una cantidad constante.
Algoritmo ejemplo
Var cont, num, sum: entero
Inicio
Cont 0
Sum 0
Mientras cont <> 3
Leer num
Sum sum + num
Cont cont +1
Fin mientras
Escribir suma
End

158


Interruptor (marca, bandera o flag): Es una variable que sirve como
indicador de una determinada informacin y que solo puede tomar uno de
dos valores. El valor de la variable tiene asociado un signo y puede variar a
lo largo de la ejecucin.
Algoritmo ejemplo
Var cont, num, suma: entero
Neg: boolean
Inicio
Cont 0
Sum 0
Neg falso
Mientras cont <>3
Leer num
Si num < 0
Entonces neg verdadero
Fin si
Sum sum + num
Cont cont + 1
Fin mientras
Si neg=verdadero
Entonces escribir (Se ha ledo negativos)
Sino escribir (No negativos)
Fin si
Fin
Si es leer un nmero negativo o hasta 3 nmeros:
Mientras (cont <> 3) y (neg = verdadero)

3.2.4. ESCRITURA DE ALGORITMOS Y PROGRAMAS:

159

En pseudocdigo el programa tiene dos partes, la cabecera y el


cuerpo. La cabecera contiene el nombre del algoritmo, y el cuerpo contiene
2 partes.
La primera es la zona de declaraciones de var y const, y la segunda
es la zona de las instrucciones del programa.
En la zona de instrucciones para que quede ms legible hay que usar
la identacin y si es necesario hay que usar comentarios entre llaves.

5.

INTRODUCCIN A LA PROGRAMACIN ESTRUCTURADA:

5.1. TCNICAS DE PROGRAMACIN:


El programar con flujogramas o diagramas NS resulta muy lioso en el
momento en que el programa se complica, por eso vamos a utilizar siempre
el pseudocdigo, en el que vamos a utilizar dos tcnicas de programacin
que no se usan por separado, sino que son complementarios.
Estas tcnicas son:

Programacin modular: Consiste en dividir el programa en partes


llamadas mdulos, e implementar cada uno de esos mdulos por separado.

Programacin estructurada: Cuyo objetivo es hacer ms legible y


lgico la estructura del programa utilizando para ello solamente tres tipos
de estructuras: selectivas, secuenciales (condicionales) y repetitivas.

5.2. PROGRAMACIN MODULAR:


Se basa en dividir el programa en partes llamadas mdulos, que se
analizan y codifican de forma independiente y que realizan una determinada
tarea que ser en realidad una parte del problema total a resolver.
En todo algoritmo o programa existir un mdulo o programa
principal que es al que transfiere el control cuando comienza la ejecucin
del programa, y luego desde l, se va llamando al resto de los
subprogramas.
Llamar a un subprograma quiere decir transferirle el control, es decir
que se comienza a ejecutar y lo har desde el comienzo del subprograma

160

hasta que se termine y al terminar devuelve el control al subprograma que


lo llam. Dentro del subprograma a su vez tambin puedo llamar a otros
pero en cualquier caso al final se devuelve el control al mdulo que hace la
llamada. El control al programa llamado se devuelve a la instruccin
siguiente a la que se hizo la llamada.
Un mdulo solo tiene acceso a los mdulos a los que llama y a los
submdulos a los que a su vez llaman stos. Los resultados producidos por
un mdulo pueden ser utilizados por otros.
No existe un criterio fijo para determinar el tamao, ni muy grandes
ni muy pequeos, la idea fundamental es que realicen una nica cosa y muy
concreta.
Los mdulos o subprogramas reciben diferentes nombres segn el
lenguaje de programacin y segn su tipo. Se llaman procedimientos y
funciones (Pascal, C), subrutinas (basic, fortran), secciones (cobol),...

5.3. PROGRAMACIN ESTRUCTURADA:


La caracterstica fundamental es que se va a basar en el uso
nicamente de tres estructuras de control. Para ello se apoya en las
siguientes filosofas:
1.
Recursos abstractos: Son los recursos con los que no contamos a la
hora de programar, pero en los que nos apoyamos a la hora de
solucionarlos. Estos recursos se tienen que ir transformando en recursos
concretos.
2.
Diseo descendente (top down): Se trata de ir descomponiendo el
problema en niveles o pasos cada vez ms sencillos, tal que la salida de una
etapa va a servir como entrada de la siguiente. En las primeras etapas
tomamos el punto de vista externo, es decir, que entradas hay y que salidas
hay, y a medida que vamos bajando de nivel, lo vamos viendo de modo
interno (como lo hace por dentro).
3.
Estructuras bsicas de control: Para hacer cualquier programa
siguiendo los anteriores pasos de razonamiento, al final codificamos el
programa usando tres tipos de secuencias (repetitivas, alternativas y
secuenciales).
Al final todo programa va a tener una nica entrada y una nica salida.

161

Desde la entrada tienen que existir caminos que nos permiten pasar
por todas las partes del programa y llevarnos a la salida, y finalmente no se
van a permitir los bucles infinitos.

5.4. ESTRUCTURA SECUENCIAL:


Es cuando una instruccin sigue a otra en secuencia, es decir, la
salida de una instruccin es la entrada de la siguiente.
FLUJOGRAMA:

DIAGRAMAS NS:

PSEUDOCDIGO:
Leer num
Num num*2
Escribir num

5.5. ESTRUCTURAS SELECTIVAS:


Se evala la condicin y en funcin del resultado se ejecuta un
conjunto de instrucciones u otro. Hay tres tipos de selectivas (simple, doble
o mltiple):
* Simple: Es la estructura :

S <cond>
entonces <acciones>

fin s
Evaluamos la condicin y si es verdadera ejecutamos el conjunto de
condiciones asociadas al entonces, y si es falso, no hacemos nada.
FLUJOGRAMA:

DIAGRAMA NS:

<Cond1>

Condicin
SI

162

NO

<acciones>
<acciones>

<acciones>

* Doble: Se evala la condicin y si es verdad se ejecutan el conjunto de


acciones asociadas a la parte entonces, y si es falso se ejecutan el conjunto
de acciones asociadas a la parte sino.
FLUJOGRAMA:
Si

DIAGRAMAS NS:

PSEUDOCDIGO:

No
Cond

S <cond>
Si

Cond

No

Entonces

<acciones>
Acc1

Acc2

Sino <acciones>
Acc1

Acc2

Fin si

Una condicin se ejecuta una nica vez.

* Alternativa mltiple: Se evala una condicin o expresin que puede


tomar n valores. Segn el valor que la expresin tenga en cada momento se
ejecutan las acciones correspondientes al valor. En realidad equivale a un
conjunto de condiciones anidadas. En cualquier lenguaje, es Case o Swith.
PSEUDOCDIGO:
Segn sea <expresin>
<Valor1>: <accin1>
<valor2>: <accin2>
.................................
[<otro>: <acciones>]
fin segn

163

Otro: Las acciones asociadas al valor otro se ejecutan cuando la


expresin no toma ninguno de los valores que aparecen antes. Otherwise,
Else.
El valor con el que se compara la expresin, va a depender de los lenguajes,
de lo que sea ese valor. En general ese valor puede ser un valor constante,
un rango de valores o incluso otra condicin
FLUJOGRAMA:

DIGRAMAS NS:

Expr

Expresin
V1

V2 V3 V4

...

Otro

V1

V2

V3

V4

V5

V6

Hacer un programa que pueda dibujar una recta, un punto o un rectngulo.


Algoritmo dibujo
Var op: carcter
Escribir (Introduce una opcin
1.

Punto

2.

Recta

3.

Rectngulo)

Leer op
Segn sea op
1: leer x
.........

164

2: leer x
..........
3: leer x
..........
otro: escribir opcin errnea
fin segn

Para un rango de valores:


Leer una nota y escribir en pantalla la calificacin:
Var nota: entero
Leer nota
Segn sea nota
1..4: escribir suspenso
5..6: escribir aprobado
7..8: escribir Notable
9: escribir Sobresaliente
10: escribir Matricula de honor
fin segn

En algunos lenguajes se permite poner una condicin:


Segn sea nota
Nota >=1 y nota <=4: escribir suspenso
En pseudocdigo no se pueden poner condiciones.

5.6. ESTRUCTURAS REPETITIVAS:


En aquella que contiene un bucle (conjunto de instrucciones que se
repiten un nmero finito de veces). Cada repeticin del bucle se llama
iteracin. Todo bucle tiene que llevar asociada una condicin, que es la que
va a determinar cuando se repite el bucle.
Hay cuatro tipos de bucles, aunque solo se pueden usar tres:
165

1.

Mientras hacer While do

2.

Repetir hasta repeat until

3.

Desde for

4.

Iterar loop : No se usa.

Mientras hacer:
Sintaxis:
PSEUDOCDIGO:

FLUJOGRAMA:

DIAGRAMAS NS:

Mientras <cond> hacer


<acciones>
fin mientras

No
Cond

mientras cond
Si

<acc1>
acciones

Funcionamiento:
La condicin del bucle se evala al principio, antes de entrar en l. Si
la condicin es verdadera, comenzamos a ejecutar las acciones del bucle y
despus de la ultima volvemos a preguntar pro la condicin. En el momento
en el que la condicin sea falsa nos salimos del bucle y ejecutamos la
siguiente condicin al bucle.
Al evaluarse la condicin antes de entrar en el bucle al principio, si la
condicin al ser evaluada la primera vez es falsa, no entraremos nunca en el
bucle, el bucle puede que se ejecute 0 veces, por tanto usaremos
obligatoriamente este tipo de bucle en el caso de que exista la posibilidad
de que el bucle pueda ejecutarse 0 veces.

Repetir hasta:
Sintaxis:

166

FLUJOGRAMA:

DIAGRAMAS NS:

FLUJOGRAMA:

acciones

Repetir

<acc>
<acciones>
hasta <condicin>
No

Si

Repetir <cond> hasta

Cond

Funcin:
Se repite el bucle hasta que la condicin sea verdadera. Se repite
mientras la condicin sea falsa. La condicin se evala siempre al final del
bucle, si es falsa volvemos a ejecutar las acciones, si es verdad se sale del
bucle.
Como la condicin se evala al final, incluso aunque la primera vez ya
sea verdadera, habremos pasado al menos una vez por el bucle.
Es decir que cuando un bucle se tenga que ejecutar como mnimo una
vez, podremos usar una estructura repetir o mientras, la nica diferencia
que habr entre las dos, es que para hacer lo mismo, las condiciones tienen
que ser contrarias.
Leer 3 nmeros y dar su suma:
Cont 0

Cont 0

Suma 0

suma 0

Mientras cont <> 3

repetir

Suma suma + num

leer num

Leer num

suma suma + num

Cont cont + 1

cont cont + 1

Fin mientras

hasta cont = 3

Desde:

167

Este tipo de bucles se utiliza cuando se sabe ya antes de ejecutar el


bucle el nmero exacto de veces que hay que ejecutarlo. Para ello el bucle
llevara asociado una variable que denominamos variable ndice, a la que le
asignamos un valor inicial y determinamos cual va a ser su valor final y
adems se va a incrementar o decrementar en cada iteracin de bucle en
un valor constante, pero esto se va a hacer de manera automtica, el
programador no se tiene que ocupar de incrementar o decrementar esta
variable en cada iteracin, sino que va a ser una operacin implcita (lo hace
por defecto).
Por tanto en cada iteracin del bucle, la variable ndice se actualiza
automticamente y cuando alcanza el valor que hemos puesto como final se
termina la ejecucin del bucle.
Sintaxis:
PSEUDOCDIGO:
Desde <var ndice>=<valor inicial> hasta <valor final>
<acciones>
fin desde

FLUJOGRAMAS:

DIAGRAMAS NS:

V Vi
Desde v=vi hasta v1

V <> V1
<sentencias>

sentencias

vv+1

168

Bucle con salida interna: loop iterar.


Permite la salida del bucle desde un punto intermedio del mismo
siempre que se cumpla la condicion que aparece, entonces nos salimos a la
siguiente instruccin del bucle.
Iterar
<sent1>
salir si <cond>

NUNCA SE USA

<sent2>
fin iterar

5.7. ESTRUCTURAS ANIDADAS:


Tanto las estructuras selectivas como los bucles se pueden anidar
unos dentro de otros.
Anidacin de condicionales:
La ventaja de anidar sentencias condicionales, es que cuando una se
cumple no hay por que mirar a las que estan debajo. Tenemos que tratar
anidar la condicion en la parte sino (else) en vez que en la parte entonces.
Si <condicion1>
Entonces <sentencia1>
Sino si <condicion2>
Entonces <sentencia2>
Sino si <condicion2>
Entonces <sentencia3>
Fin si

169

Fin si
Fin si

El case siempre equivale a una anidacin de condicionales, pero no al reves.

Bucles anidados:
Al igual que podemos colocar unas expresiones dentro de otras, unos
bucles pueden estar dentro de otros, pero nunca pueden cruzarse. Al anidar
bucles hay que tener en cuenta que el bucle mas interno funciona como una
sentencia mas del bloque mas externo y por tanto en cada iteracin del
bucle mas externo se van a ejecutar todas las iteraciones del bucle mas
interno por cada iteracin del mas externo.
Si el bucle mas externo se repite n veces y el mas interno se repite m
veces, si por cada iteracin del mas externo se repite el mas interno, el
nmero total de iteraciones ser m*n.
Los bucles que se anidan pueden se de igual o distinto tipo.

Desde i=1 hasta 8


Desde j=1 hasta 5
Escribir Profesoriintroduzca su asignatura nj
Leer asignatura
Fin desde
Fin desde

5.8. CONTROL DE DATOS DE ENTRADA:


1. Cuando existe un valor centinela que determina el fin del bucle:
El bucle se va a repetir mientras no se lea un determinado valor. La
primera lectura se va a realizar fuera del bucle, y si la primera vez que lo leo
ya encuentro ese valor centinela no podemos entrar en el bucle y seguir a
continuacin, sino entramos en el bucle.
Se va utilizar una estructura Mientras.

170

2. Lectura secuencial de un fichero:


Tendremos que leer del primero al ltimo registro del fichero. Habr
que usar un Mientras, aunque hay dos posibilidades: Leer fuera del bucle y
al final de bucle, o leer dentro al principio del bucle. Se usa una u otra
dependiendo del lenguaje.
3. Cuando en un bucle sabemos el nmero exacto de veces que se repite el
bucle:
Usamos el Desde...Hasta.

4. Control de datos para no permitir datos erroneos:


No dejar seguir al usuario hasta que no introduzca datos correctos.
Hay que usar un Repetir...Hasta.

Repetir
Leer datos
Hasta (datos correctos)

Repetir
leer op
hasta (op>=1) y (op<=3)

1. Cules y cuntos son los nmeros primos comprendidos entre 1 y 1000?


Algoritmo n_primos
Const
Primero=1
Limite=1000
Var
cont, i, j: entero
primo: boolean
Inicio
Cont 0
Desde i= primero hasta limite
primo verdadero
j2

171

mientras (i>j) y (primo =verdadero)


Si i mod j = 0
Entonces primo falso
Sino j j + 1
Fin si
Fin mientras
Si primo = verdadero
Entonces escribir i
Cont cont + 1
Fin si
Fin desde
Escribir Entre primero y limite hay cont n primos
Fin

2. Calcular el mximo de nmeros positivos introducidos por teclado,


sabiendo que metemos nmeros hasta que introduzcamos uno negativo. El
negativo no cuenta.
Algoritmo maximo
Var
Num, max: entero
Inicio
Max 0
Escribir Introduzca n positivos y para acabar introduzca uno negativo
Leer num
Mientras num >=0
Si num >max
Entonces max num
Fin si

172

Leer num
Fin mientras
Escribir El mayor nmero es max
Fin

3. Determinar cuales son los mltiplos de 5 comprendidos entre 1 y N.


Algoritmo multiplos
Var
i: entero
Inicio
Desde i=1 hasta n
Si i mod 5 =0
Entonces escribir i
Fin si
Fin desde
Fin

1. Al final de curso deseamos saber cual ha sido el alumno de primero con


mejor nota media. Se sabe que este ao entraron 150 alumnos y que en
primero todos tienen 5 asignaturas. Dar el nombre y la nota media.
Algoritmo nota_media
Const
Alumnos=150
Asignaturas=5
Var
Nombre, mejor_alum: cadena

173

Nota, suma, media, acum: real


I, j: entero
Inicio
Acum 0
Desde i=1 hasta alumnos hacer
Suma 0
Escribir Introduzca el nombre del alumno
Leer nombre
Desde j=1 hasta asignaturas hacer
Escribir Introduzca la nota de la asignatura
Leer nota
Suma suma + nota
Fin desde
Media suma / asignaturas
Si media > acum
Entonces acum media
Mejor_alum nombre
Fin si
Fin desde
Escribir El mejor alumno es mejor_alum
Escribir Su nota media es acum
Fin

2. Calcular la suma de los divisores de cada nmero introducido por teclado.


Terminaremos cuando el nmero sea negativo o 0.
Algoritmo divisores
Var
Numero, i, suma :entero

174

Inicio
Escribir Introduce un nmero, y para acabar uno negativo
Leer nmero
Mientras numero > 0
Suma 0
Desde i=1 hasta numero /2
Si numero mod i =0
Entonces suma suma + i
Fin si
Fin desde
Suma suma + numero
Escribir La suma de los divisores del nmero es suma
Leer numero
Fin mientras
Fin

3. Se coloca un cpital C, a un interes I, durante M aos y se desea saber en


cuanto se habr convertido ese capital en m aos, sabiendo que es
acumulativo.
Algoritmo interes
Var
I, j, m: entero
C, temporal: real
Inicio
repetir
Escribir Introduce el capital, el interes y el tiempo
Leer c, i, m
Hasta (c>0) y ((i<=0)y(i<=100)) y (m >=0)
Desde j=1 hasta m

175

C c * (1+I/100)
Fin desde
Escribir Tienes c pts
Fin

4. Dada una fecha en formato dia/mes/ao determinar el nmero de das y


el nombre del mes de dicha fecha, y sacar por pantalla la fecha convertida a
formato de dia de mes de ao.

Algoritmo fecha
Var
Dia, mes, ao, n_dias: entero
N_mes: cadena
Inicio
Repetir
Escribir Introduce la fecha en formato dia mes ao
Leer dia, mes, ao
Segn sea mes
1,01: n_mes enero
n_dias 31
2,02: n_mes febrero
si ao mod 4=0
entonces n_dias 29
entonces n_dias 28
3,03: n_mes marzo
n_dias 31
4,04: n_mes abril
n_dias 30
5,05: n_mes mayo

176

n_dias 31
6,06: n_mes junio
n_dias 30
7,07: n_mes julio
n_dias 31
8,08: n_mes agosto
n_dias 31
9,09: n_mes septiembre
n_dias 30
10: n_mes octubre
n_dias 31
11: n_mes noviembre
n_dias 30
12: n_mes diciembre
n_dias 31
fin segn sea
hasta (dia <=n_dias) y ((mes >=1)y(mes <=12)) y (ao >=0)
escribir El mes de n_mestiene n_dias dias
escribir La fecha es: n_dias de n_mes de ao
fin

5. Dada la siguiente frmula:

Averiguar el valor de x pidiendo al usuario los valores de n, a, b.

Algoritmo ecuacion
Var
N, a, b, primer, segn, i, j: entero

177

X: real
Inicio
Primer 0
Segn 1
Repetir
Escribir Introduce el valor de n, a, b
Leer n, a, b
Hasta n>=0
Desde i=1 hasta n
Primer (((a-b)^i 3)+n)+primer
Fin desde
Desde j=2 hasta n-1
Segn ((2*a*(i-1))*segn)
Fin desde
X primer / segn
Escribir x
Fin

6. Dada la siguiente serie matemtica:


a1=0
a2=0
an=an-1 + (2*an-2) para n>=3
Determinar cual es el valor y el rango del primer trmino cuyo valor sea
mayor o igual a 2000.

Algoritmo serie
Var
A1, a2, an, cont: entero

178

Inicio
A1 1
A2 0
An a1 + (2*a2)
N3
Mientras an < 2000
A2 a1
A1 an
An a1 + (2*a2)
Cont cont + 1
Fin mientras
Escribir El rango es cont y el resultado esan
fin

Algoritmos secuenciales:

1.
Disee un algoritmo que calcule el rea de un tringulo en funcin de
las longitudes de sus lados.
2.
Elaborar un algoritmo que permita calcular el volumen de un cilindro
(radio y altura se ingresan desde el teclado).
3.

Haga un algoritmo que calcule

a.

rea de un circulo => rea = r 2

b.

rea de un tringulo => rea =(b*h) / 2

4.
Disear un algoritmo a travs del cual se pueda calcular la siguiente
expresin algebraica :
5.
179

6.
Disee un algoritmo para la conversin una medida de metros a pies
y pulgadas.
7.
Elabore un algoritmo que convierta una temperatura dada en
centgrados a fahrenheit.
8.
Dado un carcter alfabtico en maysculas, elabore un algoritmo que
imprima en pantalla su equivalente en minscula (consulte el cdigo ASCII).
9.
Hacer un algoritmo para calcular el IVA de un valor digitado por el
teclado, mostrar este resultado y el de sumar el IVA al valor digitado.
10.
Ejemplo: valor digitado => 1000
150 y valor mas IVA = 1150

Mostrar en pantalla IVA =

11.
Elabore un algoritmo para mostrar la cantidad de miles, centenas,
decenas y unidades de un nmero entero digitado por teclado.
12.
Ejemplo: Sea 1483 el nmero digitado el algoritmo debe mostrar en
pantalla
13.

Miles = 1

Centenas = 4

Decenas = 8Unidades = 3

14.
Las funciones trigonomtricas en lenguaje C calculan sus valores para
ngulos dados en unidades de radianes, haga un algoritmo que pase
ngulos de grados a radianes, y calcule la tangente del ngulo convertido a
radianes usando las funciones seno y coseno del C.
15.

1 Radian = ; = 3.141516

16.
Haga un algoritmo que convierta una medida de longitud en
kilmetros a metros, centmetros, milmetros, pulgadas, yardas, millas y
pies.
17.
Elabore un algoritmo que convierta una medida de masa en toneladas
a kilogramos, quintales, gramos, libras.
18.
Elabore un algoritmo que convierta una unidad de presin en
pascales a bares.
19.
Haga un algoritmo que calcule el rea de una cara de un cubo y su
volumen.
20.
Elabore un algoritmo que convierta una unidad de volumen en metros
cbicos m3 a litros y centmetros cbicos.
21.

Lea dos puntos (x, y) y calcule la distancia entre ellos.

22.
Los siguientes son los mltiplos y submltiplos decimales (ver tabla),
elabore un algoritmo que lea un nmero dado en unidades y lo muestre en
cada uno de sus mltiplos y submltiplos por pantalla.

180

a.

Smbolo

Unidades

tera

1.000.000.000.000

giga

1.000.000.000

mega M

1.000.000

kilo

1.000

hecto H

100

deca Da

10

deci

0.1

centi C

0.01

mili

0.001

micro

0.000.001

nano N

0.000.000.001

pico

0.000.000.000.001

23.
Elabore un algoritmo que convierta una medicin de tiempo en
segundos a horas, minutos y segundos.
1 hora = 60 minutos

1 minuto = 60 segundos

Ejemplo: sea 34505 la cantidad digitada en segundos se debe mostrar en


pantalla
Horas = 9

Minutos = 35

Segundos = 5

Algoritmos condicionales:

1.
Lea de un mismo registro el nombre y la edad de cualquier persona e
imprima, slo si la persona es mayor de edad, el nombre de la persona.

181

2.
Lea de un mismo registro el nombre y la edad de cualquier persona e
imprima slo si la persona es mayor de edad, el nombre de la persona, de lo
contrario, imprima un mensaje que diga "no puede votar".
3.
Lea de un mismo registro el nombre, la edad y el sexo de cualquier
persona e imprima, slo si la persona desde sexo masculino y mayor de
edad, el nombre de la persona.

Nota: suponga que el registro que se le tiene grabado, en el campo


denominado "sexo" el nmero 1 en vez
de la palabra "masculino" o el
nmero 2 en vez de la palabra "femenino".
4.
Lea de un mismo registro el nombre, la edad, el sexo (1 o 2) y el
estado civil de cualquier persona e imprima slo si la persona es un hombre
soltero mayor de edad, el nombre de la persona.

Nota: en el campo de "estado civil" aparece grabado el nmero 1 en vez de


"soltero", el nmero 2 en vez de
"casado" o el nmero 3 en vez de
"otro".

5.
Lea de un registro el nombre, la edad, el sexo y el estado civil de
cualquier persona e imprima, slo si la persona es hombre o mujer menor
de edad o es hombre casado de cualquier edad, en nombre de la persona y
un mensaje que diga "usted no se manda". En los dems casos imprima el
nombre de la persona solamente.
6.

Lea un nmero e imprima el nmero y el valor absoluto del mismo.

7.
Lea un nmero y calcule e imprima su raz cuadrada. Si el nmero es
negativo imprima el nmero y un mensaje que diga "tiene raz imaginaria".
8.

Lea dos nmero de un mismo registro e imprima slo los positivos.

9.
Lea dos nmeros de un mismo registro e imprima ambos nmeros
slo si son positivos.
10.
Lea dos nmeros de un mismo registro e imprima ambos nmeros si
por lo menos uno de ellos es positivo.
11.
Lea dos nmeros de un mismo registro e imprima ambos nmeros
slo si son deferente signo y distintos de cero.
12.
Lea dos nmeros de un mismo registro. Calcule la suma e imprima los
nmeros ledos y la suma.

182

13.
Lea dos nmeros de un mismo registro. Calcule la suma de los
nmeros. Imprima los nmeros ledos y slo si su suma es negativa imprima
la tambin.
14.
Lea dos nmeros de un mismo registro y calcule el consciente de
dividir el primero por el segundo. Imprima el cociente. Si el segundo nmero
es cero no ejecute el clculo e imprima mensaje que diga: "la divisin no es
posible".
15.
Leer de un mismo registro el nombre de un empleado, su salario
bsico por hora y el nmero de horas trabajadas en el mes. Calcular su
salario mensual e imprima tanto el nombre como su salario mensual.
16.
Leer un nmero y calcular el 5% del nmero ledo. Obtener tanto el
nmero como el porcentaje calculado.
17.
Leer de un registro el nombre de un empleado, su salario bsico por
hora, el nmero de horas trabajadas en el perodo y el porcentaje de
retencin en la fuente. Calcular el salario bruto, el valor de la retencin y el
salario neto e imprimir el nombre del empleado, su salario bruto, el valor de
la retencin y el salario neto.
18.
Para un salario bruto hasta de $1500, no hay retencin. Para un
salario bruto de $1500 a $3000 el porcentaje retencin desde 5%. Para un
salario bruto mayor de $3000 el porcentaje de retencin es de 8%. Obtener
el nombre del empleado, el salario bruto, el valor de la retencin y el salario
neto. Su debe leer el nombre y el salario.
19.
Leer de un registro el nombre de un empleado, el salario bsico por
hora y el nmero de horas trabajadas durante una semana. Calcular el
salario neto, teniendo en cuenta que si el nmero es trabajadas durante la
semana es mayor de 48, esas horas dems se consideran horas extras y
tienen un 35% de su encargo de. Imprima el nombre del empleado y el
salario neto.
20.
Elabore un algoritmo que lea tres valores diferentes y determine el
mayor, el menor y el promedio.
21.
Elabore un programa que valide mediante un mensaje si una pareja
(x, y) pertenece o no a la siguiente funcin: y = 3x - 4.
Ejemplo: la pareja (2,2) si pertenece a esta funcin.
22.
Disee un algoritmo que determine e imprima la hora
correspondiente al segundo despus de una hora digitada por el usuario
( hh, mm, ss ).
23.
La siguiente ecuacin corresponde a la ecuacin general de segundo
grado en la incgnita X o ecuacin cuadrtica
aX2 + bX + c = 0 con a,b y c constantes

183

La formula general para hallar su solucin es:

Elabore un algoritmo para hallar las soluciones reales. Tenga en cuenta que:

X1 y X2 se pueden calcular slo si:


B2-4.A.C >= 0

A<>0

24.
Escribir un algoritmo que permita determinar cul es el ganador de la
matricula de honor de entre 4 estudiantes . El algoritmo deber hallar la
nota definitiva de c/u de ellos (4 materias.) Si es mayor que 4.5 el alumno
podr aspirar a la matricula de honor, de lo contrario no.
25.
Disee un algoritmo que determine si un ao ledo por el teclado es o
no bisiesto.
26.
Escribir un algoritmo para calcular la fecha del siguiente da a partir
de una fecha digitada desde el teclado por el usuario ( dd, mm, aaaa ) e
imprimirla. (tenga en cuenta los aos bisiestos.)
27.
Disear un algoritmo que permita descomponer un nmero ( 10 <= x
<= 999 ) en sus dgitos e imprimirlos.
28.
Elabore un algoritmo que descomponga un nmero entero (mximo
de tres cifras) en sus dgitos y luego imprima cada uno de ellos en letras.
29.
Disee un algoritmo que tome un valor entero positivo (mximo
cuatro cifras), lo descomponga y lo imprima invertido pero como un nico
nmero entero.

Ejemplo: sea 3845 el nmero digitado se debe mostrar en pantalla el


nmero 5483

Nota: para la prueba de escritorio escriba cualquier nmero de cifras


decrecientes en uno como 8765, 6543, 3421, etc. y rstele su inverso y vera
que siempre dar 3087

30.
Escriba un algoritmo para la resolucin de una ecuacin de primer
grado (ax + b = 0).
31.
Disee un algoritmo que lea una fecha como un nmero entero de
ocho dgitos (ddmmaaaa), y luego la imprima en letras (ejemplo: si se digita
el nmero 02011999 entonces imprime "dos de enero de 1999.")

184

32.

Lea dos nmeros por teclado y determine si uno es divisor del otro.

33.
Se lee un nmero de mximo tres dgitos (verifique que
efectivamente sea de mximo tres dgitos) y se debe determinar si es un
nmero capica, es decir, que ledo de izquierda a derecha es igual que
ledo de derecha a izquierda. Por ejemplo: 727, 343, etc.
34.
Usted debe realizar un algoritmo para un cajero automtico, que
dispone de billetes de todas las denominaciones existentes (2000, 5000,
10000, 20000), de forma que se le indique una cantidad a pagar y
determine cual es la combinacin apropiada de billetes para formarla. Las
cantidades que no se puedan lograr con estos billetes deben aproximarse
adecuadamente.
35.
En un colegio se ha variado el sistema de calificaciones, por tanto se
requiere un algoritmo que indique la valoracin en letras cuando se tiene la
nota en nmeros, siguiendo la tabla mostrada a continuacin
Nota Numrica
0.0

5.9

6.0

6.9 D

7.0

7.9 C

8.0

8.9 B

Valoracin en letras

9.0 10.0

36.
Se digita un nmero entero en el rango de 1 al 999 y el algoritmo
debe imprimir el nmero en letras. (ejemplo: 120 se imprime ciento veinte)
37.
En una multinacional se cuenta con tres departamentos de ventas, en
los cuales los empleados devengan el mismo salario, sin embargo se tiene
un incentivo de acuerdo al cual, si un departamento vende ms del 50% del
total de ventas se da una bonificacin del 20% del salario a los empleados.
Considerando el total de ventas como la suma de las ventas de los tres
departamentos, indique cunto devengarn los empleados de cada uno de
los tres departamentos este mes.
38.
Realice un algoritmo que indique el valor de la funcin f(x) para un
valor de x determinado por el usuario. La funcin ha sido definida de la
siguiente forma:
39.
En una organizacin se tiene a los empleados agrupados por
categora, los de categora 1 ganan $20.000, los de categora 2, $15.000,
los de categora 3, $10.000 y los de categora 4, $7.500. Se quiere un
algoritmo que permita determinar cuanto debe pagarse a un empleado si se
conoce el nmero de horas que trabaj durante el mes y la categora a la
185

que pertenece. Se sabe que a todos se les descuenta un 7.2% por concepto
de salud, y si el salario total devengado (mensual) es menos de 1000.000,
se le da un subsidio del 15% sobre su salario mensual (sin descuentos).
40.
Se debe leer un nmero y determinar en que categora se encuentra;
se sabe que la categora A, son los nmeros entre 0 y 2 inclusive, la
categora B son los nmeros entre 3 y 6 inclusive, la categora C, los
nmeros 7 y 8, y la categora D el nmero 9. (Adivin, los nmeros validos
son entre 0 y 9).
41.
Se quiere determinar el valor de depreciacin de un artculo en una
empresa, se sabe que el valor de depreciacin anual se determina
dividiendo el valor de compra del mismo, entre el nmero de aos de vida
til; la vida til se determina de acuerdo a la clase de artculo, los edificios
tienen 20 aos, la maquinaria, muebles y enseres, 10 aos, los vehculos 5
aos y los computadores 3.
42.
En un concesionario de vehculos, se pagan las comisiones a los
vendedores segn el valor de la venta (ver tabla). Al final del mes se desea
saber Cunto gan un vendedor en total por todas las comisiones, si se
sabe que hizo 4 ventas?
Valor de Venta

Comisin para el Vendedor

Hasta 10.000.000 2%
Ms de 10 y Menos de 15 millones
Mas de 15 millones

4%

10%

43.
En una empresa comercializadora, cada vendedor debe realizar 5
ventas al mes, por cada venta ganar una comisin de acuerdo a la tabla de
comisiones. Cada vendedor tiene un salario bsico (que usted debe leer) y
de acuerdo a la suma del bsico y las comisiones, se le genera un
descuento para salud, pensiones y otros como seala la tabla de
descuentos. Usted debe imprimir el cdigo del vendedor, el total de sus
ventas, el total ganado por comisiones, el total devengado (bsico +
comisiones), el total de descuentos, y el salario a pagar por cada empleado.
Valor Venta Comisin
0-1.000.000 5%

Devengado (salario+comisiones)

0-500.000

5%

1.000.001-1.500.000

7%

1.500.01

1.00.01

ms

10%

Descuentos

500.001-1.000.0006%
ms

8%

44.
El teniente encargado del planetario desea que se disee un
algoritmo para que al digitar el nombre del da indique el astro que dio
origen a ese nombre. Recuerde los astros:
Nombre del da

Astro
186

Domingo

Sol

Sbado

Saturno

Viernes

Venus

Jueves

Jpiter

Mircoles

Mercurio

Martes

Marte

Lunes Luna

45.
Realice el algoritmo para que calcule si un tringulo es issceles,
equiltero o escaleno dados sus tres lados A, B y C
Issceles => dos lados iguales
Escaleno => A > B > C
Equiltero => A = B = C
46.
Haga un algoritmo que muestre en pantalla si un ngulo es: recto,
obtuso o agudo
Recto = 90 grados
Agudo < 90 grados
Obtuso > 90 grados
Con relacin a sus ngulos un tringulo puede ser:
Rectngulo => Un ngulo recto
Acutngulo => 3 ngulos agudos
Obtusngulo => 1 ngulo obtuso
47.
Elabore un algoritmo que calcule si un tringulo es rectngulo,
acutngulo u obtusngulo.
48.
Elabore un algoritmo que seleccione personal para un empleo con las
siguientes caractersticas: mujeres adultas, solteras y que practiquen algn
deporte.
49.
Para el clculo con inters compuesto se utilizan las siguientes
frmulas:
Hallar una cuota mensual conociendo el inters efectivo mensual (i),
nmero de meses (n), y el precio del articulo

187

Cuota = Precio x

50.
Hallar el precio de un articulo conociendo el valor de la cuota
mensual, el inters efectivo mensual (i), y el nmero de meses (n)
Precio = Cuota x

51.
Hallar el valor futuro de una precio actual conociendo el inters
efectivo mensual (i), y el nmero de meses (n)
Valor Futuro = Precio x (1 + i)n
52.
Elabore un algoritmo que permita de un men de opciones calcular el
valor deseado. (cuota, precio o valor futuro)
Nota: si i = 30% se debe usar i como: i = = 0.3

53.
Elabore un algoritmo que muestre el dgito que ms se repite en un
nmero de 5 cifras, en caso de no repetirse ninguno imprimir un mensaje
que diga "no hay dgitos repetidos".
54.
El recargo por trabajar horas nocturnas en una empresa es del 70%,
el recargo por trabajar festivos es del 100%, haga un algoritmo que lea los
das laboradas por un empleado, las horas nocturnas el valor de la hora
normal laborada y calcule e imprima el sueldo a pagar junto con el nombre
del empleado.
55.
Elabore un algoritmo que tenga cuatro niveles de seguridad para un
programa, si el usuario logra ingresar imprimir el mensaje "Bienvenido", en
caso contrario imprimir "Error clave" y el nivel del error.
56.
Realice un algoritmo que lea cuatro nmeros y los muestre ordenados
de mayor a menor. Ejemplo: sean los nmeros 5, 3, 7 y 9, debe mostrar 9, 7,
5 y 3.
57.
En un club deportivo se cancela la matricula segn sea la categora
del deportista, elabore un algoritmo que calcule el valor de la matricula si
los precios por categora son:
Infantil 5-8 aos = $38.000
Juvenil 9-17 aos = $40.100
Adultos mayores a 18 aos = $45.800

188

Se debe hacer un recargo a la matricula del 10% para la liga. Los nios
menores a 5 aos no pueden ser matriculados
58.
A los profesores de cierta universidad se les paga por horas ctedra
dictadas de 50 minutos, elabore un algoritmo que lea el nmero de horas
dictadas en un semestre siendo estas horas de 60 minutos y calcule el pago
del semestre para el profesor teniendo en cuenta que a los profesores se les
cancela segn su categora:
A= $12.400 B =$11.200 C= $10.000 D= $ 8.500
Al final al profesor se le resta el 10% de retencin en la fuente. El pago debe
tomar en cuenta las fracciones de hora.

8 algoritmos repetitivos (ciclos):

1.
N.

Escriba un algoritmo que muestre el cuadrado de los nmeros del 1 a

2.
Disear un algoritmo para determinar la cantidad de mujeres y de
hombres que hay en un grupo de N estudiantes (mximo 45). Adems se
debe hallar el promedio de edad y de estatura del grupo. (el usuario digitar
para cada integrante del grupo, su sexo, edad y estatura).
3.
Desarrolle un algoritmo que permita seleccionar personal para un
empleo de un total de N aspirantes. Los aspirantes deben cumplir las
siguientes condiciones para ser aceptados:
Mayores de edad
Ser ingeniero titulado
Tener experiencia laboral
Al final el algoritmo debe mostrar el total de aspirantes aceptados.
4.
Disee un algoritmo que calcule e imprima la suma de los nmeros
pares e impares comprendidos entre 1 y N. (1)
5.

Leer N nmeros y calcular el mayor sin importar que se repita.

6.

Leer una serie de M nmeros y mostrar al final cuantos son positivos.

7.
Calcular la suma de los cuadrados de los nmeros comprendidos
entre 1 y N.
8.
Elaborar un algoritmo que convierta un nmero entero positivo,
menor a 257 a sistema binario

189

Se deben leer nmeros hasta que se digite 99 (el 99 no se debe contar), y


determinar cuantos primos hay, y cuantos pares. (recuerde que estas dos
condiciones no son exclusivas).
9.
Elabore un algoritmo que lea cinco notas de (n) nmeros de
estudiantes, y que calcule e imprima el promedio de cada alumno y el
promedio del grupo adems de la nota del estudiante de mayor y menor
promedio. (2)
10.
Realice un algoritmo que calcule la suma de (n) nmeros, el producto
de estos y cuantos de estos son negativos y cuantos positivos. Estos datos
deben ser mostrados por pantalla. (3)
11.
Haga un algoritmo que lea las notas de (n) estudiantes, que indique el
nmero de estudiantes que ganaron la materia (mayor o igual a 3.0), el
numero de los que la perdieron (menor o igual a 3), adems de indicar
cuantos deben habilitar la materia (notas entre 2.5 y menores a 3.0) (4)
12.
Elabore un algoritmo para calcular de (n) nmeros ledos cuantos son
primos.
13.
Desarrolle algoritmos que impriman la suma de los trminos de las
siguientes series:
Suma = -1 +2 -3 +4 -5, ... hasta N trminos.
Suma =+1 +4 -8 +12 +16 -20 +24 +28, -... hasta N trminos.

(no son exactamente n trminos)

(no son exactamente n trminos)


14.

Determine el valor del combinatorio C(m,n), definido como

15.
Implemente un algoritmo que lea un nmero entero y lo muestre
invertido.
16.
En un curso hay 20 alumnos, cada alumno tiene diferente nmero de
notas, se quiere determinar el promedio de cada estudiante, y el nmero de
estudiantes que perdieron la materia (menos de 3.0). NOTA: La nota
definitiva de un estudiante corresponde al promedio simple de sus notas. (5)

190

17.
Un nmero es perfecto si la suma de sus divisores excepto l mismo
es igual al propio nmero. Ejemplos:
Nmero:

28

36

Divisores--->

a.

14

b.

c.

d.

e.

12

f.

g.

18

Suma 6

28

55

18.
Elabore un algoritmo que lea las ventas de (n) nmero de
vendedores, para los productos (A, B, C, D y C), si los precios de los
productos son ($1000, $2345, $3876, $1235 y $550) respectivamente,
calcule el nmero individual y total de productos vendidos, las ventas
totales por producto, el promedio total de ventas, el producto mas vendido,
el menos vendido, el vendedor que ms ventas realiz.
19.
Realice un algoritmo que calcule la suma de (n) nmeros, el producto
de estos y cuantos de estos son negativos y cuantos positivos. Estos datos
deben ser mostrados por pantalla.
20.
Haga un algoritmo que lea las notas de (n) estudiantes, que indique el
nmero de estudiantes que ganaron la materia (mayor o igual a 3.0), el
numero de los que la perdieron (menor o igual a 3), adems de indicar
cuantos deben habilitar la materia (notas entre 2.5 y menores a 3.0). Todos
los datos deben ser mostrados por pantalla.
21.
Realice un algoritmo que lea (n) nmeros y halle el mayor nmero
par, el mayor impar, y el producto de estos dos nmeros. Estos datos deben
ser mostrados por pantalla.
22.
Haga un algoritmo que lea un nmero entero de 4 cifras (base 10) y
que lo convierta a un binario (base 2) y un octal (base 8). Utilice
instrucciones repetitivas (use el operador residuo).
23.
Un profesor necesita calcular las notas finales de su curso, para ello
dispone de 7 notas, las 3 primeras componen la nota definitiva de quices y
talleres con un valor de 25%, la 4 nota corresponde al primer examen
191

parcial con un 25%, la 5 al segundo examen parcial con un 25%, las dos
ultimas (6 examen escrito y 7 trabajo opcional) al examen final con un valor
de 25%. (6)
24.
El profesor desea obtener los siguientes resultados para cada
estudiante: La nota definitiva de quices y talleres (promedio de las 3
primeras notas). La nota definitiva del examen final (en el caso de haber
presentado opcional). La nota final del estudiante. Estos datos deben ser
mostrados en pantalla junto con las dems notas.
Desea conocer tambin cuantos aprobaron el curso (notas superiores a 3.0)
y cuantos no cumplieron con los objetivos de este (notas menores a 3.0) y
tambin obtener la mejor nota para promover este estudiante como monitor
de la materia para el prximo semestre. (estos ltimos datos se deben
mostrar por pantalla al final del calculo de las notas finales de todo el
curso).
25.
Elabore un algoritmo que imprima cual es el vendedor del mes de una
empresa.
26.

Tabla de Precios

Producto
A

$1750

$3500

$7000

Precio

Para lograr el clculo se leen las cantidades de productos vendidos por cada
uno de los M vendedores de la empresa y siguiendo la tabla de precios se
determina el mejor como aquel que mayores ventas haya tenido.
27.
Use la siguiente frmula para calcular la raz cuadrada de un nmero
entero positivo:
Raz = 0.5*
Donde N es el nmero del que se desea conocer la raz y X1 es una variable
que se le asigna un valor inicial de 1.
Con estos dos valores iniciales se obtiene el primer valor de la variable Raz.
Si el valor absoluto de |Raz - X1| es mayor a 0.0000001 se le reasignar a
X1 el contenido de la variable Raz y se har un nuevo calculo hasta que el
valor absoluto sea menor, que es cuando se obtiene el valor real de la raz.

192

28.
Escriba un programa que calcule el resultado de la siguiente serie
para N trminos.

29.
Algunos pueblos de Rusia emplean el siguiente mtodo para
multiplicar: escriben los dos factores uno al lado del otro y se forman con
ellos dos columnas: debajo del factor que est a la izquierda se toma la
mitad en nmeros enteros, es decir despreciando fracciones, y de esta
mitad se toma la mitad, y as sucesivamente hasta llegar a 1; debajo del
factor que est a la derecha, y paralelamente, se escribe su duplo, y as
sucesivamente hasta emparejar con el ultimo nmero de la columna de la
izquierda, como puede verse en el ejemplo, se tachan de la columna de la
derecha todos los nmeros colocados enfrente de los nmero pares de la
otra columna y se suman todos los nmeros no tachados de esta columna;
esta suma ser el resultado de la multiplicacin.

Elabore un algoritmo que emplee este mtodo para multiplicar dos


nmeros.

Ejemplo: Multiplicar 22 x 6 = 132

22

11

12

24

48

96
132

30.
Imprimir cuatro columnas. En la primera columnas, los nmeros del 1
al 50. En las otras columnas, la segunda, la tercera y la cuarta potencia de
los entero de la primera columna.
31.
Encuentre la calificacin promedio para un gran nmero, aunque
desconocido, de calificacin de exmenes. Estas vienen grabadas en
registros. La calificacin ms alta posible es 10.

193

32.
Leer una serie de pares de nmeros y obtener de cada par el nmero
mayor. Imprima un mensaje especial si los nmeros son de igual valor.
33.
Leer una serie de grupos de 3 nmeros y obtener el nmero mayor y
el menor de cada terna.
34.
El dan esta interesado en saber el nmero de personas mayores de
18 aos, tanto hombres como mujeres en la ciudad de Medelln. Calcule e
imprima el resultado de esta investigacin se deben leer registros que
contienen cada uno el sexo y el nmero de aos. La cantidad de personas
es desconocido, pero se sabe que la ultima cedula digitada es cero (esto
como control de salida del ciclo).
35.
un vendedor desea calcular su comisin total sobre la venta de varios
artculos. Al vendedor le corresponde el 5% de comisin sobre artculos cuyo
precio es menor de $100.000 y el 7.5% de comisin sobre aquello artculos
cuyo precio es de 100.000 o ms suponga que el vendedor hizo N ventas
36.
Se tiene un archivo con los datos de los estudiantes de un
universidad, as: cdigo del estudiante, nombre del estudiante, valor crdito
del estudiante, nmero de crditos tomados, valor del recargo en la
matrcula

Se requiere de los registros imprimir un estado con la siguiente informacin


por estudiante:

Cdigo, nombre del estudiante, valor crdito, nombre de crditos, valor del
recargo y valor total pagado estudiante (valor crdito por nmero de
crditos ms valor del recargo), tambin se debe calcular que imprimieron
al final del listado el total pagado por todos los estudiantes y el promedio
por estudiante.

37.
Se tiene un archivo de los empleados de una compaa, cada registro
contiene los siguientes datos: nmero del empleado, nombre del empleado,
salario bsico hora, horas trabajadas en el mes, deducciones.
Se requiere leer los registros que imprimir un listado con la siguiente
informacin por empleado:

Nmero del empleado, nombre del empleado, salario bsico hora, horas
trabajadas, deducciones, salario mensual (salario bsico hora por nmero
de horas trabajadas menos deducciones)

194

Tambin se debe calcular el imprimir al final del listado el total de salarios


pagados a todos los empleados y el promedio salarial por empleado. El
ultimo registro a ingresar es un numero de empleado igual a 11111 (Este no
se tiene en cuenta ya que es un registro centinela o punto de parada

38.
Se requiere calcular imprimir la informacin necesaria para una
nmina. Los datos de entrada se encuentran en un archivo donde cada
registro contiene: nombre del empleado, nmero del empleado, rata por
hora, horas trabajadas y nmero de exencin

Del listado de salida de demostrar: nombre del empleado, nmero horas


trabajadas, salario bruto, salario neto, FICA retenido e impuestos retenidos.
Los clculos para las deducciones se hacen de la siguiente forma:

Salario bruto = rata horaria (1.5 *(horas -40) +40)


FICA= 5.2% del salario bruto.
Impuestos 15% de (salario bruto-$13*numero de exencin)
Salario Neto = Salario bruto impuestos FICA.

39.
Leer un registro de los nmeros enteros positivos (M y N). Calcular el
imprimir la suma de los mltiplos de M. comprendidos entre M. y N.
40.
Se tiene un archivo donde cada uno de los registros contiene los
siguientes campos:

Cdigo del articulo, Valor unitario, Clase de articulo (1 articulo de


importacin y 2 suministro local), Unidades consumidas en junio, Unidades
consumidas en julio, Unidades consumidas en agosto, Unidades consumidas
en septiembre,

Calcular el promedio de las unidades consumidas en los cuatro meses

Calcular el consumo esperado de acuerdo a la siguiente formula

195

c.e= (1+a)*promedio de unidades consumidas, donde a es 0.10 para


artculos de importacin y 0.15 para artculos de consumo local

Calcule el valor de consumo esperado, el cual es el consumo esperado *


valor unitario

41.
El cdigo y las calificaciones obtenidas por los estudiantes en una
clase numerosa se graban en registros. Al final del periodo de estudios
estas calificaciones, cuatro por cada estudiante se suman para saber el
rendimiento total, contando doble la cuarta calificacin puesto que ella
corresponde al examen final del periodo que fue dos veces mas largo que
los otros. Realizar un programa para mostrar las calificaciones definitivas
de la clase y el promedio del grupo
42.
Realice un algoritmo que imprima en pantalla el conjunto de los (n)
mltiplos de un nmero entero (x) digitado por el usuario.
43.
Haga un algoritmo que imprima en pantalla el conjunto de los
divisores de un nmero entero (x) digitado por el usuario.
44.
Elabore un algoritmo que calcule el mnimo comn mltiplo (m.c.m)
de dos nmeros A y B, recuerde el m.c.m. como su nombre lo indica es el
menor mltiplo comn de dos o mas nmeros. Ejemplo: sean los nmeros 8
y 6.
m.c.m. (8, 6) = 24

45.
Dos nmeros son amigos, si cada uno de ellos es igual a la suma de
los divisores del otro. Ejemplo: 220 y 284 son amigos por que,

284

220

71

142

10
11

196

20
22
44
55
110
220

284

Elabore un algoritmo que calcule si dos nmero son amigos o no.

46.
Elabore un algoritmo que calcule el nmero de das que existen entre
dos fechas. Tenga en cuenta que existen meses de 30 y 31 das y los aos
bisiestos.
47.
Calcule e imprima las tablas de multiplicar del 1 al 9 usando el ciclo
mientras().
48.

Desarrolle un algoritmo que impriman las siguientes series:

1, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44.


1, 4, 9, 16, 25, 36, 49, 64, 81.
2, 4, 6, 8, 10, .....100.
-2, +4, -6, +10, ....100.

49.

Obtenga los 100 primeros nmeros naturales.

50.

Obtener los nmeros padres comprendidos entre 1 y 1000.

51.
Leer de un registro un nmero entero positivo y obtener los mltiplos
de 3 comprendidos entre uno y el nmero ledo.
52.
Lea los primeros 20 registro de un archivo, cada uno de los cuales
tienen nombre imprima los nombre uno.
53.
Leer varios registros cada uno de ellos, con teniendo un nombre. El
nmero de estos registros se encuentra grabado en un registro que precede
los anteriores, imprimir cada uno de los nombres ledos.
54.
Leer un conjunto de registros cada uno de ellos con teniendo el
cdigo y el nombre de cada uno los estudiantes del universidad. El ltimo
197

registro del conjunto (registro centinela) contiene el cdigo 99999999 y es


utilizado slo para chequear el final de los registros. Imprima cada uno de
los cdigos y nombres ledos. Lgicamente la informacin del registro
centinela no se imprime porque no pertenece a ningn estudiante.
55.
Imprimir cuatro columnas. En la primera columnas, los nmeros del 1
al 50. En las otras columnas, la segunda, la tercera y la cuarta potencia de
los entero de la primera columna.
56.

Calcule la suma de los 100 primeros nmero natural.

57.

Obtener la suma de los nmeros pares comprendidos entre uno y 100

58.
Encuentre la calificacin promedio para un gran nmero, aunque
desconocido, de calificacin de exmenes. Estas vienen grabadas en
registros. La calificacin ms alta posible es 10.
59.
Leer una serie nmeros. Encontrar el valor absoluto (magnitud) de
cada nmero, imprimir tanto los nmeros como sus valores absolutos.
60.
Leer una serie nmeros. Obtener el cuadrado y el cubo de cada
nmero de imprimir tanto los nmeros como sus cuadrados y sus cubos.
61.
Leer una serie de pares de nmeros y obtener de cada par el nmero
mayor. Imprima un mensaje especial si los nmeros son de igual valor.
62.
Leer una serie de grupos de 3 nmeros y obtener el nmero mayor y
el menor de cada terna. Escriba un mensaje especial si por lo menos dos de
cada tres nmeros son iguales.
63.
Identifique y obtenga el nmero medio de un conjunto de tres
nmeros nicos. El nmero medio es aquel que no es el mayor ni el menor.
64.
El dan esta interesado en saber el nmero de personas mayores de
18 aos, tanto hombres como mujeres en la ciudad de Medelln. Calcule e
imprima el resultado de esta investigacin se deben leer registros que
contienen cada uno el sexo y el nmero de aos
65.
Una tienda de libros y gneros diversos al menudeo ofrece un
descuento de cortesa del 10% para profesores. Muestre como la
computadora puede calcular que imprimir el 10% de 1, 1.1, 1. 2 etc. hasta
$25
66.
un vendedor desea calcular su comisin total sobre la venta de varios
artculos. Al vendedor le corresponde el 5% de comisin sobre artculos cuyo
precio es menor de $100.000 y el 7.5% de comisin sobre aquello artculos
cuyo precio es de 100.000 o ms suponga que el vendedor hizo N ventas
67.
Coldeportes de Antioquia est interesado en promover el bsquetbol
y para ello desea conocer personas que tengan las siguientes
caractersticas: edad mnima 18 aos, estatura mnima 180 cm. y peso

198

mximo 80 kilos. Lea identificacin, edad, estatura y peso de varios


deportistas, verifique si cada uno de ellos cumplen las condiciones
impuestas por si es as, imprima identificacin edad estatura y peso.
68.
Se tiene un archivo con los datos de los estudiantes de un
universidad, as: cdigo del estudiante, nombre del estudiante, valor crdito
del estudiante, nmero de crditos tomados, valor del recargo en la
matrcula
69.
Se requiere de los registros imprimir un estado con la siguiente
informacin por estudiante:

Cdigo, nombre del estudiante, valor crdito, nombre de crditos, valor del
recargo y valor total pagado estudiante (valor crdito por nmero de
crditos ms valor del recargo) en tambin se debe calcular que
imprimieron al final del listado el total pagado por todos los estudiantes y el
promedio por estudiante.

70.
Se tiene un archivo de los empleados de una compaa, cada registro
contiene los siguientes datos: nmero del empleado, nombre del empleado,
salario bsico hora, horas trabajadas en el mes, deducciones.

Se requiere leer los registros que imprimir un listado con la siguiente


informacin por empleado:
Nmero del empleado, nombre del empleado, salario bsico hora, horas
trabajadas, deducciones, salario mensual (salario bsico hora por nmero
de horas trabajadas menos deducciones)

Tambin se debe calcular el imprimir al final del listado el total de salarios


pagados a todos los empleados y el promedio salarial por empleado.

71.
Calcular el imprimir los salarios que se adeudan a los trabajadores,
basados en tasas por hora y en tiempo trabajado, leyendo los datos de un
archivo. Tome en cuenta pagos a 1 .5 veces la tasa regular, cuando las
horas trabajadas excedan de 40 por semana.
72.
Dado que un peso de maana tiene menos valor que un peso de hoy
(fenmeno econmico que llamamos inflacin) las empresas cuando
calculan en los futuros ingresos transformados a otros pesos de hoy superan
el monto de la inversin hecha

199

Formula general para l calcul del valor actual es:


VA= C / (1+i)N
Donde :C

es la cantidad del ingreso.

i: Es la taza de inflacin
N: son los aos en consideracin.

73.
Calcular la cantidad a pagar de matrcula por cada estudiante de la
siguiente forma:

El total a pagar es igual a los cargos fijos ms los cargos variables. Los
cargos fijos son un valor ledo, y los cargos variables se calculan sumando el
10% del patrimonio y el 15% de la renta. Cada registro contiene: cdigo del
estudiante, patrimonio y renta. Se debe imprimir por estudiante: cdigo,
renta, patrimonio, cargo fijo, cargo variable y total matrcula.

74.
Se requiere calcular imprimir la informacin necesaria para una
nmina. Los datos de entrada se encuentran en un archivo donde cada
registro contiene: nombre del empleado, nmero del empleado, rata por
hora, horas trabajadas y nmero de exencin

Del listado de salida de demostrar: nombre del empleado, nmero horas


trabajadas, salario bruto, salario neto, FICA retenido e impuestos retenidos.
Los clculos para los deducciones se hacen de la siguiente forma:

Salario bruto = rata horaria (1.5 *(horas -40) +40)


FICA= 5.2% del salario bruto.
Impuestos 15% de (salario bruto-$13*numero de exencin)
Salario Neto = Salario bruto impuestos FICA.

75.
Leer un registro de los nmeros enteros positivos (M y N). Calcular el
imprimir la suma de los mltiplos de M. comprendidos entre M. y N.

200

76.
leer varios registros cada uno de ellos, conteniendo un nombre, el
nmero de estos se encuentra grabado en un registro que precede a los
anteriores, imprimir cada uno de los nombres ledos.

Salario base hora


Produccin minima dia
Produccin dia

Calcular el pago por da para cada empleado. Se debe tener en cuenta al


obrero que no cubre la produccin mnima, en cuyo caso el jornal es
equivalente al salario hora multiplicado por 8 horas de trabajo por da.

77.
Calcule e imprima las tablas de multiplicar del 17 al 30. Se debe
imprimir el multiplicando, el multiplicador y el producto.

78.
El gerente de la empresa de transportes "Restringida" desea saber el
valor del cheque que ha de elaborar cada semana por concepto de daos de
vehculos. El taller "Arregla Todo" enva a la empresa las facturas cada una
con la siguiente informacin: la placa del vehculo reparado, el tipo de dao
y el costo del mismo. En la empresa proceden a crear un archivo.

El dao puede ser de tres tipos:


1

- el gerente paga solamente hasta $50O.

- el gerente paga solamente hasta $700.

- el gerente paga solamente hasta $800.

Si el valor del dao es mayor que el reconocido por la gerencia se tomar el


mximo de la gerencia.

Calcule el monto del cheque que la gerencia pagar y el monto en el caso


de que la gerencia no tenga en cuenta las restricciones

201

9 Algoritmos de arreglos unidimensionales (vectores):

1.
Disee un algoritmo que lea un vector de N posiciones y luego calcule
e imprima su suma.
2.
Disee un algoritmo que lea un vector de N posiciones y calcule e
imprima cuantos nmeros pares y cuantos impares hay en l.
3.
Disee un algoritmo que lea un vector de N posiciones y calcule e
imprima cuantos nmeros positivos y negativos hay en l, si existen ceros
debe indicar su cantidad.
4.
Elabore un algoritmo que lea un vector de N posiciones (enteras o
reales) y luego lo copie en otro. Finalmente debe imprima el contenido de
ambos vectores.
5.
Elabore un algoritmo que lea un vector de N posiciones (enteras o
reales) luego y lo copie en otro pero invirtiendo las posiciones. Al final se
deben imprimir los contenido de ambos vectores.
6.
Haga un algoritmo que genere los primeros 20 nmeros primos y los
almacene dentro de un vector. Al final debe imprimir el contenido del vector.
7.
Disee un algoritmo que lea un vector de N posiciones y luego
imprima cuantos nmeros primos hay dentro del vector.
8.
Disee un algoritmo que lea un vector de N posiciones enteras y lo
ordene por cinco mtodos diferentes.
9.
Elabore un algoritmo que lea N notas y las almacene en un vector y
luego calcule e imprima la nota mayor y la menor.
10.
Haga un algoritmo que lea un vector de N posiciones y luego lea un
nmero M y calcule e imprima cuantos veces se repite M dentro del vector.
11.
Escriba un algoritmo para verificar si una palabra de 8 letras digitada
por el usuario es palndromo.
12.
Disear un algoritmo que llene un vector con diez nmeros digitados
por el usuario desde el teclado, halle los mltiplos de siete y de dos.
Imprima los nmeros hallados y realice la sumatoria de los nmeros.
13.
Disee un algoritmo que llene un vector con 15 nmeros aleatorios,
determine el mayor y el menor. Verifique si hay en el arreglo un nmero que
sea igual a la raz cuadrada de la suma de los dos nmeros ( mayor y menor
).
Para un grupo de 10 nmeros enteros calcule y muestre:

202

El menor y su posicin en el arreglo.(funcin menor).


El mayor y su posicin en el arreglo.(funcin mayor).
El promedio. (funcin promedio)

14.

Para un grupo de 20 caracteres haga:

Ordene los caracteres ascendentemente. (Vea tabla de cdigos ASCII).


(funcin ordena).
El algoritmo deber mostrar el contenido de todas las posiciones del arreglo.
(funcin imprima).
15.
Se desea calcular la raz cuadrada de un grupo de 30 nmeros
enteros positivos y el algoritmo deber:
16.
Mostrar la lista de todos los nmeros con su correspondiente raz pero
ya calculada y almacenada en un arreglo. (funcin imprima).
Modificar alguno de los nmeros al cual se le desea calcular la raz y
guardar el resultado correcto en el arreglo que corresponda. (funcin
modifica).
17.
Desarrolle un programa que permita calcular la nota definitiva de N
estudiantes de un curso de informtica I. Adems debe mostrar el nombre
del estudiante de mayor nota, la nota promedio del curso y cuantos
aprobaron la materia.

Los porcentajes de las notas son los siguientes:


Primer parcial => 30%
Segundo parcial => 30%
Talleres y quices => 20%
Parcial final => 20%
La nota de talleres y quices se toma de promediar cuatro notas (2 talleres y
2 quices) que deben ser ledas por el programa.

18.
Elabore un algoritmo para leer las notas de N estudiantes e imprimir
por pantalla el promedio de estas y la nota mayor. Use un vector entero
para leer las notas.

203

19.
Haga un algoritmo que lea dos vectores A y B de un tamao N y
despus por medio de una variable auxiliar intercambiar los contenidos de
los dos vectores y luego los muestre por pantalla.
20.
Leer un vector A de N elementos (todos diferentes) y un vector B de
M elementos (pueden ser repetidos). Calcular cuantas veces se encuentra
presente en B cada elemento de A.
21.
Leer un vector de tamao M, y luego invertirlo sobre el mismo. ( el
que estaba de primero quedar de ultimo y viceversa).

10 Algoritmos de arreglos bidimensionales (matrices):

1.
Disee un algoritmo que lea una matriz de NxM posiciones y luego
calcule e imprima la suma de todos sus elementos (posiciones).
2.
Implemente un algoritmo para llenar una matriz cuadrada de NxN
posiciones con un valor X. El valor de N y de X se leen por teclado.
3.
Elabore un algoritmo que lea una matriz cuadrada de NxN posiciones
y luego imprima los elementos de su diagonal principal.
4.
Disee un algoritmo que lea dos matrices A y B de NxM posiciones y
luego calcule e imprima su suma.
5.
Disee un algoritmo que lea dos matrices A, B y luego calcule e
imprima su multiplicacin si se puede.
6.
Haga un algoritmo que lea una matriz de NxM posiciones y luego lea
un nmero e imprima si este se encuentra dentro de la matriz.
7.
Haga un algoritmo que lea una matriz de NxM posiciones y luego
genere la transpuesta de esta matriz.
8.
Elabore un algoritmo que lea una matriz cuadrada de NxN posiciones
y luego imprima si es triangular superior o inferior.
9.
Elabore un algoritmo que lea una matriz cuadrada de NxN posiciones
y luego imprima si la matriz es igual a la matriz identidad.
10.
Elabore un algoritmo que llene una matriz de 4x4 con datos digitados
por el usuario desde el teclado y verifique si es una matriz simtrica. ( Aij =
Aji )
11.
Desarrolle un algoritmo que lea una serie de N nmeros y los
almacene en la primera columna de una matriz, en la siguiente columna
debe almacenar el cuadrado de cada nmero, y en la tercera columna la

204

raz cuadrada. Al final se debe mostrar fila por fila los elementos de la
matriz.
12.

Se tiene la siguiente informacin sobre el inventario en un almacn:

Cdigo producto
Compras

Inv. Inicial

Inv. Final

Dados de baja

Ventas

Se desea saber a travs de un algoritmo para 5 productos:


Permitir ver toda la informacin para los cinco productos.
Cual es el inventario final, el inicial , las compras, ventas y dados de baja
para un cdigo de producto que sea ledo.
Permitir modificar cualquiera de los datos de la tabla a excepcin del cdigo
del producto y el inventario final. Este ltimo es calculado, luego nunca
podr ser ledo o modificado y no podrn existir productos con un mismo
cdigo.
13.
Disee un algoritmo que resuelva un sistema de n ecuaciones lineales
usando matrices.
14.
Suponga que tenemos tres tipos de productos. A cada uno de ellos se
les aplicar un porcentaje de descuento sobre la venta, dependiendo de la
cantidad vendida segn la siguiente tabla:
Cantidades Vendidas
Tipo

<=5 >5 y <=20 >20

Teclados (T) 0%
Mouse (S)

5%

Precio
8%

12000

1%

3%

5%

5500

Parlantes (P) 2%

8%

9%

9000

Cada venta puede tener solo un producto. Asuma que se registraron 10


ventas es un da.
Se desea saber para ese da :
Cul fue el descuento total por cada venta?
Cul fue el descuento total por producto?
Cul fue el producto con mayor nmero de ventas?
Cul fue el producto que dio mayor ingreso a la empresa?
Muestre el listado de todas las ventas con la siguiente informacin: nmero
de la venta, el tipo de producto que se vendi, cantidad, precio, valor bruto
de la venta, descuento y valor neto (bruto descuento).

205

Adicionalmente se debe poder modificar la informacin de cualquiera de las


ventas en caso de errores.

11. SUBPROGRAMAS: PROCEDIMIENTOS Y FUNCIONES.

11.1. INTRODUCCIN A LOS SUBPROGRAMAS O SUBALGORITMOS:


La programacin modular es una de las tcnicas fundamentales de la
programacin. Se apoya en el diseo descendente y en la filosofa de
divide y vencers, es decir se trata de dividir el problema dado, en
problemas ms simples en que cada uno de los cuales lo implementaremos
en un mdulo independiente. A cada uno de estos mdulos es a lo que
llamamos subalgoritmos o subprogramas.
Siempre existir un mdulo o programa principal que es con el que
comienza la ejecucin de todo el programa, y a partir de l iremos llamando
al resto.
Cada vez que se llama a un subprograma se le pasa la informacin
que necesita en la llamada, a continuacin comienza a ejecutarse el
subprograma llamado, y cuando termine su ejecucin, devuelve el control a
la siguiente instruccin a la de llamada en el programa que lo llam.
En cuanto a la estructura de un subprograma es igual a la estructura
de un programa, va a tener una informacin de entrada que es la que le
pasamos al hacer la llamada y que se coloca junto al nombre del
subprograma. Despus va a tener un conjunto de acciones, declarar otras
variables propias del subprograma, y al terminar la ejecucin puede que
devuelva o no resultados al programa que lo llam.
Hay dos tipos fundamentales de subprogramas: Funciones y
procedimientos.

11.2. FUNCIONES:
Desde el punto de vista matemtico, una funcin es una operacin
que toma uno o varios operandos, y devuelve un resultado. Y desde el punto
de vista algortmico, es un subprograma que toma uno o varios parmetros
como entrada y devuelve a la salida un nico resultado.

206

Pascal: En las funciones se puede devolver ms de un nico resultado


mediante parmetros.
C: Se devuelve todo por parmetros.
Este nico resultado ir asociado al nombre de la funcin. Hay dos
tipos de funciones:
-

Internas: Son las que vienen definidas por defecto en el lenguaje.

Externas: Las define el usuario y les da un nombre o identificador.

Para llamar a una funcin se da su nombre, y entre parntesis van los


argumentos o parmetros que se quieren pasar.

Declaracin de una funcin:


La estructura de una funcin es semejante a la de cualquier
subprograma. Tendr una cabecera (con el nombre y los parmetros) y un
cuerpo(con la declaracin de los parmetros de la funcin y las
instrucciones).
Sintaxis:
Funcion <nombre_funcion> (n_parametro: tipo, n_parametro: tipo): tipo
funcion
Var <variables locales funcion>
Inicio
<acciones>
retorno <valor>
fin <nombre_funcion>

La lista de parmetros es la informacin que se le tiene que pasar a la


funcin. Los parmetros luego dentro de la funcin los podemos utilizar
igual que si fueran variables locales definidas en la funcin y para cada
parmetro hay que poner su nombre y tipo.
El nombre de la funcin lo da al usuario y tiene que ser significativo.
En las variables locales se declaran las variables que se pueden usar
dentro de la funcin.
Entre las acciones tendr que existir entre ellas una del tipo retorno
<valor>. Esta sentencia pondr fin a la ejecucin de la funcin y devolver
el valor de la funcin, es decir, como valor asociado al nombre de mismo
207

tipo que el tipo de datos que devuelve a la funcin, este valor por tanto
tiene que ser del mismo tipo que el tipo de datos que devuelve la funcin,
que es el que habremos indicado al declarar la funcin en la parte final de la
cabecera.
No se permiten funciones que no devuelvan nada.
Los parmetros que aparecen en la declaracin de la funcin se
denominan parmetros formales, y los parmetros que yo utilizo cuando
llamo a la funcin se denominan parmetros actuales o reales.
Invocacin de una funcin:
Para llamar a una funcin se pone el nombre de la funcin, y entre
parntesis los parmetros reales, que podrn ser variables, expresiones,
constantes,... pero siempre del mismo tipo que los parmetros normales
asociados
<nombre_funcion> (parmetros reales)
La funcin puede ser llamada desde el programa principal o desde
cualquier otro subprograma.
Para llamar a la funcin desde cualquier parte, implica el
conocimiento previo de que sta funcin existe.
A travs de los parmetros reales de la llamada se proporciona a la
funcin la informacin que necesita, para ello, al hacer la llamada lo que se
produce es una asociacin automtica entre parmetros reales y
parmetros formales. Esta asociacin se realiza segn el orden de la
aparicin y de izquierda y derecha.
Si el parmetro formal y real no son del mismo tipo, en Pascal se
produce un error, y en C se transforman los tipos si es posible.
La llamada a una funcin, siempre va a formar parte de una
expresin, de cualquier expresin en la que en el punto en la que se llama a
la funcin, pudiera ir colocado cualquier valor del tipo de datos que
devuelve la funcin, esto se debe a que el valor que devuelve una funcin
esta asociado a su nombre.

Pasos para hacer la llamada a una funcin:


1.
Al hacer la llamada y ceder el control a la funcin, se asocia (asigna el
valor) de cada parmetro real a cada parmetro formal asociado, siempre
por orden de aparicin y de izquierda a derecha, por lo que siempre que no
coincidan los tipos y el nmero de parmetros formales y reales, se produce
un error.
208

2.
Si todo ha ido bien, se ejecutan las acciones de la funcin hasta que
lleguemos a una de tipo retorno <valor> que pondr fin a la ejecucin.
Pueden existir varias sentencias de retorno en la misma funcin, pero en
cada llamada solo se podr ejecutar uno.
3.
Se le asocia al nombre de la funcin el valor retornado y se devuelve
el control al subprograma que hizo la llamada pero sustituyendo el nombre
de la funcin por el valor devuelto.
Otra forma de especificar el retorno de una funcin:
Se le asigna el valor devuelto al nombre de la funcin.
N_funcion valor
Ejemplo de funcin:
Una funcin que calcule la mitad del valor que le paso parmetro.
Suponemos que es un valor entero.
Funcion mitad (n: entero): real
Var m: real
Inicio
M n/2
Retorno m
Fin mitad

Algoritmo calc_mitad
Var num: entero
Inicio
Escribir Introduce un nmero para hallar su mitad
Leer num
Escribir La mitad de num es mitad(num)
Fin

* La funcin solo puede ser llamada desde una expresin.

11.3. PROCEDIMIENTOS:

209

El inconveniente de una funcin es que solo puede devolver un nico


valor, por lo que s nos interesa devolver 0 o N valores, aunque puedo usarlo
para devolver un solo valor, debo usar un procedimiento.
Un procedimiento es un subprograma o un subalgoritmo que ejecuta
una determinada tarea, pero que tras ejecutar esa tarea no tienen ningn
valor asociado a su nombre como en las funciones, sino que si devuelve
informacin, lo hace a travs de parmetros.
Al llamar a un procedimiento, se le cede el control, comienza a
ejecutarse y cuando termina devuelve el control a la siguiente instruccin a
la de llamada.
Diferencias entre funciones y procedimientos:
1.
Una funcin devuelve un nico valor y un procedimiento puede
devolver 0,1 o N.
2.
Ninguno de los resultados devueltos por el procedimiento se asocian
a su nombre como ocurra con la funcin.
3.
Mientras que la llamada a una funcin forma siempre parte de una
expresin, la llamada a un procedimiento es una instruccin que por s sola
no necesita instrucciones.
Esta llamada consiste en el nombre del procedimiento y va entre parntesis
van los parmetros que se le pasan. En algunos lenguajes (como el C), se
pone delante la palabra Llamar a (Call) procedimiento (parmetro).
Sintaxis:
Procedimiento <nombre_proc> (<tipo_paso_par> <nombre_par>:
tipo_par,...)
Var <variables locales>: tipo
Inicio
<sentencias>
fin <nombre_proc>

La cabecera va a estar formada por el nombre del procedimiento que ser


un identificador y que debe de ser significativo, y luego entre parntesis los
parmetros o la informacin que se le pasa al procedimiento. Para cada
parmetro hay que indicar el tipo de paso de parmetro. Hay dos tipos
fundamentales de paso de parmetros, por valor y por referencia, si no
ponemos tipo de paso de parmetros, se toma el tipo de paso de
parmetros por valor.

210

En el cuerpo del procedimiento donde van las sentencias ya no habr


ninguna de tipo <retorno valor>, ahora bien, si el procedimiento devuelve
resultados a travs de sus parmetros, cosa que solo podr hacer a travs
de los parmetros que se pasan por referencia, tendrn que existir
sentencias de asignacin de valores a estos parmetros pasados por
referencia, a travs de los cuales se van a devolver los resultados.
Como se llama a un procedimiento:
[llamar a (Call)] nombre_proc (par_reales)
Pasos para hacer la llamada a un procedimiento:
1.
Se cede el control al procedimiento al que se llama y lo primero que
se hace al cederle el control es sustituir cada parmetro formal de la
definicin por el parmetro actual o real de la llamada asociado a l. Esta
asociacin entre parmetros formales y reales se hace de izquierda a
derecha por orden de colocacin y para que se pueda producir esta
asociacin tienen que existir el mismo nmero de parmetros formales que
reales, y adems el tipo tiene que coincidir con el del parmetro formal
asociado, sino se cumple alguna de estas condiciones hay un error.
2.
Si la asociacin ha sido correcta comienzan a ejecutarse las
instrucciones del procedimiento hasta llegar a la ltima instruccin. Al llegar
a la instruccin se vuelven a asociar los parmetros formales que devuelven
los resultados a los parmetros formales asociados en la llamada, es decir,
de esta manera algunos de los parmetros reales de la llamada ya
contendrn los resultados del procedimiento.
3.
Finalmente se cede el control a la siguiente instruccin a la que se
hace la llamada, pero teniendo en cuenta que en esta instruccin y en las
siguientes puedo usar ya los parmetros reales en los que se devolvieron los
resultados del procedimiento para trabajar con ellos.

Procedimiento mitad (num:entero,ent-sal M:real)


Inicio

211

M num/2
Fin mitad

Algoritmo calc_mitad
Var
N: entero
Mit: real
Inicio
Escribir Introduce un nmero
Leer n
Mitad (n,mit)
Escribir La mitad esmit
fin

11.4. MBITOS: VARIABLES LOCALES Y GLOBALES:


Qu es el mbito de un identificador?:
El mbito de un identificador (variables, constantes, funciones,...) es
la parte del programa en la que se conoce y por tanto se puede usar un
identificador.
Segn el mbito hay 2 tipos de variables, locales y globales:
1.
Local: Aquella que est declarada y definida dentro de un
subprograma luego su mbito coincidir con el mbito del subprograma en
la que este definida.
Esto quiere decir que la variable no tiene ningn significado, no se conoce y
no se puede acceder a ella desde fuera del subprograma y que tiene una
posicin de memoria distinta a la de cualquier otra, incluso si es de una
variable que tiene el mismo nombre pero que est definida fuera del
subprograma.
Las variables locales a un subprograma se definen en la parte de la
definicin de variables del mismo. Los parmetros formales que se le ponen
a un subprograma se comportan dentro de l como si fueran tambin
variables locales a l.

212

2.
Globales: Son las que estn definidas a nivel del programa, es decir,
su mbito es el programa o algoritmo principal y todos los subprogramas
que van junto con l.
A esta variable podemos acceder desde cualquiera de los subprogramas y el
programa principal, salvo que alguno de esos subprogramas tenga definida
una variable local con el mismo nombre que la variable global, en este caso
si utilizo el nombre de esa variable me referir a la local, nunca a la
global(ya que tienen 2 zonas de memoria distintas).
Lugar en el que se definen las variables globales:
En algunos lenguajes se define en el programa principal, y esa
variable ser global, en otros lenguajes se definen fuera del programa
principal y fuera de cualquier otro subprograma(antes de empezar el
programa principal). Mtodo que vamos a usar.
El problema de usar variables globales es que como todos los
subprogramas las pueden modificar, puede ser posible que haya usos
indebidos cuando un subprograma utiliza una variable global sin saber que
otro la ha modificado, por esa razn nunca usaremos para pasar informacin
entre los subprogramas variables globales, sino que usaremos variables de
entrada-salida, salvo que no nos quede ms remedio.

Procedimientos anidados:
La anidacin de procedimientos no se permite en todos los lenguajes
y consiste en que dentro de un procedimiento podamos definir o meter el
cdigo de otros.
Si la anidacin de procedimientos est permitida, se plantean ms
problemas en cuanto al mbito, desde este punto de vista, se dice que una
variable local se conoce en el procedimiento en el que est definida y en
todos los procedimientos anidados a l que son los que componen el mbito
de dicho procedimiento, salvo que en alguno de esos procedimientos
anidados este definida una variable local con el mismo nombre en cuyo caso
dentro de ese procedimiento siempre nos referiremos a la variable local
definida en l porque siempre se considera el mbito ms restringido.

PP
Var A,B
P1
213

A,C,D
P2
A
P3
D,E

P4 D,F
P5
P6 F,A

VARIABLES MBITO SUBPROGRAMA


A del PP

P4,P5

B del PP

P1,P2,P3,P4,P5,P6

A del P1

P1,P3

C del P1

P1,P2,P3

D del P1

P1,P2,P3

A del P2

P2

D del P3

P3

E del P3

P3

D del P4

P4,P5,P6

F del P4

P4,P5

F del P6

P6

A del P6

P6

214

11.5. COMUNICACIN ENTRE SUBPROGRAMAS: PASO DE PARMETROS.


La mejor forma para llevar a cabo la comunicacin ente
subprogramas, es el paso de parmetros. Trataremos de evitar siempre que
sea posible el uso de variables globales.
Cuando llamamos a una funcin o procedimiento, le pasamos a travs
de los parmetros la informacin que necesita, y en el caso de un
procedimiento tambin devolvemos a travs de sus parmetros los
resultados. Para ello definiremos el tipo del parmetro a principio del
subprograma, que es lo que conocemos como parmetros formales, y al
hacer la llamada pasamos la informacin a travs de los parmetros reales.
Cmo se efecta la correspondencia entre parmetros formales y reales?:
Existen 2 mtodos:
1.
Correspondencia posicional: En este caso se emparejan los
parmetros formales y reales por la posicin que ocupan (orden de
declaracin) y de izquierda a derecha. Para que se pueda realizar esta
asociacin, tiene que haber el mismo nmero de parmetros formales y
reales, y con el mismo tipo.
F (x:entero,y:real)
Var a:real
F (3,A)
2.
Correspondencia por nombre implcito: Ahora en la llamada al
subprograma se pone explcitamente a que parmetro formal corresponde
cada real.
Ahora en la llamada ponemos el nombre del parmetro formal, separado por
dos puntos (:) y el nombre del parmetro real que le pasamos, con lo cual
ya no importa la posicin en la que coloquemos la informacin.
F (x:3,y:A)
F (y:A,x:3)
Un lenguaje que permite esto es ADA.
Usaremos siempre el primer mtodo (posicional).

Paso de parmetros:

215

Del modo de paso de parmetros va a depender el resultado que se


obtenga.
1. Tipos de parmetros: Segn se usen para meter datos o para obtener
resultados.
Existen 3 tipos:
1.
De entrada: Son parmetros que solo aportan informacin de entrada
al subprogama en el que pertenecen como parmetros. Aporta el valor que
tienen como entrada al subprograma. En el caso de una funcin, todos sus
parmetros son de este tipo.
Como solo sirven como entrada, solo pueden ser ledos, pero no
modificados, y aunque se modificasen dentro de un subprograma, fuera no
va a tener efecto esa modificacin.
2.
De salida: Se usan solo y exclusivamente para devolver resultados a
travs de ellos. Su valor al hacer la llamada al subprograma no nos importa,
sino que ese valor solo va a tener importancia cuando termina la ejecucin
del programa. Un parmetro de este tipo tericamente nunca se puede leer,
solo se va actualizar.

3.
De entrada y salida: El valor del parmetro tiene importancia tanto a
la entrada como a la salida del subprograma, nos aporta informacin
cuando llamamos al subprograma y por otra parte devolvemos a travs de
l resultados cuando terminamos el subprograma, en este caso, tiene
sentido tanto leer como actualizar el parmetro.

Solo ADA es un lenguaje que va a soportar los 3 tipos de paso de


parmetro. Se ponen como In, Out, In-Out.

El resto de los lenguajes solo permiten dos tipos de parmetros, de


entrada (solo para leer datos) y de entrada-salida (para devolver resultados,
aunque tambin se puede usar para leer datos).

2. Mtodos de paso de parmetros:


-

Paso de parmetros por copia:

Por valor.

Por resultado.
216

Por valor-resultado.

Paso de parmetros por referencia.

Paso de parmetros por nombre o nominal.

Paso de parmetros por copia:


La caracterstica fundamental de este mtodo de paso de parmetros
es que el parmetro formal siempre se considera que tiene asociada una
direccin de memoria en la que est almacenado y que por tanto se
comporta igual que una variable local del subprograma en que aparece.
En este mtodo lo que importa es el valor del parmetro actual.
1.
Por valor: Nos interesa el valor del parmetro actual a la entrada,
para ello este valor se copia en la direccin de memoria del parmetro
formal asociado. En este caso el parmetro real puede se una constante,
expresin o variable, y nunca se va a usar para devolver resultado a travs
de l, por esa razn precisamente puede ser una constante o una expresin,
porque al no devolver resultados a travs de l no necesita tomar ninguna
zona de memoria en la que este almacenado, es ms, incluso si el
parmetro actual fuera una variable y la modificsemos dentro del
subprograma (algo que no deberamos hacer), fuera del subprograma no
tendra ninguna repercusin esta modificacin, es decir, esa variable servira
valiendo lo mismo en el programa desde el que se hace la llamada despus
y antes de hacerla.
El funcionamiento sera el siguiente:
Al hacer la llamada al subprograma se evala el valor del parmetro
real, y ese es el que se asocia, es decir, el que se guarda o asigna al
parmetro formal asociado.
Comenzamos a ejecutar el subprograma y si por casualidad se
produce algn cambio en el parmetro formal, el parmetro actual no se
ver afectado, es decir, su valor seguir siendo el mismo en el subprograma
desde donde se llama que antes de hacer la llamada al subprograma.

217

Algoritmo Ej
Var A:entero

6
Inicio
X de P

A del PP

A3
P (A)
Escribir A
Fin
Procedimiento P(x:entero)
Inicio
X x*2
Escribir x
Fin p
El valor de A sera 3 y el de X sera 6.

2.
Por valor-resultado: En el valor-resultado nos interesa el valor del
parmetro actual tanto a la entrada como a la salida de la ejecucin del
subprograma.
Esto quiere decir que se cambia el valor del parmetro formal cambiar
tambin el valor de su parmetro real asociado, cosa que no ocurra antes, y
esto supone por tanto que ahora el parmetro real tiene que tener asociada
obligatoriamente una direccin de memoria, por lo que siempre tendr que
ser una variable (no una constante ni una expresin).
El proceso sera el siguiente:
- Al hacer la llamada al subprograma se evala el parmetro real y su valor
se copia en el parmetro formal asociado y al terminar la ejecucin el valor
del parmetro formal se vuelve a copiar en el parmetro real asociado.

Algoritmo Ej
Var A:entero

Se copia

218

Inicio
A3
P (A)

Escribir A

P.Real

P.Formal

Fin
Procedimiento P(x:entero)
Inicio

Se devuelve

X x*2
Escribir x
Fin p
El valor de la A y la X sera 6.

3.
Por resultado: Nos interesa el valor del parmetro real solamente a la
salida o fin de la ejecucin del subprograma en que aparece. Esto significa
que al hacer la llamada no se copia el valor del parmetro real en el
parmetro formal asociado, sin embargo a la salida se copia el valor del
parmetro formal en la direccin del parmetro real asociado, esto significa
por tanto, que el parmetro real tiene que tener asociada una expresin que
tiene que ser una variable (no puede ser una constante o una expresin).

Algoritmo ej

No se copia

Var A:entero
Inicio
A3
P.Formal

P.Real

P (A)
Escribir A
Fin

219

Procedimiento P(x:entero)

Se copia a la salida

Inicio
X1
X x*2
Escribir x
Fin p
El valor de A y de X es 2.

En la prctica la mayor parte de los lenguajes dentro del tipo de paso de


parmetro por copia solo van a soportar el tipo de paso de parmetro por
valor, que se usar cuando un parmetro solo lo quiero utilizar como
entrada de informacin al subprograma, pero no para devolver resultados a
travs de l.
Los otros dos tipos de paso de parmetros por copia (por valor y por valorresultado), no se implementan normalmente porque los efectos son
prcticamente iguales que el paso de parmetros por referencia, es decir,
cuando quiero usar un parmetro no solo para pasar informacin a travs de
l sino tambin para devolver resultados o si lo voy a usar slo para
devolver resultados, utilizar el paso de parmetros por referencia que
vamos a ver a continuacin.
Para simbolizar que el tipo de paso de parmetros es por valor, en la
definicin del subprograma no pongo ningn tipo de paso de parmetros
para ese parmetro, es decir, no poner ningn tipo significa que por defecto
el tipo de paso de parmetros es por valor.
En el caso de las funciones como solamente pueden recibir informacin de
entrada pero nunca pueden devolver informacin por sus parmetros ya
que lo devuelven a travs de la sentencia retorno y asociado a su nombre.
El tipo de paso de sus parmetros va a ser siempre por valor.

Paso de parmetros por referencia:


Ahora la caracterstica principal de este tipo de paso de parmetros
es que el parmetro formal va a tener tambin asignada una direccin de
memoria en la que se almacena, pero en esa direccin NO SE GUARDA SU
VALOR, sino que se almacena la direccin de su parmetro real asociado, es
decir, el parmetro formal apunta al parmetro real que tiene asociado y

220

cualquier modificacin que se efecte sobre el parmetro formal tendr una


repercusin directa en el parmetro real asociado ya que lo que modificar
ser el valor almacenado en la direccin que indica el parmetro formal que
es la de su parmetro formal asociado.
El proceso ser por tanto el siguiente:
Al hacer la llamada al procedimiento en el parmetro formal que se
pasa por referencia, se va a guardar la direccin del parmetro real
asociado para que apunte a l.
Durante la ejecucin cualquier referencia al parmetro formal se har
accediendo a la direccin apuntada por dicho parmetro, es decir,
accediendo directamente al parmetro real asociado, por lo que cualquier
cambio en el parmetro formal afectar directamente al parmetro real
asociado. De esta manera habremos pasado el resultado.
Para indicar que el tipo de paso de parmetro es por referencia, vamos a
utilizar la palabra clave ent-sal precediendo al parmetro que se pasa por
referencia.
A estos parmetros tambin se les llama parmetros variables (porque su
valor vara), por eso en Pascal se usa la palabra clave Var para indicarlo.
En otros lenguajes como C, se usan como parmetros punteros para indicar
que son direcciones.
Algoritmo EJ
Var A

apunta

Inicio
A3
P1(A)
direccin A

Escribir (A)
Fin
del P1

A del PP

Procedimiento P1(ent-sal x:entero)


Inicio
X x*2
Fin P1

221

Por valor el parmetro actual no cambia de valor.


Por referencia el parmetro actual puede cambiar.

Paso de parmetros por nombre:


En este caso, el parmetro formal se sustituye literalmente por el
parmetro actual asociado. Esta sustitucin literal del parmetro formal por
el parmetro actual no se produce hasta que no se usa el parmetro formal.
La ventaja es que si no usamos en ningn momento el parmetro
formal dentro del subprograma llamado (cosa poco probable), no se tendr
que hacer ningn tipo de substitucin.
Pero el gran inconveniente es que si se usa el parmetro formal, hay
que ir a buscar en ese momento la expresin del parmetro real asociado.
El paso de parmetro por nombre es lo que se parece ms a la
substitucin de parmetros en una funcin matemtica.
F (x)= x+2
F (a+1) = a+1*2
F (x)= x+2
F (a+1)= a +1 2 <> (a+1)*2

Algoritmo EJ
Var A: entero
Inicio
A3
P1(A+1)
Escribir (A)
Fin
Procedimiento P1(ent-sal x: entero)
Inicio
X x*2
Fin P1

222

Al final solo vamos a usar 2 tipos de paso de parmetros, que son los
que usan casi todos los lenguajes: Por valor y por referencia.
Por valor: Solo lo usamos cuando un parmetro solo sirve para informacin
de entrada, no devolvemos nada con l. Por eso este paso puede ser una
constante, variable o expresin. Para simbolizarlo en la declaracin de
variables no ponemos nada.
Por referencia: Lo usamos cuando un parmetro lo usamos como entrada de
informacin y como salida o solo como salida. Por esta razn ahora s que se
va a variar el parmetro formal y por lo tanto no podemos usar constantes
ni expresiones, solo variables. Lo simbolizamos con la palabra ent-sal.

11.6. FUNCIONES Y PROCEDIMIENTOS COMO PARMETROS:


En la mayor parte de los lenguajes se permite tambin que una
funcin o procedimiento pueda ser pasado como parmetro de otro
subprograma. En este caso, es decir, cuando el parmetro formal es de tipo
funcin o procedimiento, pasaremos como parmetro real funciones o
procedimientos que tengan la misma definicin que el que hemos puesto
como parmetro formal, y en nuestro caso para indicar que se pasa como
parmetro real una funcin o procedimiento, basta con poner su nombre.
Desde el subprograma al que se pasa como parmetro esa funcin o
procedimiento podemos llamar en cualquier momento a esa funcin pasada
como parmetro que en cada momento podr ser una distinta dependiendo
del parmetro formal asociado.
Funcion <nombre_f>
(par:tipo;funcion
<n_f>(x:entero,y:carcter):entero
Prodedimiento <nombre_f>

procedimiento (x:tipo,...);...

Algoritmo EJ
Var v1,v2: entero
Inicio
V1 1
V2 2

223

P(v1,f1,v2)
P(v1,f2,v2)
Fin
Procedimiento P(x:entero;funcion F(A:entero;B:carcter):entero;ent-sal
y:entero)
Inicio
X2
Y F(x,a)
Fin P
Funcion F1(x:entero;y:carcter):entero
Inicio
Escribir y
Retorno (x+1)
Fin
Funcion F2(A:entero;B:carcter):entero
Inicio
Escribir Hola B
Retorno A
Fin F2

El paso de funciones y procedimientos como parmetros, nos va a


permitir que desde un subprograma podamos llamar a otros, pero teniendo
en cuenta que el subprograma llamado no va a ser uno determinado, sino
que va a depender en cada momento del subprograma pasado como
parmetro real, de esta manera el subprograma puede llamar a un conjunto
de n subprogramas que cumplan unas determinadas caractersticas, pero
solo uno en cada momento.
No hay que confundir el paso de una funcin como parmetro con la
llamada a una funcin cuando aparece como parmetro real en la llamada a
un subprograma. Para diferenciarlo, cuando paso una funcin como
parmetro solo pondr su nombre, en cambio cuando llamo a una funcin
para pasar el valor que devuelve como parmetro pondr el nombre de la
funcin y con sus argumentos para indicar que ah se puede hacer la
llamada. Esto se puede hacer porque la llamada a una funcin puede
224

aparecer en cualquier expresin en la que apareciese cualquier valor del


tipo de datos que devuelve.

Procedimiento P(A:entero)
Inicio
Escribir A
Fin P
Funcion F(x:entero):entero
Inicio
Retorno (x*2)
Fin F

Algoritmo EJ
Var I
Inicio
I2
P(F(I)) Esto no es pasar una funcin como parmetro
Fin

11.7. EFECTOS LATERALES:


Un efecto lateral es cualquier modificacin que un subprograma (sea
funcin o procedimiento), realiza en elementos situados fuera de l pero sin
hacer esas modificaciones a travs del paso de parmetros.

225

Los efectos laterales siempre hay que evitarlos porque no somos


conscientes o no controlamos que se han producido.
Para realizar comunicacin entre subprogramas solo se har a travs
del paso de parmetro para evitar los efectos laterales.
Los efectos laterales normalmente se producen por el uso de
variables globales o variables locales que abarcan varios procedimientos
(esto solo es posible si hay anidacin de subprogramas). Por lo tanto
evitaremos su uso excepto que sea imprescindible.

Var A:entero
Algoritmo EJ
Var B:entero
Inicio
B1
A2
P(B)
Escribir A
Fin
Procedimiento P(x:entero)
Inicio
A x+2
Fin P

11.8. RECURSIVIDAD:
Se dice que un subprograma es recursivo cuando se llama a s mismo.
La recursividad se va a poder usar en subprogramas que pueden definirse
en trminos recursivos, es decir, en termino de s mismo, como procesos de
alguna manera repetitivos.
La recursividad trataremos de evitarla siempre que sea posible, es
decir, siempre que lo mismo se pueda solucionar con un bucle, ya que cada
vez que un subprograma se llama a s mismo hay que almacenar en la pila
del sistema la direccin de retorno de ese subprograma, con lo cual si
hacemos muchas llamadas recursivamente iremos llenando la pila del
sistema, y se desbordara acabando con la memoria.
226

Todo programa recursivo tiene que tener alguna condicin que ponga
fin a la recursividad, es decir, que el programa deje de llamarse a s mismo
cuando se cumpla la condicin, sino se formara un bucle infinito.

Funcion potencia (base:entero;exp:entero):real


Var P:real
I:entero
Inicio
P 1
Desde i=1 hasta exp
P P*base
Fin desde
Retorno P
Fin

Funcion potencia (base:entero;exp:entero):real


Inicio
Si exp=0 entonces retorno 1
Sino

227