Documentos de Académico
Documentos de Profesional
Documentos de Cultura
iJ
Fundamentos
de la programacin
estructurada
Este captulo describe los conceptos tericos que permiten el desarrollo de programas en len
guajes estructurados como Pascal. En particular, se definen conceptos como algoritmo o progra
mu, y tambin se estudian diferentes formas o tcnicas ele describir esos algoritmos de forma pre
cisa. Una vez comprendidas las diferencias entre algoritmos y programas, se estudian las tcnicas
ms habituales de la programacin estructurada, como la abstraccin de datos y de procedimien
tos. Finalmente, se describen las diferentes fases o etapas en las que se puede dividir el desarro
llo de cualquier programa o producto software.
El concepto de algoritmo tiene su origen en los matemticos hindes y rabes, que fueron los pri
meros que desarrollaron tcnicas de clculo escrito. En particular, el matemtico rabe Mohrned
ben Musa, conocido por el sobrenombre de Al'Khwarizmi, escribi un libro de Aritmtica que
fue traducido al latn como Algoritmi de numero lndorum (siglo DC), donde introduce el sistema
numrico hind (slo conocido por los rabes unos 50 aos antes), y los mtodos para calcular
con l. De esta versin latina proviene la palabra algoritmo.
Un algoritmo es la descripcin de un mtodo preciso para resolver automticamente un pro
blema. Desde el punto de vista de la computacin, un algoritmo consta de una representacin de
los datos que se manejan, y de una secuencia ordenada de instrucciones u rdenes que resuelven
el problema planteado.
Por lo tanto, cualquier algoritmo debe tener por lo menos tres cualidades indispensables:
1. Debe ser preciso, es decir, debe indicar el orden en el que ha de ejecutarse cada uno de los
pasos que hay que seguir.
2. Debe ser unvoco (no ambiguo).
3. Debe especificar la secuencia (orden) de pasos para resolver el problema.
Aunque esto no es siempre cierto para todos los algoritmos, tambin suele exigirse al algoritmo
que sea finito, es decir:
4. El nmero de pasos necesarios para resolver el problema es finito. Esto es, la ejecucin de
un algoritmo debe terminar en algn momento.
5. Cada paso, tarea o instruccin ejecutada por el algoritmo debe requerir un tiempo finito y
unos recursos finitos. Debe recordarse que los computadores son dispositivos fsicos, y por
lo tanto limitados. Si se disea un algoritmo que requiere un tiempo de clculo o una capa
cidad de almacenamiento ilimitados, aunque el algoritmo sea finito, su implementacin no
sera posible.
Como puede verse, basta el momento no se ha definido cmo debe ser codificado un algoritmo;
es decir, cualquier representacin que cumpla con las caractersticas anteriores (en particular con
las tres primeras) es un algoritmo. De hecho, y como se ver ms adelante, existen mltiples for
mas de representar un algoritmo. Sin embargo, cuando se habla de programas, se refiere a la
codificacin concreta de estos algoritmos. Por lo tanto, el concepto programa puede definirse
como:
" La e o d i f i e a e i 6 n e n e u a I qui e r I e n g u aj e de p r o gr a ma e i 6 o e s pe e f i e o de un o
o varios algoritmos."
De la definicin anterior puede concluirse que un programa puede implementar uno o varios
algoritmos. En computacin, el programa es la implementacin fsica o concreta del algoritmo (o
algoritmos) que resuelve un determinado problema. Como principales caractersticas y diferen
cias entre algoritmos y programas pueden destacarse las siguientes:
Algoritmos. Se tratan de codificaciones independientes del lenguaje de programacin con
siderado. Describen el conjunto de operaciones que deben realizarse para resolver el pro
blema.
Programas. Se trata de la codificacin en un lenguaje concreto de uno o varios algoritmos,
donde cada uno de ellos resuelve una parte del problema global.
ramas
seudocdi
algunas caractersticas del lenguaje natural son poco adecuadas para describir un algo
ritmo (por ejemplo, un algoritmo que tratase de utilizar metforas para describir algn
concepto).
5. Mtodos formales matemticos. Muchos algoritmos, en particular los que realizan
clculos sobre datos, pueden ser descritos utilizando un conjunto de expresiones mate
mticas.
De los anteriores mtodos de representacin descritos, el Lenguaje Natural y la definicin de un
algoritmo como un conjunto de expresiones matemticas son los ms simples desde el punto de
vista de un ser humano. No obstante, estas formas de representacin suelen ser las ms complejas
de traducir a un lenguaje de programacin concreto. Esto es particularmente cierto para el
Lenguaje Natural, debido a que la ambigedad es una de las caractersticas de este tipo de len
guaje. De las diferentes tcnicas que pueden utilizarse para describir algoritmos, se van a descri
bir con mayor detalle las ms comunes: los diagramas de flujo u organigramas y el pseudocdigo.
2.2.1. Organigramas
Un diagrama de flujo (flowchart) u organigrama es una representacin grfica de un algoritmo.
Dado que se trata de una representacin grfica, no existirn reglas sintcticas o gramaticales para
la representacin del algoritmo.
Por lo tanto, un organigrama permite dar una representacin de un algoritmo independiente
de cualquier lenguaje de programacin, puesto que refleja nicamente el funcionamiento lgico
del mismo. Con este tipo de diagramas se describe de forma grfica el flujo u orden de las accio
nes que deben ser ejecutadas. Para ello, se utilizan un conjunto de smbolos estandarizados y nor
malizados, que permiten a cualquier programador indicar de forma precisa las operaciones que
deben ser realizadas por el algoritmo. Aunque existen gran cantidad de smbolos, los ms fre
cuentemente utilizados se emplean para representar:
Procesos o instrucciones que indican las tareas que deben ser realizadas (representados por
una caja).
Punto de decisin. Estructuras lgicas o condicionales que permiten romper la ejecucin
secuencial de un programa.
Conectores.
Entrada/Salida.
Direccin del flujo (representado por flechas).
Inicio/Fin del algoritmo.
Los smbolos ms frecuentes empleados en los organigramas son las que aparecen en la
Figura 2.L
.:_____,/
1
lnstrucc6n
1
Entrada o salida de datos
Cualquier organigrama deber contener dos smbolos terminales, etiquetados como "inicio" y
"fin", que indicarn el punto de entrada o comienzo del algoritmo y el final del mismo. Tambin
podr tener un conjunto de cajas de procesos o instrucciones, que representan las acciones a rea
lizar. Por ejemplo, la Figura 2.2 muestra un organigrama de un algoritmo que lee dos datos num
ricos desde teclado (entrada), calcula su suma y muestra el resultado por pantalla (salida).
mostrar resultado
Otros smbolos muy utilizados son los que se emplean para representar puntos de decisin
dentro de los algoritmos. Es decir, durante la ejecucin de un algoritmo puede suceder que un
determinado conjunto de instrucciones sean ejecutadas si se cumple una determinada condicin.
En el caso de que esa decisin no se cumpla, podran ser ejecutadas otras instrucciones diferen
tes. Los smbolos ms habituales para representar puntos de decisin en un organigrama son los
que se muestran en la Figura 2.3.
Decisin simple
Verdadero
Falso
Valor 1
ValorN
Bucles
Bloque
Verdadero
Bloque
Falso
Falso
Verdadero
vsrdsdero
falso
SUX+- 0
comeaor e-
aux+- 1
contador+- 1
tura de control es muy frecuente en cualquier lenguaje de programacin, y se utiliza para imple
mentar bloques de cdigo que ejecutan de forma repetida un mismo conjunto de instrucciones. A
este tipo de estructuras se las conoce por el nombre de bucles.
2.2.2. Pseudocdigo
El pseudocdigo es un lenguaje que permite la descripcin o especificacin de algoritmos. La uti
lizacin de este tipo de lenguajes (muy prximos al lenguaje natural) hace que la conversin del
algoritmo a la implementacin concreta sobre un lenguaje de programacin se simplifique. Por
lo tanto, el pseudocdigo permite expresar sin ambigedades, y de una forma clara, las distintas
instrucciones que deben ser realizadas por el algoritmo.
El pseudocdigo naci como una versin simplificada del ingls, en el que, de una forma clara y
sencilla, podan representarse las estructuras de control bsicas (condicionales, bucles, etc.) de la
programacin estructurada. El pseudocdigo no es un lenguaje de programacin y, por lo tanto,
no puede ser ejecutado por ningn computador dado que no existe ninguna forma de traducir esa
descripcin a alto nivel (es decir, muy prxima al lenguaje natural) a cdigo mquina. Debe
comprenderse que un algoritmo descrito utilizando esta tcnica es simplemente un borrador que
posteriormente deber ser traducido a un lenguaje de programacin concreto.
Como principal ventaja de la utilizacin del pseudocdigo como mecanismo para describir
algoritmos puede destacarse el hecho de que el programador puede concentrarse en la lgica, o
funcionamiento del algoritmo, y en las estructuras de control del mismo. Puede prescindirse de
detalles concretos de la sintaxis, o de las reglas impuestas por el lenguaje de programacin que
posteriormente se utilice. Adems, si se detecta un error en la lgica del programa (el funcio
namiento no es el esperado o el deseado porque no se han tomado las decisiones adecuadas),
suele ser ms fcil modificar el pseudocdigo que tratar de modificar el cdigo fuente del pro
grama creado. Otra ventaja de la utilizacin del pseudocdigo proviene de su propia represen
tacin. Dado que normalmente utiliza palabras reservadas en ingls (o su traduccin equivalente
al castellano) para representar determinados tipos de acciones, como, por ejemplo, start, begin,
end, if-then-else, while-end, repeat-until, read, write, etc., muy similares a las palabras reserva
das de los lenguajes de programacin, la traduccin de estos algoritmos a su equivalente en len
guajes de programacin estructurados como Pascal, C, Ada, Fortran, etc., es muy simple.
Como reglas bsicas para definir un algoritmo en pseudocdigo debe tenerse presente lo
siguiente:
Deben utilizarse, siempre que sea posible, palabras reservadas para indicar las diferentes
acciones o puntos de decisin dentro del algoritmo.
Normalmente es necesario indentar adecuadamente (utilizar tabulaciones a la derecha) las
instrucciones que se encuentran dentro de un mismo bloque de instrucciones. Se define bloque como un conjunto de instrucciones que estn delimitadas entre las palabras reservadas
begin y end (comienzo y fin). Un bloque indica que todas las instrucciones que pertenecen
a l sern ejecutadas de forma secuencial.
Un algoritmo debe empezar con la palabra reservada start (comienzo o inicio) y terminar
con la palabra reservada end (fin).
Para mejorar la legibilidad del cdigo podrn utilizarse comentarios. Un comentario ven
dr precedido por el smbolo //y se utiliza para dar informacin a la persona que est leyen
do el algoritmo. No realiza ningn tipo de operacin concreta. Los comentarios deben ser
entendidos como documentacin del algoritmo, es decir, informacin que puede ser pro
porcionada a otra persona para que comprenda correctamente cmo funciona el algoritmo.
Algunos autores suelen utilizar los corchetes o las llaves para representar los comentarios;
esto se debe a que en los lenguajes estructurados suele emplearse este tipo de smbolos para
representar los comentarios en los programas.
A continuacin, se muestra un ejemplo genrico de un algoritmo en pseudocdigo, donde se han
utilizado algunas de las palabras reservadas (en castellano) descritas previamente y un comentario.
I NI CI O
// algoritmo en pseudocdigo
palabras clave
operacin 1
operacin 2
operacin 3
operaci6nN
FIN
Utilizando los mismos ejemplos que en el apartado anterior, pueden generarse los siguientes
pseudocdigos:
1.
Pseudocdigo que lee dos datos numricos, calcula su suma y muestra el resultado. Como
puede verse, en este ejemplo se utilizan las palabras en castellano.
I NI CI O
//lectura de los datos
I e e r dat al
I e e r dat o2
//clculo
resultado datol + dato2
/ / mo s t r a r r e s u I t a d o
e s c r bi r resultado
FIN
START
//lectura del valor de entrada
read dato
//dato es par?
i f (dato mod 2 = O) then
1/dato es par
be g i n
aux O
contador f- 1
whi I e ( con! ador 100)
aux aux + contador
contador contador +
end
e od
e I se
II dato es impar
be g i n
aux f- 1
contador f- 1
wh i I e ( e o n t a d o r 1 O O)
aux aux contador
contador contador +
end
end
//mostrar resultado
wr l t e resultado
END
Dado que el pseudocdigo no es un lenguaje de programacin, es indiferente que las palabras
reservadas se utilicen en ingls, castellano o cualquier otra lengua. Sin embargo, es ms frecuen
te la utilizacin del ingls por la similitud con las palabras reservadas de los lenguajes de pro
gramacin concretos.
je de programacin muy sofisticado, finalmente todo debe ser traducido de alguna manera a estas
cadenas de ceros y unos. Como efecto lateral, si las mquinas cambian internamente y sus len
guajes mquina tambin, los programas dejarn de funcionar. Por lo tanto, si un programa ha sido
creado para un determinado computador, ste puede dejar de funcionar si el lenguaje mquina de
la nueva ha sufrido grandes cambios. En estos casos las compaas que fabrican computadores
suelen hablar de una nueva familia o arquitectura de computadores. Un ejemplo de este caso es
el de la compaa de microprocesadores Intel cuando decidi cambiar la arquitectura de los
microprocesadores lntel 80:XXX (lntel 8088, 8086, 80186, 80188, 80286, 80386 y 80486), que
llevaba dos dcadas vendiendo (la arquitectura de estos procesadores estaba basada en reperto
rios complejos de instrucciones o CISC) por un nuevo tipo de microprocesadores llamados
Pentium, cuya arquitectura es completamente diferente (arquitecturas denominadas RISC, o con
juntos reducidos de instrucciones).
Los programas escritos en ensamblador son difciles de depurar. Es decir, cuando se produ
ce un error, es complicado encontrarlo y solucionarlo.
No suelen existir aplicaciones Sw que faciliten la programacin en ensamblador, por lo que
normalmente el programador slo podr crear su programa, ensamblarlo (traducirlo a cdi
go mquina) y ejecutarlo.
Sin embargo, debe tenerse en cuenta que estos lenguajes tambin presentan algunas ventajas. En
particular, al ser el lenguaje ms cercano al cdigo mquina, un buen programador puede gene
rar un cdigo ms eficiente (en cuanto al tiempo que tardara en ser ejecutado y el tamao que
ocupara en nuestra memoria) que si es utilizado cualquier otro tipo de lenguaje.
Como ilustracin de los lenguajes ensambladores, a continuacin se muestra dos ejemplos de
programas. El primero es un programa escrito para un microprocesador del tipo Motorola
(Mc68000); el segundo ejemplo consiste en un programa ejecutable sobre un microprocesador de
tipo Intel 80086.
Como puede verse en el primer ejemplo, algunos de los nemotcnicos utilizados son fciles
de identificar, como: ADD, suma dos registros o dos posiciones de memoria; AND permite rea
lizar una operacin lgica denominada YLgica entre dos datos; el nemotcnico END se utiliza
para indicarle al programa ensamblador dnde finaliza nuestro programa. Sin embargo, otras
caractersticas del lenguaje, como los modos de direccionamiento, o modos de conocer dnde se
encuentra un dato almacenado, necesitan ser estudiadas para comprender el correcto funciona
miento del cdigo.
I Nl
ET
ORG
EQU
10VE. L
ADD. L
AND. W
De. L
END
2500
$F5F
# $ O O O FO 4 8 1 , D2
ET, D2
#INI,D2
$42
Puede verse cmo los nemotcnicos han cambiado, aunque algunos son similares al ejemplo
de Motorola, como MOV, que se utiliza para mover datos almacenados en registros o direcciones
de memoria. Otros, como INC/DEC, se utilizan para incrementar/decrementar el contenido de un
:registro. Sin embargo, pueden apreciarse algunas diferencias interesantes. Por ejemplo, en
Motorola, para indicar el tamao que ocupan los datos debe indicarse desde el propio cdigo
nemotcnico, por ejemplo MOVE. L indica que se va a mover un dato de tamao Long (32 bits),
mientras que en el caso de Intel esta informacin aparece directamente reflejada por el registro a
utilizar (CX, AX, OS), que nos indica si se utilizan 8, 16 o 32 bits.
Finalmente, aunque el nivel de abstraccin de este tipo de lenguajes sea muy bajo, no puede
olvidarse que los programas generados por este tipo de lenguajes son los ms rpidos y eficien
tes, por lo que en algunas situaciones todava es imprescindible su utilizacin. Aunque antigua
mente el ensamblador se utilizaba para crear virus, o para el control de grficos, hoy da, y dada
la escasa portabilidad de este cdigo (imposibilidad de ejecutar un mismo programa en dos
mquinas diferentes), es ms habitual que se utilicen otros lenguajes de programacin, como C,
mientras que el ensamblador ha sido relegado a la programacin de diversos dispositivos Hw.
0011 O 11 O 11
1001100111
0111011000
IP x3 THEN a:l
Traductor
Figura 2.5. Representacin grfica del proceso de traduccin de cdigo fuente a cdigo mquina.
Lenguajes interpretados. Son aquellos lenguajes cuyo cdigo o programa es traducido instruccin a instruccin. Cada una de esas instrucciones son posteriormente ejecutadas por un
programa Sw especial llamado intrprete. Este programa se encarga de traducir la instruc
cin seleccionada a cdigo mquina y ejecutarla. Una vez que ba ejecutado todas las ins
trucciones que forman nuestro programa el intrprete termina.
Como puede verse, la ejecucin de las instrucciones se realiza de forma secuencial; es decir,
el orden en el que las instrucciones se escriben en el programa es importante. En este tipo
de lenguajes, puede darse el caso de que si se intercambian dos instrucciones pueda dejar de
funcionar el programa. Dado que en este tipo de lenguajes no puede analizarse todo el pro
grama, no es posible realizar las operaciones de optimizacin de cdigo que se realiza en el
caso de los lenguajes compilados. Adems, el proceso de ejecucin secuencial de instruc
ciones realizado por los intrpretes es intrnsecamente ms lento que el realizado por los len
guajes compilados. Esto origina como desventaja principal el hecho de que un programa
escrito en un lenguaje interpretado sea menos eficiente en tiempo de ejecucin y en consu
mo de recursos del computador, como la memoria, que el mismo programa escrito en un len
guaje compilado, como por ejemplo C. Sin embargo, los lenguajes interpretados presentan
una gran ventaja frente a los compilados, y sta reside precisamente en la portabilidad del
cdigo. Dado que para ejecutar cualquiera de estos programas es necesario su intrprete,
esto permite independizar la ejecucin del programa de la arquitectura Hw del computador,
debido a que el intrprete que se ha instalado en Ja mquina ya sabe cmo ejecutar las ins
trucciones que le darnos, y no es necesario, por lo tanto, recompilar nuestro cdigo cada vez
que se desea ejecutar en una mquina distinta. Algunos ejemplos de este tipo de lenguajes
son: Prolog, LISP, Peri, Basic, JavaScript, VBScript, Phytoo, etc.
Lenguajes hbridos. Estos lenguajes se caracterizan porque los programas son, a la vez,
compilados e interpretados. Es decir, el programa o cdigo fuente sufre algn tipo de com
pilacin que permite traducir a un lenguaje intermedio (una especie de lenguaje ensam
blador), que posteriormente es interpretado. El caso ms conocido de este tipo de lengua
jes es Java. Los programas en Java sufren un primer proceso de compilacin en que el
cdigo es depurado y optimizado, para posteriormente ser ejecutado por un programa Sw
denominado mquina virtual de Java (Java Virtual Machine, o JVM), que es en realidad un
intrprete capaz de ejecutar los bytecodes, al que ha sido traducido el programa inicial.
Estos lenguajes tratan de aunar las ventajas de los lenguajes compilados e interpretados;
es decir, por un lado tratan de realizar las diferentes operaciones de depuracin y optimi
zacin de cdigo que permite obtener cdigo de mejor calidad y que consume menos
recursos (tiempo de CPU y memoria) de nuestro computador, y por otro lado utilizan un
intrprete que es capaz de ejecutar ese cdigo optimizado sobre la arquitectura correspon
diente. Aunque este tipo de lenguajes tiene defensores y detractores (como todos los ante
riores), debe decirse que el gran xito que han experimentado lenguajes como Java tiene
su origen en la aparicin de redes de computadores como Internet, donde un enorme nme
ro de mquinas diferentes (en cuanto a las arquitecturas o a los Sistemas Operativos que lo
componen) estn todas interconectadas. Por lo tanto, si se desea ejecutar cdigo o progra
mas en esas mquinas, deber utilizarse un lenguaje interpretado o hbrido si no se desea
tener compilado el programa en todas las arquitecturas posibles. Java permite la creacin
de un tipo de programa denominado applet, que es portable y ejecutable (en determinadas
condiciones de seguridad, nadie quiere ejecutar un programa extrao en su computador
que pueda, por ejemplo, formatear su disco duro) en cualquier mquina conectada a
Internet.
Si en lugar de utilizar las diferentes formas de realizar el proceso de traduccin del cdigo fuen
te del programa al cdigo objeto en el lenguaje mquina utilizado por el computador, se utiliza
el paradigma (o metodologa) empleado para disear y construir un programa, puede diferen
ciarse entre cinco grandes tipos de lenguajes o paradigmas de programacin:
Programacin imperativa. El paradigma imperativo se basa en la implementacin de pro
gramas donde las instruccione se ejecutan de forma secuencial, es decir, una tras otra
siguiendo una secuencia ordenada que puede ser alterada por algunas de las instrucciones
del programa. Los lenguajes imperativos utilizan la programacin estructurada para
resolver sus problemas. Un programa tradicional, que sigue el paradigma estructurado, se
basa fundamentalmente en la ecuacin de Nicklaus Wirth (creador del lenguaje Pascal, entre
otros):
Algoritmos+ Estructuras de Datos= Programas
guajes imperativos, como Pascal, existe un concepto similar denominado TAD (Tipo
Abstracto de Datos). Un TAD encapsula un tipo definido por el usuario junto con las ope
raciones sobre estos datos, realizando un proceso de abstraccin en el que se trata de ocul
tar los detalles y agrupar caractersticas comunes para facilitar su uso y comprensin. La
diferencia entre el concepto de TAO y el de objeto radica en que adems del proceso de abs
traccin que se utiliza para su definicin, existen otros conceptos bsicos en la POO como
la herencia y el polimorfismo. La POO tiene actualmente una gran importancia dentro del
mundo de la informtica, por lo que existen gran cantidad de lenguajes orientados a obje
tos; algunos de los ms conocidos son: Smalltalk, Eiffel, C++, Modula3, Ada95, CLOS,
Object Cobol, Pitn, Java, C#, etc.
Leer datos
Leer
salarlos
Leer
edades
Calcular media
Calcular
media:
edades
Mostrar resultados
Calcular
media:
salarlos
Ordenar
datos
Mostrar
media
edad
Mostrar
media
salarlo
Mostrar
datos
empleados
Mostrar
salarios
Mostrar
edades
I Leer: salario I
1 Leer:edad I
Mostrar
datos
Calcular media
Mostrar
salario
,.e
Mostrar
media
salario
=
'
Ordenar
datos
Mostrar
media
edad
't
Mostrar
edad
Mostrar
datos
empleados
1
Mostrar resultados
1
,'
Encontrar medias, ordenar
1
no ha
adar
Como puede verse en el texto anterior, el nmero de patrones que coinciden con el buscado
es dos. Por lo tanto, aplicando la tcnica de diseo descendente, el problema inicial de desarro
llar un algoritmo de bsqueda de patrones puede descomponerse en varios subproblemas. Por
ejemplo, ser necesario disponer de algn mdulo que muestre al usuario el propsito del algo
ritmo que se desea disear (que podra ser construido utilizando un conjunto de submdulos sim
ples de entrada/salida). Ser necesario solicitarle el patrn que se desea buscar, pedir la cadena
de texto sobre la que se quiere buscar el patrn proporcionado, realizar el proceso de bsqueda
en el texto y finalmente mostrar los resultados obtenidos al usuario (vase la Figura 2.8).
Indicar el propsito
del algoritmo
Pedir el patrn
a buscar
Solicitar
e/patrn
Pedr el texto en
el que se buscar
Efectuarla
bsqueda
Presentar
/os resultados
Leer el patrn
del teclado
Gracias al diseo modular, cada uno de los mdulos anteriores puede ser tratado de forma
independiente para resolver el problema solicitado. Cuando la descomposicin es suficientemen
te simple, puede comenzarse con la codificacin del mismo en el lenguaje seleccionado. Si, por
el contrario, alguno de los mdulos fuese demasiado complejo, podra volver a aplicarse la des
composicin en submdulos o subproblemas ms simples hasta alcanzar el nivel de complejidad
deseado.
Leer datos
Calcular
desviacin
tfplcs
Calcular
media
Leer teclado:
r a_
d o_
, _
s __,
[mfnlmo.. mximo) .____L_ee__
Kenteros
[mfnlmo .. mxkno} ._
Calcular media
Mostar
resultados
K enteros
{mfnlmo.. mxlmo]
_,
K enteros
1.
:::1
{mfnlmo.. mxtmo LCaicular desvlacl:ir- Resultado2 - a (K valores)
Resultado1
Resultado2 .
Mostrar resultados
L___
Dfa: 0.. 31
Mes: Enero .. Diciembre
Ao:0.. 2050
Aadir persona
Borrar persona
Modificar nombre, apellidos
Modificar edad, altura
Aadir aficin
Explotacin y
mantenimiento
Retirada
en cuenta en el momento del anlisis o del diseo, se puede pasar desde esa etapa a alguna de las
anteriores para subsanar los problemas detectados.
Debe tenerse en cuenta que volver atrs en cualquiera de las etapas supone un coste adicional
para el desarrollo del producto software, dado que si en la fase de explotacin se detectasen pro
blemas que no fueron contemplados en la etapa de codificacin, implicara nuevamente volver a
codificar, verificar, validar, instalar y probar el producto, con lo. costes aadidos que esto con
lleva. Por lo tanto, cada una de las etapas anteriores debe ser minuciosamente tratada si no se
desea cometer errores que posteriormente alargaran el ciclo de de. arrollo del producto y aumen
taran los costes de produccin del mismo. Como principales caractersticas de cada una de las
fases del ciclo de vida de un producto software pueden destacarse las siguientes:
Anlisis y especificacin del problema. La especificacin de cualquier problema puede ser
un tanto vaga o imprecisa. En esta primera fase debe detallarse de forma clara, precisa y sin
ambigedades qu debe hacer el programa. Una vez finalizada la etapa de anlisis debe
obtenerse una especificacin precisa del problema que se desea resolver. En esta fase los
analistas de sistemas (encargados de realizar estas tareas) deben generar un conjunto de
documentos que describan las especificaciones del problema como una declaracin formal
de los requerimientos del mismo.
Diseo. Una vez obtenida la especificacin del problema, es necesario disear una solucin
que permita resolverlo. En esta fase se decide cmo el producto software va a satisfacer los
requisitos especificados en la etapa anterior. Dos aspectos muy importantes a tener en cuen
ta en esta fase son: en primer lugar, decidir qu estructuras de datos van a utilizarse para
organizar y almacenar los datos que sern procesados, y, en segundo Jugar, disear los pro
cedimientos o mdulos encargados de realizar ese procesado de los datos (diseo de los
algoritmos que sern utilizados). Como un computador no tiene la capacidad de resolver
ningn problema, los procedimientos diseados debe ser formulados como un conjunto de
acciones simples en un determinado orden. Normalmente, los problemas reales on tan
complejos que es difcil anticipar desde un principio todos los detalles que ser necesario
implementar para resolverlo. En esta etapa suelen utilizarse tcnicas o estrategias, como
divide y vencers, que permiten dividir el problema en subproblemas ms sencillos, cada
uno de los cuales puede ser tratado de forma independiente. En esta fase, tanto las estruc
turas de datos, como los algoritmos que deben resolver el problema, pueden ser especifica
dos de diferentes formas: mediante diagramas grficos, utilizando lenguaje natural, o
mediante la utilizacin del lenguaje llamado pseudocdigo. Este tipo de lenguaje, que se
encuentra a medio camino entre el lenguaje natural y un lenguaje de programacin, permi
te describir de forma unvoca un algoritmo, utilizando las estructuras de control habituales
en los lenguajes de programacin y el lenguaje natural.
Codificacin. Las dos primeras etapas del ciclo de vida son crticas.Si se han cometido
errores o se han omitido aspectos importantes, las siguientes etapas sern mucho ms com
plicadas. La codificacin consiste en implementar en el lenguaje de programacin seleccio
nado las diferentes estructuras de datos y procedimientos, o algoritmos, que se han obteni
do tras la fase de diseo. Dado que en la fase de diseo tanto las estructuras de datos como
los procedimientos pueden haber sido generados en lenguaje natural o en pseudocdigo, en
esta fase es necesario tener en cuenta las reglas sintcticas y gramaticales del lenguaje uti
lizado para realizar una traduccin correcta. El objetivo de la primera parte del libro es pre
cisamente introducir el vocabulario, la sintaxis y las estructuras de control que pueden uti
lizarse para crear programas o algoritmos (que sern estudiados en la segunda parte del
libro), en Pascal. Por lo tanto, en la etapa de codificacin, los programadores (encargados
de llevarla a trmino) debern comprender y estudiar las diferentes caractersticas que for
man el lenguaje seleccionado: la definicin de variables y constantes, cmo pueden ser
declarados y utilizados diferentes tipos (estructuras) de datos, las operaciones realizables
sobre los datos, cmo se realiza la entrada/salida de informacin, cmo generar comenta
rios que mejoren la legibilidad y mantenimiento del cdigo y, finalmente, cmo se define la
estructura de un programa en el lenguaje utilizado.
Verificacin y validacin. Aunque se pueden producir errores en cualquiera de las etapas
del ciclo de vida del producto software, por ejemplo, la especificacin puede no reflejar
todas la caractersticas del problema, o pueden haberse cometido errores lgicos en la
implementacin de los algoritmos o de las estructuras de datos. La deteccin y correccin
de los errores es una parte importante del ciclo de vida; a esta fase se la conoce como vali
dacin y verificacin. La validacin consiste en comprobar que tanto los algoritmos como
el programa implementado cumplen con las especificaciones del problema. La verificacin
consiste en la comprobacin de que esos algoritmos son correctos y completos. Es decir, se
necesita comprobar que se est resolviendo el problema correcto (no siempre la solucin
proporcionada corresponde exactamente a lo que se haba pedido), y que adems el proble
ma se est resolviendo de forma correcta. La caracterstica ms importante de cualquier pro
grama es que sea an ,a::to. Es decir, no importa lo bien diseado o documentado que est;
si el programa no produce los resultados esperados, no ser de ninguna utilidad para aque
llas personas que necesiten utilizarlo. Normalmente, y dado que ser necesaria la verifica
cin y validacin en diferentes fases del ciclo de vida del producto, suelen implementarse
diferentes tipos de pruebas para detectar posibles anomalas. Algunas de las pruebas ms
comunes son:
- Pruebas de unidad. Se utilizan para probar las diferentes unidades o mdulos (partes)
de un programa de forma independiente, para garantizar, de ese modo, que cada mdu
lo realiza , us funciones de forma correcta.
- Pruebas de integracin. Estas pruebas verifican que una vez que los distintos mdulos
o unidades son combinados, stos producen los resultados esperados.
- Pruebas del sistema. Finalmente se verifica que el sistema completo funciona correc
tamente.
,. Instalacin y depuracin. Normalmente, para un programador el ciclo de vida termina en
la cuarta fase; es decir, una vez que el programa ha sido codificado, ejecutado y probado, la
funcin fundamental del programador se considera terminada. Sin embargo, cualquier pro
ducto real normalmente se encuentra en el mercado durante varios aos, por lo que es nece
sario continuar su mantenimiento durante ese periodo. Una vez que el producto ha sido veri
ficado y validado, necesita ser instalado en el entorno final donde deber funcionar. En esta
etapa deben corregirse los errores y problemas que pueden haber aparecido una vez instala
do el producto para que sea utilizado por los usuarios finales.
Retirada: Finalmente, todo producto software debe ser eliminado y dejar de estar operati
vo, por lo que ser retirado del mercado.
Las siguientes cuestiones de tipo test permiten al lector revisar los principales conceptos tericos
estudiados en el captulo. Se trata de cuestiones multirrespuesta, es decir, como mnimo una de
las respuestas es vlida, aunque podra haber ms de una respuesta correcta en cada cuestin
planteada. Las soluciones de las cuestiones pueden ser consultadas en el Anexo X.
2.7.1.
2.7 .2.
dato1 +dato2+- 10
falso
b) -1,-2,-3,-4,-5,-6,-7,-8,-9,-10
c)
-10,-9,-8,-7,-6,-5,-4,-3,-2,-l,O
d) -10,-9,-8,-7,-6,-5,-4,-3,-2,-l
e) Ninguna de las anteriores.
2.7.5.
2.7 .6.
Las principales caractersticas que permiten distinguir a un lenguaje que utiliza la pro
gramacin estructurada de otros que no la emplean son:
a) La utilizacin de compiladores para generar el cdigo mquina.
b) La utilizacin de tcnicas de programacin modular, que permiten descomponer
el problema inicial en subproblemas ms simples.
e) La existencia de instrucciones especiales que permiten realizar saltos fuera de
bucles o subprogramas, cuando esto sea necesario.
d) La utilizacin de tcnica de abstraccin de datos y procedimientos, y de otras tc
nicas como el diseo descendente, para lograr una mayor productividad del . oft
ware y permitir una depuracin y verificacin ms simple del mismo.
e) Ninguna de las anteriores.
2.7.7.
2.7 .8.
START
//se asignan los valores iniciales a las variables
a 1
b 3
e o
wh i 1 e ( a s b) do
be g i n
i f (a+I b) t he n
mo s t r ar ( a* b)
e 1 se
be g i n
e f 4
repeat
un t i 1
mo s t r ar ( a+ b)
e f e -1
( e < a)
end
a f a +l
end
END
START
wh i 1 e ( a > b)
do
repeat
until
(e a)
END
De las diferentes fases o etapas en las que puede dividir e el ciclo de vida de un pro
ducto software, pueden destacarse como ciertas las siguientes afirmaciones: