SlideShare une entreprise Scribd logo
1  sur  164
Télécharger pour lire hors ligne
Fundamentos de programación
Programa Desarrollado




                                             Cuatrimestre dos
                                               Programa de la asignatura:

                                             Fundamentos de Programación

                                                               Clave:
                                                             150910206


                                                              ESAD
                                                           Agosto, 2010




Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología   1
Fundamentos de programación
Programa Desarrollado




     Índice

     I.       Información general de la asignatura                                                                                                                                 3
           a. Ficha de identificación...................................................................................................................................... 3

           b. Descripción ........................................................................................................................................................ 3

           c. Propósito ............................................................................................................................................................ 4

     II.      Competencia(s) a desarrollar                                                                                                                                         5
           Competencia general:........................................................................................................................................... 5

           Competencias específicas: .............................................................................................................................. 5

     III. Temario                                                                                                                                                                  6
     IV. Metodología de trabajo                                                                                                                                                    8
     V.       Evaluación                                                                                                                                                           10
     VI. Materiales de apoyo                                                                                                                                                       12
     VII. Desarrollo de contenidos por unidad                                                                                                                                      13
           Unidad 1: Introducción a la computadora y desarrollo de software ........................................................... 13

           Unidad 2: Diseño de algoritmos ........................................................................................................................ 31

           Unidad 3: Introducción al lenguaje C ............................................................................................................... 49

           Unidad 4: Estructuras de control....................................................................................................................... 78

           Unidad 5: Estructuras de datos ....................................................................................................................... 118

           Unidad 6: Funciones ......................................................................................................................................... 148




Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                                                                                                     2
Fundamentos de programación
Programa Desarrollado




     I. Información general de la asignatura

     a. Ficha de identificación


                                                               Ingeniería en logística y transporte, Ingeniería en
      Nombre de la Licenciatura o Ingeniería:
                                                               telemática

      Nombre del curso o asignatura                            Fundamentos de Programación

      Clave de asignatura:                                     150910206
                                                               Bases de Datos, Análisis Orientado a Objetos,
      Seriación:
                                                               Programación Orientada a Objeto
      Cuatrimestre:                                            Dos

      Horas contempladas:                                      72



     b. Descripción

     La asignatura de Fundamentos de Programación tiene como meta principal que desarrolles las
     competencias necesarias para construir programas que resuelvan problemas reales. Constituye un pilar
     primordial para aquellos alumnos que, como tú, están estudiando una carrera relacionada con
     computación -como Desarrollo de Software y Telemática- pues los conocimientos y habilidades que
     desarrollen en este curso serán indispensables para la varias de las asignaturas subsecuentes del plan
     de estudios de ambas ingenierías, tal es el caso de bases de datos, programación orientada a objetos,
     programación web, estructura de datos, entre otras.

     El lenguaje de alto nivel que se ha elegido para implementar los programas es C, ya que es uno de los
     lenguajes, estructurados y modulares, utilizados actualmente; además cuenta con entornos de trabajo
     de software libre, como el que utilizaremos llamado Dev-C.

     Para facilitar que desarrolles las competencias establecidas, los contenidos del curso se han dividido de
     forma estratégica en seis unidades. En la primera se delinea el concepto de computadora y su
     funcionamiento, para ello se describen los elementos que la integran; posteriormente, se hace una
     aproximación a los lenguajes de programación y los paradigmas que existen en la actualidad,
     resaltando la programación modular y estructurada. En la siguiente unidad se expone la metodología de
     la programación y se introduce el concepto de algoritmo, que es la solución sistemática de problemas,


Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                                 3
Fundamentos de programación
Programa Desarrollado




     así que también se presentan dos formas de representación: el pseudocódigo y los diagramas de flujo.
     Asimismo, se ilustran las estructuras secuenciales, selectivas y repetitivas. A continuación, en la unidad
     tres, se presentan los elementos básicos para construir un programa simple en lenguaje C: datos,
     contantes, variables y las operaciones básicas de entradas/salidas para describir el uso de los
     operadores aritméticos, relacionales y lógicos para la manipulación de operaciones y expresiones en C.
     En la unidad cuatro se distinguen y utilizan las distintas estructuras de control, tanto selectivas (if, if-
     else, switch) como repetitivas (while, do-while, for), que ofrece el lenguaje C; se introduce su
     representación en diagrama de flujo y algoritmo, además de su sintaxis en C. En la unidad cinco se
     introducen las estructuras de datos: arreglos y registros, se explica qué son, cómo funcionan y para qué
     sirven, además, se plantean problemas en donde su uso es indispensable para su resolución. Por
     último, en la unidad seis se reconoce la importancia de la programación modular, construyendo
     soluciones modulares utilizando funciones en lenguaje C.


     c. Propósito

     El curso tiene como finalidad proporcionarte las bases para que comiences a desarrollar programas
     estructurados que solucionen problemas simples, a través del desarrollo de algoritmos en pseudocódigo
     y diagrama de flujo y su codificación en lenguaje C, además se te describe el proceso de compilación de
     un programa y su ejecución identificando los elementos de la computadora que intervienen en cada
     paso.




Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                                4
Fundamentos de programación
Programa Desarrollado




     II. Competencia(s) a desarrollar


     Competencia general:

     Desarrollar programas estructurados y modulares que resuelvan problemas simples, mediante el
     análisis del problema, el diseño de un algoritmo y su codificación en lenguaje C.


     Competencias específicas:

         •    Describir los elementos de la computadora y el ciclo de vida de software mediante el análisis un
              programa simple, con el fin de identificar los pasos que se realizan para construirlo y determinar
              qué elementos de la computadora intervienen en su ejecución.
         •    Diseñar algoritmos para resolver problemas mediante su representación en un diagrama de flujo
              y la elaboración del pseudocódigo.
         •    Utilizar el lenguaje de programación C para resolver problemas a través de la implementación de
              algoritmos secuenciales.
         •    Utilizar estructuras de control selectivas y repetitivas para resolver problemas simples a través
              del desarrollo de programas en lenguaje C.
         •    Utilizar estructuras de datos para almacenar y manipular los datos de un programa por medio del
              desarrollo de programas en lenguaje C.
         •    Implementar funciones para resolver problemas a través del desarrollo de programas modulares
              escritos en lenguaje C.




Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                               5
Fundamentos de programación
Programa Desarrollado




     III. Temario
     1. Introducción a la computadora y desarrollo de software
        1.1. ¿Qué es una computadora?
        1.2. Estructura y funcionamiento de una computadora
            1.2.1. Modelo de Von Neumann
            1.2.2. Ejecución de programas en la computadora
            1.2.3. Almacenamientos de programas y datos
        1.3. Lenguajes de programación
            1.3.1. Evolución de los lenguajes de programación
            1.3.2. Paradigmas de los lenguajes de programación
        1.4. Ciclo de vida del software

     2. Diseño de algoritmos
        2.1. Concepto de algoritmo y características
        2.2. Representaciones de algoritmos
           2.2.1. Pseudocódigo
           2.2.2. Diagrama de flujo
        2.3. Estructuras de control
           2.3.1. Secuenciales
           2.3.2. Selectivas
           2.3.3. Repetitivas

     3. Introducción al lenguaje C
         3.1. Componentes de un programa
            3.1.1. Instrucciones
            3.1.2. Comentarios
            3.1.3. Palabras reservadas
            3.1.4. Estructura general de un programa
         3.2. Tipos de datos
         3.3. Variables y constantes
            3.3.1. Identificadores
            3.3.2. Declaración e inicialización de variables
            3.3.3. Tipos de constantes
            3.3.4. Declaración de constantes
         3.4. Expresiones matemáticas
            3.4.1. Tipos de operadores
            3.4.2. Evaluación de expresiones
         3.5. Bibliotecas y funciones
            3.5.1. Funciones matemáticas
            3.5.2. Funciones de entrada y salida
         3.6. Codificación de algoritmos




Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología   6
Fundamentos de programación
Programa Desarrollado




     4. Estructuras de control
        4.1. Estructuras selectivas
           4.1.1. Estructura selectivasimple (if)
           4.1.2. Estructura selectiva doble (if-else)
           4.1.3. Estructura selectiva múltiple (switch-case)
        4.2. Estructuras repetitivas
           4.2.1. Estructura Mientras (while)
           4.2.2. Estructura Desde-mientras (for)
           4.2.3. Estructura Hacer-mientras (do-while)
        4.3. Estructuras anidadas

     5. Estructuras de datos
        5.1. Arreglos
           5.1.1. Definición y tipos
           5.1.2. Declaración e inicialización
           5.1.3. Acceso a los elementos de un arreglo
           5.1.4. Ciclos y arreglos
           5.1.5. Cadenas
        5.2. Estructuras
           5.2.1. Definición, declaración e inicialización
           5.2.2. Acceso a los elementos

     6. Funciones
        6.1. Diseño descendente
        6.2. Definición, declaración e invocación de funciones en C
        6.3. Alcance de las variables
        6.4. Paso de parámetros
           6.4.1. Por valor
           6.4.2. Por referencia




Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología   7
Fundamentos de programación
Programa Desarrollado




     IV. Metodología de trabajo

     Para trabajar en esta asignatura, se ha propuesto la metodología del Aprendizaje Basado en
     Problemas, pues debido a la naturaleza de los contenidos, tendrás que resolver problemas de manera
     constante para poner en práctica lo aprendido. Como el propósito de este curso es que desarrolles
     programas de software que resuelvan problemas simples, por cada unidad se ha propuesto uno o más
     problemas a partir de los cuales sete presentan los contenidos correspondientes, la intención de esto es
     que primero se te planteen los problemas para que los analices y posteriormente se te presente la
     solución de los mismos mediante algoritmos o programas; lo que se busca es que alcances las
     competencias específicas de cada unidad a través de, primero la observación y el análisis de los
     problemas ejemplo que te ayudarán a identificar patrones comunes, y posteriormente la resolución de
     problemas un poco más complejos a través del desarrollo de estrategias de solución similares.

     Ahora bien, para que puedas resolver un problema mediante un programa de computadora, primero
     tienes que tener claro el funcionamiento principal de la misma, tanto para almacenar la información
     como para llevar a cabo el conjunto de instrucciones que integran la solución de un problema, es decir,
     el programa. Por tal motivo, en la primera unidad se expone la arquitectura tradicional de las
     computadoras conocida como el Modelo de Von Neumann a través de la cual se te explica cómo se
     almacenan los programas y los datos de un problema en una computadora y qué elementos intervienen
     en la ejecución de las instrucciones. Lo anterior se expone utilizando un programa que se encarga de
     calcular el área de un rectángulo, de esta manera podrás aprender los contenidos mediante un ejemplo
     simple. Posteriormente, se describen los pasos que llevan a la construcción de un programa,
     nuevamente, utilizando un ejemplo simple. La evaluación de esta unidad se realizará mediante una
     prueba de opción múltiple en la que se incluyen los temas expuestos.

     Para exponer los temas relacionados con la elaboración de los algoritmos, se recurre al mundo de la
     ardilla, un ejemplo en el cual se supone que una ardilla ha sido entrenada para realizar un conjunto
     limitado de instrucciones precisas, de tal manera que para solucionar un problema únicamente se puede
     recurrir a este conjunto.

     De esta forma se pretende que reconozcas intuitivamente que la computadora –al igual que la ardilla–
     sólo es capaz de realizar un conjunto limitado de instrucciones precisas, por lo que la solución de un
     problema sólo puede incluir instrucciones reconocidas por ésta. Así mismo, mediante este ejemplo, se
     te muestra qué es un algoritmo, cuáles son sus características y sus formas de representación;
     posteriormente se te presentan las estructuras de control básicas de la programación estructurada
     ejemplificando su uso a través de la construcción de algoritmos que dirigen a la ardilla en la realización
     de una tarea específica. Así se te introduce en el diseño de soluciones estructuradas de problemas
     simples representadas de manera formal, ya sea con un diagrama de flujo o con un pseudocódigo. Es
     importante mencionar que la ventaja de presentar el tema desde un ejemplo tan simple y limitado como
     el mundo de la ardilla, facilita que puedas proponer soluciones estructuradas en un lenguaje específico,
     que es justo de lo que se trata la programación.




Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                              8
Fundamentos de programación
Programa Desarrollado




     En las siguientes unidades la estrategia de aprendizaje es similar, se te presentan los contenidos al
     mismo tiempo que se utilizan para solucionar problemas, sólo que en este caso se proponen situaciones
     reales que te son familiares, de tal manera que cuentes con los conocimientos necesarios para
     solucionarlos y solo te tengas que enfocar en representar la solución utilizando las estructuras de
     control definidas, es decir, las instrucciones permitidas.

     En general, en las actividades formativas deberás realizar algunas modificaciones a los algoritmos o
     programas presentados en los contenidos, o bien, los escribirás en lenguaje C para que puedas ver su
     ejecución, además debes ingresar al foro de cada unidad para realizar los comentarios que tengas al
     respecto. Es importante que realices cada una de las actividades propuestas por que a través de ellas
     se complementan los temas expuestos. De igual manera, para poner en práctica los conocimientos
     adquiridos y evaluar que se haya alcanzado la competencia específica a lo largo del curso desarrollarás
     un proyecto integrador que consiste en el planteamiento, análisis, diseño de la solución e
     implementación de un programa que involucre el uso de todas las estructuras de control y de datos que
     se estudiarán. En este caso, tú serás el responsable de plantear el problema que deseas solucionar y
     junto con tu facilitador delimitarás las fases y/o versiones que realizarás en cada unidad. El papel que
     juega tu facilitador (a) en el proceso de aprendizaje es fundamental, pues su tarea es guiarte en la
     solución de problemas a partir del análisis que tú realices y las ideas o dudas que te surjan con el
     mismo. El facilitador por ningún motivo debe darte la solución completa de un problema, en lugar de ello
     debe propiciar el intercambio de ideas y experiencias de los estudiantes mediante foros de discusión,
     favoreciendo el aprendizaje colaborativo; si después de esto siguen existiendo dudas se recomienda
     que resuelva problemas similares para que tanto tú como tus compañeros refuercen los conocimientos y
     habilidades de una manera inductiva y así logren dar solución al problema en cuestión. Por lo anterior,
     existe un foro de discusión general en el cual cualquiera puede exponer sus dudas respecto a un tema
     o problema para que sean retroalimentados por tu facilitador y los compañeros de grupo. Es importante
     que el facilitador promueva un clima de respeto mutuo y libertad de expresión para que tanto tú como
     tus compañeros se sientan cómodos al externar sus dudas y propuestas, permitiendo la disensión de
     manera fundamentada y deferente.

     En lo referente a la evaluación de las actividades y evidencias, tu facilitador debe revisar
     cuidadosamente los entregables que hagas y retroalimentarlos de manera positiva, clara y concisa;
     haciendo evidente el avance que hayas alcance y sin perder de vista que los errores que comentas
     debe ser utilizados a favor de tu aprendizaje, por lo que debe prestar principal atención a éstos
     indicándote en qué consiste el error y cómo se corrige, fundamentando su anotación en los contenidos
     del curso.




Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                            9
Fundamentos de programación
Programa Desarrollado




     V. Evaluación

     La evaluación del curso corresponderá en su totalidad al trabajo en el aula virtual, que se divide en: las
     actividades formativas, equivalentes al 20% de toda la calificación y, el portafolio de evidencias que
     representa el 80% restante. De tal manera que, mediante las actividades formativas propuestas para
     cada unidad se refuerzan los conocimientos abortados y se desarrollan las habilidades que el requieres
     para solucionar por ti mismo problemas similares a los que se presentan y resuelven. En cambio, el
     propósito de las evidencias de aprendizaje propuestas para cada unidad (portafolio de evidencias) es
     comprobar que hayas alcanzado la competencia específica, de tal manera que el conjunto de todas las
     evidencias sean la prueba de que has logrado la competencia general.

     Es requisito indispensable que realices y/o entregues todas las actividades formativas y las evidencias
     de aprendizaje en el tiempo establecido, de esta manera se garantiza la retroalimentación en tiempo y
     forma que tu facilitador realizará para que tengas claro el avance de tu aprendizaje, lo cual te servirá
     para que desarrolles las actividades o evidencias subsecuentes.

     En el caso de las evidencias de aprendizaje la calificación se obtendrá a partir de las escalas
     establecidas para cada una, las cuales conocerás de antemano. En el caso de las actividades
     formativas, serán revisadas por el facilitador(a), quién te hará llegar una retroalimentación que te ayude
     a ver tu avance y los puntos que puedes mejorar.

     Únicamente se considerará aprobado el curso si tu promedio total es mayor o igual a la calificación
     mínima establecida por el ESAD.

     Los trabajos que se tomarán como evidencias de aprendizaje son:

       Unidad 2:       Planteamiento del problema
                       Especificación clara y precisa del problema que se resolverá mediante un programa en C

       Unidad 3:       Análisis del problema
                       Datos de entrada, salida y bosquejo de la solución.

       Unidad 4:       Programa en C. Estructuras de control.
                       Primera versión de la solución del problema (algoritmo y codificación) que incluya
                       estructuras secuenciales, selectivas y repetitivas.

       Unidad 5:       Programa en C. Estructuras de datos
                       Segunda versión de la solución del problema (algoritmo y codificación) que incluya
                       estructuras de datos.

       Unidad 6:       Programa en C. Modular (versión final)
                       Entrega final del programa que soluciona el problema de forma modular



Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                              10
Fundamentos de programación
Programa Desarrollado




     A continuación se te presenta la ponderación de las evidencias de aprendizaje, las cuales tendrás que
     enviar a tu facilitador (a) por medio del Portafolio de Evidencias. Recuerda que el 100% de éstas,
     equivale al 80% de la calificación final del curso en la que se promedian actividades formativas y
     sumativas:



                                  ACTIVIDAD                                      PORCENTAJE

                                  Evidencia de la unidad 2                             13%
                                  Evidencia de la unidad 3                             17%
                                  Evidencia de la unidad 4                             36%
                                  Evidencia de la unidad 5                             17%
                                  Evidencia de la unidad 6                             17%
                                  Total                                                100%




Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                         11
Fundamentos de programación
Programa Desarrollado




     VI. Materiales de apoyo


     Bibliografía básica:

     Böhm, C., & Jacopini, G. (1966). Flow diagrams, Turing machines, and languages only with two
     formation rules". Communications of the ACM, 9 (5), 366-371.


     Cairó, O. (2005). Metodología de la programación: Algoritmos, diagramas de flujo y programas. México,
     D.F.: Alfaomega.

     Guerrero, F. (s.f.). mailxmail.com. Recuperado el 15 de 8 de 2010, de http://www.mailxmail.com/curso-
     introduccion-lenguaje-c

     Joyanes, L., & Zohanero, I. (2005). Programación en C. Metodología, algoritmos y estructuras de datos.
     España: Mc Graw Hill.

     Kernighan, B., & Ritchie, D. (1991). El lenguaje de programción C. México: Prentice-Hall
     Hispanoamericana.

     López, L. (2005). Programación estructurada en lenguaje C. México: Alfaomega.

     Reyes, A., & Cruz, D. (2009). Notas de clase: Introducción a la programación. México, D.F.: UACM.

     Villela,  H.     T.   (20   de   agosto                    de      2010).         Manual   de   C.   Obtenido   de
     http://www.fismat.umich.mx/mn1/manual/

     Viso, E., & Pelaez, C. (2007). Introducción a las ciencias de la computación con Java. México, D.F.: La
     prensas de ciencias, Facultad de Ciencias, UNAM.




Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                                      12
Fundamentos de programación
Programa Desarrollado




     VII. Desarrollo de contenidos por unidad
                          Unidad 1: Introducción a la computadora y desarrollo de software

     Propósitos de la unidad

     En esta unidad:
        • Identificarás los conceptos básicos relacionados con la computadora y los lenguajes de
            programación.
        • Distinguirás los elementos de una computadora que intervienen en la ejecución de un programa
            a través del modelo de Von Neumann.
        • Distinguirás los paradigmas de programación y los lenguajes asociados a éstos.
        • Reconocerás las fases que se siguen para solucionar un problema mediante la computadora.

     Competencia específica

     Describir los elementos de la computadora y el ciclo de vida de software mediante el análisis un
     programa simple, con el fin de identificar los pasos que se realizan para construirlo y determinar qué
     elementos de la computadora intervienen en su ejecución.

     Introducción

     Bienvenido a la primera unidad del curso fundamentos de programación, en esta unidad estudiaremos
     qué son las computadoras y cómo pueden ayudarnos para resolver problemas. Lo primero que tienes
     que tener claro es que las computadoras no poseen inteligencia alguna, ya que por sí solas no son
     capaces de resolver ningún problema, su importancia está en la capacidad de datos que pueden
     almacenar y manipular; de tal manera que para lograr nuestro fin– resolver problemas mediante la
     computadora – es necesario desarrollar programas escritos en un lenguaje de programación para que
     puedan ser ejecutados por una computadora.

     Los orígenes de las computadoras se remontan a dispositivos mecánicos como el ábaco que sirve para
     contar y ya se utilizaba en el año 2000 a.C, seguido de la Pascalina que fue la primera calculadora
     mecánica del mundo inventada por el francés Blaise Pascal en el año de 1642, y que después fue
     perfeccionada por Gottfried Leibniz. Dos siglos después, en el año de 1834, Charles Babbage anticipó
     la estructura de la computadora electrónica moderna, sin lograr su objetivo dadas las limitaciones de
     ingeniería del siglo XIX. Fue hasta la segunda guerra mundial (1936) que se cumplieron sus
     expectativas, cuando Alan Turing desarrolló la primera computadora electromecánica: el Colossus,




Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                          13
Fundamentos de programación
Programa Desarrollado




     encargada de descifrar los mensajes alemanes escritos en código Enigma. 1 Una década después
     Wallace J Eckert y Jonh W. Mauchly construyeron la primera computadora digital totalmente
     electrónica, llamada ENIAC (por sus siglas en inglés Electronic Numerical Intregrator And Computer). La
     característica principal de este invento es que se trataba de un componente de propósito general, ya
     que se podía programar para que resolviera diferentes problemas, pero la programación se realizaba
     modificando o reconstruyendo algunas partes del hardware. Con el fin de remediar esto, en 1945 el
     matemático Jonh Von Neumann propuso una arquitectura de computadoras cuya programación no era
     por medio de cables sino por medio de la creación de programas, a la que se le conoce como Modelo
     de Von Neumann, y que es, hasta hoy en día, la arquitectura base de las computadoras.

     Por lo anterior, en esta unidad se estudiarán los siguientes temas: el Modelo de Von Neumann, los
     pasos para realizar un programa y los principales paradigmas y lenguajes de programación utilizados
     actualmente.

     Actividad 1. Foro Fundamentos de programación

     Para facilitar el estudio de la asignatura, hemos creado un foro de discusión general, a través del cual
     podrás comentar cualquier asunto relacionado con Fundamentos de programación. Accede al foro
     desde el aula virtual.

     1.1 ¿Qué es una computadora?

     Para fines de este curso entenderemos que una computadora es una máquina electrónica que recibe
     datos de entrada y los procesa de acuerdo al conjunto de instrucciones, llamado programa, para
     obtener nuevos datos que son el resultado del proceso, tal como se ilustra en la siguiente figura.




     1   Se conoce como código Enigma al lenguaje de codificación de la máquina con el mismo nombre, utilizada en Europa a inicios de 1920, para
     cifrar y descifrar mensaje.



Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                                                               14
Fundamentos de programación
Programa Desarrollado




                                             Figura 1.1:Computadora
     Lo anterior nos lleva a clasificar los componentes de una computadora en dos clases: hardware y
     software. Los recursos de hardware son todos aquellos elementos de la computadora que se pueden
     palpar, como por ejemplo: el monitor, el teclado, el disco duro, la memoria, entre otros. En cambio, los
     recursos de software son aquellos elementos intangibles sin los cuales la computadora no funcionaría,
     esto es, el soporte lógico: programas y datos, entre los cuales se encuentran los sistemas operativos,
     editores de texto, compiladores, bases de datos, videojuegos, entre otros.

     1.2 Estructura y funcionamiento de una computadora

     Si nos cuestionamos ¿cómo funciona y se estructura internamente la computadora?, ¿cómo se obtienen
     los resultados? y ¿cómo se guardan los programas y datos en la memoria?, cuando tenemos un primer
     acercamiento con estos equipos, a pesar de manejarlos a diario, estas preguntas no son tan fáciles de
     contestar. Es por eso que en esta sección explicaremos y responderemos a estos cuestionamientos
     mediante el Modelo de Von Neumann.

     1.2.1 Modelo de Von Neumann

     El Modelo de Von Neumann propone que tanto el programa como los datos sean almacenados en la
     memoria, de esta forma la computadora no tendría que reconstruirse, pues para programarla
     únicamente debe introducirse el programa por el dispositivo indicado, y posteriormente alimentar con los
     datos de entrada para que calcule la salida correspondiente. Los elementos que componen esta
     arquitectura son: la unidad central de procesamiento integrada por la unidad aritmética-lógica y la
     unidad de control, la memoria y los dispositivos de entrada/salida. A continuación se describe
     brevemente la función de cada uno de los elementos que integran el Modelo de Von Neumann:




Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                            15
Fundamentos de programación
Programa Desarrollado




      •    Unidad Central de Procesamiento(CPU, Central Process Unit), controla y coordina la ejecución de
           las instrucciones, para ello utiliza la Unidad Aritmético-Lógica encargada del procesamiento de los
           datos y la Unidad de Control para el procesamiento de las instrucciones.

                   o   Unidad Aritmético-Lógica(ALU, Arithmetic Logic Unit), realiza todas las operaciones
                       aritméticas (suma y resta) y lógicas (operaciones del Algebra de Boole). Además de los
                       circuitos que le permiten realizar dichas operaciones, la ALU incluye un elemento auxiliar
                       donde se almacenan temporalmente los datos que manipula conocido como acumulador
                       o registro temporal (TR, Temporal Register).
                   o   Unidad de Control(CU, Control Unit), se encarga de leer las instrucciones almacenadas
                       en memoria, decodificarlas y después enviar las señales a los componentes que están
                       involucrados en su ejecución, para lo cual tiene dos elementos auxiliares el Contador del
                       Programa(PC, Program Counter) y el Registro de Instrucción(IR, Instruction Register). En
                       el IR se guarda temporalmente la instrucción que debe ser ejecutada, mientras que en el
                       PC se almacena la dirección de memoria que contiene la siguiente instrucción que se
                       ejecutará.

      •    Memoria principal, es la parte de la computadora donde se almacenan los datos y las instrucciones
           durante la ejecución de un programa. Físicamente está compuesta por circuitos integrados. Las
           computadoras actuales cuentan con un área de memoria de sólo lectura – a la que se le conoce
           como memoria de tipo ROM (Read Only Memory) –y otra en la cual es posible escribir y leer datos
           – denominada de tipo RAM (Random Access Memory). La memoria RAM tiene el inconveniente de
           ser volátil pues al apagarse la computadora los datos almacenados se pierden.

            Para resolver este inconveniente, se cuenta con otro tipo de memoria, denominada memoria
           secundaria, en ella se pueden almacenar una gran cantidad de información permanentemente,
           mientras el usuario no la borre. La desventaja de este tipo de dispositivos es que no son tan
           rápidos como la memoria RAM. Los discos duros, los discos ópticos (CD o DVD), la memoria flash
           (USB) y las cintas magnéticas, entre otras, son ejemplos de dispositivos de almacenamiento
           secundario.

      •    Dispositivos de entrada y salida (Input/Output), son responsables de la comunicación con el
           usuario del sistema. Los dispositivos de entrada permiten introducir en la computadora datos e
           instrucciones, mismas que son transformadas en señales binarias de naturaleza eléctrica para
           almacenarlas en la memoria. Por otro lado, los dispositivos de salida permiten enviar los resultados
           a los usuarios de las computadoras, transformando las señales eléctricas binarias en información
           que éstos puedan comprender. El teclado está considerado como el dispositivo de entrada
           estándar pero existen otros del mismo tipo, por ejemplo: el ratón, el escáner, la lectora óptica, el
           micrófono o la tabla digital. A su vez el monitor es el dispositivo de salida estándar; otros ejemplos
           de dispositivos de salida son: impresora, bocinas, plotter, etc.




Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                                16
Fundamentos de programación
Programa Desarrollado




     Es así que todas las unidades de la computadora se comunican a través del sistema de buses que son
     cables mediante los cuales se envían señales y dependiendo de la información que transmiten se
     clasifican en:

         a) El bus de direcciones transmite la dirección de memoria de la que se quiere leer o en la que se
            quiere escribir.
         b) El bus de control selecciona la operación a realizar en una celda de memoria (lectura o
            escritura).
         c) El bus de datos transmite el contenido desde o hacia una celda de memoria seleccionada en el
            bus de direcciones según la operación elegida en el bus de control sea lectura o escritura.

     Ahora ya sabemos cómo está estructurada internamente la computadoras, qué elementos la integran y
     cuál es la función de cada uno de ellos, el siguiente paso es descubrir cómo colaboran para llevar a
     cabo la ejecución de un programa, en seguida lo explicamos: los datos de entrada que requiere un
     programa se introducen a la computadora, a través de los dispositivos de entrada; posteriormente se
     almacenan en la memoria RAM, para que la CPU pueda procesarlos, conforme a las instrucciones del
     programa, hasta obtener el resultado deseado, mismo que envía al usuario por medio de los
     dispositivos de salida. Todas estas acciones son coordinadas por la unidad de control que envía las
     señales y datos a cada uno de los dispositivos de la computadora involucrados en la ejecución de las
     instrucciones del programa a través del sistema de buses. En la siguiente sección se describe con
     mayor detalle este proceso.

     1.2.2Ejecución de programas en la computadora

     Para que entender mejor lo que sucede en el interior de la CPU al ejecutar cualquier programa, a
     continuación se describen de manera general los pasos que se realizan, una vez que el programa y los
     datos fueron almacenados en la memoria principal:

         a) Primero, la unidad de control consulta en la memoria la instrucción indicada en el contador del
            programa y la almacena en el registro de instrucciones, actualizando el contador del programa
            con la dirección de memoria de la siguiente instrucción.
         b) Después de que se almacenó la instrucción en el registro del programa, la unidad de control se
            encarga de decodificarla, detectando qué dispositivos están implicados en su ejecución, estos
            pueden ser: la ALU, cuando se tiene que hacer una operación; los dispositivos de entrada y/o
            salida, cuando se tiene que enviar o recibir un dato; o la memoria, si se quiere guardar o
            consultar un dato; posteriormente envía las señales de control a los mismos indicándoles la
            acción y, si es el caso, los datos y/o la dirección de memoria correspondiente.
         c) Cuando los dispositivos realicen su tarea enviarán una señal a la unidad de control, para que
            esta repita el mismo procedimiento con la siguiente instrucción, así hasta ejecutar todo el
            programa.

     Al período en el que se ejecuta una instrucción se le conoce como ciclo de instrucción o ciclo fetch.


Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                          17
Fundamentos de programación
Programa Desarrollado




     Con el fin de ilustrar este procedimiento, analizaremos la ejecución del siguiente programa escrito en un
     lenguaje de programación ficticio.

     Ejemplo 1.1: El siguiente conjunto de instrucciones calcula el área de un rectángulo.



                                      Imprimir “Ingresa la base:”
                                      Leer b
                                      Imprimir “Ingresa la altura:”
                                      Leer h
                                      area← b*h
                                      Imprimir área

                                          Programa 1.1:Calcula área de un rectángulo




     Antes de definir paso a paso la ejecución de este programa describiremos la función de cada una de las
     instrucciones que lo integran.

                    Instrucción                                           Descripción
                                    Imprime en el dispositivo de salida estándar los <Datos>
                  Imprimir <Dato> indicados en la instrucción, que pueden ser un mensaje de texto
                                    o el valor de una variable.
                                    Lee por medio del teclado un dato, lo almacena en la variable
                     Leer <X>
                                    <X> indicado y lo almacena en la memoria RAM.
                                    La flecha representa una asignación, esta acción actualiza la
                   <X> ← <Dato>
                                    dirección de memoria asignada a <X> con el valor <Dato>.
                        Tabla 1.1: Lista de instrucciones en lenguaje de programación ficticio

     Cabe señalar que en los lenguajes de programación, las direcciones de memoria se representan por
     medio de variables, para hacerlos más legibles. De tal manera que <X> representa una variable y
     <Dato> puede ser un mensaje o cualquier valor.

     Ahora sí, de acuerdo con la información anterior, en la siguiente tabla se describen paso a paso las
     acciones que realiza la unidad de control junto con las otras unidades de la computadora involucradas
     en la ejecución de cada una de las instrucciones del programa.

             Instrucción                                             Descripción de la instrucción
      Imprimir “Ingresa base: ”             La unidad de control envía señales al monitor para que imprima el


Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                             18
Fundamentos de programación
Programa Desarrollado




                                             mensaje “Ingresa base:”.

                                            La unidad de control coordina las acciones necesarias para que, por
                 Leer b                      medio del teclado ,el usuario introduzca un número y lo almacene en la
                                             memoria principal, en el espacio correspondiente a la variable b.
                                            La unidad de control, nuevamente, envía una señal al monitor para que
      Imprimir “Ingresa altura:”
                                             imprima el mensaje “Ingresa altura:”.
                                            La unidad de control coordina las acciones necesarias para que el
                 Leer h                      usuario introduzca un número, por medio del teclado, y lo almacene en el
                                             espacio de memoria correspondiente a la variable h.
                                            La unidad de control envía la señal indicada a la ALU para que realice la
                                             multiplicación posteriormente envía la señal a la memoria junto con el
             area← b *h
                                             resultado de la multiplicación, para que se almacene en el espacio de
                                             memoria a.
                                            La unidad de control trae de la memoria el dato almacenado en el
             Imprimir area                   espacio asignado a la variable area y coordina las acciones para que el
                                             monitor imprima este valor.

                                      Tabla 1.2: Ejecución paso a paso de un programa




     1.2.2 Almacenamiento de programas y datos

     La computadora sólo entiende señales binarias: ceros y unos, encendido y apagado, ya que todos los
     dispositivos de una computadora trabajan con dos únicos estados: hay corriente eléctrica y no hay
     corriente, respectivamente. Por tal motivo, los datos y programas almacenados en la memoria están
     codificados como cadenas de 1´s y 0´s para que la unidad de control pueda interpretarlos. A esta
     codificación se le llama lenguaje de máquina.

     Cabe mencionar que la memoria está dividida en varias celdas, en cada una de ellas se puede
     almacenar únicamente 0s ó 1s, a estos valores se les denomina valores binarios o BIT´s (BInary DigiT).
     Las celdas se agrupan para formar registros (también llamados palabras), a cada uno le corresponde
     una dirección de memoria, así cuando se desea escribir o leer de la memoria un dato o una instrucción
     se debe especificar la dirección dónde se encuentra.

     Como podrás imaginar, para un ser humano resultaría sumamente complicado escribir los programas
     en lenguaje de máquina, es por eso que los programas se escriben en lenguaje de programación
     entendibles para los seres humanos y después se traducen mediante un software especial –que pueden
     ser un compilador o un traductor– a cadenas de 0´s y 1´s. De tal manera que a cada instrucción le
     corresponde un código binario específico y para cada dato también existe una codificación única. Por




Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                                     19
Fundamentos de programación
Programa Desarrollado




     ejemplo, la palabra “Hola” se representa como “0100 1000 0110 1111 0110 1100 0110 0000”, ya que a
     cada letra le corresponde una codificación:

                            H                              O                               L                               A
                        0100 1000                      0110 1111                       0110 1100                       0110 0000

     El número 80 se puede representar como “0101 0000” y la instrucción “MOV R2, R7” se codifica de la
     siguiente manera “0010 0000 1000 0100.”

     Conforme fueron evolucionando las computadoras se inventaron diversas maneras de representar la
     información en código binario, hoy en día existen codificaciones estándar para los símbolos y los
     números, al igual que para las instrucciones; sin embargo, para nuestros objetivos es suficiente tener
     claro que cualquier dato o instrucción puede ser representado mediante cadenas de 0s y 1s. Por otro
     lado, escribir programas en lenguaje binario es sumamente complicado para los seres humanos, por lo
     que en las últimas décadas se han desarrollado diversos lenguajes de programación que son más
     cercanos al lenguaje natural (humano), de los cuales hablaremos en la siguiente sección.

      1.3 Lenguajes de Programación

     Los lenguajes de programación sirven para escribir programas de computadora orientados a resolver
     algún problema o necesidad. Cada lenguaje de programación se define a partir de un conjunto de
     símbolos básicos, llamado alfabeto; un conjunto de reglas, llamado sintaxis, que definen la forma de
     manipularlos o combinarlos para representar instrucciones; y las reglas que especifican los efectos de
     dichas instrucciones cuando son ejecutadas por la computadora, conocidas como semántica. De esta
     manera tenemos que:

                             ���������������������������������������������������������������������������������������������������������������������������� = ������������������������������������������������ + ������������������������������������������������ + �����������������������������������������������

     Por otro lado, dependiendo de su legibilidad para el ser humano los lenguajes de programación se
     clasifican en lenguajes de bajo nivel y lenguajes de alto nivel. Los primeros se caracterizan porque sus
     instrucciones se parecen más a las acciones elementales que ejecuta una computadora, como son:
     sumar, restar, guardar en memoria, etc. En cambio, las instrucciones de los lenguajes de alto nivel son
     más parecidas a un lenguaje humano, por lo regular inglés. Por otro lado, los programas escritos en
     bajo nivel describen a detalle lo que sucede a nivel de hardware, mientras que los programas escritos
     en un lenguaje de alto nivel lo ocultan, teniendo como ventaja que son más fáciles de entender para las
     personas.

      1.3.1. Evolución de los lenguajes de programación

     Con las primeras computadoras surgió el primer lenguaje de programación que –como es de
     imaginarse– fue el lenguaje de máquina, el cual es considerado el lenguaje de primera generación. Las
     instrucciones en lenguaje de máquina dependían de las características de cada equipo, por lo que dada


Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                                                 20
Fundamentos de programación
Programa Desarrollado




     la dificultad de desarrollar programas en unos y ceros, los investigadores de la época desarrollaron el
     lenguaje ensamblador, cuyo conjunto de instrucciones consta de palabras nemotécnicas que
     corresponden a las operaciones básicas que una computadora puede ejecutar.

     Para ilustrar esto revisemos la siguiente instrucción: 2

                                     Mueve el contenido del registro 8 al contenido del registro 10

     En lenguaje de máquina esta se podría representar como:

                                                                0010 0000 1000 0100

     Lo cual es ilegible para el ser humano, en cambio en lenguaje ensamblador esta instrucción se puede
     representar de la siguiente forma:

                                                                      MOV R2, R7

      Aunque sigue estando en clave, es más amigable que las cadenas de ceros y unos. Otra característica
     del lenguaje ensamblador es que las instrucciones dependían de las características físicas
     (arquitectura) de la computadora.

     Para traducir de lenguaje ensamblador a lenguaje de máquina, se desarrollaron programas llamados
     ensambladores (en inglés, assemblers). Este lenguaje fue considerado de segunda generación.
     Posteriormente, en la década de los 50´s aparecieron los primeros lenguajes de alto nivel, cuyas
     instrucciones son más parecidas al idioma inglés y, por lo tanto, más fácil de utilizar para los
     programadores, además de que son independientes de la arquitectura de las computadoras. Algunos
     ejemplos son: FORTRAN y COBOL (que son los primeros lenguajes que aparecieron y en sus inicios
     se utilizaron para aplicaciones científicas), C, Pascal, Ada, Lisp y Prolog (utilizados principalmente en
     inteligencia artificial), Java, C++, C#, entre otros.

     Al igual que el lenguaje ensamblador, los programas escritos en un lenguaje de alto nivel deben ser
     codificados a lenguaje de máquina, así que junto con ellos se desarrollaron programas traductores, que
     de acuerdo con la forma en que trabajan se dividen en dos tipos: compiladores e intérpretes.

            •    Los compiladores traducen todo el programa escrito en un lenguaje de alto nivel, llamado
                 programa fuente, generando un nuevo programa objeto que está escrito en lenguaje de máquina
                 y a partir de este se genera un programa ejecutado, el cual puede ejecutarse cada vez que se
                 desee sin tener que compilar el programa fuente de nueva cuenta. Además, como parte del
                 proceso de traducción el compilador detecta los errores que hay en el código fuente,


     2   Este ejemplo es una adaptación de la versión original que aparece en (Joyanes & Zohanero, 2005, pág. 32) (Joyanes & Zohanero, 2005, pág. 32)



Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                                                                    21
Fundamentos de programación
Programa Desarrollado




              informándole al programador para que los corrija, pues un programa sólo se compila si no tiene
              errores.

         •    En cambio, un intérprete revisa una a una cada línea de código, la analiza y enseguida la
              ejecuta, sin revisar todo el código y sin generar un programa objeto, así que cada vez que se
              quiere ejecutar el programa se vuelve a traducir el programa fuente línea por línea.

     Por lo anterior, los compiladores requieren una fase extra antes de poder generar un programa
     ejecutable, y aunque esto pareciera menos eficiente en cuanto a tiempo, los programas creados con
     compiladores se ejecutan mucho más rápido que un mismo programa ejecutado con un intérprete.
     Además, cuando un programa ya ha sido compilado puede ejecutarse nuevamente sin tener que
     compilarse, mientras que los programas que son interpretados, cada vez que se ejecutan se deben
     volver a traducir.

     Conforme han ido evolucionando las computadoras también lo han hecho las estrategias para
     solucionar problemas, generando nuevos programas programación con diferentes filosofías, llamadas
     paradigmas de programación, de esto hablaremos a continuación.




      1.3.2 Paradigmas de los lenguajes de programación

     Un paradigma de programación representa un enfoque particular o filosofía para diseñar soluciones. Los
     paradigmas difieren unos de otros en los conceptos y la forma de abstraer los elementos involucrados
     en un problema, así como en los pasos que integran su solución del problema, en otras palabras, el
     cómputo.

     Un lenguaje de programación siempre sigue un paradigma de programación, aunque también podemos
     encontrar lenguajes con la influencia de dos paradigmas, tal es el caso del lenguaje C++, que surgió
     bajo el paradigma procedimental y se transformó al paradigma orientado a objetos, de tal manera que
     puede soportar ambos paradigmas.
     Los paradigmas más importantes son:

         •    Paradigma imperativo o procedural. Es el método de programación tradicional, donde los
              programas describen la forma de solucionar un problema a partir de una lista de instrucciones
              que se ejecuta de forma secuencial, a menos que se trate de estructuras de control




Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                           22
Fundamentos de programación
Programa Desarrollado




                 condicionales o repetitivas, o bien, saltos de secuencia representados por la instrucción GOTO. 3
                 La programación imperativa se define a partir del cambio de estado de las variables que se
                 produce por la ejecución de las instrucciones, por ejemplo, el programa 1.1, que calcula el área
                 de un rectángulo, es un ejemplo de un programa imperativo, ya que describe paso a paso como
                 solucionar el problema y el resultado corresponde al estado final de la variable area. Sin
                 embargo, el lenguaje en el que está escrito no corresponde a ningún lenguaje de programación
                 real, pero el lenguaje de máquina es un ejemplo de este paradigma. Otros lenguajes imperativos
                 son: Fortran, Cobol, Pascal, Basic, Ada y C.

            •    Paradigma declarativo. En contraste con el paradigma imperativo, el objetivo de este paradigma
                 no es describir cómo solucionar un problema, sino describir un problema mediante predicados
                 lógicos o funciones matemáticas. Dentro de este paradigma se encuentran los lenguajes de
                 programación funcionales y los lenguajes de programación lógicos. Los primeros representan el
                 problema utilizando funciones matemáticas, por ejemplo, un programa que calcule el área de un
                 rectángulo utilizando un lenguaje funcional se vería así:

                                                       ������������������������������������������������������������������������������������(������, ℎ) = ������ ∗ ℎ

                 De tal manera que para calcular el área de un rectángulo de base igual a 5 unidades y altura
                 igual a 10 unidades, se ejecuta la función con los parámetros 5,10, es decir, areaRectángulo
                 (5,10), la cual devuelve como resultado 50.

                 Los lenguajes de programación más representativos del paradigma funcional son: Lisp, ML y
                 Haskell.

                 En el caso de los lenguajes lógicos la solución se representa a través de un conjunto de reglas,

                                     ������������������������������������������������á������������������������������(������, ℎ, ������������������������) ∶ −������������������������������������������������������������������������ó������(������, ℎ, ������������������������)
                 por ejemplo:


                 Esta regla dice que el valor de la variable area corresponde al área del rectángulo con base b y
                 altura h sólo si area es el resultado de multiplicar b por h. Estamos suponiendo que se ha
                 definido el predicado multiplicación(a, b, c).

                 En este caso para calcular el resultado se utiliza el principio de razonamiento lógico para
                 responder a las preguntas planteadas, por ejemplo si se desea calcular el área del mismo
                 rectángulo, la pregunta sería la siguiente:

                                                          ? ������������������������������������������������������������������������������������(5,10, ������)



     3   De esto hablaremos en unidades posteriores.



Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                                                23
Fundamentos de programación
Programa Desarrollado




              Y después de que se realicen los cálculos (en este caso llamadas inferencias) el resultado que
              arrojaría sería:

                                                                      ������ = 50

              El lenguaje más representativo del paradigma lógico es Prolog.

         •    Paradigma orientado a objetos. En este caso la solución de un problema se plantea en términos
              de objetos y relaciones entre ellos. Está basado en varias técnicas, incluyendo, herencia,
              polimorfismo, modularidad y encapsulamiento. En este caso se definen clases que son las
              plantillas para crear objetos, por ejemplo, un si se quiere un programa orientado a objetos que
              calcule el área de un rectángulo, se debe definir una clase rectángulo que contenga un método
              encargado de calcular el área. El lenguaje Java y C#, que actualmente son los más utilizados,
              son ejemplos de este paradigma.




     1.4 Ciclo de vida del software

     Independientemente del paradigma que se siga y del lenguaje que se utilice para programar, existe un
     conjunto de fases que deben seguirse para realizar un programa de computadora, al cual se le conoce
     como ciclo de vida del software, en la siguiente figura se lista cada una de ellas.




Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                            24
Fundamentos de programación
Programa Desarrollado




                      Planteamiento                            Análisis       del

                      del problema                             problema                        Diseño         del
                                                                                               algoritmo



                                                     Ciclo de vida del software
                          Mantenimiento                                                        Implementación o
                                                                                               codificación



                                    Documentación
                                                                              Pruebas      y
                                    delprograma
                                                                              validación



     En las siguientes secciones aprenderemos en qué consiste cada una de las fases, para lo cual nos
     apoyaremos en la resolución del siguiente problema con la intención de que se entienda mejor:

              Problema 1.1: Se requiere construir un programa que calcule el área de un rectángulo, con base
              b y altura h.

      1.4.1 Análisis del problema

     En esta fase se determina ¿qué hace el programa? Por lo cual debe definirse de manera clara y concisa
     el problema en cuestión, se debe establecer el ámbito del problema, las características, limitaciones y
     modelos de lo que se desea resolver. Este paso debe conducir a una especificación completa del
     problema en donde se describa cuáles son los datos requeridos para resolverlo (datos de entrada) y
     cuál es el resultado deseado (salida).




     El análisis de nuestro ejemplo es muy simple y se resume en la siguiente tabla:

                      ¿Cuál es la salida deseada?
                                                El área de un cuadrado, la cual
                                                identificaremos como
                      ¿Qué método(s) se pueden El área de un rectángulo se puede
                      utilizar para llegar a la calcular con la siguiente fórmula:


Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                                25
Fundamentos de programación
Programa Desarrollado




                      solución?                                               Á������������������ = ������������������������ ∗ ������������������������������������
                      ¿Qué datos           de    entrada
                                                    se Por el planteamiento del problema y
                      requieren?                         dado el método anterior, los únicos
                                                         datos que se requieren son: la medida
                                                         de la base que se representa por b y la
                                                         medida de la altura indicada por h
                      ¿Qué datos o información En este caso no se requiere más
                      adicional es necesaria para información.
                      solucionar el problema?
                      ¿Existe algún problema o Las únicas restricciones son que las
                      condiciones      que      deban medidas de la base y altura sean
                      cumplirse?                         mayores a cero.
                                          Tabla 1.3: Análisis del problema 1

      1.4.2Diseño de la solución

     Es en esta fase se define ¿cómo el programa resuelve el problema? Para ello, se describe paso a paso
     la solución del mismo, lo cual se conoce como algoritmo. Cuando el problema es grande se recomienda
     dividirlo en subproblemas más pequeños y resolver por separado cada uno de ellos. A esta metodología
     se le conoce como diseño descendente (top-down) o modular. Existen diferentes formas de representar
     un algoritmo algunas formales, como una fórmula matemática, o informales, como es el caso del
     lenguaje natural.

     En la siguiente unidad estudiaremos a mayor profundidad los algoritmos y su representación, pero para
     seguir con el desarrollo de nuestro programa ejemplo, plantearemos la solución como una secuencia de
     pasos en español.



                                       2. Calcular: á������������������ = ������ ∗ ������
                                       1. Obtener la medida de la base (������) y la altura (������)

                                       3. Imprimir el resultado (�����������������)
                                        Algoritmo 1.1: Calcula el área de un rectángulo

     El programa 1.1es otra forma de representar la solución de este problema, se conoce como
     pseudocódigo.

     1.4.3 Implementación (codificación)

     El algoritmo no puede ser ejecutado por una computadora por ello debe traducirse a un lenguaje de
     programación (como por ejemplo C) para obtener un programa fuente que se traduzca a lenguaje de
     máquina para que sea ejecutado por la computadora.




Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                              26
Fundamentos de programación
Programa Desarrollado




     En el siguiente cuadro se muestra la codificación en lenguaje C del algoritmo, por ahora no es necesario
     que lo comprendas puesto que esto lo podrás hacer conforme vayas aprendiendo a programar, por lo
     pronto solamente se muestra con fines ilustrativos.

                                 #include<stdio.h>
                                 #include<stdlib.h>
                                 main()
                                 {
                                        int b,h, area;
                                 printf("Ingresa la base y altura:");
                                 scanf("%d %d", &b,&h);
                                        area = b * h;
                                        printf("Area = %d", area);
                                 }
                             Programa 1.2: Programa en C que calcula área de un rectángulo

     1.4.4 Validación y pruebas

     Esta fase debe hacerse una vez que se ha diseñado el algoritmo y después de que se codifica, sirve
     para verificar que son correctos. Existen diferentes formas de probar que la solución es correcta,
     algunas de ellas formales y otras informales: las primera se utilizan para garantizar que el programa o
     algoritmo siempre calcula el resultado deseado para cualquier conjunto de datos de entrada; en cambio,
     en las segundas sólo se prueba que funciona correctamente para algunos datos de entrada, tratando de
     encontrar posibles errores, en este caso no se puede garantizar el programa o algoritmo calcule la
     salida correcta para cualquier conjunto de datos. En cualquiera de los dos casos, si se encuentra alguna
     falla se debe corregir y volver a realizar pruebas. En este curso utilizaremos las pruebas de escritorio,
     las cuales se explicarán en la unidad 2.




     El ejemplo es muy sencillo y si ejecutamos manualmente el programa o algoritmo mostrado en la fase
     anterior, con un caso específico de rectángulo veremos que ambos son correctos. En la siguiente figura
     se ilustra la ejecución del programa:




Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                             27
Fundamentos de programación
Programa Desarrollado




                                             Figura 1.2: Ejecución del programa 1.2


     1.4.5 Documentación

     Cualquier proyecto de software por la complejidad que tiene requiere tanto las ideas principales como
     el desarrollo de principio a fin sea documentado, con el fin de que cualquiera puedan entender la lógica
     del programa y de ser necesario pueda modificarlos sin tantas complicaciones. Es común que si se
     desea modificar un programa y no se tiene información acerca de cómo fue construido sea más fácil
     volverlo a hacer que intentar entenderlo. Uno de los mejores ejemplos de la importancia de la
     documentación es el software libre, en el cual colaboran diversos desarrolladores para su elaboración,
     los cuales se encuentran en diferentes puntos geográficos de globo terráqueo, así que la forma de
     entender que está haciendo cada uno y bajo que método es la documentación. Además de que se debe
     tomar en cuenta que se llama software libre porque está disponible el código fuente para que cualquier
     persona pueda modificarlo a su conveniencia.

     Como parte de la documentación también deben incluirse manuales de usuario y las normas de
     mantenimiento para que se haga un buen uso del software.

     1.4.6 Mantenimiento

     Esta fase tiene sentido una vez que fue terminada una primera versión del programa y ya está siendo
     utilizado. Ya que en ésta se actualiza y modifica para corregir errores no detectados o para cambiar y/o
     agregar una nueva función. Por ejemplo, se puede extender el programa 1.1, que calcula el área de un
     rectángulo para que también calcule su perímetro.

     Ejemplo 1.2: El siguiente conjunto de instrucciones calcula el área y perímetro de un rectángulo.


                                   #include<stdio.h>
                                   #include<stdlib.h>
                                   main()
                                   {
                                         int b,h, area, perimetro;
                                   printf("Ingresa la base y altura:");
                                         scanf("%d %d", &b,&h);


Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                            28
Fundamentos de programación
Programa Desarrollado




                                   perimetro = 2*b + 2*h;
                                   area = b * h;
                                   printf("Perimetro = %d", perimetro);
                                         printf("Area = %d", area);
                                  }


                                Programa 1.3: Calcula el área y perímetro de un rectángulo

     En el programa se resaltan las instrucciones que se añadieron al programa para calcular el perímetro.

     Actividad de Autoevaluación

     Ingresa al aula virtual para realizar las dos actividades de autoevaluación, la primera trata de un
     pequeño juego tipo maratón en el que pondrás a prueba tus conocimientos, la segunda consiste en un
     cuestionario de opción múltiple.

     Consideraciones específicas de la unidad

     Para alcanzar los objetivos de esta unidad se ha propuesto una actividad formativa en la cual revises la
     ejecución de un problema apoyándote en una animación que muestra paso a paso la ejecución del
     programa 1.1 que se presentó en esta unidad, en dicha animación se especifica cada uno de los
     elementos que están involucrados en la ejecución de las instrucciones.

     Referencias:



       • Guerrero, F. (s.f.). mailxmail.com. Recuperado                            el   15   de   agosto   de   2010,   de
         http://www.mailxmail.com/curso-introduccion-lenguaje-c


       • Joyanes, L., & Zohanero, I. (2005). Programación en C. Metodología, algoritmos y estructuras de
         datos. España: Mc Graw Hill.


       • Reyes, A., & Cruz, D. (2009). Notas de clase: Introducción a la programación. México, D.F.:
         UACM.


       • Viso, E., & Pelaez, C. (2007). Introducción a las ciencias de la computación con Java. México,
         D.F.: La prensas de ciencias, Facultad de Ciencias, UNAM.




Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                                         29
Fundamentos de programación
Programa Desarrollado




Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología   30
Fundamentos de programación
Programa Desarrollado




                                                 Unidad 2: Diseño de algoritmos

     Propósitos

     En esta unidad:
        • Identificar los datos de entrada y la salida de un algoritmo
        • Diseñar un algoritmo que solucione un problema.
        • Representar el algoritmo en diagrama de flujo y pseudocódigo
        • Verificar que el algoritmo calcule el resultado correcto

     Competencia específica

     Diseñar algoritmos para resolver problemas mediante su representación en un diagrama de flujo y la
     elaboración del pseudocódigo.

     Introducción

     En la unidad anterior se describieron los pasos que se requieren para construir un software, sin lugar a
     dudas, la fase más importante es el diseño de la solución, ya que es aquí donde se debe crear un
     modelo que corresponde a los pasos que llevan a la solución del problema en cuestión, y se conoce
     como algoritmo. Para construir esta solución se requiere no sólo de inteligencia, sino también de
     creatividad, ya que el programador sólo cuenta con la especificación del problema y su experiencia en
     resolver problemas de una forma estructurada.

     En este apartado se introduce formalmente el concepto de algoritmo, hablaremos de sus características
     y estudiaremos dos formas de representarlos: una gráfica, conocida como diagramas de flujo; y la otra
     similar a un lenguaje humano, en este caso español, la cual se llama pseudocódigo. También se
     describen los tres tipos de estructuras de control: secuenciales, selectivas y repetitivas, que son las
     instrucciones con que se cuenta en la programación estructurada para diseñar soluciones.

     Para logar nuestro objetivo se introduce “el mundo de la ardilla”, en el cual se deben solucionar
     problemas mediante un conjunto de instrucciones específicas que puede ejecutar una ardilla sobre un
     tablero.

     2.1 Concepto de algoritmo y características

     La palabra algoritmo proviene del nombre de un matemático persa conocido como Mohammad Al-
     KhoWârizmi, nacido alrededor del 780 d.c. en KhoWârizm, de ahí el su seudónimo. Se considera como
     el padre de la algoritmia porque definió las reglas paso a paso para sumar, restar, multiplicar y dividir
     números decimales. La traducción al latín de Al-Khwārizmī es algoritmi, que da origen a la palabra
     algoritmo (Joyanes & Zohanero, 2005).



Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                             31
Fundamentos de programación
Programa Desarrollado




     Formalmente, un algoritmo se define como una secuencia finita de instrucciones precisas y eficaces
     para resolver un problema, que trabaja a partir de cero o más datos (entrada) y devuelve un resultado
     (salida). 4

         Para ilustrar este concepto se presenta el siguiente escenario ficticio, que hemos llamado:
                                                 El mundo de la ardilla

     Supongamos que una ardilla ha sido entrenada para realizar las instrucciones que se muestran en la
     tabla 2.1, sobre un tablero.


                     INSTRUCCIÓN                    DESCRIPCIÓN DE LOS MOVIMIENTOS DE LA ARDILLA

                     avanza()                       Se mueve una ubicación en la dirección actual

                     giraIzquierda()                Voltea a la izquierda

                     dejaBellota()                  Coloca una bellota en la ubicación actual
                     hayBellota()                   Responde si hay o no bellotas en la posición actual
                     hayPared()                     Responde si hay o no pared en la ubicación siguiente
                                                    La ardilla coloca en su boca una bellota que está en la
                     recogeBellota()
                                                    ubicación actual 5
                     bellotasRecogidas() Dice el número de bellotas que tiene en la boca
                                     Tabla 2.1: Lista de instrucciones que puede ejecutar la ardilla


     Los paréntesis al final de cada instrucción sirven para identificar que se trata de una orden que puede
     ejecutar la ardilla. Si observas la lista de instrucciones podrás darte cuenta que, la ardilla no es capaz
     de voltear a la derecha y mucho menos de responder a órdenes más complejas como “mueve una
     bellota que se encuentra en la primera casilla del tablero al final del mismo”. Sin embargo, podría
     realizar ambas tareas si se le dan las instrucciones precisas en términos de las acciones que sabe
     hacer. Por ejemplo, para que la ardilla gire a la derecha tendríamos que ordenarle tres veces que girará
     a la izquierda, es decir, la secuencia de instrucciones que debe ejecutar es:
                                                     giraIzquierda()
                                                     giraIzquierda()
                                                     giraIzquierda()




     4   Esta definición es una adaptación de la que aparecen en (Viso & Pelaez, 2007, pág. 3)
     5La   ardilla poseen una bolsa donde almacena cualquier cantidad de bellotas.



Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                              32
Fundamentos de programación
Programa Desarrollado




     Estos pasos constituyen un algoritmo, el cual soluciona el problema de hacer que la ardilla gire a la
     derecha.

     Una de las características principales de los algoritmos es que cada paso debe estar definido de forma
     clara y precisa, sin ambigüedades, de tal manera que pueda ejecutarse de manera inequívoca, por
     ejemplo, en el mundo de la ardilla, la instrucción gira() sería una instrucción ambigua, ya que la ardilla
     no sabría si debe girar a la derecha o a la izquierda.

     Otra característica de los algoritmos es que siempre terminan, por lo que no puede ser una lista infinita
     de pasos. Y tampoco puede contener pasos que sean irrealizables o cuya ejecución sea infinita, pues
     en este caso no sería posible calcular el resultado deseado, si una instrucción está bien definida y es
     eficaz se puede asegurar que su ejecución termina con éxito, sin embargo, esto no garantiza, de
     ninguna manera, que el algoritmo también termine.

     Por lo anterior, al diseñar un algoritmo se debe garantizar que dada cualquier entrada siempre termine y
     calcule la respuesta correcta. De tal manera que todo algoritmo debe tener las siguientes
     características:

              1.Entrada.
              2. Salida.
              3. Definido.
              4. Eficaz.
              5. Terminación.

     Una vez que se ha diseñado un algoritmo, se recomienda realizar una prueba de escritorio para verificar
     si funciona correctamente, ésta consiste en ejecutar el algoritmo utilizando papel y lápiz, se propone
     datos de entrada específicos y se realiza cada una de las instrucciones en el orden establecido,
     registrando los cambios que se producen después de la ejecución de cada instrucción. De esta manera,
     se valida que el resultado obtenido en la prueba de escritorio corresponda al resultado deseado (el
     correcto).

     2.2. Representación de algoritmos

     Existen diversas formas de representar un algoritmo, en la unidad anterior expusimos diversas formas
     de representar la solución del problema de calcular el área de un rectángulo, por ejemplo, en el
     programa 1.1 se expresa la solución en pseudocódigo, después en el algoritmo 1.1 se representa en
     lenguaje natural (español) y en el programa 1.2 se utiliza el lenguaje de programación C, o se puede
     expresar mediante la fórmula matemática:

                                                        á������������������ = ������������������������ × ������������������������������������




Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                              33
Fundamentos de programación
Programa Desarrollado




     Todas estas representaciones, excepto el lenguaje natural, se consideran formales, y cabe mencionar
     que existen más, sin embargo, las representaciones más comunes son el pseudocódigo y los diagramas
     de flujo. La primera, generalmente se utilizar por su parecido con el lenguaje natural (español, inglés,
     francés o cualquier otro) y porque su codificación en un lenguaje de programación estructurado y
     modular, como C, es directa. En cambio, los diagramas de flujo son totalmente gráficos, lo que hace
     más fácil seguir el orden en que se ejecutan las instrucciones. Es importante mencionar que se puede
     utilizar cualquiera de las dos representaciones para diseñar un algoritmo, pues en cualquiera de los dos
     se puede expresar cualquier algoritmo estructurado, de tal manera que la más conveniente depende de
     cada programador. En las siguientes secciones se presenta cada uno de ellos y así podrás decidir cuál
     prefieres.

     2.2.1. Pseudocódigo

     El pseudocódigo es un lenguaje de especificación formal de algoritmos. La solución de un problema se
     representa de manera narrativa utilizando palabras claves, generalmente verbos, escritos en un
     lenguaje natural, que en nuestro caso será español. Para ilustrarlo construyamos un algoritmo que
     resuelva el siguiente problema.

     Problema 2.1: En la figura 2.1.a. se muestra el estado inicial de un tablero, el cual contiene en la primer
     casilla (de izquierda a derecha) una bellota, representada por un asterisco (*), y a la ardilla,
     representada por una flecha que apunta hacia la dirección que está mirando. El problema consiste en
     diseñar un algoritmo que la ardilla pueda ejecutar para llegar al estado meta representado en la figura
     2.1.b., que implica que la ardilla lleve la bellota a la última casilla. Para resolverlo se tiene la siguiente
     información:

         a) El mundo es conocido, es decir, se sabe de antemano que el tablero está cercado por paredes y
            sólo tiene seis casillas colocadas en línea.
         b) Al inicio la ardilla está en la primera casilla volteando hacia arriba y no tiene ninguna bellota en
            la boca.
         c) En la primera casilla hay una bellota.



                                     *                                                           *

                                         Estado inicial (a)                       Estado final (b)


                                                  Figura 2.1: Primer mundo lineal




Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                                  34
Fundamentos de programación
Programa Desarrollado




     Análisis: Haciendo un rápido análisis del problema, nos podemos dar cuenta que la ardilla debe
     recoger la bellota, avanzar cinco casillas y soltar la bellota, esto traducido en un algoritmo queda de la
     siguiente forma:




                                       Inicio
                                       recogeBellota()
                                       giraIzquierda()
                                       giraIzquierda()
                                       giraIzquierda()
                                       avanza()
                                       avanza()
                                       avanza()
                                       avanza()
                                       avanza()
                                       dejaBellota()
                                       Fin
                                           Algoritmo 2.1. Primer mundo de la ardilla


     En este caso las instrucciones son parecidas al lenguaje natural.


     2.2.2. Diagrama de flujo


     Los diagramas de flujo son una representación gráfica de un algoritmo que utiliza símbolos para
     representar las instrucciones y flechas para unirlas e indicar el orden en que deben ejecutarse -llamadas
     líneas de flujo. Estos símbolos fueron normalizados por el Instituto Norteamericano de Normalización
     ANSI (American National Standars Institute, por sus siglas en inglés). Los símbolos más utilizados se
     muestran en la siguiente tabla.



              Símbolo                      Descripción
                                           Terminal. Representa el inicio y el final de un algoritmo.
                      Terminal




Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                              35
Fundamentos de programación
Programa Desarrollado




                                           Entrada y Salida (E/S). Representa la lectura de datos desde el
                        E/S                dispositivo de entrada estándar, así como la impresión de datos
                                           en el dispositivo de salida estándar.

                                           Proceso. Representa cualquier tipo de operación que pueda
                      Proceso              originar un cambio de la información almacenada en memoria,
                                           asignaciones u operaciones aritméticas.

                                           Decisión. Nos permite analizar una situación, con base en los
                                           valores verdadero y falso. Toma una decisión de las instrucciones
                       Decisión
                                           que a continuación ejecuta el algoritmo.


                                           Conector. Sirve para enlazar dos partes cualesquiera del
                                           diagrama que están en la misma página.

                                           Línea de flujo. Indica el orden de la ejecución de las operaciones.
                                           La flecha indica cuál es la siguiente instrucción que se debe
                                           realizar.
                                           Conector. Conecta a dos puntos del diagrama cuando éstos se
                                           encuentran en páginas diferentes. Representa el inicio y el final
                                           de un programa.
                                           Llamada a subrutina. Llama a un proceso determinado o
                      Subrutina            subrutina. Una subrutina es un módulo independiente del módulo
                                           principal, que realiza una tarea determinada y al finalizar regresa
                                           el control de flujo al módulo principal.
                                         Tabla 2.2 Símbolos de los diagramas de flujo

     Problema 2.2: Ahora la tarea de la ardilla es que cambie las bellotas que están en la primera fila (ver
     figura 2.2.a) a la segunda y viceversa, dejándolas en la misma columna (ver figura 2.2.b).

     Las condiciones de inicio son:

         a) El mundo es conocido y sabemos exactamente dónde hay bellotas.
         b) La ardilla no tiene ninguna bellota en la boca al inicio.
         c) El mundo está encerrado por paredes y si la ardilla choca contra una se considerará un error
            garrafal.
         d) En este punto los científicos ya entrenaron a la ardilla para ejecutar la orden giraDerecha(), por
            lo tanto, ya puede ser usada en el algoritmo.




Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                             36
Fundamentos de programación
Programa Desarrollado




                                     *        *        *                              *       *       *

                                          *       *            *              *           *       *

                                         Estado inicial (a)                           Estado final (b)

                                              Figura 2.2:Segundo mundo de la ardilla

     Análisis: De acuerdo con la figura 2.2, inciso a, para que la ardilla cumpla con su tarea debe realizar los
     siguientes pasos: recoger la bellota, girar a la derecha, avanzar, dejar la bellota, girar a la izquierda,
     avanzar, recoger la bellota, girar a la izquierda, avanzar, dejar la bellota, voltear a la derecha y avanzar.
     Hasta este punto las coordenadas de la ardilla son: primera fila y tercera casilla (volteando a la derecha,
     como al inicio).
                                                      * *       *

                                                           *           *          *


     Si la ardilla repite otra vez este bloque de instrucciones, logrará cambiar las siguientes dos bellotas; al
     repetirlo nuevamente cambiaría las últimas dos, salvo que cuando la ardilla avance después de haber
     dejado la bellota chocará contra la pared, por lo tanto, antes de que avance –última instrucción del
     bloque – tenemos que verificar que no haya pared. La condición para que la ardilla repita el bloque de
     instrucciones es que no haya pared.

     De lo anterior tenemos el siguiente algoritmo representado en diagrama de flujo.




Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                                 37
Fundamentos de programación
Programa Desarrollado




                                             Algoritmo 2.2. Solución problema 2.2

     Actividad 1. Representación de algoritmos

     En esta actividad, reflexionarás sobre el uso de los diagramas de flujo y pseudocódigos a partir de
     varias preguntas. Posteriormente, ingresarás un comentario al respecto en el Foro Representación de
     algoritmos.

     Evidencia de aprendizaje. Planteamiento del problema

     Como primera evidencia de aprendizaje para esta unidad deberás elegir un problema que se pueda
     solucionar mediante un programa de computadora y realizarás la descripción precisa del mismo.

     2.3. Estructuras de control

     Los primeros lenguajes de programación de alto nivel permitían realizar “saltos” a diferentes líneas del
     código mediante la instrucción GOTO, esto tiene el gran inconveniente que cuando se hacía una
     modificación en el programa, era necesario modificar todas las instrucciones GOTO para asegurar que


Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                            38
Fundamentos de programación
Programa Desarrollado




     los saltos se hicieran a las líneas de código correctas. Además de lo tedioso que podía ser estar
     corrigiendo el programa, las instrucciones GOTO lo hacían difícil de leer.

     En 1966 Corrado Böhm y Giuseppe Jacopini demostraron que “cualquier algoritmo puede diseñarse e
     implementar utilizando únicamente tres tipos de estructuras de control: secuenciales, condicionales y
     repetitivas; esto es, sin utilizar GOTO”(Böhm & Jacopini, 1966), basándose en este resultado, a
     principios de los años 70´s Edsger Dijkstra se dio cuenta que la forma en la que los lenguajes de
     programación de alto nivel podían modificarse sin problemas era eliminando las instrucciones GOTO (o
     similares), así que propuso un nuevo estilo de programación al que llamó programación estructurada,
     ésta incluye estructuras secuenciales, selectivas y repetitivas, conocidas como estructuras de control.


     2.3.1. Estructuras secuenciales

     Las estructuras secuenciales son un bloque de instrucciones que se ejecutan una tras otra, en el mismo
     orden en el que están escritas.
     Un ejemplo de este tipo de instrucciones son todas las que se utilizaron en el algoritmo 2.1. Veamos
     otro ejemplo.

     Problema 2.3: Ahora la ardilla se enfrenta a un nuevo mundo (ver figura 2.3) en el que su tarea consiste
     en recoger las dos bellotas colocadas en la posiciones indicadas por la figura 2.3.a y llevarlas a la
     última casilla de la primera fila, como se muestra en la figura 2.3.b. Considerando que tenemos un
     mapa del nuevo mundo y sabemos en qué casillas están colocadas las bellotas diseñemos un algoritmo
     para que la ardilla realice su cometido.




                                                       *                                         **


                                              *

                                         Estado inicial (a)                       Estado final (b)


                                              Figura 2.3.Tercer mundo de la ardilla




     Análisis: Nuevamente el problema planteado es muy sencillo de analizar, la ardilla debe hacer los
     movimientos que le permitan recoger la primera bellota, después ir por la segunda y llegar a la última
     casilla de la prime fila. Otra posible opción es que recoja la primera bellota, la lleve a la primera casilla,



Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                                  39
Fundamentos de programación
Programa Desarrollado




     regrese por la segunda bellota y también la lleve a la primera casilla. Esta última opción requiere más
     esfuerzo por parte de la ardilla, dado que la ardilla no tiene limitado el número de bellotas que puede
     llevar en la boca, entonces la primera opción es más eficiente. El algoritmo quedaría como:




                                        Inicio
                                        avanza()
                                        giraIzquierda()
                                        avanza()
                                        avanza()
                                        recogeBellota()
                                        giraIzquierda()
                                        avanza()
                                        giraDerecha()
                                        avanza()
                                        avanza()
                                        recogeBellota()
                                        avanza()
                                        dejaBellota()
                                        dejaBellota()
                                        Fin

                                             Algoritmo 2.3. Solución problema 2.3.




     Las instrucciones selectivas, más usuales, que una computadora es capaz de realizar son: Imprimir,
     Leer y Asignar. La representación en diagrama de flujo de estas instrucciones se ilustra en la siguiente
     tabla, en cuanto que la representación en diagrama de flujo se utilizan los mismos verbos y símbolos
     pero encerrados entre un símbolo de proceso.




Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                            40
Fundamentos de programación
Programa Desarrollado




    Tipo                Pseudocódigo               Diagrama de flujo                   Descripción

                                                                                       Asigna el valor de la expresión
    Asignación          <var> ← <Expresión>               <var> ← <Expresión>
                                                                                       a la variable <var>

                                                                                       Envía a pantalla un mensaje o
                                                                                       el valor de la variable indicada.
                                                                                       En caso de que se imprima un
                        Imprimir                                 imprimir              mensaje debe estar escrito
                        <mensaje/variable>                       var/mens              entre comillas, si es el valor de
    Entrada         y                                                                  una variable sólo se pondrá el
    Salida                                                                             nombre de la variable (sin
                                                                                       comillas)

                                                                   leer                Lee un dato del teclado y lo
                        Leer <variable>                                                almacena en la variable
                                                                   variable
                                                                                       indicada.

                                               Tabla 2.3 Estructuras secuenciales

     2.3.2 Estructuras selectivas

     En esencia, las estructuras selectivas se utilizan cuando la solución de un problema conlleva tomar una
     decisión, ya que se ejecuta un conjunto determinado de instrucciones dependiendo de si se cumple o no
     una condición en un momento determinado. Por ejemplo, la ardilla solamente puede avanzar si se no
     hay pared, en este caso la condición es no hayPared() y la acción que se realiza es avanza().
     Revisemos el siguiente ejemplo:

     Problema 2.4: Nuevamente la ardilla está en el mundo lineal que se ilustra en la figura 2.4.a, tiene que
     recoger una bellota y llevarla a la última casilla como se muestra en la figura 2.4.b, sólo que ahora no
     sabe con precisión en que casilla está la bellota y la única información con la que cuenta es la siguiente:

         a) En el tablero hay una sola bellota. Las casillas donde puede estar son la tercera o la quinta, lo
            cual se representa con un círculo en la figura 2.4.a.
         b) Al inicio la ardilla no tiene ninguna bellota en la boca.
         c) Es un error ordenar a la ardilla que recoja una bellota en una casilla cuando esta no contiene
            nada pues la ardilla no sabrá que hacer.
         d) La ardilla ya ha sido entrenada para decir si hay bellota.




Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología                                       41
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra
Progra

Contenu connexe

Tendances

El C++ por la práctica, introducción al lenguaje y su filosofía
El C++ por la práctica, introducción al lenguaje y su filosofíaEl C++ por la práctica, introducción al lenguaje y su filosofía
El C++ por la práctica, introducción al lenguaje y su filosofíaAndy Juan Sarango Veliz
 
Visual Basic 6.0 progarmacion
Visual Basic 6.0 progarmacion Visual Basic 6.0 progarmacion
Visual Basic 6.0 progarmacion betsabebarcenas
 
Material de trabajo informática i
Material de trabajo informática iMaterial de trabajo informática i
Material de trabajo informática isliderfiler
 
Manual microsoft project professional
Manual microsoft project professionalManual microsoft project professional
Manual microsoft project professionalARMANDO CORTES LOSADA
 
Libro visual basic ii version oro
Libro visual basic ii version oroLibro visual basic ii version oro
Libro visual basic ii version oroAlvaro Caal
 
PFC: Análisis de Lenguajes Específicos de Dominio para Sistemas Embebidos
PFC: Análisis de Lenguajes Específicos de Dominio para Sistemas EmbebidosPFC: Análisis de Lenguajes Específicos de Dominio para Sistemas Embebidos
PFC: Análisis de Lenguajes Específicos de Dominio para Sistemas Embebidosazubi
 
Libro.de.ORO.de.Visual.Basic.6.0.Orientado.a.Bases.de.Datos.-.2da.Ed.Bucarelly
Libro.de.ORO.de.Visual.Basic.6.0.Orientado.a.Bases.de.Datos.-.2da.Ed.BucarellyLibro.de.ORO.de.Visual.Basic.6.0.Orientado.a.Bases.de.Datos.-.2da.Ed.Bucarelly
Libro.de.ORO.de.Visual.Basic.6.0.Orientado.a.Bases.de.Datos.-.2da.Ed.Bucarellyrcc1964
 
10 conceptos basicos_procesadores_lenguaje
10 conceptos basicos_procesadores_lenguaje10 conceptos basicos_procesadores_lenguaje
10 conceptos basicos_procesadores_lenguajeAreli Gómez
 
Herramientas de Microsoft Word
Herramientas de Microsoft WordHerramientas de Microsoft Word
Herramientas de Microsoft WordJessica Catagña
 
9788499640327
97884996403279788499640327
9788499640327diosbeto
 
Trabajo de Informática
Trabajo de InformáticaTrabajo de Informática
Trabajo de InformáticaStefy Sanchez
 
Manual básico de programación en c++
Manual básico de programación en c++Manual básico de programación en c++
Manual básico de programación en c++cexar0
 
Manual c++
Manual c++Manual c++
Manual c++slent
 
Buenaspracticas.pdf
Buenaspracticas.pdfBuenaspracticas.pdf
Buenaspracticas.pdfPaco Delgado
 

Tendances (20)

El C++ por la práctica, introducción al lenguaje y su filosofía
El C++ por la práctica, introducción al lenguaje y su filosofíaEl C++ por la práctica, introducción al lenguaje y su filosofía
El C++ por la práctica, introducción al lenguaje y su filosofía
 
C++
C++C++
C++
 
B learnin
B learninB learnin
B learnin
 
Visual Basic 6.0 progarmacion
Visual Basic 6.0 progarmacion Visual Basic 6.0 progarmacion
Visual Basic 6.0 progarmacion
 
Material de trabajo informática i
Material de trabajo informática iMaterial de trabajo informática i
Material de trabajo informática i
 
Introduccion a matlab
Introduccion a matlabIntroduccion a matlab
Introduccion a matlab
 
Memoria Proyecto Fin de Carrera
Memoria Proyecto Fin de CarreraMemoria Proyecto Fin de Carrera
Memoria Proyecto Fin de Carrera
 
Manual microsoft project professional
Manual microsoft project professionalManual microsoft project professional
Manual microsoft project professional
 
Libro visual basic ii version oro
Libro visual basic ii version oroLibro visual basic ii version oro
Libro visual basic ii version oro
 
Introduccion a sql
Introduccion a sqlIntroduccion a sql
Introduccion a sql
 
PFC: Análisis de Lenguajes Específicos de Dominio para Sistemas Embebidos
PFC: Análisis de Lenguajes Específicos de Dominio para Sistemas EmbebidosPFC: Análisis de Lenguajes Específicos de Dominio para Sistemas Embebidos
PFC: Análisis de Lenguajes Específicos de Dominio para Sistemas Embebidos
 
Libro.de.ORO.de.Visual.Basic.6.0.Orientado.a.Bases.de.Datos.-.2da.Ed.Bucarelly
Libro.de.ORO.de.Visual.Basic.6.0.Orientado.a.Bases.de.Datos.-.2da.Ed.BucarellyLibro.de.ORO.de.Visual.Basic.6.0.Orientado.a.Bases.de.Datos.-.2da.Ed.Bucarelly
Libro.de.ORO.de.Visual.Basic.6.0.Orientado.a.Bases.de.Datos.-.2da.Ed.Bucarelly
 
10 conceptos basicos_procesadores_lenguaje
10 conceptos basicos_procesadores_lenguaje10 conceptos basicos_procesadores_lenguaje
10 conceptos basicos_procesadores_lenguaje
 
Herramientas de Microsoft Word
Herramientas de Microsoft WordHerramientas de Microsoft Word
Herramientas de Microsoft Word
 
Practicas visualbasic60
Practicas visualbasic60Practicas visualbasic60
Practicas visualbasic60
 
9788499640327
97884996403279788499640327
9788499640327
 
Trabajo de Informática
Trabajo de InformáticaTrabajo de Informática
Trabajo de Informática
 
Manual básico de programación en c++
Manual básico de programación en c++Manual básico de programación en c++
Manual básico de programación en c++
 
Manual c++
Manual c++Manual c++
Manual c++
 
Buenaspracticas.pdf
Buenaspracticas.pdfBuenaspracticas.pdf
Buenaspracticas.pdf
 

En vedette

3 programacion estructurada
3 programacion estructurada3 programacion estructurada
3 programacion estructuradacortezbfajardo
 
Ingeniería De Requisitos
Ingeniería De RequisitosIngeniería De Requisitos
Ingeniería De RequisitosssharLudena
 
Ingenieria de requerimientos 1
Ingenieria de requerimientos 1Ingenieria de requerimientos 1
Ingenieria de requerimientos 1jmpov441
 
Analisis Y DiseñO Orientado A Objetos
Analisis Y DiseñO Orientado A ObjetosAnalisis Y DiseñO Orientado A Objetos
Analisis Y DiseñO Orientado A Objetosyoiner santiago
 
Unidad 1.3 Analisis De Requerimientos
Unidad 1.3 Analisis De RequerimientosUnidad 1.3 Analisis De Requerimientos
Unidad 1.3 Analisis De RequerimientosSergio Sanchez
 

En vedette (6)

3 programacion estructurada
3 programacion estructurada3 programacion estructurada
3 programacion estructurada
 
Unidad 2. analisis
Unidad 2. analisisUnidad 2. analisis
Unidad 2. analisis
 
Ingeniería De Requisitos
Ingeniería De RequisitosIngeniería De Requisitos
Ingeniería De Requisitos
 
Ingenieria de requerimientos 1
Ingenieria de requerimientos 1Ingenieria de requerimientos 1
Ingenieria de requerimientos 1
 
Analisis Y DiseñO Orientado A Objetos
Analisis Y DiseñO Orientado A ObjetosAnalisis Y DiseñO Orientado A Objetos
Analisis Y DiseñO Orientado A Objetos
 
Unidad 1.3 Analisis De Requerimientos
Unidad 1.3 Analisis De RequerimientosUnidad 1.3 Analisis De Requerimientos
Unidad 1.3 Analisis De Requerimientos
 

Similaire à Progra

Disenoestructuradoalgoritmos
DisenoestructuradoalgoritmosDisenoestructuradoalgoritmos
Disenoestructuradoalgoritmosarmando_franco
 
Manual para informe de pasantías, proyecto tecnológico e informe técnico
Manual para informe de pasantías, proyecto tecnológico e informe técnicoManual para informe de pasantías, proyecto tecnológico e informe técnico
Manual para informe de pasantías, proyecto tecnológico e informe técnicoVictor Alejandro
 
Lpc++ fases para la creación de un programa
Lpc++ fases para la creación de un programaLpc++ fases para la creación de un programa
Lpc++ fases para la creación de un programaA Tenelema
 
Manual del Estudiante Ofimatica Modulo V (2).pdf
Manual del Estudiante Ofimatica Modulo V (2).pdfManual del Estudiante Ofimatica Modulo V (2).pdf
Manual del Estudiante Ofimatica Modulo V (2).pdfGESSY21
 
Base de datos_ii
Base de datos_iiBase de datos_ii
Base de datos_iiseltcomp
 
Kaitlyn Londoño - Estructuras básicas_ conceptos básicos de programación.docx
Kaitlyn Londoño - Estructuras básicas_ conceptos básicos de programación.docxKaitlyn Londoño - Estructuras básicas_ conceptos básicos de programación.docx
Kaitlyn Londoño - Estructuras básicas_ conceptos básicos de programación.docxMelissaL20
 
Fundamentos de programación
Fundamentos de programaciónFundamentos de programación
Fundamentos de programaciónMaritere Cruz
 
2 lenguaje de_programacion_para_ingenieria_pdf
2 lenguaje de_programacion_para_ingenieria_pdf2 lenguaje de_programacion_para_ingenieria_pdf
2 lenguaje de_programacion_para_ingenieria_pdfLusdielkaHernndez
 
Silabo programacion para ingenieria 2020-i dr uriel
Silabo programacion para ingenieria 2020-i dr urielSilabo programacion para ingenieria 2020-i dr uriel
Silabo programacion para ingenieria 2020-i dr urielDr.Ing. Uriel
 
Kaitlyn Londoño - Estructuras básicas_ conceptos básicos de programación (2).pdf
Kaitlyn Londoño - Estructuras básicas_ conceptos básicos de programación (2).pdfKaitlyn Londoño - Estructuras básicas_ conceptos básicos de programación (2).pdf
Kaitlyn Londoño - Estructuras básicas_ conceptos básicos de programación (2).pdfLeyan17
 
100000S03I_DisenoYArquitecturaDeSoftware.pdf
100000S03I_DisenoYArquitecturaDeSoftware.pdf100000S03I_DisenoYArquitecturaDeSoftware.pdf
100000S03I_DisenoYArquitecturaDeSoftware.pdfLuisFelipeUNI
 
Para_escolar_Informatica.doc
Para_escolar_Informatica.docPara_escolar_Informatica.doc
Para_escolar_Informatica.docAlexManchabajoy2
 
Programa completo,lic. en software
Programa completo,lic. en softwarePrograma completo,lic. en software
Programa completo,lic. en softwareVladimir Morote
 
Diseño tecnológico instruccional curso on line
Diseño tecnológico instruccional curso on lineDiseño tecnológico instruccional curso on line
Diseño tecnológico instruccional curso on linerenegus
 

Similaire à Progra (20)

Disenoestructuradoalgoritmos
DisenoestructuradoalgoritmosDisenoestructuradoalgoritmos
Disenoestructuradoalgoritmos
 
Disenoestructuradoalgoritmos
DisenoestructuradoalgoritmosDisenoestructuradoalgoritmos
Disenoestructuradoalgoritmos
 
Fundamentos programacion isc2020
Fundamentos programacion isc2020Fundamentos programacion isc2020
Fundamentos programacion isc2020
 
Manual para informe de pasantías, proyecto tecnológico e informe técnico
Manual para informe de pasantías, proyecto tecnológico e informe técnicoManual para informe de pasantías, proyecto tecnológico e informe técnico
Manual para informe de pasantías, proyecto tecnológico e informe técnico
 
L116
L116L116
L116
 
Ptordoya tfc0111
Ptordoya tfc0111Ptordoya tfc0111
Ptordoya tfc0111
 
Lpc++ fases para la creación de un programa
Lpc++ fases para la creación de un programaLpc++ fases para la creación de un programa
Lpc++ fases para la creación de un programa
 
Manual del Estudiante Ofimatica Modulo V (2).pdf
Manual del Estudiante Ofimatica Modulo V (2).pdfManual del Estudiante Ofimatica Modulo V (2).pdf
Manual del Estudiante Ofimatica Modulo V (2).pdf
 
Diseño Estructurado de Algoritmos
Diseño Estructurado de AlgoritmosDiseño Estructurado de Algoritmos
Diseño Estructurado de Algoritmos
 
Actividad 2 2
Actividad 2 2Actividad 2 2
Actividad 2 2
 
Base de datos_ii
Base de datos_iiBase de datos_ii
Base de datos_ii
 
Kaitlyn Londoño - Estructuras básicas_ conceptos básicos de programación.docx
Kaitlyn Londoño - Estructuras básicas_ conceptos básicos de programación.docxKaitlyn Londoño - Estructuras básicas_ conceptos básicos de programación.docx
Kaitlyn Londoño - Estructuras básicas_ conceptos básicos de programación.docx
 
Fundamentos de programación
Fundamentos de programaciónFundamentos de programación
Fundamentos de programación
 
2 lenguaje de_programacion_para_ingenieria_pdf
2 lenguaje de_programacion_para_ingenieria_pdf2 lenguaje de_programacion_para_ingenieria_pdf
2 lenguaje de_programacion_para_ingenieria_pdf
 
Silabo programacion para ingenieria 2020-i dr uriel
Silabo programacion para ingenieria 2020-i dr urielSilabo programacion para ingenieria 2020-i dr uriel
Silabo programacion para ingenieria 2020-i dr uriel
 
Kaitlyn Londoño - Estructuras básicas_ conceptos básicos de programación (2).pdf
Kaitlyn Londoño - Estructuras básicas_ conceptos básicos de programación (2).pdfKaitlyn Londoño - Estructuras básicas_ conceptos básicos de programación (2).pdf
Kaitlyn Londoño - Estructuras básicas_ conceptos básicos de programación (2).pdf
 
100000S03I_DisenoYArquitecturaDeSoftware.pdf
100000S03I_DisenoYArquitecturaDeSoftware.pdf100000S03I_DisenoYArquitecturaDeSoftware.pdf
100000S03I_DisenoYArquitecturaDeSoftware.pdf
 
Para_escolar_Informatica.doc
Para_escolar_Informatica.docPara_escolar_Informatica.doc
Para_escolar_Informatica.doc
 
Programa completo,lic. en software
Programa completo,lic. en softwarePrograma completo,lic. en software
Programa completo,lic. en software
 
Diseño tecnológico instruccional curso on line
Diseño tecnológico instruccional curso on lineDiseño tecnológico instruccional curso on line
Diseño tecnológico instruccional curso on line
 

Dernier

Papalia, D.E., Feldman, R.D., & Martorell, G. (2012). Desarrollo humano. Edit...
Papalia, D.E., Feldman, R.D., & Martorell, G. (2012). Desarrollo humano. Edit...Papalia, D.E., Feldman, R.D., & Martorell, G. (2012). Desarrollo humano. Edit...
Papalia, D.E., Feldman, R.D., & Martorell, G. (2012). Desarrollo humano. Edit...pizzadonitas
 
SESIÓN 15 - Imagenología Musculoesquelética.pdf
SESIÓN 15 - Imagenología Musculoesquelética.pdfSESIÓN 15 - Imagenología Musculoesquelética.pdf
SESIÓN 15 - Imagenología Musculoesquelética.pdfWillianEduardoMascar
 
Genu valgo y genu varo.pptxFSFETERTETETETET
Genu valgo y genu varo.pptxFSFETERTETETETETGenu valgo y genu varo.pptxFSFETERTETETETET
Genu valgo y genu varo.pptxFSFETERTETETETETSilviaXiomaraChaguaC
 
(2024-11-04) Actuacion frente a quemaduras (doc).docx
(2024-11-04) Actuacion frente a quemaduras (doc).docx(2024-11-04) Actuacion frente a quemaduras (doc).docx
(2024-11-04) Actuacion frente a quemaduras (doc).docxUDMAFyC SECTOR ZARAGOZA II
 
semana4_bioseguridad_en _la_fabricacion.pptx
semana4_bioseguridad_en _la_fabricacion.pptxsemana4_bioseguridad_en _la_fabricacion.pptx
semana4_bioseguridad_en _la_fabricacion.pptxMedalytHuashuayoCusi
 
(2024-04-16)DERMATOSCOPIA EN ATENCIÓN PRIMARIA (DOC)
(2024-04-16)DERMATOSCOPIA EN ATENCIÓN PRIMARIA (DOC)(2024-04-16)DERMATOSCOPIA EN ATENCIÓN PRIMARIA (DOC)
(2024-04-16)DERMATOSCOPIA EN ATENCIÓN PRIMARIA (DOC)UDMAFyC SECTOR ZARAGOZA II
 
Exposición de tobillo y pie de anatomia.
Exposición de tobillo y pie de anatomia.Exposición de tobillo y pie de anatomia.
Exposición de tobillo y pie de anatomia.milagrodejesusmartin1
 
ETAPA DOMESTICA DEL CUIDADO(HISTORIA DE LA ENFERMERIA)
ETAPA DOMESTICA DEL CUIDADO(HISTORIA DE LA ENFERMERIA)ETAPA DOMESTICA DEL CUIDADO(HISTORIA DE LA ENFERMERIA)
ETAPA DOMESTICA DEL CUIDADO(HISTORIA DE LA ENFERMERIA)David762496
 
Clase 7 Torax, Costillas y Esternon Osteologia 2024.pdf
Clase 7 Torax, Costillas y Esternon Osteologia 2024.pdfClase 7 Torax, Costillas y Esternon Osteologia 2024.pdf
Clase 7 Torax, Costillas y Esternon Osteologia 2024.pdfgarrotamara01
 
Epidemiologia 3: Estudios Epidemiológicos o Diseños Epidemiológicos - MC. MSc...
Epidemiologia 3: Estudios Epidemiológicos o Diseños Epidemiológicos - MC. MSc...Epidemiologia 3: Estudios Epidemiológicos o Diseños Epidemiológicos - MC. MSc...
Epidemiologia 3: Estudios Epidemiológicos o Diseños Epidemiológicos - MC. MSc...Juan Rodrigo Tuesta-Nole
 
ALERTA PARKINSON X DR. CRISTIAN CARPIO (11 ABRIL 2024)
ALERTA PARKINSON X DR. CRISTIAN CARPIO (11 ABRIL 2024)ALERTA PARKINSON X DR. CRISTIAN CARPIO (11 ABRIL 2024)
ALERTA PARKINSON X DR. CRISTIAN CARPIO (11 ABRIL 2024)Cristian Carpio Bazan
 
terminologia NIÑO Y ADOLESCENTE Y SAKUD.pptx
terminologia NIÑO Y ADOLESCENTE Y SAKUD.pptxterminologia NIÑO Y ADOLESCENTE Y SAKUD.pptx
terminologia NIÑO Y ADOLESCENTE Y SAKUD.pptxrosi339302
 
PS09_ET_Asistencia_basica_hospitalaria.pptx
PS09_ET_Asistencia_basica_hospitalaria.pptxPS09_ET_Asistencia_basica_hospitalaria.pptx
PS09_ET_Asistencia_basica_hospitalaria.pptxHuroKastillo
 
Paludismo o Malaria- Medicina tropical.pptx
Paludismo o Malaria- Medicina tropical.pptxPaludismo o Malaria- Medicina tropical.pptx
Paludismo o Malaria- Medicina tropical.pptx Estefania Recalde Mejia
 
2.Primer semana Desarrollo: DE LA OVULACION A LA IMPLANTACION.pptx
2.Primer semana Desarrollo: DE LA OVULACION A LA IMPLANTACION.pptx2.Primer semana Desarrollo: DE LA OVULACION A LA IMPLANTACION.pptx
2.Primer semana Desarrollo: DE LA OVULACION A LA IMPLANTACION.pptxaviladiez22
 
Clase 8 Miembro Superior Osteologia 2024.pdf
Clase 8 Miembro Superior Osteologia 2024.pdfClase 8 Miembro Superior Osteologia 2024.pdf
Clase 8 Miembro Superior Osteologia 2024.pdfgarrotamara01
 

Dernier (20)

Papalia, D.E., Feldman, R.D., & Martorell, G. (2012). Desarrollo humano. Edit...
Papalia, D.E., Feldman, R.D., & Martorell, G. (2012). Desarrollo humano. Edit...Papalia, D.E., Feldman, R.D., & Martorell, G. (2012). Desarrollo humano. Edit...
Papalia, D.E., Feldman, R.D., & Martorell, G. (2012). Desarrollo humano. Edit...
 
(2024-04-10) TÉCNICA ROVIRALTA (doc).pdf
(2024-04-10) TÉCNICA ROVIRALTA (doc).pdf(2024-04-10) TÉCNICA ROVIRALTA (doc).pdf
(2024-04-10) TÉCNICA ROVIRALTA (doc).pdf
 
SESIÓN 15 - Imagenología Musculoesquelética.pdf
SESIÓN 15 - Imagenología Musculoesquelética.pdfSESIÓN 15 - Imagenología Musculoesquelética.pdf
SESIÓN 15 - Imagenología Musculoesquelética.pdf
 
Genu valgo y genu varo.pptxFSFETERTETETETET
Genu valgo y genu varo.pptxFSFETERTETETETETGenu valgo y genu varo.pptxFSFETERTETETETET
Genu valgo y genu varo.pptxFSFETERTETETETET
 
(2024-11-04) Actuacion frente a quemaduras (doc).docx
(2024-11-04) Actuacion frente a quemaduras (doc).docx(2024-11-04) Actuacion frente a quemaduras (doc).docx
(2024-11-04) Actuacion frente a quemaduras (doc).docx
 
semana4_bioseguridad_en _la_fabricacion.pptx
semana4_bioseguridad_en _la_fabricacion.pptxsemana4_bioseguridad_en _la_fabricacion.pptx
semana4_bioseguridad_en _la_fabricacion.pptx
 
(2024-04-16)DERMATOSCOPIA EN ATENCIÓN PRIMARIA (DOC)
(2024-04-16)DERMATOSCOPIA EN ATENCIÓN PRIMARIA (DOC)(2024-04-16)DERMATOSCOPIA EN ATENCIÓN PRIMARIA (DOC)
(2024-04-16)DERMATOSCOPIA EN ATENCIÓN PRIMARIA (DOC)
 
Exposición de tobillo y pie de anatomia.
Exposición de tobillo y pie de anatomia.Exposición de tobillo y pie de anatomia.
Exposición de tobillo y pie de anatomia.
 
ETAPA DOMESTICA DEL CUIDADO(HISTORIA DE LA ENFERMERIA)
ETAPA DOMESTICA DEL CUIDADO(HISTORIA DE LA ENFERMERIA)ETAPA DOMESTICA DEL CUIDADO(HISTORIA DE LA ENFERMERIA)
ETAPA DOMESTICA DEL CUIDADO(HISTORIA DE LA ENFERMERIA)
 
(2024-04-10) PACIENTE POLIMEDICADO (ppt).pdf
(2024-04-10) PACIENTE POLIMEDICADO (ppt).pdf(2024-04-10) PACIENTE POLIMEDICADO (ppt).pdf
(2024-04-10) PACIENTE POLIMEDICADO (ppt).pdf
 
Clase 7 Torax, Costillas y Esternon Osteologia 2024.pdf
Clase 7 Torax, Costillas y Esternon Osteologia 2024.pdfClase 7 Torax, Costillas y Esternon Osteologia 2024.pdf
Clase 7 Torax, Costillas y Esternon Osteologia 2024.pdf
 
Estudio FULL-REVASC
Estudio FULL-REVASCEstudio FULL-REVASC
Estudio FULL-REVASC
 
Epidemiologia 3: Estudios Epidemiológicos o Diseños Epidemiológicos - MC. MSc...
Epidemiologia 3: Estudios Epidemiológicos o Diseños Epidemiológicos - MC. MSc...Epidemiologia 3: Estudios Epidemiológicos o Diseños Epidemiológicos - MC. MSc...
Epidemiologia 3: Estudios Epidemiológicos o Diseños Epidemiológicos - MC. MSc...
 
ALERTA PARKINSON X DR. CRISTIAN CARPIO (11 ABRIL 2024)
ALERTA PARKINSON X DR. CRISTIAN CARPIO (11 ABRIL 2024)ALERTA PARKINSON X DR. CRISTIAN CARPIO (11 ABRIL 2024)
ALERTA PARKINSON X DR. CRISTIAN CARPIO (11 ABRIL 2024)
 
terminologia NIÑO Y ADOLESCENTE Y SAKUD.pptx
terminologia NIÑO Y ADOLESCENTE Y SAKUD.pptxterminologia NIÑO Y ADOLESCENTE Y SAKUD.pptx
terminologia NIÑO Y ADOLESCENTE Y SAKUD.pptx
 
PS09_ET_Asistencia_basica_hospitalaria.pptx
PS09_ET_Asistencia_basica_hospitalaria.pptxPS09_ET_Asistencia_basica_hospitalaria.pptx
PS09_ET_Asistencia_basica_hospitalaria.pptx
 
Paludismo o Malaria- Medicina tropical.pptx
Paludismo o Malaria- Medicina tropical.pptxPaludismo o Malaria- Medicina tropical.pptx
Paludismo o Malaria- Medicina tropical.pptx
 
(2024-11-04) Patologia anorectal (doc).docx
(2024-11-04) Patologia anorectal (doc).docx(2024-11-04) Patologia anorectal (doc).docx
(2024-11-04) Patologia anorectal (doc).docx
 
2.Primer semana Desarrollo: DE LA OVULACION A LA IMPLANTACION.pptx
2.Primer semana Desarrollo: DE LA OVULACION A LA IMPLANTACION.pptx2.Primer semana Desarrollo: DE LA OVULACION A LA IMPLANTACION.pptx
2.Primer semana Desarrollo: DE LA OVULACION A LA IMPLANTACION.pptx
 
Clase 8 Miembro Superior Osteologia 2024.pdf
Clase 8 Miembro Superior Osteologia 2024.pdfClase 8 Miembro Superior Osteologia 2024.pdf
Clase 8 Miembro Superior Osteologia 2024.pdf
 

Progra

  • 1. Fundamentos de programación Programa Desarrollado Cuatrimestre dos Programa de la asignatura: Fundamentos de Programación Clave: 150910206 ESAD Agosto, 2010 Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 1
  • 2. Fundamentos de programación Programa Desarrollado Índice I. Información general de la asignatura 3 a. Ficha de identificación...................................................................................................................................... 3 b. Descripción ........................................................................................................................................................ 3 c. Propósito ............................................................................................................................................................ 4 II. Competencia(s) a desarrollar 5 Competencia general:........................................................................................................................................... 5 Competencias específicas: .............................................................................................................................. 5 III. Temario 6 IV. Metodología de trabajo 8 V. Evaluación 10 VI. Materiales de apoyo 12 VII. Desarrollo de contenidos por unidad 13 Unidad 1: Introducción a la computadora y desarrollo de software ........................................................... 13 Unidad 2: Diseño de algoritmos ........................................................................................................................ 31 Unidad 3: Introducción al lenguaje C ............................................................................................................... 49 Unidad 4: Estructuras de control....................................................................................................................... 78 Unidad 5: Estructuras de datos ....................................................................................................................... 118 Unidad 6: Funciones ......................................................................................................................................... 148 Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 2
  • 3. Fundamentos de programación Programa Desarrollado I. Información general de la asignatura a. Ficha de identificación Ingeniería en logística y transporte, Ingeniería en Nombre de la Licenciatura o Ingeniería: telemática Nombre del curso o asignatura Fundamentos de Programación Clave de asignatura: 150910206 Bases de Datos, Análisis Orientado a Objetos, Seriación: Programación Orientada a Objeto Cuatrimestre: Dos Horas contempladas: 72 b. Descripción La asignatura de Fundamentos de Programación tiene como meta principal que desarrolles las competencias necesarias para construir programas que resuelvan problemas reales. Constituye un pilar primordial para aquellos alumnos que, como tú, están estudiando una carrera relacionada con computación -como Desarrollo de Software y Telemática- pues los conocimientos y habilidades que desarrollen en este curso serán indispensables para la varias de las asignaturas subsecuentes del plan de estudios de ambas ingenierías, tal es el caso de bases de datos, programación orientada a objetos, programación web, estructura de datos, entre otras. El lenguaje de alto nivel que se ha elegido para implementar los programas es C, ya que es uno de los lenguajes, estructurados y modulares, utilizados actualmente; además cuenta con entornos de trabajo de software libre, como el que utilizaremos llamado Dev-C. Para facilitar que desarrolles las competencias establecidas, los contenidos del curso se han dividido de forma estratégica en seis unidades. En la primera se delinea el concepto de computadora y su funcionamiento, para ello se describen los elementos que la integran; posteriormente, se hace una aproximación a los lenguajes de programación y los paradigmas que existen en la actualidad, resaltando la programación modular y estructurada. En la siguiente unidad se expone la metodología de la programación y se introduce el concepto de algoritmo, que es la solución sistemática de problemas, Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 3
  • 4. Fundamentos de programación Programa Desarrollado así que también se presentan dos formas de representación: el pseudocódigo y los diagramas de flujo. Asimismo, se ilustran las estructuras secuenciales, selectivas y repetitivas. A continuación, en la unidad tres, se presentan los elementos básicos para construir un programa simple en lenguaje C: datos, contantes, variables y las operaciones básicas de entradas/salidas para describir el uso de los operadores aritméticos, relacionales y lógicos para la manipulación de operaciones y expresiones en C. En la unidad cuatro se distinguen y utilizan las distintas estructuras de control, tanto selectivas (if, if- else, switch) como repetitivas (while, do-while, for), que ofrece el lenguaje C; se introduce su representación en diagrama de flujo y algoritmo, además de su sintaxis en C. En la unidad cinco se introducen las estructuras de datos: arreglos y registros, se explica qué son, cómo funcionan y para qué sirven, además, se plantean problemas en donde su uso es indispensable para su resolución. Por último, en la unidad seis se reconoce la importancia de la programación modular, construyendo soluciones modulares utilizando funciones en lenguaje C. c. Propósito El curso tiene como finalidad proporcionarte las bases para que comiences a desarrollar programas estructurados que solucionen problemas simples, a través del desarrollo de algoritmos en pseudocódigo y diagrama de flujo y su codificación en lenguaje C, además se te describe el proceso de compilación de un programa y su ejecución identificando los elementos de la computadora que intervienen en cada paso. Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 4
  • 5. Fundamentos de programación Programa Desarrollado II. Competencia(s) a desarrollar Competencia general: Desarrollar programas estructurados y modulares que resuelvan problemas simples, mediante el análisis del problema, el diseño de un algoritmo y su codificación en lenguaje C. Competencias específicas: • Describir los elementos de la computadora y el ciclo de vida de software mediante el análisis un programa simple, con el fin de identificar los pasos que se realizan para construirlo y determinar qué elementos de la computadora intervienen en su ejecución. • Diseñar algoritmos para resolver problemas mediante su representación en un diagrama de flujo y la elaboración del pseudocódigo. • Utilizar el lenguaje de programación C para resolver problemas a través de la implementación de algoritmos secuenciales. • Utilizar estructuras de control selectivas y repetitivas para resolver problemas simples a través del desarrollo de programas en lenguaje C. • Utilizar estructuras de datos para almacenar y manipular los datos de un programa por medio del desarrollo de programas en lenguaje C. • Implementar funciones para resolver problemas a través del desarrollo de programas modulares escritos en lenguaje C. Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 5
  • 6. Fundamentos de programación Programa Desarrollado III. Temario 1. Introducción a la computadora y desarrollo de software 1.1. ¿Qué es una computadora? 1.2. Estructura y funcionamiento de una computadora 1.2.1. Modelo de Von Neumann 1.2.2. Ejecución de programas en la computadora 1.2.3. Almacenamientos de programas y datos 1.3. Lenguajes de programación 1.3.1. Evolución de los lenguajes de programación 1.3.2. Paradigmas de los lenguajes de programación 1.4. Ciclo de vida del software 2. Diseño de algoritmos 2.1. Concepto de algoritmo y características 2.2. Representaciones de algoritmos 2.2.1. Pseudocódigo 2.2.2. Diagrama de flujo 2.3. Estructuras de control 2.3.1. Secuenciales 2.3.2. Selectivas 2.3.3. Repetitivas 3. Introducción al lenguaje C 3.1. Componentes de un programa 3.1.1. Instrucciones 3.1.2. Comentarios 3.1.3. Palabras reservadas 3.1.4. Estructura general de un programa 3.2. Tipos de datos 3.3. Variables y constantes 3.3.1. Identificadores 3.3.2. Declaración e inicialización de variables 3.3.3. Tipos de constantes 3.3.4. Declaración de constantes 3.4. Expresiones matemáticas 3.4.1. Tipos de operadores 3.4.2. Evaluación de expresiones 3.5. Bibliotecas y funciones 3.5.1. Funciones matemáticas 3.5.2. Funciones de entrada y salida 3.6. Codificación de algoritmos Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 6
  • 7. Fundamentos de programación Programa Desarrollado 4. Estructuras de control 4.1. Estructuras selectivas 4.1.1. Estructura selectivasimple (if) 4.1.2. Estructura selectiva doble (if-else) 4.1.3. Estructura selectiva múltiple (switch-case) 4.2. Estructuras repetitivas 4.2.1. Estructura Mientras (while) 4.2.2. Estructura Desde-mientras (for) 4.2.3. Estructura Hacer-mientras (do-while) 4.3. Estructuras anidadas 5. Estructuras de datos 5.1. Arreglos 5.1.1. Definición y tipos 5.1.2. Declaración e inicialización 5.1.3. Acceso a los elementos de un arreglo 5.1.4. Ciclos y arreglos 5.1.5. Cadenas 5.2. Estructuras 5.2.1. Definición, declaración e inicialización 5.2.2. Acceso a los elementos 6. Funciones 6.1. Diseño descendente 6.2. Definición, declaración e invocación de funciones en C 6.3. Alcance de las variables 6.4. Paso de parámetros 6.4.1. Por valor 6.4.2. Por referencia Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 7
  • 8. Fundamentos de programación Programa Desarrollado IV. Metodología de trabajo Para trabajar en esta asignatura, se ha propuesto la metodología del Aprendizaje Basado en Problemas, pues debido a la naturaleza de los contenidos, tendrás que resolver problemas de manera constante para poner en práctica lo aprendido. Como el propósito de este curso es que desarrolles programas de software que resuelvan problemas simples, por cada unidad se ha propuesto uno o más problemas a partir de los cuales sete presentan los contenidos correspondientes, la intención de esto es que primero se te planteen los problemas para que los analices y posteriormente se te presente la solución de los mismos mediante algoritmos o programas; lo que se busca es que alcances las competencias específicas de cada unidad a través de, primero la observación y el análisis de los problemas ejemplo que te ayudarán a identificar patrones comunes, y posteriormente la resolución de problemas un poco más complejos a través del desarrollo de estrategias de solución similares. Ahora bien, para que puedas resolver un problema mediante un programa de computadora, primero tienes que tener claro el funcionamiento principal de la misma, tanto para almacenar la información como para llevar a cabo el conjunto de instrucciones que integran la solución de un problema, es decir, el programa. Por tal motivo, en la primera unidad se expone la arquitectura tradicional de las computadoras conocida como el Modelo de Von Neumann a través de la cual se te explica cómo se almacenan los programas y los datos de un problema en una computadora y qué elementos intervienen en la ejecución de las instrucciones. Lo anterior se expone utilizando un programa que se encarga de calcular el área de un rectángulo, de esta manera podrás aprender los contenidos mediante un ejemplo simple. Posteriormente, se describen los pasos que llevan a la construcción de un programa, nuevamente, utilizando un ejemplo simple. La evaluación de esta unidad se realizará mediante una prueba de opción múltiple en la que se incluyen los temas expuestos. Para exponer los temas relacionados con la elaboración de los algoritmos, se recurre al mundo de la ardilla, un ejemplo en el cual se supone que una ardilla ha sido entrenada para realizar un conjunto limitado de instrucciones precisas, de tal manera que para solucionar un problema únicamente se puede recurrir a este conjunto. De esta forma se pretende que reconozcas intuitivamente que la computadora –al igual que la ardilla– sólo es capaz de realizar un conjunto limitado de instrucciones precisas, por lo que la solución de un problema sólo puede incluir instrucciones reconocidas por ésta. Así mismo, mediante este ejemplo, se te muestra qué es un algoritmo, cuáles son sus características y sus formas de representación; posteriormente se te presentan las estructuras de control básicas de la programación estructurada ejemplificando su uso a través de la construcción de algoritmos que dirigen a la ardilla en la realización de una tarea específica. Así se te introduce en el diseño de soluciones estructuradas de problemas simples representadas de manera formal, ya sea con un diagrama de flujo o con un pseudocódigo. Es importante mencionar que la ventaja de presentar el tema desde un ejemplo tan simple y limitado como el mundo de la ardilla, facilita que puedas proponer soluciones estructuradas en un lenguaje específico, que es justo de lo que se trata la programación. Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 8
  • 9. Fundamentos de programación Programa Desarrollado En las siguientes unidades la estrategia de aprendizaje es similar, se te presentan los contenidos al mismo tiempo que se utilizan para solucionar problemas, sólo que en este caso se proponen situaciones reales que te son familiares, de tal manera que cuentes con los conocimientos necesarios para solucionarlos y solo te tengas que enfocar en representar la solución utilizando las estructuras de control definidas, es decir, las instrucciones permitidas. En general, en las actividades formativas deberás realizar algunas modificaciones a los algoritmos o programas presentados en los contenidos, o bien, los escribirás en lenguaje C para que puedas ver su ejecución, además debes ingresar al foro de cada unidad para realizar los comentarios que tengas al respecto. Es importante que realices cada una de las actividades propuestas por que a través de ellas se complementan los temas expuestos. De igual manera, para poner en práctica los conocimientos adquiridos y evaluar que se haya alcanzado la competencia específica a lo largo del curso desarrollarás un proyecto integrador que consiste en el planteamiento, análisis, diseño de la solución e implementación de un programa que involucre el uso de todas las estructuras de control y de datos que se estudiarán. En este caso, tú serás el responsable de plantear el problema que deseas solucionar y junto con tu facilitador delimitarás las fases y/o versiones que realizarás en cada unidad. El papel que juega tu facilitador (a) en el proceso de aprendizaje es fundamental, pues su tarea es guiarte en la solución de problemas a partir del análisis que tú realices y las ideas o dudas que te surjan con el mismo. El facilitador por ningún motivo debe darte la solución completa de un problema, en lugar de ello debe propiciar el intercambio de ideas y experiencias de los estudiantes mediante foros de discusión, favoreciendo el aprendizaje colaborativo; si después de esto siguen existiendo dudas se recomienda que resuelva problemas similares para que tanto tú como tus compañeros refuercen los conocimientos y habilidades de una manera inductiva y así logren dar solución al problema en cuestión. Por lo anterior, existe un foro de discusión general en el cual cualquiera puede exponer sus dudas respecto a un tema o problema para que sean retroalimentados por tu facilitador y los compañeros de grupo. Es importante que el facilitador promueva un clima de respeto mutuo y libertad de expresión para que tanto tú como tus compañeros se sientan cómodos al externar sus dudas y propuestas, permitiendo la disensión de manera fundamentada y deferente. En lo referente a la evaluación de las actividades y evidencias, tu facilitador debe revisar cuidadosamente los entregables que hagas y retroalimentarlos de manera positiva, clara y concisa; haciendo evidente el avance que hayas alcance y sin perder de vista que los errores que comentas debe ser utilizados a favor de tu aprendizaje, por lo que debe prestar principal atención a éstos indicándote en qué consiste el error y cómo se corrige, fundamentando su anotación en los contenidos del curso. Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 9
  • 10. Fundamentos de programación Programa Desarrollado V. Evaluación La evaluación del curso corresponderá en su totalidad al trabajo en el aula virtual, que se divide en: las actividades formativas, equivalentes al 20% de toda la calificación y, el portafolio de evidencias que representa el 80% restante. De tal manera que, mediante las actividades formativas propuestas para cada unidad se refuerzan los conocimientos abortados y se desarrollan las habilidades que el requieres para solucionar por ti mismo problemas similares a los que se presentan y resuelven. En cambio, el propósito de las evidencias de aprendizaje propuestas para cada unidad (portafolio de evidencias) es comprobar que hayas alcanzado la competencia específica, de tal manera que el conjunto de todas las evidencias sean la prueba de que has logrado la competencia general. Es requisito indispensable que realices y/o entregues todas las actividades formativas y las evidencias de aprendizaje en el tiempo establecido, de esta manera se garantiza la retroalimentación en tiempo y forma que tu facilitador realizará para que tengas claro el avance de tu aprendizaje, lo cual te servirá para que desarrolles las actividades o evidencias subsecuentes. En el caso de las evidencias de aprendizaje la calificación se obtendrá a partir de las escalas establecidas para cada una, las cuales conocerás de antemano. En el caso de las actividades formativas, serán revisadas por el facilitador(a), quién te hará llegar una retroalimentación que te ayude a ver tu avance y los puntos que puedes mejorar. Únicamente se considerará aprobado el curso si tu promedio total es mayor o igual a la calificación mínima establecida por el ESAD. Los trabajos que se tomarán como evidencias de aprendizaje son: Unidad 2: Planteamiento del problema Especificación clara y precisa del problema que se resolverá mediante un programa en C Unidad 3: Análisis del problema Datos de entrada, salida y bosquejo de la solución. Unidad 4: Programa en C. Estructuras de control. Primera versión de la solución del problema (algoritmo y codificación) que incluya estructuras secuenciales, selectivas y repetitivas. Unidad 5: Programa en C. Estructuras de datos Segunda versión de la solución del problema (algoritmo y codificación) que incluya estructuras de datos. Unidad 6: Programa en C. Modular (versión final) Entrega final del programa que soluciona el problema de forma modular Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 10
  • 11. Fundamentos de programación Programa Desarrollado A continuación se te presenta la ponderación de las evidencias de aprendizaje, las cuales tendrás que enviar a tu facilitador (a) por medio del Portafolio de Evidencias. Recuerda que el 100% de éstas, equivale al 80% de la calificación final del curso en la que se promedian actividades formativas y sumativas: ACTIVIDAD PORCENTAJE Evidencia de la unidad 2 13% Evidencia de la unidad 3 17% Evidencia de la unidad 4 36% Evidencia de la unidad 5 17% Evidencia de la unidad 6 17% Total 100% Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 11
  • 12. Fundamentos de programación Programa Desarrollado VI. Materiales de apoyo Bibliografía básica: Böhm, C., & Jacopini, G. (1966). Flow diagrams, Turing machines, and languages only with two formation rules". Communications of the ACM, 9 (5), 366-371. Cairó, O. (2005). Metodología de la programación: Algoritmos, diagramas de flujo y programas. México, D.F.: Alfaomega. Guerrero, F. (s.f.). mailxmail.com. Recuperado el 15 de 8 de 2010, de http://www.mailxmail.com/curso- introduccion-lenguaje-c Joyanes, L., & Zohanero, I. (2005). Programación en C. Metodología, algoritmos y estructuras de datos. España: Mc Graw Hill. Kernighan, B., & Ritchie, D. (1991). El lenguaje de programción C. México: Prentice-Hall Hispanoamericana. López, L. (2005). Programación estructurada en lenguaje C. México: Alfaomega. Reyes, A., & Cruz, D. (2009). Notas de clase: Introducción a la programación. México, D.F.: UACM. Villela, H. T. (20 de agosto de 2010). Manual de C. Obtenido de http://www.fismat.umich.mx/mn1/manual/ Viso, E., & Pelaez, C. (2007). Introducción a las ciencias de la computación con Java. México, D.F.: La prensas de ciencias, Facultad de Ciencias, UNAM. Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 12
  • 13. Fundamentos de programación Programa Desarrollado VII. Desarrollo de contenidos por unidad Unidad 1: Introducción a la computadora y desarrollo de software Propósitos de la unidad En esta unidad: • Identificarás los conceptos básicos relacionados con la computadora y los lenguajes de programación. • Distinguirás los elementos de una computadora que intervienen en la ejecución de un programa a través del modelo de Von Neumann. • Distinguirás los paradigmas de programación y los lenguajes asociados a éstos. • Reconocerás las fases que se siguen para solucionar un problema mediante la computadora. Competencia específica Describir los elementos de la computadora y el ciclo de vida de software mediante el análisis un programa simple, con el fin de identificar los pasos que se realizan para construirlo y determinar qué elementos de la computadora intervienen en su ejecución. Introducción Bienvenido a la primera unidad del curso fundamentos de programación, en esta unidad estudiaremos qué son las computadoras y cómo pueden ayudarnos para resolver problemas. Lo primero que tienes que tener claro es que las computadoras no poseen inteligencia alguna, ya que por sí solas no son capaces de resolver ningún problema, su importancia está en la capacidad de datos que pueden almacenar y manipular; de tal manera que para lograr nuestro fin– resolver problemas mediante la computadora – es necesario desarrollar programas escritos en un lenguaje de programación para que puedan ser ejecutados por una computadora. Los orígenes de las computadoras se remontan a dispositivos mecánicos como el ábaco que sirve para contar y ya se utilizaba en el año 2000 a.C, seguido de la Pascalina que fue la primera calculadora mecánica del mundo inventada por el francés Blaise Pascal en el año de 1642, y que después fue perfeccionada por Gottfried Leibniz. Dos siglos después, en el año de 1834, Charles Babbage anticipó la estructura de la computadora electrónica moderna, sin lograr su objetivo dadas las limitaciones de ingeniería del siglo XIX. Fue hasta la segunda guerra mundial (1936) que se cumplieron sus expectativas, cuando Alan Turing desarrolló la primera computadora electromecánica: el Colossus, Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 13
  • 14. Fundamentos de programación Programa Desarrollado encargada de descifrar los mensajes alemanes escritos en código Enigma. 1 Una década después Wallace J Eckert y Jonh W. Mauchly construyeron la primera computadora digital totalmente electrónica, llamada ENIAC (por sus siglas en inglés Electronic Numerical Intregrator And Computer). La característica principal de este invento es que se trataba de un componente de propósito general, ya que se podía programar para que resolviera diferentes problemas, pero la programación se realizaba modificando o reconstruyendo algunas partes del hardware. Con el fin de remediar esto, en 1945 el matemático Jonh Von Neumann propuso una arquitectura de computadoras cuya programación no era por medio de cables sino por medio de la creación de programas, a la que se le conoce como Modelo de Von Neumann, y que es, hasta hoy en día, la arquitectura base de las computadoras. Por lo anterior, en esta unidad se estudiarán los siguientes temas: el Modelo de Von Neumann, los pasos para realizar un programa y los principales paradigmas y lenguajes de programación utilizados actualmente. Actividad 1. Foro Fundamentos de programación Para facilitar el estudio de la asignatura, hemos creado un foro de discusión general, a través del cual podrás comentar cualquier asunto relacionado con Fundamentos de programación. Accede al foro desde el aula virtual. 1.1 ¿Qué es una computadora? Para fines de este curso entenderemos que una computadora es una máquina electrónica que recibe datos de entrada y los procesa de acuerdo al conjunto de instrucciones, llamado programa, para obtener nuevos datos que son el resultado del proceso, tal como se ilustra en la siguiente figura. 1 Se conoce como código Enigma al lenguaje de codificación de la máquina con el mismo nombre, utilizada en Europa a inicios de 1920, para cifrar y descifrar mensaje. Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 14
  • 15. Fundamentos de programación Programa Desarrollado Figura 1.1:Computadora Lo anterior nos lleva a clasificar los componentes de una computadora en dos clases: hardware y software. Los recursos de hardware son todos aquellos elementos de la computadora que se pueden palpar, como por ejemplo: el monitor, el teclado, el disco duro, la memoria, entre otros. En cambio, los recursos de software son aquellos elementos intangibles sin los cuales la computadora no funcionaría, esto es, el soporte lógico: programas y datos, entre los cuales se encuentran los sistemas operativos, editores de texto, compiladores, bases de datos, videojuegos, entre otros. 1.2 Estructura y funcionamiento de una computadora Si nos cuestionamos ¿cómo funciona y se estructura internamente la computadora?, ¿cómo se obtienen los resultados? y ¿cómo se guardan los programas y datos en la memoria?, cuando tenemos un primer acercamiento con estos equipos, a pesar de manejarlos a diario, estas preguntas no son tan fáciles de contestar. Es por eso que en esta sección explicaremos y responderemos a estos cuestionamientos mediante el Modelo de Von Neumann. 1.2.1 Modelo de Von Neumann El Modelo de Von Neumann propone que tanto el programa como los datos sean almacenados en la memoria, de esta forma la computadora no tendría que reconstruirse, pues para programarla únicamente debe introducirse el programa por el dispositivo indicado, y posteriormente alimentar con los datos de entrada para que calcule la salida correspondiente. Los elementos que componen esta arquitectura son: la unidad central de procesamiento integrada por la unidad aritmética-lógica y la unidad de control, la memoria y los dispositivos de entrada/salida. A continuación se describe brevemente la función de cada uno de los elementos que integran el Modelo de Von Neumann: Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 15
  • 16. Fundamentos de programación Programa Desarrollado • Unidad Central de Procesamiento(CPU, Central Process Unit), controla y coordina la ejecución de las instrucciones, para ello utiliza la Unidad Aritmético-Lógica encargada del procesamiento de los datos y la Unidad de Control para el procesamiento de las instrucciones. o Unidad Aritmético-Lógica(ALU, Arithmetic Logic Unit), realiza todas las operaciones aritméticas (suma y resta) y lógicas (operaciones del Algebra de Boole). Además de los circuitos que le permiten realizar dichas operaciones, la ALU incluye un elemento auxiliar donde se almacenan temporalmente los datos que manipula conocido como acumulador o registro temporal (TR, Temporal Register). o Unidad de Control(CU, Control Unit), se encarga de leer las instrucciones almacenadas en memoria, decodificarlas y después enviar las señales a los componentes que están involucrados en su ejecución, para lo cual tiene dos elementos auxiliares el Contador del Programa(PC, Program Counter) y el Registro de Instrucción(IR, Instruction Register). En el IR se guarda temporalmente la instrucción que debe ser ejecutada, mientras que en el PC se almacena la dirección de memoria que contiene la siguiente instrucción que se ejecutará. • Memoria principal, es la parte de la computadora donde se almacenan los datos y las instrucciones durante la ejecución de un programa. Físicamente está compuesta por circuitos integrados. Las computadoras actuales cuentan con un área de memoria de sólo lectura – a la que se le conoce como memoria de tipo ROM (Read Only Memory) –y otra en la cual es posible escribir y leer datos – denominada de tipo RAM (Random Access Memory). La memoria RAM tiene el inconveniente de ser volátil pues al apagarse la computadora los datos almacenados se pierden. Para resolver este inconveniente, se cuenta con otro tipo de memoria, denominada memoria secundaria, en ella se pueden almacenar una gran cantidad de información permanentemente, mientras el usuario no la borre. La desventaja de este tipo de dispositivos es que no son tan rápidos como la memoria RAM. Los discos duros, los discos ópticos (CD o DVD), la memoria flash (USB) y las cintas magnéticas, entre otras, son ejemplos de dispositivos de almacenamiento secundario. • Dispositivos de entrada y salida (Input/Output), son responsables de la comunicación con el usuario del sistema. Los dispositivos de entrada permiten introducir en la computadora datos e instrucciones, mismas que son transformadas en señales binarias de naturaleza eléctrica para almacenarlas en la memoria. Por otro lado, los dispositivos de salida permiten enviar los resultados a los usuarios de las computadoras, transformando las señales eléctricas binarias en información que éstos puedan comprender. El teclado está considerado como el dispositivo de entrada estándar pero existen otros del mismo tipo, por ejemplo: el ratón, el escáner, la lectora óptica, el micrófono o la tabla digital. A su vez el monitor es el dispositivo de salida estándar; otros ejemplos de dispositivos de salida son: impresora, bocinas, plotter, etc. Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 16
  • 17. Fundamentos de programación Programa Desarrollado Es así que todas las unidades de la computadora se comunican a través del sistema de buses que son cables mediante los cuales se envían señales y dependiendo de la información que transmiten se clasifican en: a) El bus de direcciones transmite la dirección de memoria de la que se quiere leer o en la que se quiere escribir. b) El bus de control selecciona la operación a realizar en una celda de memoria (lectura o escritura). c) El bus de datos transmite el contenido desde o hacia una celda de memoria seleccionada en el bus de direcciones según la operación elegida en el bus de control sea lectura o escritura. Ahora ya sabemos cómo está estructurada internamente la computadoras, qué elementos la integran y cuál es la función de cada uno de ellos, el siguiente paso es descubrir cómo colaboran para llevar a cabo la ejecución de un programa, en seguida lo explicamos: los datos de entrada que requiere un programa se introducen a la computadora, a través de los dispositivos de entrada; posteriormente se almacenan en la memoria RAM, para que la CPU pueda procesarlos, conforme a las instrucciones del programa, hasta obtener el resultado deseado, mismo que envía al usuario por medio de los dispositivos de salida. Todas estas acciones son coordinadas por la unidad de control que envía las señales y datos a cada uno de los dispositivos de la computadora involucrados en la ejecución de las instrucciones del programa a través del sistema de buses. En la siguiente sección se describe con mayor detalle este proceso. 1.2.2Ejecución de programas en la computadora Para que entender mejor lo que sucede en el interior de la CPU al ejecutar cualquier programa, a continuación se describen de manera general los pasos que se realizan, una vez que el programa y los datos fueron almacenados en la memoria principal: a) Primero, la unidad de control consulta en la memoria la instrucción indicada en el contador del programa y la almacena en el registro de instrucciones, actualizando el contador del programa con la dirección de memoria de la siguiente instrucción. b) Después de que se almacenó la instrucción en el registro del programa, la unidad de control se encarga de decodificarla, detectando qué dispositivos están implicados en su ejecución, estos pueden ser: la ALU, cuando se tiene que hacer una operación; los dispositivos de entrada y/o salida, cuando se tiene que enviar o recibir un dato; o la memoria, si se quiere guardar o consultar un dato; posteriormente envía las señales de control a los mismos indicándoles la acción y, si es el caso, los datos y/o la dirección de memoria correspondiente. c) Cuando los dispositivos realicen su tarea enviarán una señal a la unidad de control, para que esta repita el mismo procedimiento con la siguiente instrucción, así hasta ejecutar todo el programa. Al período en el que se ejecuta una instrucción se le conoce como ciclo de instrucción o ciclo fetch. Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 17
  • 18. Fundamentos de programación Programa Desarrollado Con el fin de ilustrar este procedimiento, analizaremos la ejecución del siguiente programa escrito en un lenguaje de programación ficticio. Ejemplo 1.1: El siguiente conjunto de instrucciones calcula el área de un rectángulo. Imprimir “Ingresa la base:” Leer b Imprimir “Ingresa la altura:” Leer h area← b*h Imprimir área Programa 1.1:Calcula área de un rectángulo Antes de definir paso a paso la ejecución de este programa describiremos la función de cada una de las instrucciones que lo integran. Instrucción Descripción Imprime en el dispositivo de salida estándar los <Datos> Imprimir <Dato> indicados en la instrucción, que pueden ser un mensaje de texto o el valor de una variable. Lee por medio del teclado un dato, lo almacena en la variable Leer <X> <X> indicado y lo almacena en la memoria RAM. La flecha representa una asignación, esta acción actualiza la <X> ← <Dato> dirección de memoria asignada a <X> con el valor <Dato>. Tabla 1.1: Lista de instrucciones en lenguaje de programación ficticio Cabe señalar que en los lenguajes de programación, las direcciones de memoria se representan por medio de variables, para hacerlos más legibles. De tal manera que <X> representa una variable y <Dato> puede ser un mensaje o cualquier valor. Ahora sí, de acuerdo con la información anterior, en la siguiente tabla se describen paso a paso las acciones que realiza la unidad de control junto con las otras unidades de la computadora involucradas en la ejecución de cada una de las instrucciones del programa. Instrucción Descripción de la instrucción Imprimir “Ingresa base: ”  La unidad de control envía señales al monitor para que imprima el Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 18
  • 19. Fundamentos de programación Programa Desarrollado mensaje “Ingresa base:”.  La unidad de control coordina las acciones necesarias para que, por Leer b medio del teclado ,el usuario introduzca un número y lo almacene en la memoria principal, en el espacio correspondiente a la variable b.  La unidad de control, nuevamente, envía una señal al monitor para que Imprimir “Ingresa altura:” imprima el mensaje “Ingresa altura:”.  La unidad de control coordina las acciones necesarias para que el Leer h usuario introduzca un número, por medio del teclado, y lo almacene en el espacio de memoria correspondiente a la variable h.  La unidad de control envía la señal indicada a la ALU para que realice la multiplicación posteriormente envía la señal a la memoria junto con el area← b *h resultado de la multiplicación, para que se almacene en el espacio de memoria a.  La unidad de control trae de la memoria el dato almacenado en el Imprimir area espacio asignado a la variable area y coordina las acciones para que el monitor imprima este valor. Tabla 1.2: Ejecución paso a paso de un programa 1.2.2 Almacenamiento de programas y datos La computadora sólo entiende señales binarias: ceros y unos, encendido y apagado, ya que todos los dispositivos de una computadora trabajan con dos únicos estados: hay corriente eléctrica y no hay corriente, respectivamente. Por tal motivo, los datos y programas almacenados en la memoria están codificados como cadenas de 1´s y 0´s para que la unidad de control pueda interpretarlos. A esta codificación se le llama lenguaje de máquina. Cabe mencionar que la memoria está dividida en varias celdas, en cada una de ellas se puede almacenar únicamente 0s ó 1s, a estos valores se les denomina valores binarios o BIT´s (BInary DigiT). Las celdas se agrupan para formar registros (también llamados palabras), a cada uno le corresponde una dirección de memoria, así cuando se desea escribir o leer de la memoria un dato o una instrucción se debe especificar la dirección dónde se encuentra. Como podrás imaginar, para un ser humano resultaría sumamente complicado escribir los programas en lenguaje de máquina, es por eso que los programas se escriben en lenguaje de programación entendibles para los seres humanos y después se traducen mediante un software especial –que pueden ser un compilador o un traductor– a cadenas de 0´s y 1´s. De tal manera que a cada instrucción le corresponde un código binario específico y para cada dato también existe una codificación única. Por Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 19
  • 20. Fundamentos de programación Programa Desarrollado ejemplo, la palabra “Hola” se representa como “0100 1000 0110 1111 0110 1100 0110 0000”, ya que a cada letra le corresponde una codificación: H O L A 0100 1000 0110 1111 0110 1100 0110 0000 El número 80 se puede representar como “0101 0000” y la instrucción “MOV R2, R7” se codifica de la siguiente manera “0010 0000 1000 0100.” Conforme fueron evolucionando las computadoras se inventaron diversas maneras de representar la información en código binario, hoy en día existen codificaciones estándar para los símbolos y los números, al igual que para las instrucciones; sin embargo, para nuestros objetivos es suficiente tener claro que cualquier dato o instrucción puede ser representado mediante cadenas de 0s y 1s. Por otro lado, escribir programas en lenguaje binario es sumamente complicado para los seres humanos, por lo que en las últimas décadas se han desarrollado diversos lenguajes de programación que son más cercanos al lenguaje natural (humano), de los cuales hablaremos en la siguiente sección. 1.3 Lenguajes de Programación Los lenguajes de programación sirven para escribir programas de computadora orientados a resolver algún problema o necesidad. Cada lenguaje de programación se define a partir de un conjunto de símbolos básicos, llamado alfabeto; un conjunto de reglas, llamado sintaxis, que definen la forma de manipularlos o combinarlos para representar instrucciones; y las reglas que especifican los efectos de dichas instrucciones cuando son ejecutadas por la computadora, conocidas como semántica. De esta manera tenemos que: ������������������������������������������������������������������������������������������������������������������������ó������ = ������������������������������������������������ + ������������������������������������������������ + ������������������á������������������������������ Por otro lado, dependiendo de su legibilidad para el ser humano los lenguajes de programación se clasifican en lenguajes de bajo nivel y lenguajes de alto nivel. Los primeros se caracterizan porque sus instrucciones se parecen más a las acciones elementales que ejecuta una computadora, como son: sumar, restar, guardar en memoria, etc. En cambio, las instrucciones de los lenguajes de alto nivel son más parecidas a un lenguaje humano, por lo regular inglés. Por otro lado, los programas escritos en bajo nivel describen a detalle lo que sucede a nivel de hardware, mientras que los programas escritos en un lenguaje de alto nivel lo ocultan, teniendo como ventaja que son más fáciles de entender para las personas. 1.3.1. Evolución de los lenguajes de programación Con las primeras computadoras surgió el primer lenguaje de programación que –como es de imaginarse– fue el lenguaje de máquina, el cual es considerado el lenguaje de primera generación. Las instrucciones en lenguaje de máquina dependían de las características de cada equipo, por lo que dada Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 20
  • 21. Fundamentos de programación Programa Desarrollado la dificultad de desarrollar programas en unos y ceros, los investigadores de la época desarrollaron el lenguaje ensamblador, cuyo conjunto de instrucciones consta de palabras nemotécnicas que corresponden a las operaciones básicas que una computadora puede ejecutar. Para ilustrar esto revisemos la siguiente instrucción: 2 Mueve el contenido del registro 8 al contenido del registro 10 En lenguaje de máquina esta se podría representar como: 0010 0000 1000 0100 Lo cual es ilegible para el ser humano, en cambio en lenguaje ensamblador esta instrucción se puede representar de la siguiente forma: MOV R2, R7 Aunque sigue estando en clave, es más amigable que las cadenas de ceros y unos. Otra característica del lenguaje ensamblador es que las instrucciones dependían de las características físicas (arquitectura) de la computadora. Para traducir de lenguaje ensamblador a lenguaje de máquina, se desarrollaron programas llamados ensambladores (en inglés, assemblers). Este lenguaje fue considerado de segunda generación. Posteriormente, en la década de los 50´s aparecieron los primeros lenguajes de alto nivel, cuyas instrucciones son más parecidas al idioma inglés y, por lo tanto, más fácil de utilizar para los programadores, además de que son independientes de la arquitectura de las computadoras. Algunos ejemplos son: FORTRAN y COBOL (que son los primeros lenguajes que aparecieron y en sus inicios se utilizaron para aplicaciones científicas), C, Pascal, Ada, Lisp y Prolog (utilizados principalmente en inteligencia artificial), Java, C++, C#, entre otros. Al igual que el lenguaje ensamblador, los programas escritos en un lenguaje de alto nivel deben ser codificados a lenguaje de máquina, así que junto con ellos se desarrollaron programas traductores, que de acuerdo con la forma en que trabajan se dividen en dos tipos: compiladores e intérpretes. • Los compiladores traducen todo el programa escrito en un lenguaje de alto nivel, llamado programa fuente, generando un nuevo programa objeto que está escrito en lenguaje de máquina y a partir de este se genera un programa ejecutado, el cual puede ejecutarse cada vez que se desee sin tener que compilar el programa fuente de nueva cuenta. Además, como parte del proceso de traducción el compilador detecta los errores que hay en el código fuente, 2 Este ejemplo es una adaptación de la versión original que aparece en (Joyanes & Zohanero, 2005, pág. 32) (Joyanes & Zohanero, 2005, pág. 32) Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 21
  • 22. Fundamentos de programación Programa Desarrollado informándole al programador para que los corrija, pues un programa sólo se compila si no tiene errores. • En cambio, un intérprete revisa una a una cada línea de código, la analiza y enseguida la ejecuta, sin revisar todo el código y sin generar un programa objeto, así que cada vez que se quiere ejecutar el programa se vuelve a traducir el programa fuente línea por línea. Por lo anterior, los compiladores requieren una fase extra antes de poder generar un programa ejecutable, y aunque esto pareciera menos eficiente en cuanto a tiempo, los programas creados con compiladores se ejecutan mucho más rápido que un mismo programa ejecutado con un intérprete. Además, cuando un programa ya ha sido compilado puede ejecutarse nuevamente sin tener que compilarse, mientras que los programas que son interpretados, cada vez que se ejecutan se deben volver a traducir. Conforme han ido evolucionando las computadoras también lo han hecho las estrategias para solucionar problemas, generando nuevos programas programación con diferentes filosofías, llamadas paradigmas de programación, de esto hablaremos a continuación. 1.3.2 Paradigmas de los lenguajes de programación Un paradigma de programación representa un enfoque particular o filosofía para diseñar soluciones. Los paradigmas difieren unos de otros en los conceptos y la forma de abstraer los elementos involucrados en un problema, así como en los pasos que integran su solución del problema, en otras palabras, el cómputo. Un lenguaje de programación siempre sigue un paradigma de programación, aunque también podemos encontrar lenguajes con la influencia de dos paradigmas, tal es el caso del lenguaje C++, que surgió bajo el paradigma procedimental y se transformó al paradigma orientado a objetos, de tal manera que puede soportar ambos paradigmas. Los paradigmas más importantes son: • Paradigma imperativo o procedural. Es el método de programación tradicional, donde los programas describen la forma de solucionar un problema a partir de una lista de instrucciones que se ejecuta de forma secuencial, a menos que se trate de estructuras de control Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 22
  • 23. Fundamentos de programación Programa Desarrollado condicionales o repetitivas, o bien, saltos de secuencia representados por la instrucción GOTO. 3 La programación imperativa se define a partir del cambio de estado de las variables que se produce por la ejecución de las instrucciones, por ejemplo, el programa 1.1, que calcula el área de un rectángulo, es un ejemplo de un programa imperativo, ya que describe paso a paso como solucionar el problema y el resultado corresponde al estado final de la variable area. Sin embargo, el lenguaje en el que está escrito no corresponde a ningún lenguaje de programación real, pero el lenguaje de máquina es un ejemplo de este paradigma. Otros lenguajes imperativos son: Fortran, Cobol, Pascal, Basic, Ada y C. • Paradigma declarativo. En contraste con el paradigma imperativo, el objetivo de este paradigma no es describir cómo solucionar un problema, sino describir un problema mediante predicados lógicos o funciones matemáticas. Dentro de este paradigma se encuentran los lenguajes de programación funcionales y los lenguajes de programación lógicos. Los primeros representan el problema utilizando funciones matemáticas, por ejemplo, un programa que calcule el área de un rectángulo utilizando un lenguaje funcional se vería así: ������������������������������������������������������������������������������������(������, ℎ) = ������ ∗ ℎ De tal manera que para calcular el área de un rectángulo de base igual a 5 unidades y altura igual a 10 unidades, se ejecuta la función con los parámetros 5,10, es decir, areaRectángulo (5,10), la cual devuelve como resultado 50. Los lenguajes de programación más representativos del paradigma funcional son: Lisp, ML y Haskell. En el caso de los lenguajes lógicos la solución se representa a través de un conjunto de reglas, ������������������������������������������������á������������������������������(������, ℎ, ������������������������) ∶ −������������������������������������������������������������������������ó������(������, ℎ, ������������������������) por ejemplo: Esta regla dice que el valor de la variable area corresponde al área del rectángulo con base b y altura h sólo si area es el resultado de multiplicar b por h. Estamos suponiendo que se ha definido el predicado multiplicación(a, b, c). En este caso para calcular el resultado se utiliza el principio de razonamiento lógico para responder a las preguntas planteadas, por ejemplo si se desea calcular el área del mismo rectángulo, la pregunta sería la siguiente: ? ������������������������������������������������������������������������������������(5,10, ������) 3 De esto hablaremos en unidades posteriores. Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 23
  • 24. Fundamentos de programación Programa Desarrollado Y después de que se realicen los cálculos (en este caso llamadas inferencias) el resultado que arrojaría sería: ������ = 50 El lenguaje más representativo del paradigma lógico es Prolog. • Paradigma orientado a objetos. En este caso la solución de un problema se plantea en términos de objetos y relaciones entre ellos. Está basado en varias técnicas, incluyendo, herencia, polimorfismo, modularidad y encapsulamiento. En este caso se definen clases que son las plantillas para crear objetos, por ejemplo, un si se quiere un programa orientado a objetos que calcule el área de un rectángulo, se debe definir una clase rectángulo que contenga un método encargado de calcular el área. El lenguaje Java y C#, que actualmente son los más utilizados, son ejemplos de este paradigma. 1.4 Ciclo de vida del software Independientemente del paradigma que se siga y del lenguaje que se utilice para programar, existe un conjunto de fases que deben seguirse para realizar un programa de computadora, al cual se le conoce como ciclo de vida del software, en la siguiente figura se lista cada una de ellas. Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 24
  • 25. Fundamentos de programación Programa Desarrollado Planteamiento Análisis del del problema problema Diseño del algoritmo Ciclo de vida del software Mantenimiento Implementación o codificación Documentación Pruebas y delprograma validación En las siguientes secciones aprenderemos en qué consiste cada una de las fases, para lo cual nos apoyaremos en la resolución del siguiente problema con la intención de que se entienda mejor: Problema 1.1: Se requiere construir un programa que calcule el área de un rectángulo, con base b y altura h. 1.4.1 Análisis del problema En esta fase se determina ¿qué hace el programa? Por lo cual debe definirse de manera clara y concisa el problema en cuestión, se debe establecer el ámbito del problema, las características, limitaciones y modelos de lo que se desea resolver. Este paso debe conducir a una especificación completa del problema en donde se describa cuáles son los datos requeridos para resolverlo (datos de entrada) y cuál es el resultado deseado (salida). El análisis de nuestro ejemplo es muy simple y se resume en la siguiente tabla: ¿Cuál es la salida deseada? El área de un cuadrado, la cual identificaremos como ¿Qué método(s) se pueden El área de un rectángulo se puede utilizar para llegar a la calcular con la siguiente fórmula: Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 25
  • 26. Fundamentos de programación Programa Desarrollado solución? Á������������������ = ������������������������ ∗ ������������������������������������ ¿Qué datos de entrada se Por el planteamiento del problema y requieren? dado el método anterior, los únicos datos que se requieren son: la medida de la base que se representa por b y la medida de la altura indicada por h ¿Qué datos o información En este caso no se requiere más adicional es necesaria para información. solucionar el problema? ¿Existe algún problema o Las únicas restricciones son que las condiciones que deban medidas de la base y altura sean cumplirse? mayores a cero. Tabla 1.3: Análisis del problema 1 1.4.2Diseño de la solución Es en esta fase se define ¿cómo el programa resuelve el problema? Para ello, se describe paso a paso la solución del mismo, lo cual se conoce como algoritmo. Cuando el problema es grande se recomienda dividirlo en subproblemas más pequeños y resolver por separado cada uno de ellos. A esta metodología se le conoce como diseño descendente (top-down) o modular. Existen diferentes formas de representar un algoritmo algunas formales, como una fórmula matemática, o informales, como es el caso del lenguaje natural. En la siguiente unidad estudiaremos a mayor profundidad los algoritmos y su representación, pero para seguir con el desarrollo de nuestro programa ejemplo, plantearemos la solución como una secuencia de pasos en español. 2. Calcular: á������������������ = ������ ∗ ������ 1. Obtener la medida de la base (������) y la altura (������) 3. Imprimir el resultado (á������������������) Algoritmo 1.1: Calcula el área de un rectángulo El programa 1.1es otra forma de representar la solución de este problema, se conoce como pseudocódigo. 1.4.3 Implementación (codificación) El algoritmo no puede ser ejecutado por una computadora por ello debe traducirse a un lenguaje de programación (como por ejemplo C) para obtener un programa fuente que se traduzca a lenguaje de máquina para que sea ejecutado por la computadora. Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 26
  • 27. Fundamentos de programación Programa Desarrollado En el siguiente cuadro se muestra la codificación en lenguaje C del algoritmo, por ahora no es necesario que lo comprendas puesto que esto lo podrás hacer conforme vayas aprendiendo a programar, por lo pronto solamente se muestra con fines ilustrativos. #include<stdio.h> #include<stdlib.h> main() { int b,h, area; printf("Ingresa la base y altura:"); scanf("%d %d", &b,&h); area = b * h; printf("Area = %d", area); } Programa 1.2: Programa en C que calcula área de un rectángulo 1.4.4 Validación y pruebas Esta fase debe hacerse una vez que se ha diseñado el algoritmo y después de que se codifica, sirve para verificar que son correctos. Existen diferentes formas de probar que la solución es correcta, algunas de ellas formales y otras informales: las primera se utilizan para garantizar que el programa o algoritmo siempre calcula el resultado deseado para cualquier conjunto de datos de entrada; en cambio, en las segundas sólo se prueba que funciona correctamente para algunos datos de entrada, tratando de encontrar posibles errores, en este caso no se puede garantizar el programa o algoritmo calcule la salida correcta para cualquier conjunto de datos. En cualquiera de los dos casos, si se encuentra alguna falla se debe corregir y volver a realizar pruebas. En este curso utilizaremos las pruebas de escritorio, las cuales se explicarán en la unidad 2. El ejemplo es muy sencillo y si ejecutamos manualmente el programa o algoritmo mostrado en la fase anterior, con un caso específico de rectángulo veremos que ambos son correctos. En la siguiente figura se ilustra la ejecución del programa: Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 27
  • 28. Fundamentos de programación Programa Desarrollado Figura 1.2: Ejecución del programa 1.2 1.4.5 Documentación Cualquier proyecto de software por la complejidad que tiene requiere tanto las ideas principales como el desarrollo de principio a fin sea documentado, con el fin de que cualquiera puedan entender la lógica del programa y de ser necesario pueda modificarlos sin tantas complicaciones. Es común que si se desea modificar un programa y no se tiene información acerca de cómo fue construido sea más fácil volverlo a hacer que intentar entenderlo. Uno de los mejores ejemplos de la importancia de la documentación es el software libre, en el cual colaboran diversos desarrolladores para su elaboración, los cuales se encuentran en diferentes puntos geográficos de globo terráqueo, así que la forma de entender que está haciendo cada uno y bajo que método es la documentación. Además de que se debe tomar en cuenta que se llama software libre porque está disponible el código fuente para que cualquier persona pueda modificarlo a su conveniencia. Como parte de la documentación también deben incluirse manuales de usuario y las normas de mantenimiento para que se haga un buen uso del software. 1.4.6 Mantenimiento Esta fase tiene sentido una vez que fue terminada una primera versión del programa y ya está siendo utilizado. Ya que en ésta se actualiza y modifica para corregir errores no detectados o para cambiar y/o agregar una nueva función. Por ejemplo, se puede extender el programa 1.1, que calcula el área de un rectángulo para que también calcule su perímetro. Ejemplo 1.2: El siguiente conjunto de instrucciones calcula el área y perímetro de un rectángulo. #include<stdio.h> #include<stdlib.h> main() { int b,h, area, perimetro; printf("Ingresa la base y altura:"); scanf("%d %d", &b,&h); Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 28
  • 29. Fundamentos de programación Programa Desarrollado perimetro = 2*b + 2*h; area = b * h; printf("Perimetro = %d", perimetro); printf("Area = %d", area); } Programa 1.3: Calcula el área y perímetro de un rectángulo En el programa se resaltan las instrucciones que se añadieron al programa para calcular el perímetro. Actividad de Autoevaluación Ingresa al aula virtual para realizar las dos actividades de autoevaluación, la primera trata de un pequeño juego tipo maratón en el que pondrás a prueba tus conocimientos, la segunda consiste en un cuestionario de opción múltiple. Consideraciones específicas de la unidad Para alcanzar los objetivos de esta unidad se ha propuesto una actividad formativa en la cual revises la ejecución de un problema apoyándote en una animación que muestra paso a paso la ejecución del programa 1.1 que se presentó en esta unidad, en dicha animación se especifica cada uno de los elementos que están involucrados en la ejecución de las instrucciones. Referencias: • Guerrero, F. (s.f.). mailxmail.com. Recuperado el 15 de agosto de 2010, de http://www.mailxmail.com/curso-introduccion-lenguaje-c • Joyanes, L., & Zohanero, I. (2005). Programación en C. Metodología, algoritmos y estructuras de datos. España: Mc Graw Hill. • Reyes, A., & Cruz, D. (2009). Notas de clase: Introducción a la programación. México, D.F.: UACM. • Viso, E., & Pelaez, C. (2007). Introducción a las ciencias de la computación con Java. México, D.F.: La prensas de ciencias, Facultad de Ciencias, UNAM. Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 29
  • 30. Fundamentos de programación Programa Desarrollado Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 30
  • 31. Fundamentos de programación Programa Desarrollado Unidad 2: Diseño de algoritmos Propósitos En esta unidad: • Identificar los datos de entrada y la salida de un algoritmo • Diseñar un algoritmo que solucione un problema. • Representar el algoritmo en diagrama de flujo y pseudocódigo • Verificar que el algoritmo calcule el resultado correcto Competencia específica Diseñar algoritmos para resolver problemas mediante su representación en un diagrama de flujo y la elaboración del pseudocódigo. Introducción En la unidad anterior se describieron los pasos que se requieren para construir un software, sin lugar a dudas, la fase más importante es el diseño de la solución, ya que es aquí donde se debe crear un modelo que corresponde a los pasos que llevan a la solución del problema en cuestión, y se conoce como algoritmo. Para construir esta solución se requiere no sólo de inteligencia, sino también de creatividad, ya que el programador sólo cuenta con la especificación del problema y su experiencia en resolver problemas de una forma estructurada. En este apartado se introduce formalmente el concepto de algoritmo, hablaremos de sus características y estudiaremos dos formas de representarlos: una gráfica, conocida como diagramas de flujo; y la otra similar a un lenguaje humano, en este caso español, la cual se llama pseudocódigo. También se describen los tres tipos de estructuras de control: secuenciales, selectivas y repetitivas, que son las instrucciones con que se cuenta en la programación estructurada para diseñar soluciones. Para logar nuestro objetivo se introduce “el mundo de la ardilla”, en el cual se deben solucionar problemas mediante un conjunto de instrucciones específicas que puede ejecutar una ardilla sobre un tablero. 2.1 Concepto de algoritmo y características La palabra algoritmo proviene del nombre de un matemático persa conocido como Mohammad Al- KhoWârizmi, nacido alrededor del 780 d.c. en KhoWârizm, de ahí el su seudónimo. Se considera como el padre de la algoritmia porque definió las reglas paso a paso para sumar, restar, multiplicar y dividir números decimales. La traducción al latín de Al-Khwārizmī es algoritmi, que da origen a la palabra algoritmo (Joyanes & Zohanero, 2005). Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 31
  • 32. Fundamentos de programación Programa Desarrollado Formalmente, un algoritmo se define como una secuencia finita de instrucciones precisas y eficaces para resolver un problema, que trabaja a partir de cero o más datos (entrada) y devuelve un resultado (salida). 4 Para ilustrar este concepto se presenta el siguiente escenario ficticio, que hemos llamado: El mundo de la ardilla Supongamos que una ardilla ha sido entrenada para realizar las instrucciones que se muestran en la tabla 2.1, sobre un tablero. INSTRUCCIÓN DESCRIPCIÓN DE LOS MOVIMIENTOS DE LA ARDILLA avanza() Se mueve una ubicación en la dirección actual giraIzquierda() Voltea a la izquierda dejaBellota() Coloca una bellota en la ubicación actual hayBellota() Responde si hay o no bellotas en la posición actual hayPared() Responde si hay o no pared en la ubicación siguiente La ardilla coloca en su boca una bellota que está en la recogeBellota() ubicación actual 5 bellotasRecogidas() Dice el número de bellotas que tiene en la boca Tabla 2.1: Lista de instrucciones que puede ejecutar la ardilla Los paréntesis al final de cada instrucción sirven para identificar que se trata de una orden que puede ejecutar la ardilla. Si observas la lista de instrucciones podrás darte cuenta que, la ardilla no es capaz de voltear a la derecha y mucho menos de responder a órdenes más complejas como “mueve una bellota que se encuentra en la primera casilla del tablero al final del mismo”. Sin embargo, podría realizar ambas tareas si se le dan las instrucciones precisas en términos de las acciones que sabe hacer. Por ejemplo, para que la ardilla gire a la derecha tendríamos que ordenarle tres veces que girará a la izquierda, es decir, la secuencia de instrucciones que debe ejecutar es: giraIzquierda() giraIzquierda() giraIzquierda() 4 Esta definición es una adaptación de la que aparecen en (Viso & Pelaez, 2007, pág. 3) 5La ardilla poseen una bolsa donde almacena cualquier cantidad de bellotas. Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 32
  • 33. Fundamentos de programación Programa Desarrollado Estos pasos constituyen un algoritmo, el cual soluciona el problema de hacer que la ardilla gire a la derecha. Una de las características principales de los algoritmos es que cada paso debe estar definido de forma clara y precisa, sin ambigüedades, de tal manera que pueda ejecutarse de manera inequívoca, por ejemplo, en el mundo de la ardilla, la instrucción gira() sería una instrucción ambigua, ya que la ardilla no sabría si debe girar a la derecha o a la izquierda. Otra característica de los algoritmos es que siempre terminan, por lo que no puede ser una lista infinita de pasos. Y tampoco puede contener pasos que sean irrealizables o cuya ejecución sea infinita, pues en este caso no sería posible calcular el resultado deseado, si una instrucción está bien definida y es eficaz se puede asegurar que su ejecución termina con éxito, sin embargo, esto no garantiza, de ninguna manera, que el algoritmo también termine. Por lo anterior, al diseñar un algoritmo se debe garantizar que dada cualquier entrada siempre termine y calcule la respuesta correcta. De tal manera que todo algoritmo debe tener las siguientes características: 1.Entrada. 2. Salida. 3. Definido. 4. Eficaz. 5. Terminación. Una vez que se ha diseñado un algoritmo, se recomienda realizar una prueba de escritorio para verificar si funciona correctamente, ésta consiste en ejecutar el algoritmo utilizando papel y lápiz, se propone datos de entrada específicos y se realiza cada una de las instrucciones en el orden establecido, registrando los cambios que se producen después de la ejecución de cada instrucción. De esta manera, se valida que el resultado obtenido en la prueba de escritorio corresponda al resultado deseado (el correcto). 2.2. Representación de algoritmos Existen diversas formas de representar un algoritmo, en la unidad anterior expusimos diversas formas de representar la solución del problema de calcular el área de un rectángulo, por ejemplo, en el programa 1.1 se expresa la solución en pseudocódigo, después en el algoritmo 1.1 se representa en lenguaje natural (español) y en el programa 1.2 se utiliza el lenguaje de programación C, o se puede expresar mediante la fórmula matemática: á������������������ = ������������������������ × ������������������������������������ Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 33
  • 34. Fundamentos de programación Programa Desarrollado Todas estas representaciones, excepto el lenguaje natural, se consideran formales, y cabe mencionar que existen más, sin embargo, las representaciones más comunes son el pseudocódigo y los diagramas de flujo. La primera, generalmente se utilizar por su parecido con el lenguaje natural (español, inglés, francés o cualquier otro) y porque su codificación en un lenguaje de programación estructurado y modular, como C, es directa. En cambio, los diagramas de flujo son totalmente gráficos, lo que hace más fácil seguir el orden en que se ejecutan las instrucciones. Es importante mencionar que se puede utilizar cualquiera de las dos representaciones para diseñar un algoritmo, pues en cualquiera de los dos se puede expresar cualquier algoritmo estructurado, de tal manera que la más conveniente depende de cada programador. En las siguientes secciones se presenta cada uno de ellos y así podrás decidir cuál prefieres. 2.2.1. Pseudocódigo El pseudocódigo es un lenguaje de especificación formal de algoritmos. La solución de un problema se representa de manera narrativa utilizando palabras claves, generalmente verbos, escritos en un lenguaje natural, que en nuestro caso será español. Para ilustrarlo construyamos un algoritmo que resuelva el siguiente problema. Problema 2.1: En la figura 2.1.a. se muestra el estado inicial de un tablero, el cual contiene en la primer casilla (de izquierda a derecha) una bellota, representada por un asterisco (*), y a la ardilla, representada por una flecha que apunta hacia la dirección que está mirando. El problema consiste en diseñar un algoritmo que la ardilla pueda ejecutar para llegar al estado meta representado en la figura 2.1.b., que implica que la ardilla lleve la bellota a la última casilla. Para resolverlo se tiene la siguiente información: a) El mundo es conocido, es decir, se sabe de antemano que el tablero está cercado por paredes y sólo tiene seis casillas colocadas en línea. b) Al inicio la ardilla está en la primera casilla volteando hacia arriba y no tiene ninguna bellota en la boca. c) En la primera casilla hay una bellota. * * Estado inicial (a) Estado final (b) Figura 2.1: Primer mundo lineal Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 34
  • 35. Fundamentos de programación Programa Desarrollado Análisis: Haciendo un rápido análisis del problema, nos podemos dar cuenta que la ardilla debe recoger la bellota, avanzar cinco casillas y soltar la bellota, esto traducido en un algoritmo queda de la siguiente forma: Inicio recogeBellota() giraIzquierda() giraIzquierda() giraIzquierda() avanza() avanza() avanza() avanza() avanza() dejaBellota() Fin Algoritmo 2.1. Primer mundo de la ardilla En este caso las instrucciones son parecidas al lenguaje natural. 2.2.2. Diagrama de flujo Los diagramas de flujo son una representación gráfica de un algoritmo que utiliza símbolos para representar las instrucciones y flechas para unirlas e indicar el orden en que deben ejecutarse -llamadas líneas de flujo. Estos símbolos fueron normalizados por el Instituto Norteamericano de Normalización ANSI (American National Standars Institute, por sus siglas en inglés). Los símbolos más utilizados se muestran en la siguiente tabla. Símbolo Descripción Terminal. Representa el inicio y el final de un algoritmo. Terminal Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 35
  • 36. Fundamentos de programación Programa Desarrollado Entrada y Salida (E/S). Representa la lectura de datos desde el E/S dispositivo de entrada estándar, así como la impresión de datos en el dispositivo de salida estándar. Proceso. Representa cualquier tipo de operación que pueda Proceso originar un cambio de la información almacenada en memoria, asignaciones u operaciones aritméticas. Decisión. Nos permite analizar una situación, con base en los valores verdadero y falso. Toma una decisión de las instrucciones Decisión que a continuación ejecuta el algoritmo. Conector. Sirve para enlazar dos partes cualesquiera del diagrama que están en la misma página. Línea de flujo. Indica el orden de la ejecución de las operaciones. La flecha indica cuál es la siguiente instrucción que se debe realizar. Conector. Conecta a dos puntos del diagrama cuando éstos se encuentran en páginas diferentes. Representa el inicio y el final de un programa. Llamada a subrutina. Llama a un proceso determinado o Subrutina subrutina. Una subrutina es un módulo independiente del módulo principal, que realiza una tarea determinada y al finalizar regresa el control de flujo al módulo principal. Tabla 2.2 Símbolos de los diagramas de flujo Problema 2.2: Ahora la tarea de la ardilla es que cambie las bellotas que están en la primera fila (ver figura 2.2.a) a la segunda y viceversa, dejándolas en la misma columna (ver figura 2.2.b). Las condiciones de inicio son: a) El mundo es conocido y sabemos exactamente dónde hay bellotas. b) La ardilla no tiene ninguna bellota en la boca al inicio. c) El mundo está encerrado por paredes y si la ardilla choca contra una se considerará un error garrafal. d) En este punto los científicos ya entrenaron a la ardilla para ejecutar la orden giraDerecha(), por lo tanto, ya puede ser usada en el algoritmo. Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 36
  • 37. Fundamentos de programación Programa Desarrollado * * * * * * * * * * * * Estado inicial (a) Estado final (b) Figura 2.2:Segundo mundo de la ardilla Análisis: De acuerdo con la figura 2.2, inciso a, para que la ardilla cumpla con su tarea debe realizar los siguientes pasos: recoger la bellota, girar a la derecha, avanzar, dejar la bellota, girar a la izquierda, avanzar, recoger la bellota, girar a la izquierda, avanzar, dejar la bellota, voltear a la derecha y avanzar. Hasta este punto las coordenadas de la ardilla son: primera fila y tercera casilla (volteando a la derecha, como al inicio). * * * * * * Si la ardilla repite otra vez este bloque de instrucciones, logrará cambiar las siguientes dos bellotas; al repetirlo nuevamente cambiaría las últimas dos, salvo que cuando la ardilla avance después de haber dejado la bellota chocará contra la pared, por lo tanto, antes de que avance –última instrucción del bloque – tenemos que verificar que no haya pared. La condición para que la ardilla repita el bloque de instrucciones es que no haya pared. De lo anterior tenemos el siguiente algoritmo representado en diagrama de flujo. Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 37
  • 38. Fundamentos de programación Programa Desarrollado Algoritmo 2.2. Solución problema 2.2 Actividad 1. Representación de algoritmos En esta actividad, reflexionarás sobre el uso de los diagramas de flujo y pseudocódigos a partir de varias preguntas. Posteriormente, ingresarás un comentario al respecto en el Foro Representación de algoritmos. Evidencia de aprendizaje. Planteamiento del problema Como primera evidencia de aprendizaje para esta unidad deberás elegir un problema que se pueda solucionar mediante un programa de computadora y realizarás la descripción precisa del mismo. 2.3. Estructuras de control Los primeros lenguajes de programación de alto nivel permitían realizar “saltos” a diferentes líneas del código mediante la instrucción GOTO, esto tiene el gran inconveniente que cuando se hacía una modificación en el programa, era necesario modificar todas las instrucciones GOTO para asegurar que Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 38
  • 39. Fundamentos de programación Programa Desarrollado los saltos se hicieran a las líneas de código correctas. Además de lo tedioso que podía ser estar corrigiendo el programa, las instrucciones GOTO lo hacían difícil de leer. En 1966 Corrado Böhm y Giuseppe Jacopini demostraron que “cualquier algoritmo puede diseñarse e implementar utilizando únicamente tres tipos de estructuras de control: secuenciales, condicionales y repetitivas; esto es, sin utilizar GOTO”(Böhm & Jacopini, 1966), basándose en este resultado, a principios de los años 70´s Edsger Dijkstra se dio cuenta que la forma en la que los lenguajes de programación de alto nivel podían modificarse sin problemas era eliminando las instrucciones GOTO (o similares), así que propuso un nuevo estilo de programación al que llamó programación estructurada, ésta incluye estructuras secuenciales, selectivas y repetitivas, conocidas como estructuras de control. 2.3.1. Estructuras secuenciales Las estructuras secuenciales son un bloque de instrucciones que se ejecutan una tras otra, en el mismo orden en el que están escritas. Un ejemplo de este tipo de instrucciones son todas las que se utilizaron en el algoritmo 2.1. Veamos otro ejemplo. Problema 2.3: Ahora la ardilla se enfrenta a un nuevo mundo (ver figura 2.3) en el que su tarea consiste en recoger las dos bellotas colocadas en la posiciones indicadas por la figura 2.3.a y llevarlas a la última casilla de la primera fila, como se muestra en la figura 2.3.b. Considerando que tenemos un mapa del nuevo mundo y sabemos en qué casillas están colocadas las bellotas diseñemos un algoritmo para que la ardilla realice su cometido. * ** * Estado inicial (a) Estado final (b) Figura 2.3.Tercer mundo de la ardilla Análisis: Nuevamente el problema planteado es muy sencillo de analizar, la ardilla debe hacer los movimientos que le permitan recoger la primera bellota, después ir por la segunda y llegar a la última casilla de la prime fila. Otra posible opción es que recoja la primera bellota, la lleve a la primera casilla, Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 39
  • 40. Fundamentos de programación Programa Desarrollado regrese por la segunda bellota y también la lleve a la primera casilla. Esta última opción requiere más esfuerzo por parte de la ardilla, dado que la ardilla no tiene limitado el número de bellotas que puede llevar en la boca, entonces la primera opción es más eficiente. El algoritmo quedaría como: Inicio avanza() giraIzquierda() avanza() avanza() recogeBellota() giraIzquierda() avanza() giraDerecha() avanza() avanza() recogeBellota() avanza() dejaBellota() dejaBellota() Fin Algoritmo 2.3. Solución problema 2.3. Las instrucciones selectivas, más usuales, que una computadora es capaz de realizar son: Imprimir, Leer y Asignar. La representación en diagrama de flujo de estas instrucciones se ilustra en la siguiente tabla, en cuanto que la representación en diagrama de flujo se utilizan los mismos verbos y símbolos pero encerrados entre un símbolo de proceso. Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 40
  • 41. Fundamentos de programación Programa Desarrollado Tipo Pseudocódigo Diagrama de flujo Descripción Asigna el valor de la expresión Asignación <var> ← <Expresión> <var> ← <Expresión> a la variable <var> Envía a pantalla un mensaje o el valor de la variable indicada. En caso de que se imprima un Imprimir imprimir mensaje debe estar escrito <mensaje/variable> var/mens entre comillas, si es el valor de Entrada y una variable sólo se pondrá el Salida nombre de la variable (sin comillas) leer Lee un dato del teclado y lo Leer <variable> almacena en la variable variable indicada. Tabla 2.3 Estructuras secuenciales 2.3.2 Estructuras selectivas En esencia, las estructuras selectivas se utilizan cuando la solución de un problema conlleva tomar una decisión, ya que se ejecuta un conjunto determinado de instrucciones dependiendo de si se cumple o no una condición en un momento determinado. Por ejemplo, la ardilla solamente puede avanzar si se no hay pared, en este caso la condición es no hayPared() y la acción que se realiza es avanza(). Revisemos el siguiente ejemplo: Problema 2.4: Nuevamente la ardilla está en el mundo lineal que se ilustra en la figura 2.4.a, tiene que recoger una bellota y llevarla a la última casilla como se muestra en la figura 2.4.b, sólo que ahora no sabe con precisión en que casilla está la bellota y la única información con la que cuenta es la siguiente: a) En el tablero hay una sola bellota. Las casillas donde puede estar son la tercera o la quinta, lo cual se representa con un círculo en la figura 2.4.a. b) Al inicio la ardilla no tiene ninguna bellota en la boca. c) Es un error ordenar a la ardilla que recoja una bellota en una casilla cuando esta no contiene nada pues la ardilla no sabrá que hacer. d) La ardilla ya ha sido entrenada para decir si hay bellota. Educación Superior Abierta y a Distancia • Ciencias Exactas, Ingeniería y Tecnología 41