11.07.2015 Views

Introducción a la programación

Introducción a la programación

Introducción a la programación

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Introducción</strong>a <strong>la</strong> <strong>programación</strong>M. Jesús Marco GalindoJosep Vi<strong>la</strong>p<strong>la</strong>na PastóP05/75062/00108


© FUOC • P05/75062/00108 <strong>Introducción</strong> a <strong>la</strong> <strong>programación</strong>Índice<strong>Introducción</strong> .............................................................................................. 5Objetivos ..................................................................................................... 61. Conceptos básicos de <strong>programación</strong> .............................................. 71.1. Definiciones ...................................................................................... 71.2. Ejemplos ........................................................................................... 102. La <strong>programación</strong> como disciplina de ingeniería ........................ 122.1. Etapas en el desarrollo de un programa ........................................... 122.1.1. Análisis de requerimientos. Definición del problema .......... 132.1.2. Diseño del algoritmo ............................................................. 132.1.3. Implementación del programa ............................................. 142.1.4. Pruebas .................................................................................. 142.1.5. Operación, mejoras y mantenimiento .................................. 152.2. Conclusiones y motivación .............................................................. 153. Objetivos de <strong>la</strong> asignatura ................................................................ 173.1. Etapas del diseño de un algoritmo ................................................... 173.1.1. Entender el problema ............................................................ 183.1.2. P<strong>la</strong>ntear y p<strong>la</strong>nificar <strong>la</strong> solución ........................................... 193.1.3. Formu<strong>la</strong>r <strong>la</strong> solución ............................................................. 193.1.4. Evaluar <strong>la</strong> corrección de <strong>la</strong> solución ..................................... 193.2. Implementación de un programa .................................................... 20Resumen ...................................................................................................... 22Glosario ....................................................................................................... 23Bibliografía ................................................................................................ 23


© FUOC • P05/75062/00108 5 <strong>Introducción</strong> a <strong>la</strong> <strong>programación</strong><strong>Introducción</strong>Este módulo introduce el mundo de <strong>la</strong> <strong>programación</strong> como disciplina de <strong>la</strong> ingeniería.A partir de aquí se comprenderán mejor los objetivos que hay que alcanzarpara convertirse en un buen programador. En realidad, éste es, comoveréis, el objetivo de esta asignatura.La finalidad básica de <strong>la</strong> <strong>programación</strong> es solucionar problemas mediante elordenador. Al igual que en cualquier disciplina, el aprendizaje debe ser progresivo:primero hay que aprender a resolver problemas sencillos a partir de unconjunto de herramientas básicas, y más ade<strong>la</strong>nte se intentan resolver problemasmás complejos que requieren más herramientas. Así pues, este materialestá formado por una serie de módulos con una estructura orientada al aprendizajeprogresivo de los contenidos y, por lo tanto, es muy importante asimi<strong>la</strong>rlos contenidos de un módulo antes de pasar al siguiente.Antes de entrar en materia tenemos que saber de qué hab<strong>la</strong>mos. Para poder seguirel discurso de <strong>la</strong> asignatura es indispensable conocer, en primer lugar, elsignificado de los conceptos con que trabajaremos. En el primer apartado deeste módulo definiremos estos conceptos básicos.A partir de los conceptos podremos dar un paso ade<strong>la</strong>nte y seguir con el segundoapartado, que nos presenta <strong>la</strong> <strong>programación</strong> como una disciplina de <strong>la</strong> ingenieríay nos muestra cómo hay que emprender el desarrollo de un programapara convertirse en un buen profesional. Pensad que <strong>la</strong> <strong>programación</strong> no es unarte, sino una técnica.Con todo esto, ya seremos capaces de entender los objetivos de <strong>la</strong> asignatura,que se exponen en el tercer apartado.Una vez situados y conocidos todos estos aspectos, en el módulo siguiente estaremosen condiciones de empezar el aprendizaje de <strong>la</strong>s herramientas y métodosque necesitamos para desarrol<strong>la</strong>r un programa.


© FUOC • P05/75062/00108 6 <strong>Introducción</strong> a <strong>la</strong> <strong>programación</strong>ObjetivosLos objetivos de este módulo son los siguientes:1. Comprender los conceptos básicos de <strong>programación</strong>, algoritmo y programa.2. Conocer <strong>la</strong>s etapas básicas de desarrollo de un programa.3. Entender <strong>la</strong> diferencia entre diseño e implementación, y comprender <strong>la</strong>importancia que el diseño de algoritmos tiene en <strong>la</strong> <strong>programación</strong>.4. A partir de <strong>la</strong> comprensión de los conceptos básicos, conocer cuáles son losobjetivos de <strong>la</strong> asignatura.


© FUOC • P05/75062/00108 7 <strong>Introducción</strong> a <strong>la</strong> <strong>programación</strong>1. Conceptos básicos de <strong>programación</strong>Para entender en qué consiste <strong>la</strong> <strong>programación</strong> como disciplina y cuáles sonlos objetivos de esta asignatura, necesitamos, antes que nada, comprender losconceptos básicos que deberemos utilizar. Así pues, los definiremos de unamanera sencil<strong>la</strong> y c<strong>la</strong>ra.Encontraréis los objetivosde los fundamentos de <strong>la</strong><strong>programación</strong> en el apartado 3de este módulo.1.1. DefinicionesSituémonos primero en uno de los conceptos más importantes con los que trabajaremos:el concepto de algoritmo.Definición de algoritmosegún el diccionarioSegún el Diccionario de <strong>la</strong>Lengua Españo<strong>la</strong> de <strong>la</strong> R.A.E,algoritmo es:“Conjunto ordenado y finito deoperaciones que permite hal<strong>la</strong>r<strong>la</strong> solución de un problema.”Un algoritmo se define como una descripción no ambigua y precisa de<strong>la</strong>s acciones que hay que realizar para resolver un problema bien definidoen un tiempo finito.Por lo tanto, podemos pensar en un algoritmo como una receta o guión quehay que seguir para resolver un problema determinado, normalmente a partirde una información que tenemos de entrada (por ejemplo, una receta para cocinarun p<strong>la</strong>to). Un algoritmo, sin embargo, es un método general para resolvertodos los casos posibles del mismo problema y, por lo tanto, debe serindependiente de los datos de entrada de cualquier caso concreto.Para comprender completamente este concepto de algoritmo, será preciso definirahora los conceptos entorno, acción, proceso y procesador.El entorno es el conjunto de objetos necesario para llevar a cabo una tarea determinada.El estado del entorno en un momento determinado es <strong>la</strong> descripcióndel estado de los objetos del entorno en aquel momento concreto. Unalgoritmo actúa de manera que hace cambiar progresivamente el estado de suentorno.Una acción es un suceso finito en el tiempo y que tiene un efecto definido yprevisto. Una acción puede actuar sobre un entorno y lo puede modificar, esdecir, se parte de un estado inicial y se llega a un estado final diferente. Unaacción elemental es una acción que el destinatario de un algoritmo entiendey sabe procesar.Ejemplo de entornoy estadoEn el caso de una receta decocina, el entorno estaría conformadopor los utensilios decocina (ol<strong>la</strong>s, sartenes, etc.)y los ingredientes.El estado de <strong>la</strong>s sartenes, porejemplo, cambiará de limpiasa sucias.Un proceso es <strong>la</strong> ejecución de una o varias acciones. El algoritmo expresa unaspautas que hay que seguir para llevar a cabo una tarea concreta. El encargadode llevar a cabo el proceso es el procesador. Un procesador es una entidad ca-


© FUOC • P05/75062/00108 8 <strong>Introducción</strong> a <strong>la</strong> <strong>programación</strong>paz de comprender y ejecutar eficazmente un algoritmo. El destinatario del algoritmoes, pues, el procesador.Un procesador puede seruna persona, una <strong>la</strong>vadora,un ordenador, etc.Ahora que ya sabemos qué es un algoritmo, debemos decidir cómo lo expresamos.Deberemos encontrar un lenguaje que nos permita realizar una descripciónno ambigua y precisa de <strong>la</strong>s acciones que componen nuestros algoritmos.Denominamos lenguaje natural el lenguaje que normalmente utilizamospara comunicarnos. No obstante, debido a su complejidad y ambigüedad, veremosque el lenguaje natural no nos permite definir <strong>la</strong>s acciones con <strong>la</strong> precisióny c<strong>la</strong>ridad que queremos. En realidad, si nosotros actuamos comoprocesadores de alguien que nos indica cómo hay que realizar una tarea, a menudopedimos puntualizaciones y ac<strong>la</strong>raciones de qué hay que hacer.La lengua españo<strong>la</strong> o <strong>la</strong> inglesaserían ejemplos de lenguajesnaturales.Necesitamos, pues, un lenguaje más reducido y preciso. En los módulos siguientesdescribiremos un lenguaje concreto creado ex professo para poder expresarcualquier algoritmo con <strong>la</strong> c<strong>la</strong>ridad y precisión necesarias. Lo denominaremoslenguaje algorítmico o notación algorítmica.En esta asignatura nos dedicaremos a aprender <strong>la</strong>s técnicas básicas para diseñaralgoritmos. Por lo tanto, necesitaremos aprender este lenguaje algorítmico queacabamos de mencionar. En el módulo “<strong>Introducción</strong> a <strong>la</strong> algorítmica”, describiremosel lenguaje algorítmico, y en los módulos siguientes aprenderemos autilizarlo de manera progresiva, conjuntamente con <strong>la</strong>s técnicas para el diseñode algoritmos.Lenguajes no naturalesNo es <strong>la</strong> primera vez que osencontráis en <strong>la</strong> situaciónde tener que utilizar una nuevanotación (diferente del lenguajenatural) para expresarconceptos; por ejemplo, estáismuy acostumbrados a utilizar<strong>la</strong> notación matemática(+, −, >, log, etc.).Una vez hemos llegado a este punto, ya hemos definido <strong>la</strong> mayoría de los conceptosprincipales con los que trabajaremos; y prestad atención al hecho deque, curiosamente, todavía no hemos hab<strong>la</strong>do de programas.Definiremos un programa en re<strong>la</strong>ción con todo lo que hemos definido hastaahora. Para hacerlo, necesitamos ac<strong>la</strong>rar también qué es un ordenador ocomputador.Aunque ya tenemos una idea de lo qué es, un ordenador se puede definirformalmente como una máquina compuesta por circuitos electrónicosque tiene <strong>la</strong> capacidad de resolver problemas bajo el control de unasinstrucciones dadas. Un ordenador está formado básicamente por unprocesador, <strong>la</strong> memoria y los dispositivos de entrada y salida que permitensu comunicación con el exterior.Ejemplos de lenguajesde <strong>programación</strong>Algunos lenguajes de <strong>programación</strong>son Pascal, C, C++, Cobol,Fortran, VisualBasic, Java, etc.El ordenador procesará nuestros algoritmos, pero para hacerlo es necesarioque entienda nuestro lenguaje algorítmico. Será preciso, pues, transcribirnuestros algoritmos a un lenguaje de <strong>programación</strong>, es decir, a un lenguaje capazde ser comprendido por un ordenador.Otra definiciónde ordenadorEn este punto, podemos definirtambién un ordenadorcomo un autómata de cálculogobernado por un programa.


© FUOC • P05/75062/00108 9 <strong>Introducción</strong> a <strong>la</strong> <strong>programación</strong>Así pues, un programa es sólo <strong>la</strong> codificación de un algoritmo en un lenguajeque el ordenador entienda.Para expresar y diseñar algoritmos, siempre utilizamos <strong>la</strong> notación algorítmica;por otro <strong>la</strong>do, el uso y <strong>la</strong> definición de lenguajes de <strong>programación</strong> estánsujetos a factores de disponibilidad, tecnología actual, etc.En esta asignatura, a medida que aprendamos a diseñar algoritmos con nuestrolenguaje algorítmico, aprenderemos también a implementarlos en un lenguajede <strong>programación</strong> para que se puedan ejecutar en nuestro ordenador.Básicamente, hay dos tipos de lenguajes de <strong>programación</strong>: los lenguajes imperativoso lenguajes procedimentales y los dec<strong>la</strong>rativos, que a <strong>la</strong> vez se dividenen lenguajes funcionales y lenguajes lógicos.En <strong>la</strong> <strong>programación</strong> imperativa, los programas son secuencias de instruccionesque deben llevarse a cabo como una receta o guión para resolverun problema determinado.Los materiales correspondientesa <strong>la</strong> codificación en un lenguaje de<strong>programación</strong> los encontraréis en el au<strong>la</strong>.Con el estudio de estos materialespodréis implementar programas. Osaconsejamos que empecéis a partirde los diseños que encontraréis en estosmódulos.En esta asignatura estudiaremos sólo <strong>la</strong> <strong>programación</strong> imperativa, que tradicionalmenteha sido <strong>la</strong> más extendida y utilizada.Algunos lenguajes de <strong>programación</strong> facilitan el seguimiento de una metodologíaconcreta de <strong>programación</strong>. Una de <strong>la</strong>s más ampliamente aceptada actualmentees <strong>la</strong> orientación a objetos*.La orientación a objetos determina un estilo de <strong>programación</strong> que secaracteriza por el modo de manipu<strong>la</strong>r <strong>la</strong> información.Ejemplos de lenguajesde <strong>programación</strong>a) Ejemplos de lenguajesimperativos: Pascal, Cobol y C.b) Ejemplos de lenguajesdec<strong>la</strong>rativos:• Lenguajes funcionales: Lisp.• Lenguajes lógicos: Prolog.* Por ejemplo, C++, Object Pascalson, respectivamente,extensiones de C y Pascal quefacilitan el uso de estametodología.En asignaturas posteriores veréis el paradigma de <strong>la</strong> orientación a objetos aplicadoa <strong>la</strong> <strong>programación</strong>. En esta asignatura introducimos los fundamentos básicosen los que iréis profundizando más ade<strong>la</strong>nte. Prestad atención al hechode que lo realmente importante es llegar a saber diseñar un algoritmo que resuelvaun problema determinado. El hecho de codificarlo para obtener el programacorrespondiente consiste, simplemente, en realizar una traducción.En <strong>la</strong> asignatura Programaciónorientada al objeto se explicaráen qué consiste <strong>la</strong> <strong>programación</strong>bajo el paradigma de <strong>la</strong> orientacióna objetos.El lenguaje algorítmico que definiremos y utilizaremos para diseñar algoritmoses suficientemente genérico como para que resulte bastante sencillo realizar<strong>la</strong> codificación en cualquier lenguaje de <strong>programación</strong> imperativo.A medida que avancéis en esta materia, entenderéis más a fondo algunas deestas definiciones que puede ser que inicialmente no os queden completamentec<strong>la</strong>ras. Por lo tanto, conviene que repaséis continuamente este módulo.


© FUOC • P05/75062/00108 10 <strong>Introducción</strong> a <strong>la</strong> <strong>programación</strong>1.2. EjemplosEn este subapartado veremos algunos ejemplos que nos permitirán ac<strong>la</strong>rar demanera intuitiva los conceptos que acabamos de definir.En realidad, algunos de los conceptos que hemos visto son aplicables a cualquierentorno del mundo real, no están restringidos al entorno de <strong>la</strong> informática.Podríamos pensar en una <strong>la</strong>vadora como un autómata, ya que es una máquinacapaz de realizar una tarea de manera autónoma, en este caso, <strong>la</strong>var <strong>la</strong> ropa.Si pedimos a nuestra <strong>la</strong>vadora que nos <strong>la</strong>ve <strong>la</strong> ropa b<strong>la</strong>nca, <strong>la</strong> <strong>la</strong>vadora seguiráel proceso siguiente:• Utilizar el agua y el jabón del cajón.• Calentar el agua a 40 grados.• Dar vueltas durante 20 minutos (<strong>la</strong>var).• Expulsar el agua.• Tomar más agua.• Dar vueltas durante 10 minutos (primer ac<strong>la</strong>rado).• Expulsar el agua.…• Dar vueltas durante 10 minutos (cuarto ac<strong>la</strong>rado).• Expulsar el agua.• Dar vueltas muy rápidamente durante 1 minuto (centrifugar).Todo este conjunto de acciones que <strong>la</strong> <strong>la</strong>vadora ha llevado a cabo sería el algoritmoque este aparato sigue para <strong>la</strong>var <strong>la</strong> ropa b<strong>la</strong>nca.Si ahora pedimos que nos <strong>la</strong>ve <strong>la</strong> ropa delicada, <strong>la</strong>s acciones que ejecutará <strong>la</strong> <strong>la</strong>vadoraserán seguramente diferentes (por ejemplo, <strong>la</strong> temperatura será inferior,el tiempo de <strong>la</strong>vado será más corto, habrá menos ac<strong>la</strong>rados, etc.); esto equivalea decir que el algoritmo para <strong>la</strong>var <strong>la</strong> ropa delicada es diferente del algoritmopara <strong>la</strong>var ropa b<strong>la</strong>nca.Otros ejemplosde algoritmosDel mismo modo que en el casomencionado de <strong>la</strong> <strong>la</strong>vadora,también podríamos pensar enun algoritmo que resuelva elproblema de cocinar una tortil<strong>la</strong>de patatas, el de cambiar unarueda de un coche, el de construirun edificio, el de preparar <strong>la</strong>dec<strong>la</strong>ración de <strong>la</strong> renta, el demultiplicar dos matrices, etc.Así pues, un algoritmo nos indica <strong>la</strong>s acciones que hay que seguir pararesolver un problema concreto, pero necesitamos un autómata (procesador)que sea capaz de ejecutarlo y un entorno afectado (ropa, agua,bombo, etc.).También es importante observar el hecho de que puede haber más de un algoritmoque resuelva el mismo problema, así como algún problema para el queno existe ningún algoritmo que lo solucione.Es importante que recordéisesto cuando hablemos de <strong>la</strong>especificación, en el módulo“<strong>Introducción</strong> a <strong>la</strong> algorítmica”de esta asignatura.Observad también que es necesario que se cump<strong>la</strong>n unas condiciones inicialespara que el problema se resuelva correctamente (que <strong>la</strong> ropa b<strong>la</strong>nca esté dentro


© FUOC • P05/75062/00108 11 <strong>Introducción</strong> a <strong>la</strong> <strong>programación</strong>de <strong>la</strong> <strong>la</strong>vadora, que <strong>la</strong> <strong>la</strong>vadora esté conectada a <strong>la</strong> corriente eléctrica y a <strong>la</strong> entradadel agua, así como que haya jabón en el cajón). Para poder llegar al estadofinal deseado, que en nuestro caso sería tener <strong>la</strong> ropa limpia al final, elentorno debería estar en este estado inicial. Si no partimos del estado inicialcorrecto, seguramente no conseguiremos nuestro objetivo (pensad, por ejemplo,que si <strong>la</strong> <strong>la</strong>vadora está conectada a <strong>la</strong> corriente, nuestro algoritmo no daráel resultado esperado).Volviendo a nuestro entorno, el ordenador es el autómata que debe ser capazde resolver los problemas que le p<strong>la</strong>nteemos*.* Por ejemplo, que nos calcule<strong>la</strong> media de cuatro númerosenteros determinados.Un algoritmo en el lenguaje natural para resolver el problema podría ser el siguiente:“Sumad los cuatro números que nos han dado y dividid el resultadode esta suma por cuatro para obtener el resultado final”.Ahora veremos cómo se expresaría este algoritmo en lenguaje algorítmico. Posteriormente,podríamos implementar este algoritmo en un lenguaje de <strong>programación</strong>y ejecutarlo en nuestro ordenador.algoritmo media;varn, suma, i: entero;resultado: real;fvarsuma := 0;i := 1;mientras i ≤ 4 hacerleerEntero(n);suma := suma + n;i := i + 1fmientrasresultado := enteroAReal(suma)/4.0;escribirReal(resultado)falgoritmo


© FUOC • P05/75062/00108 12 <strong>Introducción</strong> a <strong>la</strong> <strong>programación</strong>2. La <strong>programación</strong> como disciplina de ingenieríaTodo lo que estudiaremos en esta asignatura debe servirnos para aprender aprogramar correctamente. Veamos, pues, como motivación para el estudio de<strong>la</strong> <strong>programación</strong>, qué se hace en el mundo real.Actualmente, <strong>la</strong> <strong>programación</strong> se considera una disciplina que, igual queotras disciplinas de ingeniería, se fundamenta en una teoría, una propuestametodológica y un conjunto de técnicas de diseño.Cada una de estas partes de <strong>la</strong> disciplina ha surgido de <strong>la</strong> investigación y experienciaadquiridas en los últimos años y contribuye a hacer que <strong>la</strong> <strong>programación</strong>sea una tarea eficaz (que dé los resultados esperados) y eficiente (en untiempo de desarrollo razonable).Evidentemente, en un entorno industrial competitivo, <strong>la</strong> eficacia y <strong>la</strong> eficienciason valores muy apreciados en <strong>la</strong>s empresas. Precisamente por este motivo<strong>la</strong> asignatura se orienta a aprender a programar de manera eficiente y a adquirircierto grado de destreza a <strong>la</strong> hora de construir programas correctos en un tiemporazonable. No obstante, para conseguirlo necesitaréis practicar mucho.Para comprender mejor los objetivos concretos de <strong>la</strong> asignatura, veremos ahora agrandes rasgos cuáles son <strong>la</strong>s etapas que clásicamente se siguen para desarrol<strong>la</strong>run programa.Encontraréis los objetivos quese especifican en el apartado 3de este módulo didáctico.2.1. Etapas en el desarrollo de un programaPara obtener un programa que resuelva un problema, hay que pasar por <strong>la</strong>s siguientesetapas:1. Análisis de requerimientos. Definición del problema2. Diseño del algoritmo3. Implementación del programa4. Pruebas5. Operación, mejoras y mantenimientoObservaciónRecordad que nos movemosdentro del paradigma de<strong>la</strong> <strong>programación</strong> imperativa. Sisiguiésemos otros tipos de <strong>programación</strong>,el ciclo de desarrollopodría ser ligeramentediferente.Después de <strong>la</strong> etapa de pruebas, ya tenemos un programa disponible para empezara operar. Sin embargo, como resultado de su explotación y mantenimiento,es posible que sea necesario llevar a cabo mejoras o cambios, en definitiva,modificaciones que generalmente provocan tener que retroceder a algunas etapasprevias del desarrollo.


© FUOC • P05/75062/00108 13 <strong>Introducción</strong> a <strong>la</strong> <strong>programación</strong>Por motivos de eficiencia, <strong>la</strong>s empresas quieren que el desarrollo de cada unade <strong>la</strong>s etapas se efectúe de manera secuencial en el tiempo y que ninguna etapaobligue a retroceder a <strong>la</strong> anterior (excepto, como ya hemos indicado, <strong>la</strong> última).Actualmente se dispone de conocimientos suficientes para que esto se pueda llevara cabo.En los subapartados siguientes describiremos cada una de <strong>la</strong>s etapas.2.1.1. Análisis de requerimientos. Definición del problemaUno o varios clientes p<strong>la</strong>tean un problema que necesita una solución mediante<strong>la</strong> construcción de un programa. De entrada, hay que realizar un análisis delproblema, que puede ser <strong>la</strong>borioso, ya que a veces el problema es difícil de comprender.Una vez que se ha ac<strong>la</strong>rado el problema, se realiza un análisis minuciosode los requerimientos que ayudarán a definir el problema que queremosresolver.El resultado de <strong>la</strong> etapa de análisis de requerimientos y definición delproblema será un enunciado preciso y c<strong>la</strong>ro del problema que hay queresolver.En esta asignatura no estudiaremos esta etapa (no se puede aprender todo degolpe), ya tendréis <strong>la</strong> oportunidad más ade<strong>la</strong>nte en asignaturas posteriores.Por lo tanto, partiremos siempre de un enunciado ya completo, c<strong>la</strong>ro y concreto,y nos centraremos en <strong>la</strong>s tres etapas que describiremos a continuación.2.1.2. Diseño del algoritmoA partir del enunciado debemos realizar un diseño que nos lleve a <strong>la</strong> solucióndeseada.Progresivamente, a lo <strong>la</strong>rgo de cada módulo aprenderéis <strong>la</strong>s técnicas, herramientasy metodologías adecuadas para poder realizar esta etapa con eficaciay eficiencia. La representación del diseño se realizará mediante el lenguaje algorítmicoque se expone básicamente en el módulo “<strong>Introducción</strong> a <strong>la</strong> algorítmica”de esta asignatura.Como veremos, ésta es una de <strong>la</strong>s etapas más importantes y costosas dentrodel desarrollo de un programa. Además, los objetivos de esta asignatura se centranprincipalmente en el aprendizaje de esta etapa. Por lo tanto, en el últimoapartado de este módulo veremos con más detalle en qué consiste el diseño deun algoritmo.


© FUOC • P05/75062/00108 14 <strong>Introducción</strong> a <strong>la</strong> <strong>programación</strong>2.1.3. Implementación del programaImplementar significa llevar a cabo. El resultado del diseño es un algoritmo, pero,para ejecutarlo deberá traducirse el diseño realizado en lenguaje algorítmicoa un lenguaje de <strong>programación</strong> que el ordenador entienda. Esta etapa essencil<strong>la</strong>, puesto que sólo se trata de una traducción bastante mecánica del diseñoya realizado para obtener el programa correspondiente, que podremosejecutar en el ordenador.Ejemplo de implementación del lenguajeSi elegimos implementar nuestros algoritmos en C, sólo necesitaremos conocer <strong>la</strong> sintaxis y<strong>la</strong> semántica del lenguaje C, y <strong>la</strong> manera como se traduce cada operación del lenguaje algorítmicoen <strong>la</strong> sentencia correspondiente en C.Podremos traducir sin ninguna dificultad a lenguajes de <strong>programación</strong> imperativoscualquier diseño que hayamos realizado en lenguaje algorítmico. Simplementedeberéis establecer <strong>la</strong>s reg<strong>la</strong>s de traducción al lenguaje elegido y proceder.Aprenderéis <strong>la</strong> etapa deimplementación en el lenguajede <strong>programación</strong> elegido paracodificar los algoritmos en <strong>la</strong> partepráctica de <strong>la</strong> asignatura. El materialde esta parte práctica no está incluido enestos módulos, sino que lo encontraréisen el au<strong>la</strong>.2.1.4. PruebasFinalmente, será necesario detectar posibles errores en nuestros programas.En <strong>la</strong> etapa de pruebas se trata de probar el programa resultante con diferentesdatos de entrada que reciben el nombre de juegos de pruebas.El éxito de estas pruebas dependerá en gran medida de <strong>la</strong> calidad del diseñorealizado antes.No obstante, tened en cuenta que los juegos de pruebas sólo sirven para comprobarque el programa no es correcto (si algún juego de pruebas no da los resultadosesperados), pero no para asegurar que sí lo es (excepto que se comprueben todas<strong>la</strong>s entradas posibles, que es prácticamente imposible).En realidad, aunque en esta asignatura no los estudiaremos, hay métodos formalesde verificación que permiten demostrar <strong>la</strong> corrección de un algoritmo –y, porlo tanto, del programa correspondiente– a partir de <strong>la</strong> especificación formal de susrequerimientos. De este modo, se podría afirmar con toda seguridad que el programacumple sus objetivos.De todas formas, ante <strong>la</strong> falta de verificación formal de algoritmos, en esta asignaturase dan técnicas y pautas metodológicas que pueden conducir al convencimientode que se ha realizado un diseño correcto, y <strong>la</strong> e<strong>la</strong>boración de un juegode pruebas bueno y exhaustivo* confirmará nuestras pretensiones con una seguridadalta. Sin embargo, tened en cuenta que <strong>la</strong> seguridad en <strong>la</strong> corrección nosviene dada mediante dos etapas, <strong>la</strong> primera (diseño) es <strong>la</strong> más estratégica, y <strong>la</strong>segunda (implementación y prueba con un juego de pruebas exhaustivo) es <strong>la</strong> deconfirmación.Corrección del programaLa mejor forma de asegurarque el programa es correctoes estar convencidos de <strong>la</strong> correcciónen <strong>la</strong> etapa de diseño.La metodología y <strong>la</strong>s pautasde algoritmos que se proponenen los módulos siguientesos ayudarán a alcanzar <strong>la</strong>corrección del diseño.* Por ejemplo, se pueden considerarlos casos extrañoso extremos.


© FUOC • P05/75062/00108 15 <strong>Introducción</strong> a <strong>la</strong> <strong>programación</strong>2.1.5. Operación, mejoras y mantenimientoPodéis pensar que, una vez obtenido y probado el programa, el proceso ya hafinalizado. Pero de <strong>la</strong> misma manera que todavía se diseñan coches nuevos,<strong>la</strong>vadoras nuevas, etc., los programas también cambian para mejorar o adaptarsea <strong>la</strong>s nuevas necesidades, y por esta razón se vuelve a reproducir todo elproceso desde el principio.Si <strong>la</strong> nueva mejora obliga a modificar partes del programa o si, por cuestiones demantenimiento, hay que hacer correcciones, esto sólo se puede llevar a cabo coneficiencia si el diseño del programa se realiza de manera inteligible.Un programa se escribe una vez, pero se lee muchas veces más. Conviene, pues,e<strong>la</strong>borar diseños c<strong>la</strong>ros, comprensibles y sencillos para que ayuden a hacer queesta etapa sea eficiente y eficaz.El diseño también deberá estar bien documentado. Por lo tanto, será necesarioaprender a documentar correctamente los programas y saber distinguir entreuna documentación buena y una documentación que no aporta nada.2.2. Conclusiones y motivaciónLas etapas anteriores tienen costes muy diferentes:1) El análisis de requerimientos es una de <strong>la</strong>s más costosas, ya que dependede muchos factores entre los que, además de los puramente técnicos, se encuentranlos sociológicos y económicos.2) La etapa de diseño es costosa y hay que dedicarle todos los esfuerzos quesean necesarios, puesto que de <strong>la</strong> calidad de ésta dependerá el coste y el éxitodel resto de <strong>la</strong>s etapas.3) La etapa de implementación es actualmente <strong>la</strong> menos costosa de todo el desarrollo,puesto que, como ya hemos dicho, es una traducción bastante directa.Conocer perfectamente un lenguaje de <strong>programación</strong> no significa saber programar.Conocer un lenguaje de <strong>programación</strong> es conocer <strong>la</strong> herramienta apartir de <strong>la</strong> que podremos implementar el diseño del programa. Así, pues, debemosesforzarnos a saber diseñar correctamente los programas, el resto seráuna tarea mucho menos costosa.4) El coste de <strong>la</strong> etapa de pruebas depende de <strong>la</strong> complejidad que tenga el programay de que <strong>la</strong>s etapas anteriores se hayan llevado a cabo correctamente.En cualquier caso, recordad que en esta etapa no se puede estar nunca segurodel funcionamiento correcto y que <strong>la</strong> realización de un buen diseño ayudaráa tener <strong>la</strong> seguridad de que el programa implementado funciona correctamen-La importanciade <strong>la</strong> correcciónEn algunas aplicaciones, como<strong>la</strong> hospita<strong>la</strong>ria o <strong>la</strong> informáticade control de una centralnuclear, los errores puedentener efectos dramáticos.


© FUOC • P05/75062/00108 16 <strong>Introducción</strong> a <strong>la</strong> <strong>programación</strong>te. Tal vez pensaréis que esto es un poco exagerado, pero no es así. Tened presenteque los errores de un programa en funcionamiento pueden detener <strong>la</strong>producción de una gran empresa, con los graves prejuicios económicos que estopuede ocasionar.Podríamos pensar que, cuando ya sabemos cómo se desarrol<strong>la</strong> un programa enuna empresa y una vez e<strong>la</strong>borados algunos programas, ya sabemos programar,pero con esto no es suficiente. Para ser buenos programadores, capaces de afrontarproblemas de gran envergadura como los que encontraremos en el mundoprofesional, será necesario adquirir mucha destreza en <strong>la</strong> aplicación de los métodosy <strong>la</strong>s técnicas que expondremos. Esta asignatura y <strong>la</strong>s que <strong>la</strong> siguen, combinadascon <strong>la</strong> práctica continua, os permitirán alcanzar esta habilidad para serbuenos profesionales.Aficionados y profesionales de <strong>la</strong> <strong>programación</strong>Alguien podría decir que sabe jugar a tenis porque alguna vez ha <strong>la</strong>nzado una pelota conuna raqueta. Pero para llegar a ser un profesional de alto nivel deberá tener destreza enun conjunto de técnicas y métodos que deberá dominar para ser competitivo. En realidad,es muy poco frecuente, por no decir nada frecuente, ver a un aficionado en un partidode tenis de alto nivel. Lo mismo sucede en el mundo de <strong>la</strong> <strong>programación</strong>.


© FUOC • P05/75062/00108 17 <strong>Introducción</strong> a <strong>la</strong> <strong>programación</strong>3. Objetivos de <strong>la</strong> asignaturaEn esta asignatura nos centraremos básicamente en el diseño de algoritmos ysu posterior implementación a un lenguaje de <strong>programación</strong> imperativo paraobtener el programa correspondiente.Como ya sabemos...... <strong>la</strong> etapa de diseño es unade <strong>la</strong>s más costosas en el desarrollode un programa.A partir de un enunciado concreto, deberemos aprender a realizar el diseño deun algoritmo. Por otro <strong>la</strong>do, también hemos visto que puede haber más de unalgoritmo que solucione un mismo problema. Por lo tanto, debemos tener unoscriterios c<strong>la</strong>ros para elegir el algoritmo más adecuado en cada caso.Un algoritmo adecuado será el que presente <strong>la</strong>s siguientes características:a) Corrección: el algoritmo hace lo que realmente se pide.b) Inteligibilidad: el algoritmo debe ser c<strong>la</strong>ro y fácil de entender, puesto quese escribirá una so<strong>la</strong> vez, pero será necesario leerlo muchas más veces para podermantenerlo y/o modificarlo.c) Eficiencia: el algoritmo debe llevar a cabo <strong>la</strong> tarea que se le ha encargado enun tiempo razonable.d) Generalidad: con pocos cambios, el algoritmo se debe poder adaptar a otrosenunciados parecidos.Cuando diseñéis vuestros algoritmos, tened en cuenta siempre estos cuatro criterios.La metodología que propondremos en esta asignatura os ayudará a diseñaralgoritmos que los cump<strong>la</strong>n. Sin embargo, pensad también que no sólo hayque seguir <strong>la</strong> metodología, sino que, para alcanzar una cierta destreza en el diseño,es necesaria bastante práctica, puesto que tanto los conceptos como <strong>la</strong> metodologíanecesitan un tiempo de asimi<strong>la</strong>ción, y esto sólo se consigue mediante<strong>la</strong> práctica continua.3.1. Etapas del diseño de un algoritmoLas etapas para diseñar un algoritmo son prácticamente <strong>la</strong>s mismas que se necesitanpara resolver cualquier problema de otras disciplinas. Básicamente son<strong>la</strong>s siguientes:1) Entender el problema: si no entendemos el problema, difícilmente lo podremosresolver. La especificación formal de los algoritmos es una buena herramientapara alcanzar esta etapa rigurosamente y evitar ambigüedades.


© FUOC • P05/75062/00108 18 <strong>Introducción</strong> a <strong>la</strong> <strong>programación</strong>No obstante, en esta asignatura utilizaremos el lenguaje natural para especificarnuestros algoritmos. Por lo tanto, será una especificación informal y deberemosintentar expresar<strong>la</strong> sin ambigüedad y con rigor. En el algoritmo resultante, <strong>la</strong>especificación aparecerá en forma de comentarios.2) P<strong>la</strong>ntear/p<strong>la</strong>nificar <strong>la</strong> solución: <strong>la</strong> metodología propuesta (básicamentelos esquemas de recorrido y búsqueda, y el análisis descendente) nos permitiráefectuar de manera eficiente esta etapa y facilitará el resto de <strong>la</strong>s mismas.La especificación dealgoritmos se describeen el módulo “<strong>Introducción</strong>a <strong>la</strong> algorítmica” de esta asignatura.Los esquemas de recorridoy búsqueda se estudian en elmódulo “Tratamiento secuencial”y <strong>la</strong> técnica de diseño descendenteen el módulo “<strong>Introducción</strong> a <strong>la</strong>metodología del diseño descendente“de esta asignatura.3) Formu<strong>la</strong>r <strong>la</strong> solución: <strong>la</strong> notación o lenguaje algorítmico nos permitirádefinir el algoritmo con precisión y sin ambigüedades.El lenguaje algorítmico se describeen el módulo “<strong>Introducción</strong> a <strong>la</strong>algorítmica” de esta asignatura.4) Evaluar <strong>la</strong> corrección de <strong>la</strong> solución propuesta: <strong>la</strong> inteligibilidad del algoritmo,junto con <strong>la</strong> aplicación de los esquemas, nos permitirá estar casi segurosde <strong>la</strong> corrección del algoritmo. La especificación (precondiciones, poscondiciones,etc.) del algoritmo también nos ayudará, además, a razonar sobre <strong>la</strong> correccióndel algoritmo.3.1.1. Entender el problemaHay que asegurarse de que hemos leído correctamente el enunciado. Hay que saberqué se pide y de qué estado inicial se parte. En esta etapa se pretende ordenarideas, identificando cuáles son <strong>la</strong>s condiciones iniciales, que denominaremosLa especificación de algoritmos seestudia en el módulo “<strong>Introducción</strong>a <strong>la</strong> algorítmica” de esta asignatura.precondición, y a partir de aquí establecer el objetivo que se quiere alcanzar, quedenominaremos poscondición.Cuando definimos los objetivos y <strong>la</strong>s condiciones iniciales, no podemospermitir ninguna ambigüedad. La especificación consistirá precisamenteen esto.Un algoritmo es una descripción c<strong>la</strong>ra y precisa de acciones que hay que realizarpara resolver un problema bien definido en un tiempo finito. El algoritmodebe solucionar estrictamente lo que pide el enunciado, ni más ni menos.Así pues, en esta etapa hay que fijar <strong>la</strong>s ideas que nos permitirán continuar en<strong>la</strong>s etapas sucesivas.No nos debemos preocupar de cómo lo haremos, sino de qué debemos hacer,qué tenemos inicialmente y qué queremos obtener.Ejemplos de especificación del problemaEl objetivo de una <strong>la</strong>vadora es <strong>la</strong>var <strong>la</strong> ropa que hemos introducido en <strong>la</strong> misma. Para alcanzareste objetivo es necesario que esté conectada a <strong>la</strong> corriente y al suministro de agua;pero en ningún momento hemos pensado cómo actúa <strong>la</strong> <strong>la</strong>vadora.En el módulo “<strong>Introducción</strong> a <strong>la</strong> algorítmica” profundizaremos en este concepto y veremosque este ejemplo es bastante simple.


© FUOC • P05/75062/00108 19 <strong>Introducción</strong> a <strong>la</strong> <strong>programación</strong>3.1.2. P<strong>la</strong>ntear y p<strong>la</strong>nificar <strong>la</strong> soluciónÉsta es <strong>la</strong> etapa de diseño a <strong>la</strong> que hay que dedicar más tiempo.Lo primero que hay que hacer es ver si el problema corresponde a untipo de problema que ya se ha estudiado en <strong>la</strong> teoría. Si es así, se aplicanlos esquemas conocidos para resolverlo de una manera segura y rápida.En el módulo “Tratamientosecuencial” de esta asignaturase estudian diferentes esquemasde resolución para algunos tipos deproblemas.Tened en cuenta que si no aplicáis los esquemas teóricos de resolución, tardaréismás en encontrar <strong>la</strong> solución, ya que deberéis redescubrir por vosotrosmismos <strong>la</strong> teoría y, además, no estaréis completamente seguros de <strong>la</strong> soluciónque proponéis.Para resolver problemas complejos, no será suficiente con <strong>la</strong> aplicación de esquemas,por lo que será necesario aplicar <strong>la</strong> metodología de diseño descendente.Esta metodología nos permitirá abordar problemas de mayor complejidady convertirá el problema complejo en un conjunto de problemas menores alos que podremos aplicar lo que hayamos aprendido para problemas de menorcomplejidad.La técnica de diseño descendentese ve en el módulo “<strong>Introducción</strong>a <strong>la</strong> metodología del diseñodescendente”, en el quesabremos en qué consiste.3.1.3. Formu<strong>la</strong>r <strong>la</strong> soluciónLa notación algorítmica nos permite expresar de manera precisa y c<strong>la</strong>rael algoritmo que proponemos.El objetivo básico del módulosiguiente será precisamenteexponeros <strong>la</strong> sintaxisy semántica de estelenguaje algorítmico.Para hacerlo, hay que conocer perfectamente <strong>la</strong> sintaxis y <strong>la</strong> semántica de loselementos del lenguaje algorítmico propuesto. Sin este conocimiento, difícilmentepodríamos proponer o expresar con precisión el algoritmo definitivo.La formu<strong>la</strong>ción del algoritmo es el resultado de aplicar correctamente <strong>la</strong>metodología sugerida, y no de <strong>la</strong> combinación más o menos caprichosa delos elementos y/o construcciones del lenguaje algorítmico. Es decir, en <strong>la</strong>etapa anterior hemos pensado el diseño más allá de los elementos del lenguajealgorítmico.3.1.4. Evaluar <strong>la</strong> corrección de <strong>la</strong> soluciónRealizar el seguimiento de un algoritmo para un caso concreto de datos de entradano nos permite asegurar que el algoritmo funciona para todos los casos.


© FUOC • P05/75062/00108 20 <strong>Introducción</strong> a <strong>la</strong> <strong>programación</strong>La metodología propuesta en los módulos de esta asignatura, juntamente con<strong>la</strong> especificación informal que comentaremos en <strong>la</strong>s partes del algoritmo diseñado,nos permitirá razonar sobre <strong>la</strong> corrección de este diseño.3.2. Implementación de un programaUna vez tengamos el diseño del algoritmo, lo codificaremos para obtener unprograma. La codificación se debe introducir en el ordenador en el lenguajede <strong>programación</strong> elegido mediante un editor que creará un fichero de textodenominado fichero fuente.Esta etapa se aprende con <strong>la</strong>sprácticas del <strong>la</strong>boratorio y con <strong>la</strong>ayuda de material complementariode estos módulos. Este material osenseñará a traducir <strong>la</strong>s sentencias dellenguaje algorítmico al lenguaje de<strong>programación</strong> elegido y a utilizar elsoftware necesario (editor y compi<strong>la</strong>dor)para ejecutar vuestros programas.El texto que hemos introducido no es directamente ejecutable por el ordenador;para poderlo ejecutar, debemos convertirlo en instrucciones que el procesadorpueda entender directamente. El encargado de realizar esta tarea es unprograma denominado compi<strong>la</strong>dor, que traducirá el código fuente a un códigoque el ordenador comprenda.Posteriormente, otro programa se encargará de efectuar el montaje y obtenerun fichero que se pueda ejecutar y probar. Uno de los objetivos del programamontador es realizar <strong>la</strong> adaptación del código generado en el entorno del ordenadorpara que se pueda ejecutar.Resumiendo, <strong>la</strong>s etapas de implementación de un programa son <strong>la</strong>s siguientes:traducir el algoritmo al lenguaje de <strong>programación</strong>, editar elprograma, compi<strong>la</strong>rlo, montarlo y ejecutarlo.En <strong>la</strong> etapa de compi<strong>la</strong>ción pueden surgir errores de sintaxis del lenguaje de<strong>programación</strong> y será necesario volver a editar el programa para corregirlos.Una vez superados los errores de compi<strong>la</strong>ción, el montaje no debería ocasionarningún problema.Para <strong>la</strong> etapa de ejecución, es muy positivo diseñar un buen juego de pruebas queincluya todas <strong>la</strong>s posibilidades que pensamos que el programa debe afrontar.Cuando se producen errores en <strong>la</strong> ejecución del programa, seguramente no seha realizado correctamente alguna de <strong>la</strong>s etapas previas.Podríamos caer en <strong>la</strong> tentación de realizar <strong>la</strong>s etapas al revés o de saltarnosalguna. Es decir, editar un programa directamente, compi<strong>la</strong>rlo, ejecutarlo y,si funciona, hacer el diseño. Este sistema, conocido como ensayo y error, creaprogramas complicados a causa de <strong>la</strong>s modificaciones introducidas en <strong>la</strong> ideaoriginal durante cada fracaso del programa. Como consecuencia, el programaresulta poco o nada inteligible. Recordad que <strong>la</strong> <strong>programación</strong> es una dis-Aparición de errores en <strong>la</strong>ejecución del programaEn <strong>la</strong> ejecución del programapueden aparecer errores porqueno nos hemos fijado bienen <strong>la</strong> traducción o en <strong>la</strong> edicióndel programa, o porque se hayaproducido alguna equivocacióna <strong>la</strong> hora de p<strong>la</strong>nificar y p<strong>la</strong>ntearel diseño del algoritmo. En elúltimo caso, deberéis estudiarmuy bien el diseño de algoritmosy poner más atención en<strong>la</strong>s primeras etapas de diseño.Recordad que el esfuerzo realizadoy el tiempo dedicadoa estas etapas hace que el restode etapas sean mucho mássencil<strong>la</strong>s y directas.


© FUOC • P05/75062/00108 21 <strong>Introducción</strong> a <strong>la</strong> <strong>programación</strong>ciplina de <strong>la</strong> ingeniería y, por lo tanto, hay que seguir una metodología parano caer en <strong>la</strong> trampa del ensayo y error, y aprender a programar con el rigornecesario.Os acabamos de presentar los objetivos que hay que alcanzar en esta asignatura.Estaría bien que los releyeseis de vez en cuando durante el curso para no perderlosnunca de vista. Más ade<strong>la</strong>nte también los podréis entender mejor.


© FUOC • P05/75062/00108 22 <strong>Introducción</strong> a <strong>la</strong> <strong>programación</strong>ResumenCon los conceptos que hemos introducido hasta ahora, ya estamos en condicionesde enumerar el objetivo general de esta asignatura: aprender a diseñaralgoritmos para resolver problemas de complejidad media y a implementar elprograma correspondiente dentro del paradigma de <strong>la</strong> <strong>programación</strong> estructuradae imperativa.Podríamos desglosar este objetivo en los siguientes:1) Aprender a entender y especificar, aunque informalmente, los enunciadosde los algoritmos.2) Aprender un lenguaje algorítmico como herramienta para expresar algoritmos.3) Aprender diferentes técnicas de diseño, como los esquemas, para resolverproblemas sencillos, y <strong>la</strong> metodología de diseño descendente para solucionarproblemas de mayor envergadura.4) Aprender a utilizar <strong>la</strong>s estructuras de datos adecuados a cada problema.5) Aprender a combinar <strong>la</strong>s herramientas y técnicas expuestas para resolverproblemas.6) Aprender a implementar los algoritmos en un lenguaje de <strong>programación</strong>procedimental para obtener un programa.7) Aprender a utilizar el software necesario (editor y compi<strong>la</strong>dor) para podercompi<strong>la</strong>r y ejecutar los programas.8) Aprender a diseñar juegos de pruebas que permitan validar <strong>la</strong> corrección delos programas.Los primeros cinco objetivos se alcanzan de manera gradual a partir del estudiode los módulos didácticos combinados con <strong>la</strong> realización de <strong>la</strong>s actividadesy los ejercicios propuestos. Los tres últimos, a partir de <strong>la</strong>s prácticas de <strong>la</strong>boratorioy el uso del software y del material complementario del au<strong>la</strong>.


© FUOC • P05/75062/00108 23 <strong>Introducción</strong> a <strong>la</strong> <strong>programación</strong>GlosarioalgoritmoConjunto explícito de reg<strong>la</strong>s para resolver un problema en un número finito de pasos.codificaciónTraducción de un algoritmo a un lenguaje de <strong>programación</strong>.computadorAutómata de cálculo gobernado por un programa.entornoConjunto de objetos necesarios para llevar a cabo una tarea determinada.especificaciónFormalización del enunciado de un problema.estadoDescripción del entorno en un momento determinado.implementaciónRealización de un proyecto.lenguaje algorítmicoLenguaje artificial que se utiliza para expresar algoritmos.lenguaje naturalCualquier lenguaje que se utiliza como forma natural de comunicación: catalán, castel<strong>la</strong>no,inglés, etc.lenguaje de <strong>programación</strong>Lenguaje creado para expresar programas y que es capaz de ser interpretado por un ordenador.notación algorítmicaVéase lenguaje algorítmico.ordenadorVéase computador.programaCodificación de un algoritmo en un lenguaje de <strong>programación</strong> que el ordenador entienda.sintaxisReg<strong>la</strong>s de estructura de un lenguaje.semánticaSignificado de los símbolos de un lenguaje.BibliografíaBotel<strong>la</strong>, P.; Bofill, M.; Burgués, X.; Franch, X.; Lagonigro, R; Vancells, J. (1998). Fundamentosde <strong>programación</strong> I. Barcelona: Ediuoc.Castro, J.; Cucker, F.; Messeguer, X.; Rubio, A.; So<strong>la</strong>no, L.; Valles, B. (1992). Curs deprogramació. Madrid: McGraw-Hill.Vancells, J.; López E. (1992). Programació: introducció a l’algorísmica . Vic: Eumo Editorial(Tecno-Ciència).

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!