Está en la página 1de 24

Introduccin

a la programacin
M. Jess Marco Galindo
Josep Vilaplana Past
PID_00149895
FUOC PID_00149895 Introduccin a la programacin
ndice
Introduccin .......................................................................................... 5
Objetivos ................................................................................................. 6
1. Conceptos bsicos de programacin .......................................... 7
1.1. Definiciones .................................................................................. 7
1.2. Ejemplos ....................................................................................... 10
2. La programacin como disciplina de ingeniera .................... 12
2.1. Etapas en el desarrollo de un programa ....................................... 12
2.1.1. Anlisis de requerimientos. Definicin del problema ...... 13
2.1.2. Diseo del algoritmo ......................................................... 13
2.1.3. Implementacin del programa ......................................... 14
2.1.4. Pruebas .............................................................................. 14
2.1.5. Operacin, mejoras y mantenimiento .............................. 15
2.2. Conclusiones y motivacin .......................................................... 15
3. Objetivos de la asignatura ............................................................ 17
3.1. Etapas del diseo de un algoritmo ............................................... 17
3.1.1. Entender el problema ........................................................ 18
3.1.2. Plantear y planificar la solucin ....................................... 19
3.1.3. Formular la solucin ......................................................... 19
3.1.4. Evaluar la correccin de la solucin ................................. 19
3.2. Implementacin de un programa ................................................ 20
Resumen .................................................................................................. 22
Glosario ................................................................................................... 23
Bibliografa ............................................................................................ 23
FUOC PID_00149895 5 Introduccin a la programacin
Introduccin
Este mdulo introduce el mundo de la programacin como disciplina de la in-
geniera. A partir de aqu se comprendern mejor los objetivos que hay que al-
canzar para convertirse en un buen programador. En realidad, ste es, como
veris, el objetivo de esta asignatura.
La finalidad bsica de la programacin es solucionar problemas mediante el
ordenador. Al igual que en cualquier disciplina, el aprendizaje debe ser progre-
sivo: primero hay que aprender a resolver problemas sencillos a partir de un
conjunto de herramientas bsicas, y ms adelante se intentan resolver proble-
mas ms complejos que requieren ms herramientas. As pues, este material
est formado por una serie de mdulos con una estructura orientada al apren-
dizaje progresivo de los contenidos y, por lo tanto, es muy importante asimilar
los contenidos de un mdulo antes de pasar al siguiente.
Antes de entrar en materia tenemos que saber de qu hablamos. Para poder se-
guir el discurso de la asignatura es indispensable conocer, en primer lugar, el
significado de los conceptos con que trabajaremos. En el primer apartado de
este mdulo definiremos estos conceptos bsicos.
A partir de los conceptos podremos dar un paso adelante y seguir con el segun-
do apartado, que nos presenta la programacin como una disciplina de la in-
geniera y nos muestra cmo hay que emprender el desarrollo de un programa
para convertirse en un buen profesional. Pensad que la programacin no es un
arte, sino una tcnica.
Con todo esto, ya seremos capaces de entender los objetivos de la asignatura,
que se exponen en el tercer apartado.
Una vez situados y conocidos todos estos aspectos, en el mdulo siguiente es-
taremos en condiciones de empezar el aprendizaje de las herramientas y m-
todos que necesitamos para desarrollar un programa.
FUOC PID_00149895 6 Introduccin a la programacin
Objetivos
Los objetivos de este mdulo son los siguientes:
1. Comprender los conceptos bsicos de programacin, algoritmo y programa.
2. Conocer las etapas bsicas de desarrollo de un programa.
3. Entender la diferencia entre diseo e implementacin, y comprender la
importancia que el diseo de algoritmos tiene en la programacin.
4. A partir de la comprensin de los conceptos bsicos, conocer cules son los
objetivos de la asignatura.
FUOC PID_00149895 7 Introduccin a la programacin
1. Conceptos bsicos de programacin
Para entender en qu consiste la programacin como disciplina y cules son
los objetivos de esta asignatura, necesitamos, antes que nada, comprender los
conceptos bsicos que deberemos utilizar. As pues, los definiremos de una
manera sencilla y clara.
1.1. Definiciones
Situmonos primero en uno de los conceptos ms importantes con los que tra-
bajaremos: el concepto de algoritmo.
Por lo tanto, podemos pensar en un algoritmo como una receta o guin que
hay que seguir para resolver un problema determinado, normalmente a partir
de una informacin que tenemos de entrada (por ejemplo, una receta para co-
cinar un plato). Un algoritmo, sin embargo, es un mtodo general para resol-
ver todos los casos posibles del mismo problema y, por lo tanto, debe ser
independiente de los datos de entrada de cualquier caso concreto.
Para comprender completamente este concepto de algoritmo, ser preciso de-
finir ahora los conceptos entorno, accin, proceso y procesador.
El entorno es el conjunto de objetos necesario para llevar a cabo una tarea de-
terminada. El estado del entorno en un momento determinado es la descrip-
cin del estado de los objetos del entorno en aquel momento concreto. Un
algoritmo acta de manera que hace cambiar progresivamente el estado de su
entorno.
Una accin es un suceso finito en el tiempo y que tiene un efecto definido y
previsto. Una accin puede actuar sobre un entorno y lo puede modificar, es
decir, se parte de un estado inicial y se llega a un estado final diferente. Una
accin elemental es una accin que el destinatario de un algoritmo entiende
y sabe procesar.
Un proceso es la ejecucin de una o varias acciones. El algoritmo expresa unas
pautas que hay que seguir para llevar a cabo una tarea concreta. El encargado
de llevar a cabo el proceso es el procesador. Un procesador es una entidad ca-
Un algoritmo se define como una descripcin no ambigua y precisa de
las acciones que hay que realizar para resolver un problema bien defini-
do en un tiempo finito.
Encontraris los objetivos
de los fundamentos de la
programacin en el apartado 3
de este mdulo.
Definicin de algoritmo
segn el diccionario
Segn el Diccionario de la
Lengua Espaola de la R.A.E,
algoritmo es:
Conjunto ordenado y finito de
operaciones que permite hallar
la solucin de un problema.
Ejemplo de entorno
y estado
En el caso de una receta de
cocina, el entorno estara con-
formado por los utensilios de
cocina (ollas, sartenes, etc.)
y los ingredientes.
El estado de las sartenes, por
ejemplo, cambiar de limpias
a sucias.
FUOC PID_00149895 8 Introduccin a la programacin
paz de comprender y ejecutar eficazmente un algoritmo. El destinatario del al-
goritmo es, pues, el procesador.
Ahora que ya sabemos qu es un algoritmo, debemos decidir cmo lo expresa-
mos. Deberemos encontrar un lenguaje que nos permita realizar una descrip-
cin no ambigua y precisa de las acciones que componen nuestros algoritmos.
Denominamos lenguaje natural el lenguaje que normalmente utilizamos
para comunicarnos. No obstante, debido a su complejidad y ambigedad, ve-
remos que el lenguaje natural no nos permite definir las acciones con la pre-
cisin y claridad que queremos. En realidad, si nosotros actuamos como
procesadores de alguien que nos indica cmo hay que realizar una tarea, a me-
nudo pedimos puntualizaciones y aclaraciones de qu hay que hacer.
Necesitamos, pues, un lenguaje ms reducido y preciso. En los mdulos siguien-
tes describiremos un lenguaje concreto creado ex professo para poder expresar
cualquier algoritmo con la claridad y precisin necesarias. Lo denominaremos
lenguaje algortmico o notacin algortmica.
En esta asignatura nos dedicaremos a aprender las tcnicas bsicas para disear
algoritmos. Por lo tanto, necesitaremos aprender este lenguaje algortmico que
acabamos de mencionar. En el mdulo Introduccin a la algortmica, descri-
biremos el lenguaje algortmico, y en los mdulos siguientes aprenderemos a
utilizarlo de manera progresiva, conjuntamente con las tcnicas para el diseo
de algoritmos.
Una vez hemos llegado a este punto, ya hemos definido la mayora de los con-
ceptos principales con los que trabajaremos; y prestad atencin al hecho de
que, curiosamente, todava no hemos hablado de programas.
Definiremos un programa en relacin con todo lo que hemos definido hasta
ahora. Para hacerlo, necesitamos aclarar tambin qu es un ordenador o
computador.
El ordenador procesar nuestros algoritmos, pero para hacerlo es necesario
que entienda nuestro lenguaje algortmico. Ser preciso, pues, transcribir
nuestros algoritmos a un lenguaje de programacin, es decir, a un lenguaje ca-
paz de ser comprendido por un ordenador.
Aunque ya tenemos una idea de lo qu es, un ordenador se puede defi-
nir formalmente como una mquina compuesta por circuitos electrni-
cos que tiene la capacidad de resolver problemas bajo el control de unas
instrucciones dadas. Un ordenador est formado bsicamente por un
procesador, la memoria y los dispositivos de entrada y salida que permi-
ten su comunicacin con el exterior.
Un procesador puede ser
una persona, una lavadora,
un ordenador, etc.
La lengua espaola o la inglesa
seran ejemplos de lenguajes
naturales.
Lenguajes no naturales
No es la primera vez que os
encontris en la situacin
de tener que utilizar una nueva
notacin (diferente del lengua-
je natural) para expresar
conceptos; por ejemplo, estis
muy acostumbrados a utilizar
la notacin matemtica
(+, , >, log, etc.).
Ejemplos de lenguajes
de programacin
Algunos lenguajes de programa-
cin son Pascal, C, C++, Cobol,
Fortran, VisualBasic, Java, etc.
Otra definicin
de ordenador
En este punto, podemos defi-
nir tambin un ordenador
como un autmata de clculo
gobernado por un programa.
FUOC PID_00149895 9 Introduccin a la programacin
Para expresar y disear algoritmos, siempre utilizamos la notacin algortmi-
ca; por otro lado, el uso y la definicin de lenguajes de programacin estn
sujetos a factores de disponibilidad, tecnologa actual, etc.
En esta asignatura, a medida que aprendamos a disear algoritmos con nues-
tro lenguaje algortmico, aprenderemos tambin a implementarlos en un len-
guaje de programacin para que se puedan ejecutar en nuestro ordenador.
Bsicamente, hay dos tipos de lenguajes de programacin: los lenguajes im-
perativos o lenguajes procedimentales y los declarativos, que a la vez se di-
viden en lenguajes funcionales y lenguajes lgicos.
En esta asignatura estudiaremos slo la programacin imperativa, que tradicio-
nalmente ha sido la ms extendida y utilizada.
Algunos lenguajes de programacin facilitan el seguimiento de una metodo-
loga concreta de programacin. Una de las ms ampliamente aceptada actual-
mente es la orientacin a objetos*.
En asignaturas posteriores veris el paradigma de la orientacin a objetos apli-
cado a la programacin. En esta asignatura introducimos los fundamentos b-
sicos en los que iris profundizando ms adelante. Prestad atencin al hecho
de que lo realmente importante es llegar a saber disear un algoritmo que re-
suelva un problema determinado. El hecho de codificarlo para obtener el pro-
grama correspondiente consiste, simplemente, en realizar una traduccin.
El lenguaje algortmico que definiremos y utilizaremos para disear algorit-
mos es suficientemente genrico como para que resulte bastante sencillo rea-
lizar la codificacin en cualquier lenguaje de programacin imperativo.
A medida que avancis en esta materia, entenderis ms a fondo algunas de
estas definiciones que puede ser que inicialmente no os queden completamente
claras. Por lo tanto, conviene que repasis continuamente este mdulo.
As pues, un programa es slo la codificacin de un algoritmo en un len-
guaje que el ordenador entienda.
En la programacin imperativa, los programas son secuencias de ins-
trucciones que deben llevarse a cabo como una receta o guin para re-
solver un problema determinado.
La orientacin a objetos determina un estilo de programacin que se
caracteriza por el modo de manipular la informacin.
Ejemplos de lenguajes
de programacin
a) Ejemplos de lenguajes
imperativos: Pascal, Cobol y C.
b) Ejemplos de lenguajes
declarativos:
Lenguajes funcionales: Lisp.
Lenguajes lgicos: Prolog.
Los materiales correspondientes
a la codificacin en un lenguaje de
programacin los encontraris en el aula.
Con el estudio de estos materiales
podris implementar programas. Os
aconsejamos que empecis a partir
de los diseos que encontraris en estos
mdulos.
* Por ejemplo, C++, Object Pascal
son, respectivamente,
extensiones de C y Pascal que
facilitan el uso de esta
metodologa.
En la asignatura Programacin
orientada al objeto se explicar
en qu consiste la programacin
bajo el paradigma de la orientacin
a objetos.
FUOC PID_00149895 10 Introduccin a la programacin
1.2. Ejemplos
En este subapartado veremos algunos ejemplos que nos permitirn aclarar de
manera intuitiva los conceptos que acabamos de definir.
En realidad, algunos de los conceptos que hemos visto son aplicables a cualquier
entorno del mundo real, no estn restringidos al entorno de la informtica.
Podramos pensar en una lavadora como un autmata, ya que es una mquina
capaz de realizar una tarea de manera autnoma, en este caso, lavar la ropa.
Si pedimos a nuestra lavadora que nos lave la ropa blanca, la lavadora seguir
el proceso siguiente:
Utilizar el agua y el jabn del cajn.
Calentar el agua a 40 grados.
Dar vueltas durante 20 minutos (lavar).
Expulsar el agua.
Tomar ms agua.
Dar vueltas durante 10 minutos (primer aclarado).
Expulsar el agua.

Dar vueltas durante 10 minutos (cuarto aclarado).


Expulsar el agua.
Dar vueltas muy rpidamente durante 1 minuto (centrifugar).
Todo este conjunto de acciones que la lavadora ha llevado a cabo sera el al-
goritmo que este aparato sigue para lavar la ropa blanca.
Si ahora pedimos que nos lave la ropa delicada, las acciones que ejecutar la la-
vadora sern seguramente diferentes (por ejemplo, la temperatura ser inferior,
el tiempo de lavado ser ms corto, habr menos aclarados, etc.); esto equivale
a decir que el algoritmo para lavar la ropa delicada es diferente del algoritmo
para lavar ropa blanca.
Tambin es importante observar el hecho de que puede haber ms de un algo-
ritmo que resuelva el mismo problema, as como algn problema para el que
no existe ningn algoritmo que lo solucione.
Observad tambin que es necesario que se cumplan unas condiciones iniciales
para que el problema se resuelva correctamente (que la ropa blanca est dentro
As pues, un algoritmo nos indica las acciones que hay que seguir para
resolver un problema concreto, pero necesitamos un autmata (proce-
sador) que sea capaz de ejecutarlo y un entorno afectado (ropa, agua,
bombo, etc.).
Otros ejemplos
de algoritmos
Del mismo modo que en el caso
mencionado de la lavadora,
tambin podramos pensar en
un algoritmo que resuelva el
problema de cocinar una tortilla
de patatas, el de cambiar una
rueda de un coche, el de cons-
truir un edificio, el de preparar la
declaracin de la renta, el de
multiplicar dos matrices, etc.
Es importante que recordis
esto cuando hablemos de la
especificacin, en el mdulo
Introduccin a la algortmica
de esta asignatura.
FUOC PID_00149895 11 Introduccin a la programacin
de la lavadora, que la lavadora est conectada a la corriente elctrica y a la en-
trada del agua, as como que haya jabn en el cajn). Para poder llegar al es-
tado final deseado, que en nuestro caso sera tener la ropa limpia al final, el
entorno debera estar en este estado inicial. Si no partimos del estado inicial
correcto, seguramente no conseguiremos nuestro objetivo (pensad, por ejem-
plo, que si la lavadora est conectada a la corriente, nuestro algoritmo no dar
el resultado esperado).
Volviendo a nuestro entorno, el ordenador es el autmata que debe ser capaz
de resolver los problemas que le planteemos*.
Un algoritmo en el lenguaje natural para resolver el problema podra ser el si-
guiente: Sumad los cuatro nmeros que nos han dado y dividid el resultado
de esta suma por cuatro para obtener el resultado final.
Ahora veremos cmo se expresara este algoritmo en lenguaje algortmico. Pos-
teriormente, podramos implementar este algoritmo en un lenguaje de progra-
macin y ejecutarlo en nuestro ordenador.
algoritmo media;
var
n, suma, i: entero;
resultado: real;
fvar
suma := 0;
i := 1;
mientras i 4 hacer
leerEntero(n);
suma := suma + n;
i := i + 1
fmientras
resultado := enteroAReal(suma)/4.0;
escribirReal(resultado)
falgoritmo
* Por ejemplo, que nos calcule
la media de cuatro nmeros
enteros determinados.
FUOC PID_00149895 12 Introduccin a la programacin
2. La programacin como disciplina de ingeniera
Todo lo que estudiaremos en esta asignatura debe servirnos para aprender a
programar correctamente. Veamos, pues, como motivacin para el estudio de
la programacin, qu se hace en el mundo real.
Cada una de estas partes de la disciplina ha surgido de la investigacin y ex-
periencia adquiridas en los ltimos aos y contribuye a hacer que la progra-
macin sea una tarea eficaz (que d los resultados esperados) y eficiente (en un
tiempo de desarrollo razonable).
Evidentemente, en un entorno industrial competitivo, la eficacia y la eficien-
cia son valores muy apreciados en las empresas. Precisamente por este motivo
la asignatura se orienta a aprender a programar de manera eficiente y a adquirir
cierto grado de destreza a la hora de construir programas correctos en un tiempo
razonable. No obstante, para conseguirlo necesitaris practicar mucho.
Para comprender mejor los objetivos concretos de la asignatura, veremos ahora a
grandes rasgos cules son las etapas que clsicamente se siguen para desarrollar
un programa.
2.1. Etapas en el desarrollo de un programa
Para obtener un programa que resuelva un problema, hay que pasar por las si-
guientes etapas:
1. Anlisis de requerimientos. Definicin del problema
2. Diseo del algoritmo
3. Implementacin del programa
4. Pruebas
5. Operacin, mejoras y mantenimiento
Despus de la etapa de pruebas, ya tenemos un programa disponible para em-
pezar a operar. Sin embargo, como resultado de su explotacin y mantenimien-
to, es posible que sea necesario llevar a cabo mejoras o cambios, en definitiva,
modificaciones que generalmente provocan tener que retroceder a algunas eta-
pas previas del desarrollo.
Actualmente, la programacin se considera una disciplina que, igual que
otras disciplinas de ingeniera, se fundamenta en una teora, una propues-
ta metodolgica y un conjunto de tcnicas de diseo.
Encontraris los objetivos que
se especifican en el apartado 3
de este mdulo didctico.
Observacin
Recordad que nos movemos
dentro del paradigma de
la programacin imperativa. Si
siguisemos otros tipos de pro-
gramacin, el ciclo de desarro-
llo podra ser ligeramente
diferente.
FUOC PID_00149895 13 Introduccin a la programacin
Por motivos de eficiencia, las empresas quieren que el desarrollo de cada una
de las etapas se efecte de manera secuencial en el tiempo y que ninguna etapa
obligue a retroceder a la anterior (excepto, como ya hemos indicado, la ltima).
Actualmente se dispone de conocimientos suficientes para que esto se pueda lle-
var a cabo.
En los subapartados siguientes describiremos cada una de las etapas.
2.1.1. Anlisis de requerimientos. Definicin del problema
Uno o varios clientes platean un problema que necesita una solucin mediante
la construccin de un programa. De entrada, hay que realizar un anlisis del
problema, que puede ser laborioso, ya que a veces el problema es difcil de com-
prender. Una vez que se ha aclarado el problema, se realiza un anlisis minucio-
so de los requerimientos que ayudarn a definir el problema que queremos
resolver.
En esta asignatura no estudiaremos esta etapa (no se puede aprender todo de
golpe), ya tendris la oportunidad ms adelante en asignaturas posteriores.
Por lo tanto, partiremos siempre de un enunciado ya completo, claro y con-
creto, y nos centraremos en las tres etapas que describiremos a continuacin.
2.1.2. Diseo del algoritmo
Progresivamente, a lo largo de cada mdulo aprenderis las tcnicas, herra-
mientas y metodologas adecuadas para poder realizar esta etapa con eficacia
y eficiencia. La representacin del diseo se realizar mediante el lenguaje al-
gortmico que se expone bsicamente en el mdulo Introduccin a la algo-
rtmica de esta asignatura.
Como veremos, sta es una de las etapas ms importantes y costosas dentro
del desarrollo de un programa. Adems, los objetivos de esta asignatura se cen-
tran principalmente en el aprendizaje de esta etapa. Por lo tanto, en el ltimo
apartado de este mdulo veremos con ms detalle en qu consiste el diseo de
un algoritmo.
El resultado de la etapa de anlisis de requerimientos y definicin del
problema ser un enunciado preciso y claro del problema que hay que
resolver.
A partir del enunciado debemos realizar un diseo que nos lleve a la so-
lucin deseada.
FUOC PID_00149895 14 Introduccin a la programacin
2.1.3. Implementacin del programa
Implementar significa llevar a cabo. El resultado del diseo es un algoritmo, pe-
ro, para ejecutarlo deber traducirse el diseo realizado en lenguaje algortmi-
co a un lenguaje de programacin que el ordenador entienda. Esta etapa es
sencilla, puesto que slo se trata de una traduccin bastante mecnica del di-
seo ya realizado para obtener el programa correspondiente, que podremos
ejecutar en el ordenador.
Ejemplo de implementacin del lenguaje
Si elegimos implementar nuestros algoritmos en C, slo necesitaremos conocer la sintaxis y
la semntica del lenguaje C, y la manera como se traduce cada operacin del lenguaje algo-
rtmico en la sentencia correspondiente en C.
Podremos traducir sin ninguna dificultad a lenguajes de programacin impera-
tivos cualquier diseo que hayamos realizado en lenguaje algortmico. Simple-
mente deberis establecer las reglas de traduccin al lenguaje elegido y proceder.
2.1.4. Pruebas
Finalmente, ser necesario detectar posibles errores en nuestros programas.
No obstante, tened en cuenta que los juegos de pruebas slo sirven para compro-
bar que el programa no es correcto (si algn juego de pruebas no da los resultados
esperados), pero no para asegurar que s lo es (excepto que se comprueben todas
las entradas posibles, que es prcticamente imposible).
En realidad, aunque en esta asignatura no los estudiaremos, hay mtodos forma-
les de verificacin que permiten demostrar la correccin de un algoritmo y, por
lo tanto, del programa correspondiente a partir de la especificacin formal de sus
requerimientos. De este modo, se podra afirmar con toda seguridad que el pro-
grama cumple sus objetivos.
De todas formas, ante la falta de verificacin formal de algoritmos, en esta asig-
natura se dan tcnicas y pautas metodolgicas que pueden conducir al conven-
cimiento de que se ha realizado un diseo correcto, y la elaboracin de un juego
de pruebas bueno y exhaustivo* confirmar nuestras pretensiones con una se-
guridad alta. Sin embargo, tened en cuenta que la seguridad en la correccin nos
viene dada mediante dos etapas, la primera (diseo) es la ms estratgica, y la
segunda (implementacin y prueba con un juego de pruebas exhaustivo) es la de
confirmacin.
En la etapa de pruebas se trata de probar el programa resultante con di-
ferentes datos de entrada que reciben el nombre de juegos de pruebas.
El xito de estas pruebas depender en gran medida de la calidad del di-
seo realizado antes.
Aprenderis la etapa de
implementacin en el lenguaje
de programacin elegido para
codificar los algoritmos en la parte
prctica de la asignatura. El material
de esta parte prctica no est incluido en
estos mdulos, sino que lo encontraris
en el aula.
Correccin del programa
La mejor forma de asegurar
que el programa es correcto
es estar convencidos de la co-
rreccin en la etapa de diseo.
La metodologa y las pautas
de algoritmos que se propo-
nen en los mdulos siguientes
os ayudarn a alcanzar la
correccin del diseo.
* Por ejemplo, se pueden considerar
los casos extraos
o extremos.
FUOC PID_00149895 15 Introduccin a la programacin
2.1.5. Operacin, mejoras y mantenimiento
Podis pensar que, una vez obtenido y probado el programa, el proceso ya ha
finalizado. Pero de la misma manera que todava se disean coches nuevos,
lavadoras nuevas, etc., los programas tambin cambian para mejorar o adap-
tarse a las nuevas necesidades, y por esta razn se vuelve a reproducir todo el
proceso desde el principio.
Si la nueva mejora obliga a modificar partes del programa o si, por cuestiones de
mantenimiento, hay que hacer correcciones, esto slo se puede llevar a cabo con
eficiencia si el diseo del programa se realiza de manera inteligible.
Un programa se escribe una vez, pero se lee muchas veces ms. Conviene, pues,
elaborar diseos claros, comprensibles y sencillos para que ayuden a hacer que
esta etapa sea eficiente y eficaz.
El diseo tambin deber estar bien documentado. Por lo tanto, ser necesario
aprender a documentar correctamente los programas y saber distinguir entre
una documentacin buena y una documentacin que no aporta nada.
2.2. Conclusiones y motivacin
Las etapas anteriores tienen costes muy diferentes:
1) El anlisis de requerimientos es una de las ms costosas, ya que depende
de muchos factores entre los que, adems de los puramente tcnicos, se en-
cuentran los sociolgicos y econmicos.
2) La etapa de diseo es costosa y hay que dedicarle todos los esfuerzos que
sean necesarios, puesto que de la calidad de sta depender el coste y el xito
del resto de las etapas.
3) La etapa de implementacin es actualmente la menos costosa de todo el de-
sarrollo, puesto que, como ya hemos dicho, es una traduccin bastante directa.
Conocer perfectamente un lenguaje de programacin no significa saber pro-
gramar. Conocer un lenguaje de programacin es conocer la herramienta a
partir de la que podremos implementar el diseo del programa. As, pues, de-
bemos esforzarnos a saber disear correctamente los programas, el resto ser
una tarea mucho menos costosa.
4) El coste de la etapa de pruebas depende de la complejidad que tenga el pro-
grama y de que las etapas anteriores se hayan llevado a cabo correctamente.
En cualquier caso, recordad que en esta etapa no se puede estar nunca seguro
del funcionamiento correcto y que la realizacin de un buen diseo ayudar
a tener la seguridad de que el programa implementado funciona correctamen-
La importancia
de la correccin
En algunas aplicaciones, como
la hospitalaria o la informtica
de control de una central
nuclear, los errores pueden
tener efectos dramticos.
FUOC PID_00149895 16 Introduccin a la programacin
te. Tal vez pensaris que esto es un poco exagerado, pero no es as. Tened pre-
sente que los errores de un programa en funcionamiento pueden detener la
produccin de una gran empresa, con los graves prejuicios econmicos que esto
puede ocasionar.
Podramos pensar que, cuando ya sabemos cmo se desarrolla un programa en
una empresa y una vez elaborados algunos programas, ya sabemos programar,
pero con esto no es suficiente. Para ser buenos programadores, capaces de afron-
tar problemas de gran envergadura como los que encontraremos en el mundo
profesional, ser necesario adquirir mucha destreza en la aplicacin de los m-
todos y las tcnicas que expondremos. Esta asignatura y las que la siguen, com-
binadas con la prctica continua, os permitirn alcanzar esta habilidad para ser
buenos profesionales.
Aficionados y profesionales de la programacin
Alguien podra decir que sabe jugar a tenis porque alguna vez ha lanzado una pelota con
una raqueta. Pero para llegar a ser un profesional de alto nivel deber tener destreza en
un conjunto de tcnicas y mtodos que deber dominar para ser competitivo. En reali-
dad, es muy poco frecuente, por no decir nada frecuente, ver a un aficionado en un par-
tido de tenis de alto nivel. Lo mismo sucede en el mundo de la programacin.
FUOC PID_00149895 17 Introduccin a la programacin
3. Objetivos de la asignatura
En esta asignatura nos centraremos bsicamente en el diseo de algoritmos y
su posterior implementacin a un lenguaje de programacin imperativo para
obtener el programa correspondiente.
A partir de un enunciado concreto, deberemos aprender a realizar el diseo de
un algoritmo. Por otro lado, tambin hemos visto que puede haber ms de un
algoritmo que solucione un mismo problema. Por lo tanto, debemos tener unos
criterios claros para elegir el algoritmo ms adecuado en cada caso.
Un algoritmo adecuado ser el que presente las siguientes caractersticas:
a) Correccin: el algoritmo hace lo que realmente se pide.
b) Inteligibilidad: el algoritmo debe ser claro y fcil de entender, puesto que
se escribir una sola vez, pero ser necesario leerlo muchas ms veces para po-
der mantenerlo y/o modificarlo.
c) Eficiencia: el algoritmo debe llevar a cabo la tarea que se le ha encargado en
un tiempo razonable.
d) Generalidad: con pocos cambios, el algoritmo se debe poder adaptar a otros
enunciados parecidos.
Cuando diseis vuestros algoritmos, tened en cuenta siempre estos cuatro cri-
terios. La metodologa que propondremos en esta asignatura os ayudar a dise-
ar algoritmos que los cumplan. Sin embargo, pensad tambin que no slo hay
que seguir la metodologa, sino que, para alcanzar una cierta destreza en el di-
seo, es necesaria bastante prctica, puesto que tanto los conceptos como la me-
todologa necesitan un tiempo de asimilacin, y esto slo se consigue mediante
la prctica continua.
3.1. Etapas del diseo de un algoritmo
Las etapas para disear un algoritmo son prcticamente las mismas que se ne-
cesitan para resolver cualquier problema de otras disciplinas. Bsicamente son
las siguientes:
1) Entender el problema: si no entendemos el problema, difcilmente lo po-
dremos resolver. La especificacin formal de los algoritmos es una buena he-
rramienta para alcanzar esta etapa rigurosamente y evitar ambigedades.
Como ya sabemos...
... la etapa de diseo es una
de las ms costosas en el desa-
rrollo de un programa.
FUOC PID_00149895 18 Introduccin a la programacin
No obstante, en esta asignatura utilizaremos el lenguaje natural para especificar
nuestros algoritmos. Por lo tanto, ser una especificacin informal y deberemos
intentar expresarla sin ambigedad y con rigor. En el algoritmo resultante, la
especificacin aparecer en forma de comentarios.
2) Plantear/planificar la solucin: la metodologa propuesta (bsicamente
los esquemas de recorrido y bsqueda, y el anlisis descendente) nos permitir
efectuar de manera eficiente esta etapa y facilitar el resto de las mismas.
3) Formular la solucin: la notacin o lenguaje algortmico nos permitir
definir el algoritmo con precisin y sin ambigedades.
4) Evaluar la correccin de la solucin propuesta: la inteligibilidad del algo-
ritmo, junto con la aplicacin de los esquemas, nos permitir estar casi seguros
de la correccin del algoritmo. La especificacin (precondiciones, poscondicio-
nes, etc.) del algoritmo tambin nos ayudar, adems, a razonar sobre la correc-
cin del algoritmo.
3.1.1. Entender el problema
Hay que asegurarse de que hemos ledo correctamente el enunciado. Hay que sa-
ber qu se pide y de qu estado inicial se parte. En esta etapa se pretende ordenar
ideas, identificando cules son las condiciones iniciales, que denominaremos
precondicin, y a partir de aqu establecer el objetivo que se quiere alcanzar, que
denominaremos poscondicin.
Un algoritmo es una descripcin clara y precisa de acciones que hay que rea-
lizar para resolver un problema bien definido en un tiempo finito. El algorit-
mo debe solucionar estrictamente lo que pide el enunciado, ni ms ni menos.
As pues, en esta etapa hay que fijar las ideas que nos permitirn continuar en
las etapas sucesivas.
No nos debemos preocupar de cmo lo haremos, sino de qu debemos hacer,
qu tenemos inicialmente y qu queremos obtener.
Ejemplos de especificacin del problema
El objetivo de una lavadora es lavar la ropa que hemos introducido en la misma. Para al-
canzar este objetivo es necesario que est conectada a la corriente y al suministro de agua;
pero en ningn momento hemos pensado cmo acta la lavadora.
En el mdulo Introduccin a la algortmica profundizaremos en este concepto y vere-
mos que este ejemplo es bastante simple.
Cuando definimos los objetivos y las condiciones iniciales, no podemos
permitir ninguna ambigedad. La especificacin consistir precisamente
en esto.
La especificacin de
algoritmos se describe
en el mdulo Introduccin
a la algortmica de esta asignatura.
Los esquemas de recorrido
y bsqueda se estudian en el
mdulo Tratamiento secuencial
y la tcnica de diseo descendente
en el mdulo Introduccin a la
metodologa del diseo descendente
de esta asignatura.
El lenguaje algortmico se describe
en el mdulo Introduccin a la
algortmica de esta asignatura.
La especificacin de algoritmos se
estudia en el mdulo Introduccin
a la algortmica de esta asignatura.
FUOC PID_00149895 19 Introduccin a la programacin
3.1.2. Plantear y planificar la solucin
sta es la etapa de diseo a la que hay que dedicar ms tiempo.
Tened en cuenta que si no aplicis los esquemas tericos de resolucin, tarda-
ris ms en encontrar la solucin, ya que deberis redescubrir por vosotros
mismos la teora y, adems, no estaris completamente seguros de la solucin
que proponis.
Para resolver problemas complejos, no ser suficiente con la aplicacin de es-
quemas, por lo que ser necesario aplicar la metodologa de diseo descenden-
te. Esta metodologa nos permitir abordar problemas de mayor complejidad
y convertir el problema complejo en un conjunto de problemas menores a
los que podremos aplicar lo que hayamos aprendido para problemas de menor
complejidad.
3.1.3. Formular la solucin
Para hacerlo, hay que conocer perfectamente la sintaxis y la semntica de los
elementos del lenguaje algortmico propuesto. Sin este conocimiento, difcil-
mente podramos proponer o expresar con precisin el algoritmo definitivo.
La formulacin del algoritmo es el resultado de aplicar correctamente la
metodologa sugerida, y no de la combinacin ms o menos caprichosa de
los elementos y/o construcciones del lenguaje algortmico. Es decir, en la
etapa anterior hemos pensado el diseo ms all de los elementos del len-
guaje algortmico.
3.1.4. Evaluar la correccin de la solucin
Realizar el seguimiento de un algoritmo para un caso concreto de datos de en-
trada no nos permite asegurar que el algoritmo funciona para todos los casos.
Lo primero que hay que hacer es ver si el problema corresponde a un
tipo de problema que ya se ha estudiado en la teora. Si es as, se aplican
los esquemas conocidos para resolverlo de una manera segura y rpida.
La notacin algortmica nos permite expresar de manera precisa y clara
el algoritmo que proponemos.
En el mdulo Tratamiento
secuencial de esta asignatura
se estudian diferentes esquemas
de resolucin para algunos tipos de
problemas.
La tcnica de diseo descendente
se ve en el mdulo Introduccin
a la metodologa del diseo
descendente, en el que
sabremos en qu consiste.
El objetivo bsico del mdulo
siguiente ser precisamente
exponeros la sintaxis
y semntica de este
lenguaje algortmico.
FUOC PID_00149895 20 Introduccin a la programacin
La metodologa propuesta en los mdulos de esta asignatura, juntamente con
la especificacin informal que comentaremos en las partes del algoritmo dise-
ado, nos permitir razonar sobre la correccin de este diseo.
3.2. Implementacin de un programa
Una vez tengamos el diseo del algoritmo, lo codificaremos para obtener un
programa. La codificacin se debe introducir en el ordenador en el lenguaje
de programacin elegido mediante un editor que crear un fichero de texto
denominado fichero fuente.
El texto que hemos introducido no es directamente ejecutable por el ordena-
dor; para poderlo ejecutar, debemos convertirlo en instrucciones que el proce-
sador pueda entender directamente. El encargado de realizar esta tarea es un
programa denominado compilador, que traducir el cdigo fuente a un cdigo
que el ordenador comprenda.
Posteriormente, otro programa se encargar de efectuar el montaje y obtener
un fichero que se pueda ejecutar y probar. Uno de los objetivos del programa
montador es realizar la adaptacin del cdigo generado en el entorno del or-
denador para que se pueda ejecutar.
En la etapa de compilacin pueden surgir errores de sintaxis del lenguaje de
programacin y ser necesario volver a editar el programa para corregirlos.
Una vez superados los errores de compilacin, el montaje no debera ocasio-
nar ningn problema.
Para la etapa de ejecucin, es muy positivo disear un buen juego de pruebas que
incluya todas las posibilidades que pensamos que el programa debe afrontar.
Cuando se producen errores en la ejecucin del programa, seguramente no se
ha realizado correctamente alguna de las etapas previas.
Podramos caer en la tentacin de realizar las etapas al revs o de saltarnos
alguna. Es decir, editar un programa directamente, compilarlo, ejecutarlo y,
si funciona, hacer el diseo. Este sistema, conocido como ensayo y error, crea
programas complicados a causa de las modificaciones introducidas en la idea
original durante cada fracaso del programa. Como consecuencia, el progra-
ma resulta poco o nada inteligible. Recordad que la programacin es una dis-
Resumiendo, las etapas de implementacin de un programa son las si-
guientes: traducir el algoritmo al lenguaje de programacin, editar el
programa, compilarlo, montarlo y ejecutarlo.
Esta etapa se aprende con las
prcticas del laboratorio y con la
ayuda de material complementario
de estos mdulos. Este material os
ensear a traducir las sentencias del
lenguaje algortmico al lenguaje de
programacin elegido y a utilizar el
software necesario (editor y compilador)
para ejecutar vuestros programas.
Aparicin de errores en la
ejecucin del programa
En la ejecucin del programa
pueden aparecer errores por-
que no nos hemos fijado bien
en la traduccin o en la edicin
del programa, o porque se haya
producido alguna equivocacin
a la hora de planificar y plantear
el diseo del algoritmo. En el
ltimo caso, deberis estudiar
muy bien el diseo de algorit-
mos y poner ms atencin en
las primeras etapas de diseo.
Recordad que el esfuerzo reali-
zado y el tiempo dedicado
a estas etapas hace que el resto
de etapas sean mucho ms
sencillas y directas.
FUOC PID_00149895 21 Introduccin a la programacin
ciplina de la ingeniera y, por lo tanto, hay que seguir una metodologa para
no caer en la trampa del ensayo y error, y aprender a programar con el rigor
necesario.
Os acabamos de presentar los objetivos que hay que alcanzar en esta asignatura.
Estara bien que los releyeseis de vez en cuando durante el curso para no perder-
los nunca de vista. Ms adelante tambin los podris entender mejor.
FUOC PID_00149895 22 Introduccin a la programacin
Resumen
Con los conceptos que hemos introducido hasta ahora, ya estamos en condi-
ciones de enumerar el objetivo general de esta asignatura: aprender a disear
algoritmos para resolver problemas de complejidad media y a implementar el
programa correspondiente dentro del paradigma de la programacin estructu-
rada e imperativa.
Podramos desglosar este objetivo en los siguientes:
1) Aprender a entender y especificar, aunque informalmente, los enunciados
de los algoritmos.
2) Aprender un lenguaje algortmico como herramienta para expresar al-
goritmos.
3) Aprender diferentes tcnicas de diseo, como los esquemas, para resolver
problemas sencillos, y la metodologa de diseo descendente para solucionar
problemas de mayor envergadura.
4) Aprender a utilizar las estructuras de datos adecuados a cada problema.
5) Aprender a combinar las herramientas y tcnicas expuestas para resolver
problemas.
6) Aprender a implementar los algoritmos en un lenguaje de programacin
procedimental para obtener un programa.
7) Aprender a utilizar el software necesario (editor y compilador) para poder
compilar y ejecutar los programas.
8) Aprender a disear juegos de pruebas que permitan validar la correccin de
los programas.
Los primeros cinco objetivos se alcanzan de manera gradual a partir del estu-
dio de los mdulos didcticos combinados con la realizacin de las actividades
y los ejercicios propuestos. Los tres ltimos, a partir de las prcticas de labora-
torio y el uso del software y del material complementario del aula.
FUOC PID_00149895 23 Introduccin a la programacin
Glosario
algoritmo
Conjunto explcito de reglas para resolver un problema en un nmero finito de pasos.
codificacin
Traduccin de un algoritmo a un lenguaje de programacin.
computador
Autmata de clculo gobernado por un programa.
entorno
Conjunto de objetos necesarios para llevar a cabo una tarea determinada.
especificacin
Formalizacin del enunciado de un problema.
estado
Descripcin del entorno en un momento determinado.
implementacin
Realizacin de un proyecto.
lenguaje algortmico
Lenguaje artificial que se utiliza para expresar algoritmos.
lenguaje natural
Cualquier lenguaje que se utiliza como forma natural de comunicacin: cataln, castellano,
ingls, etc.
lenguaje de programacin
Lenguaje creado para expresar programas y que es capaz de ser interpretado por un ordenador.
notacin algortmica
Vase lenguaje algortmico.
ordenador
Vase computador.
programa
Codificacin de un algoritmo en un lenguaje de programacin que el ordenador entienda.
sintaxis
Reglas de estructura de un lenguaje.
semntica
Significado de los smbolos de un lenguaje.
Bibliografa
Botella, P.; Bofill, M.; Burgus, X.; Franch, X.; Lagonigro, R; Vancells, J. (1998). Funda-
mentos de programacin I. Barcelona: Ediuoc.
Castro, J.; Cucker, F.; Messeguer, X.; Rubio, A.; Solano, L.; Valles, B. (1992). Curs de
programaci. Madrid, etc.: McGraw-Hill.
Vancells, J.; Lpez E. (1992). Programaci: introducci a lalgorsmica. Vic: Eumo Editorial
(Tecno-Cincia).