viernes, 15 de junio de 2012

Diseño de algoritmos


Presentación de la unidad
En la unidad anterior se describieron los pasos que se requieren para construir un software, los cuales, sin lugar a dudas, constituyen la fase más importante en el diseño de la solución de problemas, ya que es aquí donde se debe crear el modelo que contribuya a la solución del problema en cuestión.
Para llegar a 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 te presentaremos formalmente el concepto de algoritmo, del que estudiaremos sus características y dos maneras de representarlo: una gráfica, conocida como diagramas de flujo; y otra, similar a un lenguaje humano (en este caso español), la cual se denomina pseudocódigo. También describiremos 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 utilizaremos una situación ficticia a la que llamamos “el mundo de la ardilla”, en donde se deben solucionar problemas mediante un conjunto de instrucciones específicas que puede ejecutar una ardilla sobre un tablero o mundo determinado.

Propósito de la unidad
  • Identificarás los datos de entrada y la salida de un algoritmo.
  • Diseñarás un algoritmo que solucione un problema.
  • Representarás el algoritmo en diagrama de flujo y pseudocódigo.
  • Verificarás que el algoritmo calcule el resultado correcto.
Competencia(s) específica(s) 
Diseñar algoritmos para resolver problemas mediante su representación en un diagrama de flujo y la elaboración del pseudocódigo.

2.1. Concepto de algoritmo y características
Antes de explicar cómo se realizan los algoritmos en la programación, conviene tener claridad en el significado de la palabra algoritmo.
Esta palabra, proviene del nombre de un matemático persa, nacido alrededor del 780 d.C. en KhoWârizm, conocido como Mohammad Al-KhoWârizmi. Se le considera 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).
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).
Para ilustrar este concepto te presentamos el siguiente escenario ficticio, al que hemos llamado:
"El mundo de la Ardilla" 
Supongamos que tenemos una ardilla, la cual ha sido entrenada para realizar determinadas funciones o movimientos sobre un tablero o “mundo”. Hasta el momento, las instrucciones que sabe llevar a cabo son las que se muestran en la siguiente tabla:

Lista de Instrucciones que puede ejecutar la ardilla
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
recogeBellota()
La ardilla coloca en su boca una bellota que está en la ubicación actual
bellotasRecogidas()  
Dice el número de bellotas que tiene en la boca

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 girara a la izquierda, es decir, la secuencia de instrucciones que debe ejecutar es:  giraIzquierda() giraIzquierda() giraIzquierda(). 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 forma 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 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. Es por eso que todo algoritmo debe contar con las siguientes características:
  1. Contar con entrada y salida.
  2. Estar definido. 
  3. Ser eficaz.
  4. Tener una terminación.
Una vez que se ha diseñado un algoritmo, se recomienda realizar una prueba de escritorio para verificar si funciona correctamente, esta prueba consiste en ejecutar el algoritmo utilizando papel y lápiz, es decir, se proponen datos de entrada específicos (como los que se ingresarían al programa ya funcionando) y se realiza cada una de las instrucciones indicadas en el algoritmo de acuerdo con 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, por ejemplo, en la unidad anterior expusimos diversas formas de representar la solución del problema de calcular el área de un rectángulo: primero, con el programa 1 en el que se expresó la solución en pseudocódigo, después con el algoritmo donde se representa en lenguaje natural (español) y posteriormente con la utilización del lenguaje de programación C; además, se puede expresar mediante la fórmula matemática:
area = base x altura
Todas estas representaciones, excepto el lenguaje natural, se consideran formales y cabe mencionar que, aunque existen más, las más comunes son el pseudocódigo y los diagramas de flujo.
La primera, generalmente se utiliza 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 pueden utilizar cualquiera de las dos representaciones para diseñar un algoritmo, pues en cualquiera de las 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 para que puedas determinar 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 clave, generalmente verbos escritos en un lenguaje natural, que en nuestro caso será español. Para ilustrarlo construyamos un algoritmo que resuelva un problema. Para ello, nos apoyaremos en El mundo de la Ardilla.
Problema 2.1: En la figura 2.1 (a) se muestra el estado inicial del mundo, el cual contiene en la primera casilla (de izquierda a derecha) una bellota, y a la ardilla que está de frente a la bellota. 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:
1.         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.
2.         Al inicio la ardilla está en la primera casilla volteando hacia arriba y no tiene ninguna bellota en la boca.
3.         En la primera casilla hay una bellota.
Figura 2.1: Primer mundo lineal
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 como se muestra en la imagen del lado derecho:
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 el siguiente documento, para descargarlo, da clic en el ícono siguiente: DSC_U2_FPR_2.pdf
En seguida analizaremos otro problema para observar su solución mediante diagrama de flujo.
Problema 2.2: Ahora la tarea de la ardilla es cambiar las bellotas que están en la primera fila, figura 2.2 (a), a la segunda y viceversa, dejándolas en la misma columna, figura 2.2 (b).
Las condiciones de inicio son:
1.         El mundo es conocido y sabemos exactamente dónde hay bellotas.
2.         La ardilla no tiene ninguna bellota en la boca al inicio.
3.         El mundo está encerrado por paredes y si la ardilla choca contra una se considerará un error garrafal.
4.         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.
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).
Imagen que muestra un mundo de dos filas.
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.
Algoritmo  2.2.  Solución al problema 2.2



Actividad 1. Representación de algoritmos 
La intención de esta actividad es que reflexionemos sobre el uso de los pseudocódigos y diagramas de flujo, para lograrlo, te pedimos que realices lo siguiente:
Reflexiona  sobre el uso de pseudocódigos y diagramas de flujo. Las siguientes preguntas te pueden servir de guía:

¿Qué entiendo por pseudocódigo y qué por diagrama de flujo?
Pseudocódigo: se describen los algoritmos utilizando una mezcla de lenguaje común, con instrucciones de programación, palabras claves, etc. El objetivo es que el programador se centre en la solución lógica del algoritmo y no en la implementación en un lenguaje de programación
Diagrama de flujo: es una representación gráfica de un algoritmo o proceso, el cual muestra gráficamente los pasos o procesos a seguir para alcanzar la solución de un problema
¿Cuál es la diferencia entre ellos?
Pseudocódigo: solo utiliza palabras comunes o palabras clave para alcanzar la solución de un problema
Diagrama de flujo: se utilizan gráficos que muestran los pasos a seguir para alcanzar la solución de un problema
¿Para qué casos me conviene usar uno u otro?
El pseudocódigo cuando se desea detallar el algoritmo ocupando menos papel. El diagrama de flujo cuando se desea tener una visión general del algoritmo.
En lo personal ¿Con cuál se me facilita más representar los algoritmos?
Diagrama de flujo
¿Me cuesta trabajo alguno de los temas estudiados?
No.

Evidencia de Aprendizaje. Planteamiento del problema 
Bienvenido(a) a la primera Evidencia de Aprendizaje, a partir de ahora trabajarás en la elaboración de un programa para solucionar un problema a partir del uso de los elementos del lenguaje de programación C.El programa lo elaborarás conforme avances en el estudio de las unidades del curso, en las que deberás incorporar los elementos de programación que vayas aprendiendo para dotarle de nuevas funciones, hasta lograr que resuelva totalmente el problema planteado.
Para esta Unidad, plantea un problema de la vida real que quieras resolver mediante un programa de computadora, pero ojo, procura que éste tenga un nivel de complejidad intermedio pues, si es muy fácil de resolver no podrás implementar todos los elementos de C que aprenderás, o si por el contrario, es demasiado complejo, no alcanzará con lo aprendido.

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 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 ser diseñado e implementado 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 de 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. A continuación las estudiaremos.
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. Pero veamos otro ejemplo para que quede más claro.
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 las 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.

Análisis: Nuevamente el problema planteado es muy sencillo de analizar, la ardilla debe hacer los movimientos que le permitan recoger la primer bellota, después ir por la segunda y llegar a la última casilla de la primera fila. Otra posible opción es que recoja la primer bellota, la lleve a la primer casilla, regrese por la segunda bellota y también la lleve a la primer 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 sigue:
Inicio
Avanza()
Giraizquierda()
Avanza()
Avanza()
Recogebellota()
Giraizquierda()
Avanza()
Giraderacha()
Avanza()
Avanza()
Recogebellota()
Avanza()
Dejabellota()
Dejabellota()
Fin
Las instrucciones secuenciales, 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 pantalla, 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.
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 no hay pared, en este caso la condición es no hayPared() y la acción que se realiza es avanza().

Estructuras Selectivas

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:
1.              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.
2.              Al inicio la ardilla no tiene ninguna bellota en la boca.
3.              Es un error ordenar a la ardilla que recoja una bellota en una casilla cuando ésta no contiene nada pues la ardilla no sabrá que hacer. 
4.              La ardilla ya ha sido entrenada para decir si hay
Análisis: En este caso es necesario asegurarnos que en la casilla hay una bellota, antes de ordenarle a la ardilla que la recoja, para ello vamos a utilizar una estructura selectiva, como la ardilla ya fue entrenada para decir si hay una bellota o no, entonces esto lo utilizaremos como condición. Ya que tenemos dos posibles lugares dónde la ardilla puede encontrar la bellota, ordenaremos a la ardilla que avance hasta la tercera casilla, si hay una bellota entonces la recoge y después la lleva a la última casilla, si no, la ardilla avanza hasta la quinta casilla y ahí recoge la bellota, esto sin preguntar si ahí se encuentra, pues una de las aseveraciones en el planteamiento del problema es que en el tablero hay una bellota, así que si ésta no estaba en la tercera casilla es seguro que está en la quinta.
Observa que tanto en el primer caso (Si) como en el segundo (Sino) cuando la ardilla está en la quinta casilla y ya recogió la bellota, las siguientes órdenes son que avance y deje la bellota (en la imagen del lado derecho ambas están remarcadas), de tal manera que podemos modificar el algoritmo de la siguiente forma:

También podemos utilizar la estructura Si dos veces, una para preguntar si la bellota está en la tercera casilla y otra para preguntar en la quinta, como se muestra en el siguiente algoritmo.
A diferencia de los dos algoritmos anteriores, en éste último la ardilla va a verificar en las dos casillas si hay bellota, aunque la hubiese encontrado en la primera opción, esto implica un poco más esfuerzo para la ardilla.
Por otro lado, observa que en los algoritmos 2.4 y 2.5 se definieron instrucciones para el caso que se cumple la condición (Si) y para el caso que no (Sino); en cambio, en este último algoritmo sólo se ha definido un conjunto de instrucciones que se ejecuta si la condición se cumple, de no ser así no hay instrucciones específicas y la ardilla continuará realizando las siguientes instrucciones del algoritmo. Es importante destacar que ambas estructuras son equivalentes, es decir, que los problemas que se solucionan con una también es posible hacerlo con la otra.
Existen tres tipos de estructuras selectivas que se clasifican de acuerdo al número de alternativas con que se cuenta, éstas son:
  • Simples(Si): involucra un único bloque de instrucciones que se ejecuta sólo si una condición se cumple.
  • Dobles(Si-Sino):abarca dos bloques de instrucciones, uno se ejecuta cuando la condición es verdadera y el otro cuando es falsa.
  •  Múltiples(Seleccionar): tiene más de dos bloques de instrucciones que se pueden ejecutar conforme al valor que tenga una variable, cada bloque equivale a un valor diferente.

Actividad 2. Diseño de un algoritmo con estructuras selectivas. 
1. Abre un documento de Word y en él resuelve el problema que te proporcionará tu facilitador(a) utilizando estructuras selectivas.
2. Al terminar, guarda el documento con el nombre FPR_U2_A2_XXYZ.doc y envíalo a tu facilitador(a) por medio de la sección Tareas, él (ella) te hará las observaciones pertinentes para que puedas mejorar tu trabajo  en caso de que así lo amerite.

2.3.3. Estructuras repetitivas
Las estructuras repetitivas, también llamadas ciclos, permiten ejecutar varias veces un bloque de instrucciones en función de una condición. Para ilustrar esto, volvamos al problema 2.1 en donde la ardilla debe llevar una bellota desde la primera casilla hasta la última en un mundo. Observa que una vez que la ardilla  recoge la bellota y está viendo de frente, debe avanzar una y otra vez mientras no se tope con la pared, esto se puede modelar con un ciclo de la siguiente manera.
http://aula04.abiertayadistancia.sep.gob.mx/DS/file.php/23/moddata/scorm/132/10_FPR_U2_2_3_3/images/img_t221_11.jpg
Generalmente, un ciclo se utiliza cuando descubrimos un patrón, tal como se hizo en el análisis del problema 2.2. Si observas el algoritmo 2.2 verás que al final hay una flecha que regresa a la primera instrucción, representando con ello un ciclo. La presentación en pseudocódigo de este algoritmo sería la que se muestra aquí.

La clave para utilizar un ciclo es identificar el conjunto de instrucciones que se deben repetir y la condición para que se ejecuten. Al igual que en las estructuras selectivas, existen diferentes estructuras repetitivas que se diferencian, principalmente, por el orden en el que se evalúa la condición. Revisa el siguiente documento para conocerlas.
Actividad 3. Diseño de un algoritmo con estructuras repetitivas. 
1.    Abre un documento de Word y en él resuelve el problema que te proporcionará tu facilitador(a) utilizando estructuras repetitivas.
2.    Al terminar, guarda el documento con el nombre FPR_U2_A3_XXYZ.doc y envíalo a tu facilitador(a) por medio de la sección Tareas, él (ella) te hará las observaciones pertinentes para que puedas mejorar tu trabajo  en caso de que así lo amerite.

Evidencia de Aprendizaje. Planteamiento del problema
Bienvenido(a) a la primera Evidencia de Aprendizaje, a partir de ahora trabajarás en la elaboración de un programa para solucionar un problema a partir del uso de los elementos del lenguaje de programación C.
El programa lo elaborarás conforme avances en el estudio de las unidades del curso, en las que deberás incorporar los elementos de programación que vayas aprendiendo para dotarle de nuevas funciones, hasta lograr que resuelva totalmente el problema planteado.
Para esta Unidad, plantea un problema de la vida real que quieras resolver mediante un programa de computadora, pero ojo, procura que éste tenga un nivel de complejidad intermedio pues, si es muy fácil de resolver no podrás implementar todos los elementos de C que aprenderás, o si por el contrario, es demasiado complejo, no alcanzará con lo aprendido.
Consulta a tu Facilitador(a) y/o a tus compañeros(as) de grupo para delimitar mejor el problema planteado (utiliza el Foro Planteamiento del Problema). Una vez delimitado, envíalo mediante el Portafolio de evidencias para recibir la primer retroalimentación del (la) Facilitador(a).
En un documento de Word, redacta de la manera más clara posible y con lujo de detalle el problema que elegiste y guárdalo con la nomenclatura FPR_U2_EA_XXYZ.doc. Sustituye las XX por las dos primeras letras de tu primer nombre, la Y por la inicial de tu apellido paterno y la Z por la inicial de tu apellido materno.
Recuerda que sólo tienes dos oportunidades para realizar tus envíos de evidencias, así que, cuando recibas la primera retroalimentación, haz las adecuaciones necesarias y hasta que consideres que el problema planteado ya está perfectamente delimitado, vuelve a enviarlo. Mientras tanto, puedes apoyarte del foro para recibir comentarios que te permitan mejorar tu actividad. La versión final del problema la deberás enviar antes de comenzar la siguiente unidad. Consulta a tu Facilitador(a) si tienes dudas al respecto.
No olvides revisar los aportes de tus compañeros(as) para ayudarles a plantear sus problemas. Realiza, al menos, dos comentarios que sirvan para apoyarlos(as) en la elaboración de su evidencia.
Para conocer los lineamientos de evaluación de esta evidencia, descarga el siguiente documento.
Para enviar tu documento: En la ruta (parte superior izquierda del aula) da clic en Fundamentos. Se enlistarán las actividades de la unidad 2 y da clic en la Evidencia de aprendizaje. Planteamiento del problema.

Autoevaluación de la Unidad 2          
Además de realizar las actividades formativas y las evidencias de aprendizaje, es importante que realices otro tipo de actividades que te servirán para autoevaluar tu aprendizaje en la parte teórica de los contenidos, es por eso que te solicitamos realizar este cuestionario que te ayudará darte cuenta de qué tanto has aprendido al respecto. Ingresa a la Autoevaluación de la Unidad 2 y selecciona la respuesta que responda a cada una de las preguntas. Para realizar la Actividad: En la ruta (parte superior izquierda del aula) da clic en Fundamentos. Se enlistarán las actividades de la unidad, da clic en la Autoevaluación de la Unidad 2.
Cierre de la unidad
¡Felicidades! Hemos acabado la unidad dos en la que estudiamos la manera de representar a los algoritmos. Ahora ya sabemos que existen dos formas, una a través de los diagramas de flujo, que nos ayudan a comprender de manera gráfica el flujo de las instrucciones y los datos de nuestros programas; y la otra, mediante lo que denominamos pseudocódigo, que es una forma de expresión más parecida al lenguaje humano y que posteriormente nos servirá para traducirla al lenguaje de programación que utilicemos.
Además, aprendimos que las características de las distintas estructuras de control que nos sirven para hacer más cortas y eficientes nuestras instrucciones.
En la siguiente unidad comenzaremos a estudiar al lenguaje C, para lo cual retomaremos parte de los contenidos vistos en esta ocasión, así que si consideras que te hace falta mejorar en alguno de los temas, ahora es el momento ideal para hacerlo.
Continuemos…
Fuentes de consulta
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.
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.

No hay comentarios:

Publicar un comentario