Check the new version here

Popular channels

Lenguajes algoritmicos y de programacion

Lenguajes algor¶³tmicos y de programaci¶on

La descripci¶on de un algoritmo incluye organizar los datos que intervienen
en el mismo, as¶³ como las acciones que se deben llevar a cabo sobre ellos. Una
vez ideado el algoritmo, el modo m¶as natural e inmediato (y tambi¶en el menos
formal) de expresar esa organizaci¶on es redact¶andolo con palabras y frases del
lenguaje cotidiano. En el extremo opuesto se sit¶uan, por su rigidez, los lenguajes
de programaci¶on.

Entre la libertad, °exibilidad y ambigÄuedad de los lenguajes naturales y la
precisi¶on, rigidez y limitaciones de expresividad de los lenguajes de programaci¶on
se sit¶uan los lenguajes algor¶³tmicos. ¶Estos tienen las siguientes cualidades:

1. Tienden un puente entre la forma humana de resolver problemas y su
resoluci¶on mediante programas de computador.

1.4. Lenguajes algor¶³tmicos y de programaci¶on 17
2. Tienen cierta independencia de los lenguajes de programaci¶on particulares,
de modo que est¶an libres de sus limitaciones y as¶³ los algoritmos escritos
en ellos se pueden traducir indistintamente a un lenguaje de programaci¶on
u otro.

Por ello, los lenguajes algor¶³tmicos constituyen una herramienta expresiva
con una libertad y °exibilidad pr¶oxima a la de los naturales y con el rigor de los
de programaci¶on.

En realidad, las ¶unicas restricciones que deber¶³an imponerse a estos lenguajes
proceden de las caracter¶³sticas que tienen los algoritmos: expresar sus acciones
(qu¶e deben realizar y cu¶ando) con la precisi¶on necesaria, y que estas acciones
sean deterministas.
Por consiguiente, todo lenguaje algor¶³tmico debe poseer mecanismos con que
expresar las acciones as¶³ como el orden en que han de llevarse a cabo. Las
acciones, se expresan mediante instrucciones (tambi¶en llamadas ¶ordenes o sentencias),
que son comparables a verbos en in¯nitivo: asignar. . , leer. . , escribir. . .
y otras. La concatenaci¶on de las instrucciones expresa en qu¶e orden deben sucederse
las acciones; esto es, c¶omo se ensamblan unas tras otras. Los modos m¶as
usados para ensamblar ¶ordenes son la secuencia, la selecci¶on y la repetici¶on, y
los estudiaremos en el cap¶³tulo 7.
A la vista de las observaciones anteriores es l¶ogico cuestionar que los lenguajes
naturales sean algor¶³tmicos (debido sobre todo a la ambigÄuedad que es inherente
a ellos). Adem¶as, resulta m¶as pr¶actico utilizar medios de expresi¶on normalizados,
facilit¶andose la comunicaci¶on entre dise~nadores y usuarios de los algoritmos y
las personas que los desarrollan.
Los diagramas de °ujo constituyen uno de los lenguajes algor¶³tmicos que
mayor difusi¶on han alcanzado, aunque su uso est¶a menguando dr¶asticamente en
los ¶ultimos a~nos en favor de otros m¶etodos m¶as apropiados desde el punto de
vista formativo.6 Entre ellos, debe citarse el seudoc¶odigo, que aportar¶a valiosas
ideas para la adquisici¶on de un buen estilo de programaci¶on y, en de¯nitiva, para
aprender c¶omo enfocar la resoluci¶on de problemas complicados. Seguidamente,
describimos el algoritmo de la suma lenta mediante seudoc¶odigo:
Sean a, b 2 ZZ
Leer a y b
Mientras a 6= 0, hacer
½
a à a ¡ 1
b à b + 1
Escribir b
6De hecho, nosotros desaconsejamos su uso como lenguaje de desarrollo de algoritmos, limitando
su estudio a mostrar, precisamente, lo que no es la programaci¶on estructurada (v¶ease el
apartado 7.2.1).
18 Cap¶³tulo 1. Problemas, algoritmos y programas
En la pr¶actica, el seudoc¶odigo se usa como un medio expresivo de camino
hacia un lenguaje de programaci¶on concreto. Por tanto, es l¶ogico que los algoritmos
seudocodi¯cados tengan un parecido notorio con los programas escritos en
ese lenguaje. En concreto, comp¶arese por ejemplo el seudoc¶odigo anterior con el
programa siguiente, escrito en Pascal:
Program SumaLenta (input, output);
fSe suman dos enteros, pasando unidades de uno a otrog
fPreC.: input = [m n], enterosg var
a, b: integer;
begin
ReadLn (a, b);
fInv.: a + b = m + ng while a <> 0 do begin
a:= a-1;
b:= b+1
end; fwhileg
WriteLn(b)
end. fSumaLentag

1.5 Desarrollo sistem¶atico de programas
En los ¶ultimos a~nos, las aplicaciones comerciales se han hecho cada vez m¶as
grandes y complejas y, por tanto, su desarrollo resulta cada vez m¶as caro, lento
y sujeto a numerosos errores. Este problema fue tremendamente importante
hacia los a~nos sesenta (se hablaba entonces de crisis del software"), y para
tratar de solucionarlo surgi¶o entonces la Ingenier¶³a del software, que considera
el desarrollo de programas y aplicaciones como un proceso productivo donde se
aplican t¶ecnicas de ingenier¶³a. El desarrollo del software se organiza en fases,
que en conjunto se conocen como el ciclo de vida.7 Son las siguientes:
Plani¯caci¶on: En esta fase inicial hay que constatar la verdadera necesidad del
producto que se va a desarrollar y valorar los recursos humanos y t¶ecnicos
que precisa su desarrollo. Esta valoraci¶on se traduce en coste econ¶omico y
tiempo de elaboraci¶on. Si se aprueba el proyecto, se pasa a la fase siguiente.
7La organizaci¶on de estas fases da lugar a diversas variantes del ciclo de vida, siendo uno de
los m¶as aplicados el conocido como ciclo de vida cl¶asico. Existen cr¶³ticas importantes a ¶este,
b¶asicamente por su car¶acter secuencial y por la di¯cultad de establecer inicialmente todas las
especi¯caciones. En respuesta a estas cr¶³ticas se han creado otros modelos de desarrollo como son
la utilizaci¶on de prototipos y de lenguajes de cuarta generaci¶on (4GL) y el llamado modelo en
espiral.

1.5. Desarrollo sistem¶atico de programas 19
An¶alisis: En la fase de an¶alisis se establecen cu¶ales deben ser la funciones que
debe cumplir la aplicaci¶on y c¶omo debe realizarse el trabajo conjunto de los
diferentes m¶odulos en que se va a dividir. Dentro de esta fase se determina
un sistema de pruebas que permita detectar los posibles errores y asegurar
el funcionamiento correcto de la aplicaci¶on y las condiciones para unir los
m¶odulos de forma ¯able. Como resultado de esta fase se redactan las
especi¯caciones detalladas del funcionamiento general del software.
Dise~no: En esta fase se dise~na el conjunto de bloques, se dividen en partes y
se asignan a los equipos de programadores. Cada equipo elabora su parte,
escribi¶endola en un lenguaje algor¶³tmico y prob¶andola de forma manual.
Como resultado de esta fase se obtienen algoritmos escritos en lenguaje
algor¶³tmico.

Codi¯caci¶on: La fase de codi¯caci¶on se confunde muchas veces con la programaci
¶on y consiste en escribir los algoritmos en un lenguaje de programaci
¶on. Es un proceso casi autom¶atico.
Validaci¶on: La fase de validaci¶on consiste en aplicar el sistema de pruebas a los
m¶odulos, a las conexiones entre ellos (prueba de integraci¶on) y, por ¶ultimo,
a la totalidad de la aplicaci¶on (prueba de validaci¶on). Como resultado
de esta fase se genera la aplicaci¶on habiendo corregido todos los errores
detectados en las pruebas.
Mantenimiento: En la fase de mantenimiento se redacta la documentaci¶on
actualizada, tanto para el programador como para el usuario. Se inicia
la explotaci¶on de la aplicaci¶on y se detectan y corrigen los errores y de-
¯ciencias no advertidas en las fases anteriores, lo que puede suponer un
coste a~nadido importante. El resultado de esta fase es una aplicaci¶on en
explotaci¶on.
Evidentemente, en un curso como ¶este, los programas que vamos a desarrollar
no requieren, por su reducido tama~no, la ejecuci¶on de todas estas fases. Sin
embargo, conviene advertir que la tarea de la programaci¶on no consiste en la
codi¯caci¶on (escritura de un programa) directa, ni siquiera para programas sencillos,
sino que incluye otras fases: es necesario comprender primero el problema
que se plantea; si se puede dividir en subproblemas, esto reduce la complejidad,
aunque en ese caso hace falta acoplar los diferentes m¶odulos (por el momento,
digamos que se trata de fragmentos de programa); y, por supuesto, es ineludible
que el programa sea correcto, de forma que este requisito necesario merece toda
nuestra atenci¶on.

20 Cap¶³tulo 1. Problemas, algoritmos y programas

1.6 Conclusi¶on
La importancia de los algoritmos y de los lenguajes algor¶³tmicos reside en
su capacidad para expresar procesos, encaminados a ofrecer la soluci¶on a problemas
planteados, con independencia de los lenguajes de programaci¶on, y aun
de la m¶aquina, siendo as¶³ posible el desarrollo de algoritmos para computadores
todav¶³a no creados: de hecho, muchos de los programas actuales responden
a algoritmos concebidos mucho antes de que apareciera el primer computador:
consid¶erese por ejemplo el m¶etodo que ide¶o Euclides en el siglo iv a. C. para
hallar el m¶aximo com¶un divisor de dos n¶umeros naturales. Los lenguajes de
programaci¶on son tambi¶en importantes, ya que permiten materializar los algoritmos,
raz¶on por la que se ha avanzado tanto en el estudio de ¶estos en las ¶ultimas
d¶ecadas.

Por otra parte, tratar el m¶etodo (algoritmo) como objeto de estudio supone
un salto de nivel en la resoluci¶on de problemas, ya que ahora no s¶olo se requiere la
aplicaci¶on de un determinado procedimiento de resoluci¶on, sino que cobra importancia
la invenci¶on y descripci¶on del mismo. Es decir, para resolver un problema
habr¶a que identi¯car qu¶e acciones conducen a la soluci¶on, y c¶omo describirlas y
organizarlas.

En otras palabras, en este cap¶³tulo, nuestro modus operandi ha consistido en:
1. Disponer de un problema y un m¶etodo.
2. Resolverlo; es decir, aplicar el m¶etodo al problema.
mientras que, a partir de ahora, s¶olo disponemos de un problema y no del m¶etodo
que debemos aplicar, por lo que deberemos dise~nar y desarrollar el mismo para
poder aplicarlo al problema planteado. En resumidas cuentas, la resoluci¶on de
un problema general requerir¶a:
1. Dise~nar un algoritmo apropiado.
2. Escribir el programa correspondiente en un lenguaje de computador.
3. Ejecutar el programa correspondiente para el juego de datos del problema.
0
0
0
0No comments yet