Source: https://www.scribd.com/document/349852790/Planificacion-TI3-ProgramAR-v27-04-2017
Timestamp: 2019-08-23 05:21:12+00:00

Document:
Uploaded by sebast1410
saveSave Planificacion TI3 ProgramAR v27!04!2017 For Later
Clase 1_2_Inacap_PLC_F
Preguntas de Repaso Del Capitulo 4
Analizador de Afinidad (Affinity)
programacionestructuradasiemens-151207133429-lva1-app6891.pdf
Arquitectura Von Neuman y Harvard
2 Evolucion de Lo SSOO
Resumen Cap. 19 y Cap. 7
Licencia Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional . ​ 1/117 " id="pdf-obj-0-2" src="pdf-obj-0-2.jpg">
Licencia Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional . ​ 1/117 " id="pdf-obj-0-4" src="pdf-obj-0-4.jpg">
Versión del 27 de marzo de 2017 1
1 ​ ​Esta obra está bajo ​Licencia Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional.​
Licencia Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional . ​ 1/117 " id="pdf-obj-0-21" src="pdf-obj-0-21.jpg">
Planificación TI3
Clase 2 - Noción de programa y proyecto simple I
Clase 3 - Métodos I
Clase 4 - Alternativa condicional
Clase 5 - Proyecto simple II
Clase 6 - Variables I
Clase 7 - Diferencia entre programa y algoritmo
Clase 8 - Lenguajes de programación
Clase 9 - El lenguaje de máquina
Clase 10 - Arquitectura básica de una computadora
Clase 11 - Almacenamiento y memoria I
Clase 12 - Almacenamiento y memoria II
Clase 13 - CPU I
Clase 14 - CPU II
Clase 15 - Relación hardware-software
Clase 16 - Sistemas operativos I
Clase 17 - Sistemas operativos II
Clase 18 - Sistemas operativos III
Clase 19 - Software libre
Clase 20 - Software malicioso
Clase 21 - Repaso de programación
Clase 22 - Métodos II
Clase 23 - Proyecto integrador I
Clase 24 - Métodos III
Clase 25 - Repetición simple
Clase 26 - Variables II
Clase 27 - Repetición condicional
Clase 28 - Proyecto integrador II
Clase 29 - Proyecto integrador III
Coordinación Iniciativa Program.AR
Autoridades Fundación Dr. Manuel Sadosky
Versión inicial con la planificación completa y secuencias didácticas de las clases 1 a 8.
Se agregaron las secuencias didácticas de las clases 9 a 19.
Se agregaron las secuencias didácticas de las clases 20 a 29. Se realizaron pequeñas correcciones en las secuencias didácticas de las clases 9 a 19.
Se mejoraron las descripciones de objetivos y contenidos de las clases para reflejar las estrategias didácticas de cada una. Se corrigieron aspectos menores de diseño. Algunas clases que eran muy largas se adecuaron mejor al tiempo disponible.
Es complejo entender el mundo en el que vivimos sin cierto conocimiento acerca de cómo funcionan las computadoras y los programas que las comandan. Interactuamos con ellas todo el tiempo: cuando buscamos en Internet, cuando chateamos mediante nuestros celulares y también cuando pagamos el boleto en el transporte público, o cuando mediante el dispositivo conocido como "pedal" activamos el sistema de frenado de un auto. La tecnología permea nuestra vidas y las discusiones que la rodean van ganando lugar en la agenda pública. Si no conocemos de estos temas, nuestra posibilidad de participar como ciudadanas y ciudadanos plenos se ve reducida. Por eso es tan importante que la escuela aborde las Ciencias de la Computación y en consecuencia la importancia de la materia Tecnologías de la Información.
Ciencias de la Computación​ es el nombre que recibe la disciplina que estudia cómo funcionan las computadoras y los programas que las controlan, cómo se comunican éstas entre sí, y tantas otras cuestiones relacionadas con la programación, la construcción de sistemas y el procesamiento de información de todo tipo.
La materia ​Tecnologías de la Información​ es una de las formas en que la escuela argentina empieza a responder a la necesidad de enseñar Ciencias de la Computación, y de ahí su importancia. La Iniciativa Program.AR viene trabajando desde hace varios años para contribuir con la llegada de las Ciencias de la Computación a la escuela, y por ende desea contribuir a que esta materia sea un éxito. Por ese motivo, ha puesto su equipo de profesionales a trabajar en una propuesta de trabajo para el aula. Esta primera edición está pensada para "TI3", es decir, la materia Tecnologías de la Información de tercer año de la Nueva Escuela Secundaria de la Ciudad Autónoma de Buenos Aires.
Se trata de una ​planificación de todo el año y sus correspondientes secuencias didácticas​, ajustadas al plan de estudio oficial de la materia, con el objetivo de brindarle al docente un marco sólido para tomar de base a la hora de pensar sus propias clases. En ellas se abordan temas de programación, organización y arquitectura de computadoras, sistemas operativos y seguridad informática.
Propone un ​recorrido​ original: comienza presentando nociones elementales de programación en una plataforma gráfica, apta para adolescentes sin ningún conocimiento previo, con el objetivo de explicar la noción de programa y una introducción a la de algoritmo. El paso siguiente es hacer algunos ejercicios muy sencillos en un lenguaje textual, para poder preguntarse qué contienen los programas ejecutables, aquellos a los que en nuestra experiencia cotidiana simplemente les hacemos doble clic. Esa pregunta sirve de puntapié inicial para indagar sobre cómo funcionan las computadoras (su organización y su arquitectura), lo que nos permite transformar una noción cercana a una caja opaca, casi mágica, en un concepto sobre el que podemos razonar.
Luego de esa "sumergida" en profundidad, volvemos a acercarnos a la "superficie" pasando por los conceptos de sistema operativo, de virus y de algunos otros relacionados con los aspectos de la seguridad informática que tienen contacto más directo con nuestro uso cotidiano de las computadoras. Terminamos el año volviendo a la programación en entornos para principiantes, repasando y profundizando las nociones ya adquiridas y visitando algunas nuevas.
info@program.ar y los invitamos a revisar periódicamente nuestro sitio web, o seguirnos en las redes sociales, para mantenerse al tanto de las futuras versiones. El equipo de Program.AR www.program.ar ​ @Programar2020 ​ | programar2020 Específicamente, una licencia "Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional", cuyos detalles pueden consultarse en https://creativecommons.org/licenses/by-nc-sa/4.0/deed.es . ​ 8/117 " id="pdf-obj-7-2" src="pdf-obj-7-2.jpg">
info@program.ar y los invitamos a revisar periódicamente nuestro sitio web, o seguirnos en las redes sociales, para mantenerse al tanto de las futuras versiones. El equipo de Program.AR www.program.ar ​ @Programar2020 ​ | programar2020 Específicamente, una licencia "Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional", cuyos detalles pueden consultarse en https://creativecommons.org/licenses/by-nc-sa/4.0/deed.es . ​ 8/117 " id="pdf-obj-7-4" src="pdf-obj-7-4.jpg">
Este trabajo se pone a disposición de la comunidad bajo una ​licencia ​Creative Commons como una forma de incentivar la creación de obras derivadas. Dicho de otra forma, fomentamos activamente que las y los colegas generen sus propias versiones de este material y las compartan con la comunidad.
Consideramos que este material se encuentra en la categoría ​trabajo en curso​, y que por lo tanto irá mejorando a medida que vaya siendo usado y discutido. Esperamos que las y los colegas lo encuentren útil y quedamos atentos a críticas o comentarios. Los esperamos en ​info@program.ar y los invitamos a revisar periódicamente nuestro sitio web, o seguirnos en las redes sociales, para mantenerse al tanto de las futuras versiones.
El equipo de Program.AR
www.program.ar
info@program.ar y los invitamos a revisar periódicamente nuestro sitio web, o seguirnos en las redes sociales, para mantenerse al tanto de las futuras versiones. El equipo de Program.AR www.program.ar ​ @Programar2020 ​ | programar2020 Específicamente, una licencia "Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional", cuyos detalles pueden consultarse en https://creativecommons.org/licenses/by-nc-sa/4.0/deed.es . ​ 8/117 " id="pdf-obj-7-29" src="pdf-obj-7-29.jpg">
​@Programar2020​ |
info@program.ar y los invitamos a revisar periódicamente nuestro sitio web, o seguirnos en las redes sociales, para mantenerse al tanto de las futuras versiones. El equipo de Program.AR www.program.ar ​ @Programar2020 ​ | programar2020 Específicamente, una licencia "Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional", cuyos detalles pueden consultarse en https://creativecommons.org/licenses/by-nc-sa/4.0/deed.es . ​ 8/117 " id="pdf-obj-7-36" src="pdf-obj-7-36.jpg">
2 Específicamente, una licencia "Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional", cuyos detalles pueden consultarse en
https://creativecommons.org/licenses/by-nc-sa/4.0/deed.es.​
Aplicar estrategias y técnicas para crear animaciones y videojuegos mediante entornos
de programación educativa. Comprender el carácter específico de las instrucciones empleadas en programación.
Realizar una primera aproximación a conceptos centrales para la realización de un programa.
En esta clase se presentará la materia e instalará y presentará la herramienta Alice. Los componentes de Alice se analizarán como si fueran las partes necesarias para la realización de una película: la cámara, la iluminación, la locación, la escenografía, los actores y el guión. Se relacionará el comportamiento de los personajes/actores durante la ejecución con las instrucciones indicadas en el guión.
Ver Actividades​.
Comprender la noción de programa y la diferencia entre tiempo de creación y de
ejecución del mismo. Establecer relaciones entre el orden de las acciones programadas y los resultados
obtenidos. Asumir posturas activas para la exploración de las herramientas, opciones y limitaciones que propone un entorno.
Aplicar los conceptos adquiridos para desarrollar animaciones simples. Planificar y realizar un proyecto grupal de animación y/o juego que permita abordar alguna temática significativa para el grupo.
Se pedirá a las y los estudiantes que realicen una animación simple para indagar sobre los métodos disponibles en Alice, intercambiando el orden de las instrucciones y analizando los resultados al ejecutar el guión. Se presentarán las nociones de programa y secuencialidad. Para finalizar, en esta clase se comenzará un proyecto grupal que consistirá en la realización de una animación y que se trabajará a lo largo del trimestre.
Introducir la idea de abstracción a través del uso de métodos en Alice.
Reconocer cómo descomponer el problema/guión en acciones abstractas más
abarcativas como estrategia para encarar la creación de un programa. Reconocer la función de los métodos.
A partir del relato de una historia se pedirá a las y los estudiantes que programen un guión. Debido a la longitud y repetición de acciones en la historia, la creación del programa se volverá tedioso y extenso. A posteriori, se introducirá como estrategia de resolución la identificación de acciones abarcativas que nuclean secuencias de instrucciones más simples dentro de la historia. Se identificarán esas acciones de manera conjunta y se procederá a reescribir el programa aprovechando el recurso de los métodos para plasmar las acciones más complejas y abstractas que componen la historia. Se identificarán las ventajas del uso de métodos al comparar los dos programas construidos, poniendo énfasis en la legibilidad, la extensión y claridad del programa resultante.
escenario inicial ​ y ​ guión ​ de la actividad. Clase 4 - Alternativa condicional Objetivos ● Comprender el concepto de alternativa condicional y de flujo de control alternativo o no ● secuencial. Utilizar correctamente los comandos necesarios para ejecutar alternativas condicionales. ● Realizar programas adecuados frente a escenarios cambiantes. Identificar el uso de ● alternativas condicionales tanto en situaciones cotidianas como en juegos y aplicaciones conocidas. Distinguir entre la programación de animaciones y la programación de juegos con interacción del usuario a partir del uso de eventos. Contenido y desarrollo Uso de condicionales. Interactividad. El objetivo es que las y los estudiantes programen un juego en el que un personaje prenda todas las luces de una fila de casilleros, teniendo en cuenta que en ellos puede o no haber una luz. Este ejercicio servirá para introducir el concepto de alternativa condicional a partir de la instrucción if/else de Alice. Se buscarán ejemplos de toma de decisiones en la vida cotidiana, en juegos y aplicaciones para explicar el uso de alternativas condicionales. Ver Actividades ​ . Herramientas Alice y el ​ escenario inicial ​ de la actividad. Clase 5 - Proyecto simple II Objetivos 11/117 " id="pdf-obj-10-2" src="pdf-obj-10-2.jpg">
escenario inicial ​ y ​ guión ​ de la actividad. Clase 4 - Alternativa condicional Objetivos ● Comprender el concepto de alternativa condicional y de flujo de control alternativo o no ● secuencial. Utilizar correctamente los comandos necesarios para ejecutar alternativas condicionales. ● Realizar programas adecuados frente a escenarios cambiantes. Identificar el uso de ● alternativas condicionales tanto en situaciones cotidianas como en juegos y aplicaciones conocidas. Distinguir entre la programación de animaciones y la programación de juegos con interacción del usuario a partir del uso de eventos. Contenido y desarrollo Uso de condicionales. Interactividad. El objetivo es que las y los estudiantes programen un juego en el que un personaje prenda todas las luces de una fila de casilleros, teniendo en cuenta que en ellos puede o no haber una luz. Este ejercicio servirá para introducir el concepto de alternativa condicional a partir de la instrucción if/else de Alice. Se buscarán ejemplos de toma de decisiones en la vida cotidiana, en juegos y aplicaciones para explicar el uso de alternativas condicionales. Ver Actividades ​ . Herramientas Alice y el ​ escenario inicial ​ de la actividad. Clase 5 - Proyecto simple II Objetivos 11/117 " id="pdf-obj-10-4" src="pdf-obj-10-4.jpg">
Alice; ​escenario inicial​ y ​guión​ de la actividad.
Comprender el concepto de alternativa condicional y de flujo de control alternativo o no
secuencial. Utilizar correctamente los comandos necesarios para ejecutar alternativas condicionales.
Realizar programas adecuados frente a escenarios cambiantes. Identificar el uso de
alternativas condicionales tanto en situaciones cotidianas como en juegos y aplicaciones conocidas. Distinguir entre la programación de animaciones y la programación de juegos con interacción del usuario a partir del uso de eventos.
Uso de condicionales. Interactividad.
El objetivo es que las y los estudiantes programen un juego en el que un personaje prenda todas las luces de una fila de casilleros, teniendo en cuenta que en ellos puede o no haber una luz. Este ejercicio servirá para introducir el concepto de alternativa condicional a partir de la instrucción if/else de Alice. Se buscarán ejemplos de toma de decisiones en la vida cotidiana, en juegos y aplicaciones para explicar el uso de alternativas condicionales.
Alice y el ​escenario inicial​ de la actividad.
Aplicar técnicas y estrategias para crear animaciones y videojuegos mediante entornos
de programación educativos. Propiciar trabajo activo y colaborativo entre pares.
Se trabajará sobre el proyecto presentado en la ​clase 2​. Se presentará el nivel de avance de cada grupo y los obstáculos y objetivos a futuro. A partir de esto, se realizará un intercambio para abordar de manera conjunta los aspectos de la herramienta que requiera cada pieza.
Seleccionar y aplicar estrategias para la resolución de un problema simple.
Comprender el concepto de variable y relacionarlo con la memoria y las formas de almacenamiento de las computadoras.
Se discutirá la diferencia entre juego y animación y se mostrará como usar Alice para hacer programas interactivos. Como primer ejemplo se puede hacer un programa en el que el usuario ingrese su nombre, y algún personaje lo diga. Como ejercicio para introducir variables, se solicitará que ingresando una única vez el nombre del usuario varios personajes lo saluden. Mediante una dramatización con cajas donde se guardarán papeles con el nombre de un estudiante se ilustrará el uso y el concepto de variable como un lugar donde se puede almacenar un dato y después recuperar esa información que está guardada.
Reconocer la función de los algoritmos y su representación en pseudocódigo.
Se repasarán los conceptos de programación trabajados hasta el momento. Luego, se realizará un ejercicio en Alice en parejas en el que los y las estudiantes deberán ingresar los puntajes de dos equipos, compararlos y decidir si hubo un ganador o un empate. Tras analizar entre toda la clase las soluciones propuestas se presentará el concepto de algoritmo, se trabajará en la resolución de otros problemas simples, la escritura de pseudocódigos, la posibilidad de diversas estrategias de resolución y la diferencia entre un programa y un algoritmo.
Reconocer diferencias y similitudes entre lenguajes y entornos de programación.
Reforzar la idea de que un mismo algoritmo puede tener varias implementaciones, incluso en varios lenguajes.
Se presentará un problema para resolver con un algoritmo pensado entre toda la clase y se programará, también colectivamente, en lenguaje C simplificado para introducir su sintaxis, explorar las principales diferencias con Alice y resaltar que hay similitudes independientemente del lenguaje elegido para la implementación.
https://goo.gl/hqZRj0 ​ . Clase 9 - El lenguaje de máquina Objetivos ● Reflexionar sobre la relación entre lenguajes de programación de alto y bajo nivel, y la ● necesidad de los compiladores. Distinguir la diferencia entre código fuente y código binario (también llamado ejecutable). ● Analizar la función, estructura y funcionamiento de los lenguajes de bajo nivel. Contenido y desarrollo La clase requerirá el uso de Huayra (u otra distribución de Linux) y la instalación de un programa gratuito de desarrollo argentino denominado ​ BARF ​ . El/La docente distribuirá el software para su instalación al comienzo de la clase. Luego, utilizará el programa en C realizado en la ​ clase 8 ​ y mostrará que durante su uso se generó un nuevo archivo. Se analizará este archivo, su tamaño y cambios al realizarle modificaciones al programa original escrito en C. Esto servirá de introducción para presentar el lenguaje máquina, el proceso de compilación y la diferencia entre código fuente y ejecutable. Mediante el uso de BARF se podrá visualizar el lenguaje máquina generado al compilar el programa en C. Entre toda la clase se analizará el gráfico generado por BARF al ​ desensamblar el programa en C, lo que servirá para comprender mejor algunos detalles del lenguaje máquina. Se propondrá como actividad que las y los estudiantes modifiquen el programa en C y describan la relación entre sus modificaciones y la imagen generada por BARF. Para finalizar se realizará un breve repaso de los nuevos conceptos trabajados en clase. Ver Actividades ​ . Herramientas C y ​ BARF 14/117 " id="pdf-obj-13-2" src="pdf-obj-13-2.jpg">
https://goo.gl/hqZRj0 ​ . Clase 9 - El lenguaje de máquina Objetivos ● Reflexionar sobre la relación entre lenguajes de programación de alto y bajo nivel, y la ● necesidad de los compiladores. Distinguir la diferencia entre código fuente y código binario (también llamado ejecutable). ● Analizar la función, estructura y funcionamiento de los lenguajes de bajo nivel. Contenido y desarrollo La clase requerirá el uso de Huayra (u otra distribución de Linux) y la instalación de un programa gratuito de desarrollo argentino denominado ​ BARF ​ . El/La docente distribuirá el software para su instalación al comienzo de la clase. Luego, utilizará el programa en C realizado en la ​ clase 8 ​ y mostrará que durante su uso se generó un nuevo archivo. Se analizará este archivo, su tamaño y cambios al realizarle modificaciones al programa original escrito en C. Esto servirá de introducción para presentar el lenguaje máquina, el proceso de compilación y la diferencia entre código fuente y ejecutable. Mediante el uso de BARF se podrá visualizar el lenguaje máquina generado al compilar el programa en C. Entre toda la clase se analizará el gráfico generado por BARF al ​ desensamblar el programa en C, lo que servirá para comprender mejor algunos detalles del lenguaje máquina. Se propondrá como actividad que las y los estudiantes modifiquen el programa en C y describan la relación entre sus modificaciones y la imagen generada por BARF. Para finalizar se realizará un breve repaso de los nuevos conceptos trabajados en clase. Ver Actividades ​ . Herramientas C y ​ BARF 14/117 " id="pdf-obj-13-4" src="pdf-obj-13-4.jpg">
Alice y compilador C (ya instalado en Huayra). Archivos disponibles en ​https://goo.gl/hqZRj0​.
Reflexionar sobre la relación entre lenguajes de programación de alto y bajo nivel, y la
necesidad de los compiladores. Distinguir la diferencia entre código fuente y código binario (también llamado ejecutable).
Analizar la función, estructura y funcionamiento de los lenguajes de bajo nivel.
La clase requerirá el uso de Huayra (u otra distribución de Linux) y la instalación de un programa gratuito de desarrollo argentino denominado ​BARF​. El/La docente distribuirá el software para su instalación al comienzo de la clase.
Luego, utilizará el programa en C realizado en la ​clase 8​ y mostrará que durante su uso se generó un nuevo archivo. Se analizará este archivo, su tamaño y cambios al realizarle modificaciones al programa original escrito en C. Esto servirá de introducción para presentar el lenguaje máquina, el proceso de compilación y la diferencia entre código fuente y ejecutable. Mediante el uso de BARF se podrá visualizar el lenguaje máquina generado al compilar el programa en C. Entre toda la clase se analizará el gráfico generado por BARF al ​desensamblar el programa en C, lo que servirá para comprender mejor algunos detalles del lenguaje máquina. Se propondrá como actividad que las y los estudiantes modifiquen el programa en C y describan la relación entre sus modificaciones y la imagen generada por BARF.
Para finalizar se realizará un breve repaso de los nuevos conceptos trabajados en clase.
C y ​BARF
Comprender qué características determinan que un objeto sea una computadora.
Identificar qué partes componen una computadora.
Establecer relaciones entre los distintos componentes.
Deducir las funciones principales del CPU y la memoria RAM.
Como primera actividad se deberá decidir qué objetos son una computadora entre un conjunto de diversos dispositivos electrónicos.
A continuación se buscará identificar los componentes que forman parte de la computadora: el procesador, la memoria RAM y distintos periféricos de entrada, salida y entrada/salida. En paralelo se irá construyendo un gráfico que permita visualizar cómo se relacionan todos estos componentes.
Vinculando la primera actividad con la segunda, se reconocerán los componentes mencionados en la actividad anterior, en diversos dispositivos (computadora, consola, celular, etc.).
Por último, se intentará deducir cuáles son las funciones principales de la memoria RAM y el procesador a partir de lo que las y los estudiantes ya saben, y de pensar computadoras sin alguno de estos componentes.
Partes de ​hardware​ en vivo o, en su defecto, video y/o fotos.
Diferenciar entre 2 tipos de memoria: la volátil y la persistente.
Comprender la magnitud de las unidades de almacenamiento.
Comprender la noción de tiempo de acceso.
Reconocer las características de la jerarquía de memoria.
Vincular las nociones de variable y programa con la de memoria.
Reconocer la necesidad de direcciones de memoria.
Como primer acercamiento al tema se indagará acerca de cuáles son los conceptos y conocimientos previos que las y los estudiantes tienen acerca del mismo.
Luego, se plantearán una serie de preguntas que motiven la distinción entre lo que se conoce como memoria volátil y memoria persistente.
En la siguiente actividad, se pretenderá comprender la magnitud de las distintas unidades utilizadas para almacenar datos en una computadora (Byte, KB, MB, GB, TB, PB, etc.). Para ello se propondrá realizar ciertas modificaciones en un archivo originalmente en blanco y notar cómo cambia el tamaño de dicho archivo.
A continuación, el/la docente explicará el concepto de tiempo de acceso y recorrerá junto con sus alumnas y alumnos un gráfico que muestre la jerarquía de memoria, identificando las características más sobresalientes: tiempo de acceso, costo y tamaño.
Retomando el ​concepto de variable​ y de programa, las y los estudiantes deberán decidir y argumentar en qué tipo de memoria (RAM o disco) se guardan distintos recursos.
Se problematizará cómo hace la memoria para saber dónde guardó cada dato, surgiendo la noción de dirección de memoria.
Por último, deberán indagar sobre las características de la memoria RAM y el disco de los dispositivos con los que cuenten en clase (celulares, computadoras, tabletas, etc.).
Comprender el concepto de caché y qué problema resuelve: el acceso rápido a la información frecuente.
Conocer cómo se puede almacenar y liberar un dato de caché.
Para motivar la necesidad de tener una memoria ​caché​, se realizará una primera actividad en la que habrá que calcular el tiempo que toma ejecutar un programa que lee y escribe en una memoria USB o pendrive. La idea es comparar distintos escenarios en donde varíe el tiempo de acceso de la memoria y se note el contraste respecto del tiempo que le toma ejecutar una instrucción a la CPU.
A continuación, se propone una discusión con la clase para pensar cómo se podría solucionar este problema, buscando acercarse a la idea de memoria ​caché​.
Se comentará cuáles son los pasos que se siguen para guardar los datos en ​caché​ y se reflexionarán cuáles son las ventajas y desventajas de tener memoria ​caché​.
Por último, se comentará uno de los algoritmos de reemplazo de datos en ​caché​, LRU.
Descubrir las características de los procesadores que poseen las y los estudiantes en
sus dispositivos. Comprender cómo se mide la velocidad de un procesador.
Comprender el significado de la unidad de medida GHz.
Como primera actividad, las y los estudiantes deberán descubrir distintas características del procesador que tienen en sus dispositivos y se debatirán distintos aspectos acerca de los mismos.
A continuación se problematizará el significado del término "GHz", recapitulando lo visto en la clase 9​.
Por último, se buscará que las y los estudiantes lleguen a la conclusión de que la velocidad del procesador es una de las medidas que nos permite comparar qué tan veloces son dos computadoras.
Comprender cómo funciona la CPU.
Establecer la relación entre CPU y memoria RAM.
Conocer cómo se compone por dentro una CPU.
Comprender cómo ejecuta un programa la CPU.
Como actividad introductoria se reconstruirá el gráfico realizado en la ​clase 10​ pero haciendo énfasis en la relación entre CPU y memoria RAM.
Luego se buscará fomentar un debate, a través de preguntas que realice el/la docente, que permita ensayar distintas propuestas acerca de cómo podría funcionar una CPU.
Al finalizar el debate, se reflexionará acerca de cuáles son los pasos que realiza la CPU para ejecutar un programa, usando como ejemplo un pequeño programa en lenguaje ensamblador. Esta actividad dará pie a la construcción de un gráfico que muestre por dentro la CPU, destacando aquellos componentes más importantes: registros, Unidad de Control y ALU.
Para afianzar cómo una CPU ejecuta un programa, se sugiere repasar los pasos utilizando el diagrama y determinando cuál de los componentes realiza cada tarea.
Como actividad entregable, se pedirá que escriban todos los pasos que se realizan para ejecutar un programa de una instrucción.
Por último, se mostrará un procesador real y se concluirá que "una computadora no es más que la interconexión de muchos componentes electrónicos por los que circula electricidad", siendo todo lo anterior distintas capas de abstracción.
​Ver Actividades​.
Adquirir una perspectiva general del funcionamiento de una computadora.
Vincular el hardware y el software entre sí considerando todos los componentes trabajados anteriormente.
Como actividad de repaso, se propiciará una breve discusión que retome varios de los conceptos vistos hasta el momento: qué es el hardware, qué es el software, cuáles son los componentes de hardware presentes en una computadora y qué hacen, etc.
Luego, se presentará un trabajo práctico para resolver en clase en el que se propone un análisis para abordar la mayoría de los temas de las clases previas. El trabajo será grupal y escrito. Se presentará un programa y se deberá describir su funcionamiento y analizar las limitaciones e inconvenientes si se lo intentara ejecutar en una computadora sin algunos de sus componentes (sin CPU, con memoria RAM, sin memoria ​caché​, etc.).
MinGW ​ y herramientas propias de ambos sistemas operativos. Clase 17 - Sistemas operativos II Objetivos ● Comprender algunas funciones más avanzadas de los sistemas operativos, en particular referidas al manejo de recursos, procesos, usuarios y el sistema de permisos. Contenido y desarrollo Se profundizará la idea de sistema operativo como un programa que funciona como nexo entre el hardware y el resto de los programas a través del análisis de los procesos en ejecución y los monitores de recursos. 20/117 " id="pdf-obj-19-2" src="pdf-obj-19-2.jpg">
MinGW ​ y herramientas propias de ambos sistemas operativos. Clase 17 - Sistemas operativos II Objetivos ● Comprender algunas funciones más avanzadas de los sistemas operativos, en particular referidas al manejo de recursos, procesos, usuarios y el sistema de permisos. Contenido y desarrollo Se profundizará la idea de sistema operativo como un programa que funciona como nexo entre el hardware y el resto de los programas a través del análisis de los procesos en ejecución y los monitores de recursos. 20/117 " id="pdf-obj-19-6" src="pdf-obj-19-6.jpg">
Descubrir que entre el hardware y las aplicaciones que usamos existe una capa
intermedia: el sistema operativo. Comprender la utilidad y funcionalidades de los sistemas operativos.
Comprender cuáles son sus partes más importantes.
Se retomará el programa C que las y los estudiantes hicieron en la ​clase 8​ y se lo compilará en dos sistemas operativos distintos para compararlos y determinar que no son iguales a pesar de que ni el código del programa original ni la máquina usada cambiaron.
A partir de esa observación se motivará una introducción a los sistemas operativos como mediadores entre la parte física de la computadora y el software que usamos.
Se distinguirá entre las funciones básicas del sistema operativo, es decir, el kernel y la interfaz de usuario. Se analizará el origen y las funciones de los drivers o controladores.
Huayra Linux, Windows, ​MinGW​ y herramientas propias de ambos sistemas operativos.
Comprender algunas funciones más avanzadas de los sistemas operativos, en particular referidas al manejo de recursos, procesos, usuarios y el sistema de permisos.
Se profundizará la idea de sistema operativo como un programa que funciona como nexo entre el hardware y el resto de los programas a través del análisis de los procesos en ejecución y los monitores de recursos.
Se trabajará sobre el sistema de permisos y la creación de nuevos usuarios.
Huayra Linux, Windows, Android y herramientas propias de dichos sistemas operativos.
Comprender el origen de las actualizaciones y aplicaciones de un sistema operativo.
Analizar criterios para una elección adecuada de sistema operativo.
Se analizarán los objetivos de las actualizaciones de los sistemas operativos, presentando los sistemas de paquetes.
Se discutirá qué características o prestaciones de un sistema operativo analizar para poder decidir, entre distintas opciones, cuál se adecúa mejor a nuestras necesidades.
Por último, se reflexionará acerca de qué pasaría si la computadora que usamos no tuviera instalado un sistema operativo.
Comprender las características del software libre y propietario.
Distinguir entre software libre y gratuito.
Familiarizarse con el concepto de copyleft.
Como primera actividad se propondrá realizar una reflexión sobre el acceso y los derechos de uso de bienes culturales que hayan obtenido recientemente (libros, canciones, juegos, etc.).
Luego se avanzará sobre las nociones de software libre y propietario, considerando distintos programas de uso cotidiano. Se distinguirá entre que un software sea libre y que sea gratuito. A través de distintos ejemplos se buscará comprender las libertades del usuario y las implicancias de acceso al código fuente, confluyendo, hacia el final de la clase, al concepto de copyleft.
Por último, se presentará una actividad para relacionar las características del software con licencia copyleft y con licencia propietaria.
Aproximarse al concepto de vulnerabilidad.
Comprender qué es el software malicioso, cómo funciona y cuál es su origen.
Favorecer el uso responsable de las tecnologías de la información y la comunicación.
Se realizará una aproximación al concepto de vulnerabilidad para introducir luego el de software malicioso. Para ello se analizará el código de un programa que tiene una falla de seguridad.
A continuación se realizará un trabajo grupal sobre las características de distintos tipos de programas maliciosos.
Otra de las nociones que se estudiará es la de phishing a través del análisis de escenarios maliciosos y seguros. ¿Cómo podemos distinguirlos?
La actividad de cierre consistirá en reflexionar cómo podemos proteger nuestros sistemas y nuestros datos frente a este tipo de amenazas.
Repasar los conceptos de programación trabajados en la primera parte de la materia.
Se programará un juego que combine los temas de programación vistos en las clases iniciales. El objetivo es retomar la idea de programa entendido como guión, la modificación del orden secuencial de sus instrucciones a partir de alternativas condicionales y la interacción con el usuario en el transcurso de la ejecución de un programa, que brinda información que será guardada en una variable en memoria para su uso posterior y permitirá trabajar con información desconocida y cambiante al momento de crear el programa.
Profundizar la comprensión del uso de métodos como estrategia de abstracción.
guión ​ de la actividad. Clase 23 - Proyecto integrador I Objetivos ● Sintetizar y combinar los conceptos de programación abordados en las clases previas. Contenido y desarrollo Se delinearán las pautas iniciales para la programación de un juego en Alice por parte de las y los estudiantes. El proyecto será grupal y se irá complejizando con nuevas consignas y recursos a medida que se avance con los contenidos de programación en las sucesivas clases. Ver Actividades ​ . Herramientas Alice 24/117 " id="pdf-obj-23-2" src="pdf-obj-23-2.jpg">
guión ​ de la actividad. Clase 23 - Proyecto integrador I Objetivos ● Sintetizar y combinar los conceptos de programación abordados en las clases previas. Contenido y desarrollo Se delinearán las pautas iniciales para la programación de un juego en Alice por parte de las y los estudiantes. El proyecto será grupal y se irá complejizando con nuevas consignas y recursos a medida que se avance con los contenidos de programación en las sucesivas clases. Ver Actividades ​ . Herramientas Alice 24/117 " id="pdf-obj-23-4" src="pdf-obj-23-4.jpg">
Se volverá a trabajar con la animación “Encuentro de tercer tipo”, pero bajo el formato de un juego del tipo ​Elige tu propia aventura​. Para ello se eliminará el final de la historia y se lo dejará en suspenso a la espera de la decisión del usuario, a quien se le presentarán dos alternativas de desenlace.
A partir del trabajo con un juego más complejo se buscará que las y los estudiantes vuelvan sobre los conceptos anteriores, para recuperar su significado y apropiarse de los recursos aprendidos. Se trabajará nuevamente sobre la lectura de una historia por lo que se espera que se recupere nuevamente el proceso de trabajo para la creación de un programa: la lectura del guión, la identificación de métodos o acciones más abarcativas con los que organizar el accionar de los personajes, y la implementación del programa con Alice.
Alice y ​guión​ de la actividad.
Sintetizar y combinar los conceptos de programación abordados en las clases previas.
Se delinearán las pautas iniciales para la programación de un juego en Alice por parte de las y los estudiantes. El proyecto será grupal y se irá complejizando con nuevas consignas y recursos a medida que se avance con los contenidos de programación en las sucesivas clases.
https://goo.gl/5d4HWe ​ . Clase 25 - Repetición simple Objetivos ● Repasar el concepto de secuencialidad y de alternativas condicionales como dos tipos ● de ​ recorridos ​ de las instrucciones dentro de un programa. Introducir las estructuras de repetición simple, que modifican el flujo secuencial del programa y repiten las instrucciones una cantidad fija de veces. Contenido y desarrollo Se retomará la actividad de la clase 21 y se pedirá a las y los alumnos que programen el juego limitando a tres intentos las oportunidades del jugador. Luego de que los y las estudiantes exploren distintas soluciones se complejizará la consigna y tras unos minutos de trabajo se propiciará un breve debate para discutir la idea de secuencialidad de un programa y revisar la alternativa condicional desde esa perspectiva. Se 25/117 " id="pdf-obj-24-3" src="pdf-obj-24-3.jpg">
https://goo.gl/5d4HWe ​ . Clase 25 - Repetición simple Objetivos ● Repasar el concepto de secuencialidad y de alternativas condicionales como dos tipos ● de ​ recorridos ​ de las instrucciones dentro de un programa. Introducir las estructuras de repetición simple, que modifican el flujo secuencial del programa y repiten las instrucciones una cantidad fija de veces. Contenido y desarrollo Se retomará la actividad de la clase 21 y se pedirá a las y los alumnos que programen el juego limitando a tres intentos las oportunidades del jugador. Luego de que los y las estudiantes exploren distintas soluciones se complejizará la consigna y tras unos minutos de trabajo se propiciará un breve debate para discutir la idea de secuencialidad de un programa y revisar la alternativa condicional desde esa perspectiva. Se 25/117 " id="pdf-obj-24-5" src="pdf-obj-24-5.jpg">
Profundizar la estrategia de abstracción que facilitan los métodos, la pertinencia de su creación y la definición de un nombre adecuado.
Se les presentará a las y los estudiantes varios programas como posibles soluciones a un problema dado. La propuesta es que, en grupos, elijan la abstracción más adecuada que resuelva el enunciado. Se les pedirá que dentro de cada grupo debatan cuál de ellas representa la solución más adecuada al problema y que justifiquen por qué.
Alice y archivos disponibles en ​https://goo.gl/5d4HWe​.
Repasar el concepto de secuencialidad y de alternativas condicionales como dos tipos
de ​recorridos ​de las instrucciones dentro de un programa. Introducir las estructuras de repetición simple, que modifican el flujo secuencial del programa y repiten las instrucciones una cantidad fija de veces.
Se retomará la actividad de la clase 21 y se pedirá a las y los alumnos que programen el juego limitando a tres intentos las oportunidades del jugador.
Luego de que los y las estudiantes exploren distintas soluciones se complejizará la consigna y tras unos minutos de trabajo se propiciará un breve debate para discutir la idea de secuencialidad de un programa y revisar la alternativa condicional desde esa perspectiva. Se
resaltará la capacidad del condicional de alterar el flujo secuencial de un programa para que no transcurra de manera lineal.
Se continuará con la ruptura de la secuencialidad con otro tipo de recursos como la repetición simple y se presentará el uso de “loop” o “ciclo” de Alice que las y los alumnos deberán incluir en su solución.
Para finalizar se discutirá sobre acciones que se repiten un número finito de veces en la vida cotidiana.
Profundizar el funcionamiento de las variables como contadores de una cantidad dentro
de la dinámica de un juego. Reforzar la idea de que una variable permite memorizar un valor que puede cambiar a lo largo de la ejecución del programa.
Se instalará un escenario de Alice con un juego simple en las computadoras de las y los estudiantes y se les pedirá que le agreguen un contador de puntaje que comience en cero y se incremente o decremente en función del accionar del jugador. Se profundizará el funcionamiento de las variables, con un uso no explorado: utilizarlas para contar una cantidad. Luego se complejizará el juego y las y los estudiantes deberán incluir más oportunidades para el jugador y acumular el puntaje de las mismas. Se hará incapié en la idea de que una variable permite memorizar un valor que puede cambiar a lo largo de la ejecución del programa.
Se avanzará con el proyecto integrador del Juego, definiendo los últimos detalles y resolviendo las dudas que existan.
Juego de feria ​ . Clase 27 - Repetición condicional Objetivos ● Introducir la repetición condicional (el “while” o “repetir mientras que…”), como una ● forma más avanzada de romper la secuencialidad de un programa. Comparar con el funcionamiento de la repetición simple, en tanto la repetición ● condicional evalúa una condición para determinar la cantidad de repeticiones. Destacar la potencialidad -dentro de la creación de un juego- de poder programar una repetición desconociendo la cantidad de repeticiones que se producirán. Contenido y desarrollo Se retomará el programa utilizado en la ​ clase 26 ​ y se pedirá a las y los estudiantes que lo completen para que los jugadores ganen al acertar tres lanzamientos. Luego de unos minutos para que realicen sus programas, se discutirá entre toda la clase sobre las opciones exploradas. Se introducirá la repetición condicional y el uso de “While” o “Repetir mientras que” y se trabajará sobre casos en los que la cantidad de repeticiones no son conocidas de antemano, para remarcar su diferencia con la repetición simple vista anteriormente. Este punto se aprovechará para explorar el azar en la definición de un juego. Por otro lado, se retomará la idea de condición, vista con la alternativa condicional que -en este caso- será la que indique en qué momento detener la repetición de las instrucciones contenidas dentro del bloque. Para finalizar, se incluirá una nueva condición al desarrollo del juego, limitar el número de intentos, lo que implicará que las y los estudiantes incluyan el uso de una nueva variable. Ver Actividades ​ . Herramientas Alice 27/117 " id="pdf-obj-26-2" src="pdf-obj-26-2.jpg">
Juego de feria ​ . Clase 27 - Repetición condicional Objetivos ● Introducir la repetición condicional (el “while” o “repetir mientras que…”), como una ● forma más avanzada de romper la secuencialidad de un programa. Comparar con el funcionamiento de la repetición simple, en tanto la repetición ● condicional evalúa una condición para determinar la cantidad de repeticiones. Destacar la potencialidad -dentro de la creación de un juego- de poder programar una repetición desconociendo la cantidad de repeticiones que se producirán. Contenido y desarrollo Se retomará el programa utilizado en la ​ clase 26 ​ y se pedirá a las y los estudiantes que lo completen para que los jugadores ganen al acertar tres lanzamientos. Luego de unos minutos para que realicen sus programas, se discutirá entre toda la clase sobre las opciones exploradas. Se introducirá la repetición condicional y el uso de “While” o “Repetir mientras que” y se trabajará sobre casos en los que la cantidad de repeticiones no son conocidas de antemano, para remarcar su diferencia con la repetición simple vista anteriormente. Este punto se aprovechará para explorar el azar en la definición de un juego. Por otro lado, se retomará la idea de condición, vista con la alternativa condicional que -en este caso- será la que indique en qué momento detener la repetición de las instrucciones contenidas dentro del bloque. Para finalizar, se incluirá una nueva condición al desarrollo del juego, limitar el número de intentos, lo que implicará que las y los estudiantes incluyan el uso de una nueva variable. Ver Actividades ​ . Herramientas Alice 27/117 " id="pdf-obj-26-4" src="pdf-obj-26-4.jpg">
Alice y escenario inicial ​Juego de feria​.
Introducir la repetición condicional (el “while” o “repetir mientras que…”), como una
forma más avanzada de romper la secuencialidad de un programa. Comparar con el funcionamiento de la repetición simple, en tanto la repetición
condicional evalúa una condición para determinar la cantidad de repeticiones. Destacar la potencialidad -dentro de la creación de un juego- de poder programar una repetición desconociendo la cantidad de repeticiones que se producirán.
Se retomará el programa utilizado en la ​clase 26​ y se pedirá a las y los estudiantes que lo completen para que los jugadores ganen al acertar tres lanzamientos.
Luego de unos minutos para que realicen sus programas, se discutirá entre toda la clase sobre las opciones exploradas.
Se introducirá la repetición condicional y el uso de “While” o “Repetir mientras que” y se trabajará sobre casos en los que la cantidad de repeticiones no son conocidas de antemano, para remarcar su diferencia con la repetición simple vista anteriormente. Este punto se aprovechará para explorar el azar en la definición de un juego. Por otro lado, se retomará la idea de condición, vista con la alternativa condicional que -en este caso- será la que indique en qué momento detener la repetición de las instrucciones contenidas dentro del bloque. Para finalizar, se incluirá una nueva condición al desarrollo del juego, limitar el número de intentos, lo que implicará que las y los estudiantes incluyan el uso de una nueva variable.
Continuar con el trabajo en el proyecto final.
En esta clase se continuará con el trabajo en el proyecto final, aprovechándose para resolver dudas y consultas, y monitorear el progreso.
Presentar proyecto final.
En esta clase los distintos grupos mostrarán su proyecto final, presentándolo para el resto de la clase.
http://www.alice.org/ ​ de manera gratuita. Para facilitar su uso en las netbooks recomendamos descargar la versión 2.4. Se trata de la opción mencionada como "Current Release with complete Spanish Gallery- 2.4.3" en ​ http://www.alice.org/index.php?page=downloads/download_alice2.4 ​ . La herramienta se descarga en inglés y luego mediante una opción se la pasa a nuestro idioma. 29/117 " id="pdf-obj-28-2" src="pdf-obj-28-2.jpg">
http://www.alice.org/ ​ de manera gratuita. Para facilitar su uso en las netbooks recomendamos descargar la versión 2.4. Se trata de la opción mencionada como "Current Release with complete Spanish Gallery- 2.4.3" en ​ http://www.alice.org/index.php?page=downloads/download_alice2.4 ​ . La herramienta se descarga en inglés y luego mediante una opción se la pasa a nuestro idioma. 29/117 " id="pdf-obj-28-8" src="pdf-obj-28-8.jpg">
El/La docente hará su presentación y una breve descripción de la materia.
En caso de no tener Alice , se procederá a su instalación en todas las computadoras disponibles, mientras tanto, el/la docente puede realizar una pequeña encuesta para indagar sobre opiniones, relación con la tecnología, conocimientos previos y cualquier información que considere relevante, por ejemplo, para establecer canales de comunicación con las y los estudiantes.
Una vez concluida la instalación, se preguntará a las y los estudiantes qué cosas creen que son necesarias para hacer una película. Se espera que hablen de luces, cámaras, personajes, escenografía y especialmente, que se mencione el concepto de ​guión​. En caso de que no lo propongan, puede orientarse a las y los estudiantes con preguntas como: ¿y cómo saben los actores lo que tienen que hacer? ¿La película cuenta una historia? ¿Dónde está esa historia antes de que empiece la grabación?
Luego de ese intercambio, se les contará que Alice es una herramienta que sirve para hacer sus propias animaciones y juegos, se les preguntará por animaciones y juegos que conozcan y cómo y por quién piensan que están hechas.
Se comenzará a mostrar el entorno, en este punto es muy importante detallar cómo cambiar el idioma si no se encuentra en español.
Se agregarán personajes, se indicará cómo se ven en el árbol de objetos y aparecen en el escenario.
Una vez agregados uno o dos personajes, se preguntará qué piensan que va a pasar en la animación y se apretará el botón “Ejecutar”. Se indicará el lugar donde va el guión. La conclusión a la que se debería arribar es que si el guión está vacío, nada ocurrirá al comenzar la ejecución.
En este momento las y los estudiantes podrán familiarizarse con la herramienta y explorar las galerías y características de la misma. Se pedirá a las y los estudiantes que hagan que dos personajes se muevan por el escenario.
Finalmente, se mostrará cómo hacer que un personaje haga algo, arrastrándolo desde el árbol de objetos al espacio del guión y eligiendo la acción deseada.
3 Alice es una herramienta de programación para adolescentes que puede descargarse de http://www.alice.org/​ de manera gratuita. Para facilitar su uso en las netbooks recomendamos descargar la versión 2.4. Se trata de la opción mencionada como "Current Release with complete Spanish Gallery- 2.4.3" en ​http://www.alice.org/index.php?page=downloads/download_alice2.4​. La herramienta se descarga en inglés y luego mediante una opción se la pasa a nuestro idioma.
La clase comenzará con una propuesta simple en Alice: hacer una animación que incluya un personaje y un vehículo en la que el vehículo se aproxime a gran velocidad y cuando esté por chocar al personaje lo esquive y retome su camino. Además, se pedirá a las y los estudiantes que respondan algunas preguntas:
¿Qué ocurre si se intercambia el orden de las instrucciones?
¿Cuál es la diferencia entre arrastrar un método al espacio del guión y hacer clic
derecho en un personaje del árbol de objetos, seleccionándolo desde ahí? ¿Para qué usarían cada caso?
Estas preguntas serán el pie para explicar que el guión es un programa, ver que las instrucciones se ejecutan en orden, de a una por vez y distinguir entre el momento en que se escribe y el momento en que se ejecuta nuestro programa.
Adicionalmente se presentará un proyecto grupal en el que las y los estudiantes deberán crear una animación o videojuego que aborde una temática (de su interés, a elección del docente o en el marco de algún proyecto que esté abordando la institución). El proyecto se hará fuera del horario de clase y se retomará más avanzado varias clases más adelante.
Durante el resto del trimestre se reservarán pequeños espacios de las clases para preguntar por el nivel de avance del proyecto, incentivar su continuación y resolver dudas. Para que el proyecto sirva como ejercitación de algunas de las temáticas de programación que se verán en la primera parte de la materia, será parte de la consigna que el proyecto incluya algún tipo de variabilidad que deberá poder determinarse en tiempo de ejecución. Por ejemplo, en base a una pregunta al usuario o botón a apretarse al comienzo, la historia podrá terminar bien o mal, transcurrir de día o de noche, etc.
“ ​ Encuentro de tercer tipo ​ ” y se les propondrá a las y los estudiantes que creen un programa a partir de un guión disponible en el archivo “ ​ Guión del encuentro de tercer tipo ​ ”. (Ambos archivos deberán ser compartidos a las y los estudiantes a través de un pendrive o Internet). Para comenzar la actividad se leerla en conjunto y voz alta la historia: Después de viajar por el espacio, una nave tripulada por un robot acaba de aterrizar en la Luna. El robot instala en la superficie una cámara que nos permite ver la escena: el robot, la nave espacial y la Luna. Lo primero que se observa es al robot emitiendo un sonido de exploración. De repente un extraterrestre aparece de atrás de unas rocas, y dice "Bienvenidx". El robot encara al alien, pega un salto y gira su cabeza de la sorpresa, vuelve a emitir el mismo sonido, se acerca al extraterrestre para inspeccionarlo, luego mira hacia la cámara, vuelve a emitir el sonido de exploración, la cabeza del robot se pone roja y dice: "¡Houston, tenemos un problema!". Y se les propondrá a las y los estudiantes que comiencen a programar el guión. A medida que trabajen con la historia, se observará que la secuencia de acciones de los personajes -una atrás de la otra- se vuelve extensa y complicada de leer. Luego de que hayan avanzado con el programa, se interrumpe la clase, y se les dice a las y los estudiantes que el guión cambió y se les indica que ahora el robot primero inspecciona al alien y luego se sorprende. Se deja que las y los estudiantes cambien su programa a partir de la nueva consigna. Transcurrido un tiempo se detendrá la actividad y se volverá sobre la historia para trabajar en conjunto con las siguientes preguntas disparadoras: ● ¿Cómo podríamos haber escrito el programa para simplificar los cambios necesarios al ● modificar la historia? ¿Cómo podemos subdividir el comportamiento del robot en acciones más abarcativas? Se espera que las y los estudiantes identifiquen acciones más generales que involucren varios movimientos del robot. Por ejemplo, es posible identificar que el robot -de acuerdo al guión inicial- se sorprende, investiga y reacciona. Otras respuestas también pueden ser correctas. Se propondrá buscar -por ejemplo- la acción "investigar" dentro de las acciones que puede realizar el personaje (solapa métodos). Como no se encontrará la instrucción investigar, se volverá Actividad basada en “Learning to program with Alice” de Wanda Dann, Stephen Cooper y Randy Pausch. 31/117 " id="pdf-obj-30-2" src="pdf-obj-30-2.jpg">
“ ​ Encuentro de tercer tipo ​ ” y se les propondrá a las y los estudiantes que creen un programa a partir de un guión disponible en el archivo “ ​ Guión del encuentro de tercer tipo ​ ”. (Ambos archivos deberán ser compartidos a las y los estudiantes a través de un pendrive o Internet). Para comenzar la actividad se leerla en conjunto y voz alta la historia: Después de viajar por el espacio, una nave tripulada por un robot acaba de aterrizar en la Luna. El robot instala en la superficie una cámara que nos permite ver la escena: el robot, la nave espacial y la Luna. Lo primero que se observa es al robot emitiendo un sonido de exploración. De repente un extraterrestre aparece de atrás de unas rocas, y dice "Bienvenidx". El robot encara al alien, pega un salto y gira su cabeza de la sorpresa, vuelve a emitir el mismo sonido, se acerca al extraterrestre para inspeccionarlo, luego mira hacia la cámara, vuelve a emitir el sonido de exploración, la cabeza del robot se pone roja y dice: "¡Houston, tenemos un problema!". Y se les propondrá a las y los estudiantes que comiencen a programar el guión. A medida que trabajen con la historia, se observará que la secuencia de acciones de los personajes -una atrás de la otra- se vuelve extensa y complicada de leer. Luego de que hayan avanzado con el programa, se interrumpe la clase, y se les dice a las y los estudiantes que el guión cambió y se les indica que ahora el robot primero inspecciona al alien y luego se sorprende. Se deja que las y los estudiantes cambien su programa a partir de la nueva consigna. Transcurrido un tiempo se detendrá la actividad y se volverá sobre la historia para trabajar en conjunto con las siguientes preguntas disparadoras: ● ¿Cómo podríamos haber escrito el programa para simplificar los cambios necesarios al ● modificar la historia? ¿Cómo podemos subdividir el comportamiento del robot en acciones más abarcativas? Se espera que las y los estudiantes identifiquen acciones más generales que involucren varios movimientos del robot. Por ejemplo, es posible identificar que el robot -de acuerdo al guión inicial- se sorprende, investiga y reacciona. Otras respuestas también pueden ser correctas. Se propondrá buscar -por ejemplo- la acción "investigar" dentro de las acciones que puede realizar el personaje (solapa métodos). Como no se encontrará la instrucción investigar, se volverá Actividad basada en “Learning to program with Alice” de Wanda Dann, Stephen Cooper y Randy Pausch. 31/117 " id="pdf-obj-30-6" src="pdf-obj-30-6.jpg">
Se presentará el escenario “​Encuentro de tercer tipo​” y se les propondrá a las y los estudiantes que creen un programa a partir de un guión disponible en el archivo “​Guión del encuentro de tercer tipo​”. (Ambos archivos deberán ser compartidos a las y los estudiantes a través de un pendrive o Internet). Para comenzar la actividad se leerla en conjunto y voz alta la historia:
Después de viajar por el espacio, una nave tripulada por un robot acaba de aterrizar en la Luna. El robot instala en la superficie una cámara que nos permite ver la escena: el robot, la nave espacial y la Luna. Lo primero que se observa es al robot emitiendo un sonido de exploración. De repente un extraterrestre aparece de atrás de unas rocas, y dice "Bienvenidx". El robot encara al alien, pega un salto y gira su cabeza de la sorpresa, vuelve a emitir el mismo sonido, se acerca al extraterrestre para inspeccionarlo, luego mira hacia la cámara, vuelve a emitir el sonido de exploración, la cabeza del robot se pone roja y dice: "¡Houston, tenemos un problema!".
Y se les propondrá a las y los estudiantes que comiencen a programar el guión.
A medida que trabajen con la historia, se observará que la secuencia de acciones de los personajes -una atrás de la otra- se vuelve extensa y complicada de leer.
Luego de que hayan avanzado con el programa, se interrumpe la clase, y se les dice a las y los estudiantes que el guión cambió y se les indica que ahora el robot primero inspecciona al alien y luego se sorprende.
Se deja que las y los estudiantes cambien su programa a partir de la nueva consigna.
Transcurrido un tiempo se detendrá la actividad y se volverá sobre la historia para trabajar en conjunto con las siguientes preguntas disparadoras:
¿Cómo podríamos haber escrito el programa para simplificar los cambios necesarios al
modificar la historia? ¿Cómo podemos subdividir el comportamiento del robot en acciones más abarcativas?
Se espera que las y los estudiantes identifiquen acciones más generales que involucren varios movimientos del robot. Por ejemplo, es posible identificar que el robot -de acuerdo al guión inicial- se sorprende, investiga y reacciona. Otras respuestas también pueden ser correctas.
Se propondrá buscar -por ejemplo- la acción "investigar" dentro de las acciones que puede realizar el personaje (solapa métodos). Como no se encontrará la instrucción investigar, se volverá
4 Actividad basada en “Learning to program with Alice” de Wanda Dann, Stephen Cooper y Randy Pausch.
a preguntar: ¿qué movimientos tiene que llevar a cabo el robot para “Investigar” al alien recién descubierto de acuerdo al guión?
La propuesta será entonces modificar los programas para incluir estas acciones más generales bajo la forma de métodos. Es decir, programar a partir de la identificación de acciones de un mayor nivel de abstracción que involucren una serie de pasos más simples y cuenten con un fin específico.
Se les pedirá a las y los estudiantes que armen un método para cada acción identificada, con un nombre ilustrativo y que lo incluyan en sus programas. Y una vez definidos los métodos para que el robot cumpla con la totalidad del guión, se ejecutará la animación.
En muchos casos es probable que se programen las instrucciones dentro de los métodos pero sin invocarlos, por lo que al ejecutar la animación el robot se quedará quieto. En otros casos es posible que se invoquen los métodos nuevos pero no se incluya ninguna instrucción dentro de ellos, por lo que el robot también se quedará quieto.
Ante consultas de este tipo es importante indicar que en la estrategia de creación de un método son necesarias dos instancias. Por un lado especificar las instrucciones concretas que componen esa acción más abstracta. Y por otro llamar o invocar al método nuevo en el lugar adecuado dentro de nuestro programa.
Para cerrar, vale la pena plantear el hecho de que los programas que realizamos no sólo se deben hacer entendibles para la computadora sino que también es importante que otra persona pueda leer nuestro programa y entenderlo. Para facilitar la lectura, organización y comprensión de los programas es recomendable utilizar ​comentarios​, notas escritas para describir brevemente el comportamiento de las instrucciones que componen una parte del código pero que durante la ejecución del programa son ignoradas. Están destinados a orientar a quienes leen el programa, no son indicaciones para la computadora. Los comentarios en Alice comienzan con ​// ​y se ven en color verde. Para incluirlos se debe arrastrar el bloque ​//​ desde la barra inferior hasta el lugar del guión que se prefiera y escribir el comentario dentro de él. A continuación se ve un fragmento de código que incluye comentarios.
5 Se repasará el concepto de método utilizando el escenario inicial disponible en ​ Lightbot.a2w , que las y los estudiantes deberán abrir en Alice. Luego de cargar el archivo se obtiene el siguiente escenario inicial: Escenario inicial de Alice con la actividad LightBot.a2w Una vez hecho esto, se les pedirá a las y los estudiantes que ejecuten reiteradas veces el programa, y que tomen nota de los cambios que se producen en cada ejecución. A partir de este escenario inicial las y los estudiantes deberán programar al robot Lightbot para que avance de a un casillero por vez. En cada casillero Lightbot deberá ver si la luz está prendida o apagada, y en el caso de que esté apagada prenderla antes de continuar. Antes de comenzar, se repasará en conjunto con los las y los estudiantes el concepto de método visto la clase anterior y se señalarán los métodos disponibles (“avanzar”, “prender luz” y “estoy parado en una luz”) para cumplir la consigna. Para ello se deberá tener en cuenta que únicamente deberán usarse aquellos métodos que no comienzan con “--”. Estos últimos son parte de la configuración inicial, por lo que no será necesario utilizarlos en la resolución del problema. A continuación se muestra los métodos que pueden usarse: Esta actividad está inspirada en los juegos educativos de Lightbot. Más información en ​ https://lightbot.com/ 33/117 " id="pdf-obj-32-2" src="pdf-obj-32-2.jpg">
5 Se repasará el concepto de método utilizando el escenario inicial disponible en ​ Lightbot.a2w , que las y los estudiantes deberán abrir en Alice. Luego de cargar el archivo se obtiene el siguiente escenario inicial: Escenario inicial de Alice con la actividad LightBot.a2w Una vez hecho esto, se les pedirá a las y los estudiantes que ejecuten reiteradas veces el programa, y que tomen nota de los cambios que se producen en cada ejecución. A partir de este escenario inicial las y los estudiantes deberán programar al robot Lightbot para que avance de a un casillero por vez. En cada casillero Lightbot deberá ver si la luz está prendida o apagada, y en el caso de que esté apagada prenderla antes de continuar. Antes de comenzar, se repasará en conjunto con los las y los estudiantes el concepto de método visto la clase anterior y se señalarán los métodos disponibles (“avanzar”, “prender luz” y “estoy parado en una luz”) para cumplir la consigna. Para ello se deberá tener en cuenta que únicamente deberán usarse aquellos métodos que no comienzan con “--”. Estos últimos son parte de la configuración inicial, por lo que no será necesario utilizarlos en la resolución del problema. A continuación se muestra los métodos que pueden usarse: Esta actividad está inspirada en los juegos educativos de Lightbot. Más información en ​ https://lightbot.com/ 33/117 " id="pdf-obj-32-6" src="pdf-obj-32-6.jpg">
Se repasará el concepto de método utilizando el escenario inicial disponible en ​Lightbot.a2w , que las y los estudiantes deberán abrir en Alice.
Luego de cargar el archivo se obtiene el siguiente escenario inicial:
5 Se repasará el concepto de método utilizando el escenario inicial disponible en ​ Lightbot.a2w , que las y los estudiantes deberán abrir en Alice. Luego de cargar el archivo se obtiene el siguiente escenario inicial: Escenario inicial de Alice con la actividad LightBot.a2w Una vez hecho esto, se les pedirá a las y los estudiantes que ejecuten reiteradas veces el programa, y que tomen nota de los cambios que se producen en cada ejecución. A partir de este escenario inicial las y los estudiantes deberán programar al robot Lightbot para que avance de a un casillero por vez. En cada casillero Lightbot deberá ver si la luz está prendida o apagada, y en el caso de que esté apagada prenderla antes de continuar. Antes de comenzar, se repasará en conjunto con los las y los estudiantes el concepto de método visto la clase anterior y se señalarán los métodos disponibles (“avanzar”, “prender luz” y “estoy parado en una luz”) para cumplir la consigna. Para ello se deberá tener en cuenta que únicamente deberán usarse aquellos métodos que no comienzan con “--”. Estos últimos son parte de la configuración inicial, por lo que no será necesario utilizarlos en la resolución del problema. A continuación se muestra los métodos que pueden usarse: Esta actividad está inspirada en los juegos educativos de Lightbot. Más información en ​ https://lightbot.com/ 33/117 " id="pdf-obj-32-17" src="pdf-obj-32-17.jpg">
Escenario inicial de Alice con la actividad LightBot.a2w
Una vez hecho esto, se les pedirá a las y los estudiantes que ejecuten reiteradas veces el programa, y que tomen nota de los cambios que se producen en cada ejecución. A partir de este escenario inicial las y los estudiantes deberán programar al robot Lightbot para que avance de a un casillero por vez. En cada casillero Lightbot deberá ver si la luz está prendida o apagada, y en el caso de que esté apagada prenderla antes de continuar.
Antes de comenzar, se repasará en conjunto con los las y los estudiantes el concepto de método visto la clase anterior y se señalarán los métodos disponibles (“avanzar”, “prender luz” y “estoy parado en una luz”) para cumplir la consigna. Para ello se deberá tener en cuenta que únicamente deberán usarse aquellos métodos que no comienzan con “--”. Estos últimos son parte de la configuración inicial, por lo que no será necesario utilizarlos en la resolución del problema.
A continuación se muestra los métodos que pueden usarse:
5 Esta actividad está inspirada en los juegos educativos de Lightbot. Más información en ​https://lightbot.com/
Los métodos tildados con verde son los que pueden usarse para resolver el problema. Los que empiezan con un doble guión “--” son parte de la configuración inicial.
Se insistirá en el funcionamiento cambiante del escenario en cada ejecución y se les pedirá a las y los estudiantes que hagan un programa que resuelva la consigna.
Luego que realicen varios intentos para resolver el ejercicio, es probable que las y los estudiantes encuentren dificultades a la hora de definir cuándo encender o no la luz, dado que las luces a encender cambian en cada ejecución. Se presentarán las alternativas condicionales como la forma en que la computadora evalúa la información que tiene en ese momento de la ejecución y toma un camino en consecuencia. En este caso, nos permitirá evaluar si la luz de un casillero se encuentra encendida o apagada.
Se pedirá a las y los estudiantes ejemplos de la vida cotidiana (Si llueve llevo paraguas, Si tengo hambre me como un alfajor, etc.) y ejemplos en juegos o aplicaciones que conozcan (Si Mario toma el hongo cambia de tamaño, si me disparan pierdo puntaje, si pongo la contraseña incorrecta no puedo entrar a Facebook, etc.)
Se presentará la instrucción if/else de Alice explicando la traducción “Si… entonces…” y se propondrá terminar el ejercicio. A partir de la instrucción if/else es posible evaluar -para cada casillero- si el personaje está parado en una luz, y sólo en ese caso encenderla y avanzar. Se insistirá a las y los estudiantes acerca de la pertinencia de usar un método nuevo para llevar a cabo esa evaluación, que podrá llamarse “prender luz si hay”.
Una solución posible para el problema es la siguiente:
Para finalizar, se mostrarán brevemente los eventos del teclado para que puedan explorar opciones de interactividad y puedan programar juegos interactivos. Se preguntará a las y los estudiantes cuál creen que es la diferencia entre un juego y una animación. Se espera que la noción de interactividad surja de la clase, y se resaltará que hasta este punto se han construido animaciones con las que el usuario no interactúa. Es decir, al ejecutar los programas se observan con exactitud la sucesión de instrucciones que se han programado. Los eventos dan la posibilidad de que el usuario interactúe con el programa durante la ejecución y que las acciones de los personajes respondan a, por ejemplo, clics del mouse o teclas presionadas por el usuario.
Para ilustrar este punto se les mostrará a las y los estudiantes una modificación al programa anterior con el uso de eventos del teclado. Para convertir la animación en un juego, se hará que cuando el usuario presione la flecha derecha del teclado Lightbot avance un casillero. Es decir, la presión de una tecla como evento provocará como respuesta la ejecución del método avanzar.
El/la docente mostrará que para introducir eventos en Alice basta con hacer clic en “Crear un evento nuevo”, seleccionar qué tipo de acción lo provoca (cuando el usuario toca las teclas, hace clic o mueve el mouse, por ejemplo) y qué se espera que realice el programa.
Para concluir con esta actividad se pedirá a las y los estudiantes que agreguen un segundo evento: cuando el usuario presione la barra espaciadora el personaje se deberá fijar si hay o no una luz en ese casillero.
Se avisará a las y los estudiantes que deberán traer el avance del proyecto presentado en la ​clase 3​ para la clase siguiente.
En esta clase se trabajará sobre el proyecto presentado en la ​clase 2​. Cada grupo expondrá su idea original, el nivel de avance y si encontraron nuevas herramientas o alguna limitación al momento de programar su pieza. Se propondrán ideas y objetivos a futuro y se realizará un intercambio para abordar de manera conjunta los aspectos de la herramienta que requiera cada pieza.
Se preguntará la diferencia entre juegos y animaciones. El objetivo es que las y los estudiantes se aproximen a la idea de interactividad. Se retomará la diferencia entre tiempo de escritura y tiempo de ejecución visto en la ​clase 2​ y se les mostrará cómo hacer que el usuario ingrese su nombre durante el transcurso del programa y algún personaje lo diga.
Como ejercicio para introducir variables, se pedirá que en un mundo con 3 personajes hagan que ingresando una única vez el nombre del usuario todos los personajes lo saluden.
Las y los estudiantes se encontrarán con la dificultad de no poder recuperar el nombre ya que no fue guardado en ningún lado. Esto nos dará una buena oportunidad para presentar el concepto de variable y hacer una primera aproximación a la idea de memoria y almacenamiento.
Para ilustrar la dificultad que encontraron para recuperar el nombre, puede realizarse una representación con la colaboración de 3 estudiantes:
1. Se le dará un papel al primer estudiante para que anote un nombre.
2. Se pedirá al segundo estudiante que lo lea.
3. Se tirará el papel.
4. Se pedirá al tercer estudiante que también lea el nombre, pero ya no tendrá de donde hacerlo.
Luego de repetir esta situación dos veces, se hará lo mismo pero incorporando una caja o sobre que será una representación de la variable:
2. Se guardará el papel en la caja/sobre.
3. Se pedirá al segundo estudiante que lo lea.
4. Se guardará el papel en la caja/sobre.
5. Se pedirá al tercer estudiante que lea el nombre.
Se discutirá con el curso cómo creen que debería llamarse la caja/sobre: ¿con el nombre que anotó el primer estudiante? ¿Qué pasa si se repite la secuencia pero preguntando el nombre al segundo estudiante?
Se recreará otra situación en la que se me modifica el nombre que se guarda en la caja:
5. Se pedirá al tercer estudiante que anote un nombre.
6. Se guardará el papel en la caja/sobre en lugar del otro
7. Se pedirá al primer estudiante que lo lea.
Con esta dramatización deberá quedar en claro que denominar a la caja con alguno de los nombres en particular no tiene sentido y se escribirá “Nombre” en ella. Luego se explicará que la caja representa una variable, que es un espacio de memoria donde se almacena información para poder recuperarla o modificarla y la importancia de que se la nombre con claridad (en función del tipo de contenido que tendrá y no con un contenido en particular).
Se mostrará como crear y utilizar variables en Alice y se invitará a las y los estudiantes a terminar el ejercicio propuesto.
Se comenzará recapitulando brevemente los conceptos de programación que se vieron hasta la clase pasada: métodos, alternativa condicional y variables. Este repaso resulta conveniente puesto que todas las actividades requerirán utilizar estos conceptos para su resolución.
A continuación se propondrá realizar en parejas el siguiente ejercicio en Alice:
Un personaje pregunta al usuario por el resultado de un juego entre dos equipos en el que pueda haber un ganador o empate (fútbol, básquet, handball, rugby, etc.). El usuario deberá primero ingresar el puntaje del primer equipo y luego le puntaje del segundo. El personaje de Alice debe decidir si ganó el primer equipo, el segundo o hubo empate.
Para poder resolver este ejercicio será necesario utilizar interactividad (“preguntar al usuario un número”), variables (para guardar ambos puntajes) y, al menos, dos alternativas condicionales (if/else) para determinar si hubo un ganador o hubo empate. Notar que solamente con una única alternativa condicional no sería posible discernir entre 3 resultados posibles.
A medida que el/la docente vaya recorriendo las mesas de trabajo y notando que todos los grupos pudieron avanzar en la actividad, se propondrá una puesta en común en donde se analicen distintas propuestas de solución (dos if/else anidados, 3 if/else secuenciales, etc.) y si la siguiente es una solución válida:
Algunas preguntas que pueden orientar la discusión del programa de la figura 7.1:
¿Podemos saber si el programa funciona bien sin ejecutarlo en Alice?
¿Qué posibles resultados deberíamos considerar para realizar un análisis?
Si en el segundo condicional reemplazáramos el “>” por un “≥”, ¿qué pasaría?
https://es.wikipedia.org/wiki/Error_de_software#Or.C3.ADgenes_del_t.C3.A9rmino 41/117 " id="pdf-obj-40-2" src="pdf-obj-40-2.jpg">
https://es.wikipedia.org/wiki/Error_de_software#Or.C3.ADgenes_del_t.C3.A9rmino 41/117 " id="pdf-obj-40-4" src="pdf-obj-40-4.jpg">
Si el programa tuviera muchas más líneas y variables, ¿creen que sería fácil detectar un problema de este tipo?
Aquí se puede hacer una breve digresión acerca de que a este tipo de defectos se los conoce como bugs (​bichos​ en inglés) y que al programar, como en cualquier actividad humana, suelen cometerse errores que generan defectos que hacen que nuestro programa no se comporte de la manera deseada.
Una buena práctica, que resulta de utilidad antes de comenzar a programar, es diseñar un algoritmo que resuelva el problema. ¿Qué es un algoritmo? Hay muchas definiciones distintas pero simplemente diremos que ​un algoritmo describe una estrategia de resolución de un problema reconociendo cuáles son sus partes centrales​. Para definir la estrategia se puede (y sugerimos) utilizar el castellano con oraciones que describan un comportamiento específico.
Se puede pensar entre todos cuál sería un algoritmo para el ejercicio anterior. Daremos el siguiente a modo de ejemplo:
Preguntar al usuario los resultados de A y B Si A es más grande que B
Si A es más chico que B
Ganó B
Si A y B son iguales
A este lenguaje a medio camino entre el castellano que usamos cotidianamente y un programa en un lenguaje de programación lo llamaremos ​pseudocódigo​. Diseñar una estrategia de resolución o algoritmo, nos permite pensar de manera más abstracta cuáles serían las grandes acciones que deberíamos realizar para resolver el problema. Con el algoritmo diseñado resulta más sencillo pasar luego a un programa.
A continuación se les propondrá a las y los estudiantes que diseñen un algoritmo para resolver el siguiente problema:
Se dispondrán 4 personajes en el escenario. Uno de ellos les preguntará la edad a los otros 3 y determinará quién es el más grande. Las edades las deberá ingresar el usuario a medida que se vayan preguntando, es decir, no están fijadas en el código del programa. Notar que debe decir el nombre del personaje de mayor edad y no cuál de las edades es la más grande.
El/La docente deberá prestar atención y enfatizar que la idea no es programar la solución en Alice ni escribirla en papel con las mismas instrucciones que Alice provee. A medida que vayan realizando los algoritmos, el/la docente puede motivar a las y los estudiantes a que chequeen si su
6 ​https://es.wikipedia.org/wiki/Error_de_software#Or.C3.ADgenes_del_t.C3.A9rmino
algoritmo funcionaría para distintos casos: que el primero sea el más grande, el segundo o el tercero. Si hubiera dos personajes con la misma edad, ¿qué haría su algoritmo?
Luego de que lo hayan terminado, se realizará una puesta en común y se analizarán las distintas propuestas de algoritmos:
¿Todos devuelven un nombre?
¿Todos funcionan?
En el caso de que hubiera edades repetidas, ¿todos devuelven el mismo nombre?
Es interesante ver que para el mismo problema hay distintos abordajes o estrategias de resolución, notando que, por ende, también habrá muchos programas que lo resuelvan (si los algoritmos propuestos por las y los estudiantes fueran similares, el/la docente puede proponer uno diferente y sumarlo al análisis).
Como cierre, el/la docente comentará que los algoritmos no se restringen sólo a la programación sino que en nuestra vida cotidiana también los usamos y diseñamos:
Cuando dividimos dos números ​usamos​ el algoritmo de la división.
Cuando damos las indicaciones para llegar de un punto a otro ​diseñamos​ un algoritmo
que indica cuáles son los pasos que debemos realizar para llegar a destino. Si para cocinar ​usamos​ una receta de cocina, estamos siguiendo los pasos definidos en ella para obtener el plato que queremos, es decir, un algoritmo culinario.
Por lo tanto, es importante diferenciar entre algoritmo y programa: mientras el primero determina una serie de pasos para resolver un problema de manera automática y utiliza el lenguaje castellano, el segundo también determina una serie de pasos o instrucciones pero éstas se ejecutan en una computadora y se definen en un lenguaje de programación como Alice, es decir, un lenguaje que la máquina conoce.
https://goo.gl/hqZRj0 ​ . Para descargar todos los archivos, al abrir el link, arriba a la derecha aparecerá una flecha similar a . Al hacer clic allí, se descargará el archivo “ ​ TI3_clase_8_archivos.zip ​ ”, que contiene comprimidos los 4 archivos mecionados. Para extraerlos, cliquear en el archivo con el botón derecho del mouse y luego en “Extraer aquí”. Para poder ejecutar el archivo “ ​ compilar_y_ejecutar.sh ​ ” haciendo doble clic en él es necesario agregarle permisos de ejecución . Para ello, en cada compu, hay que hacer clic derecho en el archivo “ ​ compilar_y_ejecutar.sh ​ ”, ir a “Propiedades”, luego “Permisos” y, por último, hacer clic en “Permitir ejecutar el archivo como un programa”. Luego de hacer doble clic en el archivo se deberá elegir la opción “Ejecutar”. 8 9 Al comenzar, se recordará brevemente lo que hicieron la clase pasada: dado un problema, aprendieron a diseñar un algoritmo en un lenguaje denominado pseudocódigo. Como primera actividad, se pensará entre todos un algoritmo que resuelva el siguiente problema: ● Dory comenzó hace pocos días a trabajar como vendedora de entradas en el viejo cine “El Cambalache submarino”. Como tiene especialmente poca memoria, quiere hacer un programa que le diga, dada la edad de una persona, cuál es el valor de su entrada. Para los que tienen 5 años o menos y para los que tengan 65 años o más, la entrada cuesta 20 caracolas. Para el resto, la entrada tiene un valor de 50 caracolas. Un algoritmo posible es: Preguntarle la edad al usuario Si tiene 5 años o menos Paga 20 Si tiene 65 años o más Paga 20 En cualquier otro caso Paga 50 No guardar en la carpeta “Documentos” ya que no se pueden cambiar los permisos del script “ ​ compilar_y_ejecutar.sh ​ ”. Wiki sobre permisos de archivos en Huayra: ​ http://wiki.huayra.conectarigualdad.gob.ar/index.php/Permisos En las clases 17 y 18, en donde se trabajará sobre sistemas operativos, se dará una noción de qué son los permisos y para qué sirven. 43/117 " id="pdf-obj-42-2" src="pdf-obj-42-2.jpg">
https://goo.gl/hqZRj0 ​ . Para descargar todos los archivos, al abrir el link, arriba a la derecha aparecerá una flecha similar a . Al hacer clic allí, se descargará el archivo “ ​ TI3_clase_8_archivos.zip ​ ”, que contiene comprimidos los 4 archivos mecionados. Para extraerlos, cliquear en el archivo con el botón derecho del mouse y luego en “Extraer aquí”. Para poder ejecutar el archivo “ ​ compilar_y_ejecutar.sh ​ ” haciendo doble clic en él es necesario agregarle permisos de ejecución . Para ello, en cada compu, hay que hacer clic derecho en el archivo “ ​ compilar_y_ejecutar.sh ​ ”, ir a “Propiedades”, luego “Permisos” y, por último, hacer clic en “Permitir ejecutar el archivo como un programa”. Luego de hacer doble clic en el archivo se deberá elegir la opción “Ejecutar”. 8 9 Al comenzar, se recordará brevemente lo que hicieron la clase pasada: dado un problema, aprendieron a diseñar un algoritmo en un lenguaje denominado pseudocódigo. Como primera actividad, se pensará entre todos un algoritmo que resuelva el siguiente problema: ● Dory comenzó hace pocos días a trabajar como vendedora de entradas en el viejo cine “El Cambalache submarino”. Como tiene especialmente poca memoria, quiere hacer un programa que le diga, dada la edad de una persona, cuál es el valor de su entrada. Para los que tienen 5 años o menos y para los que tengan 65 años o más, la entrada cuesta 20 caracolas. Para el resto, la entrada tiene un valor de 50 caracolas. Un algoritmo posible es: Preguntarle la edad al usuario Si tiene 5 años o menos Paga 20 Si tiene 65 años o más Paga 20 En cualquier otro caso Paga 50 No guardar en la carpeta “Documentos” ya que no se pueden cambiar los permisos del script “ ​ compilar_y_ejecutar.sh ​ ”. Wiki sobre permisos de archivos en Huayra: ​ http://wiki.huayra.conectarigualdad.gob.ar/index.php/Permisos En las clases 17 y 18, en donde se trabajará sobre sistemas operativos, se dará una noción de qué son los permisos y para qué sirven. 43/117 " id="pdf-obj-42-6" src="pdf-obj-42-6.jpg">
Durante esta clase se usarán herramientas que ya vienen instaladas en Huayra y no vienen por defecto en Windows. Por este motivo, para no dedicar tiempo a la instalación de estas herramientas, sugerimos usar durante toda la clase el sistema operativo Huayra. Cada estudiante deberá tener una carpeta en el directorio “alumno” o en el “Escritorio” con los siguientes archivos:
compilar_y_ejecutar.sh​, ​funciones.h​, ​funciones.c​ y ​entrada_de_cine.c​. Los archivos se encuentran disponibles en el siguiente link: ​https://goo.gl/hqZRj0​. Para descargar
todos los archivos, al abrir el link, arriba a la derecha aparecerá una flecha similar a
https://goo.gl/hqZRj0 ​ . Para descargar todos los archivos, al abrir el link, arriba a la derecha aparecerá una flecha similar a . Al hacer clic allí, se descargará el archivo “ ​ TI3_clase_8_archivos.zip ​ ”, que contiene comprimidos los 4 archivos mecionados. Para extraerlos, cliquear en el archivo con el botón derecho del mouse y luego en “Extraer aquí”. Para poder ejecutar el archivo “ ​ compilar_y_ejecutar.sh ​ ” haciendo doble clic en él es necesario agregarle permisos de ejecución . Para ello, en cada compu, hay que hacer clic derecho en el archivo “ ​ compilar_y_ejecutar.sh ​ ”, ir a “Propiedades”, luego “Permisos” y, por último, hacer clic en “Permitir ejecutar el archivo como un programa”. Luego de hacer doble clic en el archivo se deberá elegir la opción “Ejecutar”. 8 9 Al comenzar, se recordará brevemente lo que hicieron la clase pasada: dado un problema, aprendieron a diseñar un algoritmo en un lenguaje denominado pseudocódigo. Como primera actividad, se pensará entre todos un algoritmo que resuelva el siguiente problema: ● Dory comenzó hace pocos días a trabajar como vendedora de entradas en el viejo cine “El Cambalache submarino”. Como tiene especialmente poca memoria, quiere hacer un programa que le diga, dada la edad de una persona, cuál es el valor de su entrada. Para los que tienen 5 años o menos y para los que tengan 65 años o más, la entrada cuesta 20 caracolas. Para el resto, la entrada tiene un valor de 50 caracolas. Un algoritmo posible es: Preguntarle la edad al usuario Si tiene 5 años o menos Paga 20 Si tiene 65 años o más Paga 20 En cualquier otro caso Paga 50 No guardar en la carpeta “Documentos” ya que no se pueden cambiar los permisos del script “ ​ compilar_y_ejecutar.sh ​ ”. Wiki sobre permisos de archivos en Huayra: ​ http://wiki.huayra.conectarigualdad.gob.ar/index.php/Permisos En las clases 17 y 18, en donde se trabajará sobre sistemas operativos, se dará una noción de qué son los permisos y para qué sirven. 43/117 " id="pdf-obj-42-34" src="pdf-obj-42-34.jpg">
. Al hacer
clic allí, se descargará el archivo “​TI3_clase_8_archivos.zip​”, que contiene comprimidos los 4 archivos mecionados. Para extraerlos, cliquear en el archivo con el botón derecho del mouse y luego en “Extraer aquí”.
Para poder ejecutar el archivo “​compilar_y_ejecutar.sh​” haciendo doble clic en él es necesario agregarle permisos de ejecución . Para ello, en cada compu, hay que hacer clic derecho en el archivo “​compilar_y_ejecutar.sh​”, ir a “Propiedades”, luego “Permisos” y, por último, hacer clic en “Permitir ejecutar el archivo como un programa”. Luego de hacer doble clic en el archivo se deberá elegir la opción “Ejecutar”.
Al comenzar, se recordará brevemente lo que hicieron la clase pasada: dado un problema, aprendieron a diseñar un algoritmo en un lenguaje denominado pseudocódigo.
Como primera actividad, se pensará entre todos un algoritmo que resuelva el siguiente problema:
Dory comenzó hace pocos días a trabajar como vendedora de entradas en el viejo cine “El Cambalache submarino”. Como tiene especialmente poca memoria, quiere hacer un programa que le diga, dada la edad de una persona, cuál es el valor de su entrada. Para los que tienen 5 años o menos y para los que tengan 65 años o más, la entrada cuesta 20 caracolas. Para el resto, la entrada tiene un valor de 50 caracolas.
Un algoritmo posible es:
Preguntarle la edad al usuario
Si tiene 5 años o menos
Paga 20
Si tiene 65 años o más
Paga 50
7 No guardar en la carpeta “Documentos” ya que no se pueden cambiar los permisos del script “​compilar_y_ejecutar.sh​”.
8 Wiki sobre permisos de archivos en Huayra: ​http://wiki.huayra.conectarigualdad.gob.ar/index.php/Permisos
9 En las clases 17 y 18, en donde se trabajará sobre sistemas operativos, se dará una noción de qué son los permisos y para qué sirven.
Una vez generado consenso acerca de cuál es el algoritmo que resuelve el problema de Dory, se propondrá programarlo. Pero esta vez no será en Alice sino en otro lenguaje de programación llamado C. A diferencia de Alice, en C las instrucciones del programa hay que escribirlas en modo texto en un archivo que se conoce como “fuente”.
En esta clase (y en este curso) se utilizará una parte mínima del lenguaje C, de manera muy simplificada . Para introducir a las y los estudiantes en la sintaxis del lenguaje y cómo ejecutar los programas, este primer problema lo programarán entre todos junto con el/la docente. Una buena manera para empezar es observar qué es lo primero que hay que hacer según el algoritmo que escribieron recién. Si lo tuvieran que programar en Alice, ¿qué harían primero? Probablemente haya consenso en que habría que “preguntar al usuario un número” para conocer cuál es su edad. En la versión simplificada del lenguaje que usaremos, pedirle al usuario que “ingrese su edad”, en C lo podemos hacer del siguiente modo:
imprimir_un_texto("Ingrese su edad:"); int edad = leer_entero();
imprimir_un_texto()​ es una instrucción que imprime por pantalla solamente texto, el cual se escribe entre comillas dobles.
En C, al igual que en Alice, cuando queremos crear y usar una variable, debemos indicar si se trata de un número, de un texto, o de algún otro tipo de valores. En Alice, cuando creábamos la
variable se nos ofrecía una lista con los posibles tipos
11 que podía tener. En C, para crear una
variable indicamos primero su tipo -​int​- y luego su nombre, ​edad​ en este caso. Además, al
crearla, podemos asignarle un valor. Por ejemplo, la edad que ingresa el usuario mediante la instrucción ​leer_entero()​. Si lo quisiéramos hacer en dos pasos, primero crear la variable y luego asignarle un valor, el código quedaría del siguiente modo:
imprimir_un_texto("Ingrese su edad:"); int edad; edad = leer_entero();
Cabe destacar que en C todas las instrucciones terminan con un punto y coma. ¿En Alice cómo se separaban las instrucciones? Otro aspecto que se observa en estas pocas instrucciones es que la función que imprime un texto tiene entre paréntesis las palabras que van a ser impresas pero, en cambio, la que lee la edad que ingresa el usuario no tiene nada entre paréntesis. Esto se debe a que la instrucción que imprime necesita conocer el valor que va a escribir en la pantalla pero la instrucción que lee la edad del usuario no necesita ningún valor previo para poder ejecutarse, simplemente se fija qué valor ingreso el usuario y lo devuelve.
Al finalizar esta construcción colectiva de las primeras líneas de código, se les puede pedir a las y los estudiantes que escriban estas instrucciones en su archivo “​entrada_de_cine.c​”. Las
10 Para no abordar en esta instancia algunos aspectos engorrosos de la sintaxis de C, como puede ser leer un valor que ingresa el usuario o imprimir un texto por pantalla, en el archivo “​funciones.c​” ya están programadas algunas funciones que nos van a permitir realizar estas operaciones de manera más sencilla.
11 Recordemos que el ​tipo​ de una variable indica qué valores puede almacenar y qué operaciones se pueden hacer entre ellos. Por ejemplo, las variables enteras o ​int​ almacenan números mientras que las de tipo texto o ​string​ almacenan texto diverso.
mismas deben ir debajo de la línea que dice “​// ESCRIBIR EL CÓDIGO AQUÍ​”. El archivo se puede abrir en cualquier editor de texto que tengan instalado.
En este punto, se puede preguntar a la clase qué creen que va a ocurrir si ejecutan este programa dado que no tenemos personajes ni escenario. Para correr el programa, hay que hacer doble clic en el archivo “​compilar_y_ejecutar.sh​”. Este archivo es un programa muy simple que recibe el archivo con el programa que hicieron, lo traduce a código de máquina para que lo podamos
y lo ejecuta.
Lo que verán al ejecutar el programa será una pantalla negra, llamada ​terminal​, en donde aparecerá el texto “Ingrese su edad:”. El programa habrá ejecutado la primera de las instrucciones de nuestro programa y se encuentra esperando que el usuario ingrese un valor para la edad. Similar a lo que ocurría en Alice cuando aparecía un pop-up en donde ingresábamos un valor. Luego de ingresar un número y presionar “Enter”, el programa terminará y no hará más nada, debiendo cerrar la ventana de la terminal a mano.
Para verificar que el número que ingresamos haya sido guardado correctamente en la variable, podemos agregar la instrucción ​imprimir_un_numero(edad)​, obteniendo el siguiente programa:
imprimir_un_texto("Ingrese su edad:"); int edad = leer_entero(); imprimir_un_numero(edad);
A continuación se propone seguir construyendo entre todos el programa en C que resuelve el problema según el algoritmo que plantearon hasta llegar a tener un programa similar a:
int valor_entrada; if (edad < 6) { valor_entrada = 20; } else { ...
En los 3 puntos suspensivos las y los estudiantes deberían terminar de escribir el programa, para lo cual ya tienen todas las herramientas de sintaxis de C necesarias.
12 Se profundizará este aspecto en la siguiente clase.
Un posible programa al que podrían arribar y que resuelve el problema es
int valor_entrada; if (edad < 6) { valor_entrada = 20; } else { if (edad > 64) { valor_entrada = 20; } else { valor_entrada = 50;
imprimir_un_texto("El valor de su entrada es"); imprimir_un_numero(valor_entrada);
Se puede establecer la similitud entre la instrucción ​if/else​ que usaban en Alice y la instrucción if {} else {}​, las cuales son equivalentes. Simplemente cambia la forma en que se escriben. Mientras en Alice para el ​if​ y para el ​else​ tenemos un lugar especial donde encastrar las instrucciones que queremos ejecutar en cada caso, en C ese espacio lo delimitamos con las llaves. Notar que el segundo ​if {} else {} ​ está dentro del primer ​else {}​. Esto es así puesto que si la persona no tuviera menos de 6 años -la condición del primer i​ f {}​- todavía no podemos saber si tiene más o menos de 65 años. Por ende, en el caso de que tuviera 6 años o más y entrásemos en el primer ​else {}​, deberíamos preguntar si tiene 60 años o más para poder terminar de decidir si tiene que abonar una entrada de 20 caracolas o de 50.
Para terminar, el/la docente contará que además de Alice y C, existen muchos otros lenguajes de programación, y la elección de uno u otro depende de varios motivos: el contexto del problema, el lenguaje de moda en ese momento, el gusto del programador, etc. Sin embargo, con cualquier lenguaje de programación, ya sea visual como Alice o textual como C, podemos programar cualquier algoritmo.
https://goo.gl/GnIxyS ​ ) e instalar el programa BARF. Para ello, primero se debe descomprimir el contenido de “ ​ BARF.zip ​ ”, luego hay que otorgarle permiso de ejecución al archivo “ ​ instalarBARF.sh ​ ” y, por último, al hacer doble clic en dicho archivo elegir la opción “Ejecutar”, lo cual realizará la instalación del software. Al comienzo de la instalación se nos pedirá la clave del usuario Administrador, que será la contraseña por defecto de Huayra (“ ​ alumno ​ ”) o la nueva que se haya definido si fue cambiada. Una vez finalizada la instalación de BARF, el/la docente comenzará realizando una pequeña demostración. Abrirá la carpeta “ ​ Entrada de cine ​ ” en donde están los mismos archivos de la clase pasada y una solución posible al problema de la entrada de cine. Puede mostrar a la clase el código de la solución abriendo el archivo “ ​ entrada_de_cine.c ​ ”. A continuación, se procederá a tomar nota de cuáles son los archivos que se hallan en dicha carpeta: “ ​ entrada_de_cine.c ​ ”, ” ​ funciones.h ​ ”, ” ​ funciones.c ​ ” y ” ​ compilar_y_ejecutar.sh ​ ”. Luego, hacer doble clic en “ ​ compilar_y_ejecutar.sh ​ ” y ver qué ocurre en esa misma carpeta. Lo que pasará es que se creará el archivo “ ​ entrada_de_cine ​ ”. ¿Por qué ocurre esto? ¿Qué hace ese nuevo archivo? Para intentar dilucidar entre todos qué podría hacer este archivo, abrirlo con un editor de textos, como ​ gVim ​ o ​ LibreOffice Writer , y ver si se puede inferir algo de su contenido. Como se trata de un archivo binario, todo lo que verán es una secuencia de caracteres que aparentemente no tiene sentido. ¿Qué significa todo este texto incomprensible? ¿Qué pasaría si agregamos una línea al final del código y volvemos a hacer doble clic en “ ​ compilar_y_ejecutar.sh ​ ”? ¿Cambia este archivo? Para que puedan comparar si hubo cambios en ese archivo antes y después de agregar una línea de código, se sugiere que previo de volver a compilar y ejecutar, el/la docente cambie el nombre del archivo por “ ​ entrada_de_cine_anterior ​ ” o alguna variante similar que dé cuenta que se trataba de la primera versión del archivo. Luego de realizar algún pequeño cambio en el código del programa (por ejemplo, agregar una instrucción que imprima un texto al final), compilar y ejecutar, se generará un nuevo archivo “ ​ entrada_de_cine ​ ”. Si queremos comparar caracter a caracter este archivo con el anterior, va a resultar difícil y tedioso. La manera más sencilla es comparar los tamaños de los archivos. Si uno fuera más grande que otro, entonces no podrían contener el mismo texto. De hecho, el más grande será “ ​ entrada_de_cine ​ ”. ¿Por qué ocurre esto? ¿Cuál será la relación entre el código del programa que hicieron y este archivo? Aparentemente si tenemos más líneas de código parecería que el archivo generado es más grande. 13 El/La docente contará a la clase que, efectivamente, existe una relación directa entre el código que escribieron en C y el archivo “ ​ entrada_de_cine ​ ”. Este último es el mismo programa que ellas y ellos hicieron en C pero traducido al ​ lenguaje de máquina ​ . ¿Y qué es el lenguaje de máquina? Son un conjunto de instrucciones muy sencillas que la computadora sabe ejecutar. Pero este conjunto de instrucciones no es el mismo para toda computadora ni todo dispositivo. Por ejemplo, el lenguaje de máquina que usan sus computadoras de escritorio es diferente del Puede que otros editores de texto no permitan abrir el binario por cuestiones de formato. 47/117 " id="pdf-obj-46-2" src="pdf-obj-46-2.jpg">
https://goo.gl/GnIxyS ​ ) e instalar el programa BARF. Para ello, primero se debe descomprimir el contenido de “ ​ BARF.zip ​ ”, luego hay que otorgarle permiso de ejecución al archivo “ ​ instalarBARF.sh ​ ” y, por último, al hacer doble clic en dicho archivo elegir la opción “Ejecutar”, lo cual realizará la instalación del software. Al comienzo de la instalación se nos pedirá la clave del usuario Administrador, que será la contraseña por defecto de Huayra (“ ​ alumno ​ ”) o la nueva que se haya definido si fue cambiada. Una vez finalizada la instalación de BARF, el/la docente comenzará realizando una pequeña demostración. Abrirá la carpeta “ ​ Entrada de cine ​ ” en donde están los mismos archivos de la clase pasada y una solución posible al problema de la entrada de cine. Puede mostrar a la clase el código de la solución abriendo el archivo “ ​ entrada_de_cine.c ​ ”. A continuación, se procederá a tomar nota de cuáles son los archivos que se hallan en dicha carpeta: “ ​ entrada_de_cine.c ​ ”, ” ​ funciones.h ​ ”, ” ​ funciones.c ​ ” y ” ​ compilar_y_ejecutar.sh ​ ”. Luego, hacer doble clic en “ ​ compilar_y_ejecutar.sh ​ ” y ver qué ocurre en esa misma carpeta. Lo que pasará es que se creará el archivo “ ​ entrada_de_cine ​ ”. ¿Por qué ocurre esto? ¿Qué hace ese nuevo archivo? Para intentar dilucidar entre todos qué podría hacer este archivo, abrirlo con un editor de textos, como ​ gVim ​ o ​ LibreOffice Writer , y ver si se puede inferir algo de su contenido. Como se trata de un archivo binario, todo lo que verán es una secuencia de caracteres que aparentemente no tiene sentido. ¿Qué significa todo este texto incomprensible? ¿Qué pasaría si agregamos una línea al final del código y volvemos a hacer doble clic en “ ​ compilar_y_ejecutar.sh ​ ”? ¿Cambia este archivo? Para que puedan comparar si hubo cambios en ese archivo antes y después de agregar una línea de código, se sugiere que previo de volver a compilar y ejecutar, el/la docente cambie el nombre del archivo por “ ​ entrada_de_cine_anterior ​ ” o alguna variante similar que dé cuenta que se trataba de la primera versión del archivo. Luego de realizar algún pequeño cambio en el código del programa (por ejemplo, agregar una instrucción que imprima un texto al final), compilar y ejecutar, se generará un nuevo archivo “ ​ entrada_de_cine ​ ”. Si queremos comparar caracter a caracter este archivo con el anterior, va a resultar difícil y tedioso. La manera más sencilla es comparar los tamaños de los archivos. Si uno fuera más grande que otro, entonces no podrían contener el mismo texto. De hecho, el más grande será “ ​ entrada_de_cine ​ ”. ¿Por qué ocurre esto? ¿Cuál será la relación entre el código del programa que hicieron y este archivo? Aparentemente si tenemos más líneas de código parecería que el archivo generado es más grande. 13 El/La docente contará a la clase que, efectivamente, existe una relación directa entre el código que escribieron en C y el archivo “ ​ entrada_de_cine ​ ”. Este último es el mismo programa que ellas y ellos hicieron en C pero traducido al ​ lenguaje de máquina ​ . ¿Y qué es el lenguaje de máquina? Son un conjunto de instrucciones muy sencillas que la computadora sabe ejecutar. Pero este conjunto de instrucciones no es el mismo para toda computadora ni todo dispositivo. Por ejemplo, el lenguaje de máquina que usan sus computadoras de escritorio es diferente del Puede que otros editores de texto no permitan abrir el binario por cuestiones de formato. 47/117 " id="pdf-obj-46-6" src="pdf-obj-46-6.jpg">
Al igual que en la clase pasada, aquí también se sugiere utilizar el sistema operativo Huayra. Los primeros minutos serán dedicados a distribuir entre las y los estudiantes el archivo “​BARF.zip​” (disponible en ​https://goo.gl/GnIxyS​) e instalar el programa BARF. Para ello, primero se debe descomprimir el contenido de “​BARF.zip​”, luego hay que otorgarle permiso de ejecución al archivo “​instalarBARF.sh​” y, por último, al hacer doble clic en dicho archivo elegir la opción “Ejecutar”, lo cual realizará la instalación del software. Al comienzo de la instalación se nos pedirá la clave del usuario Administrador, que será la contraseña por defecto de Huayra (“​alumno​”) o la nueva que se haya definido si fue cambiada.
Una vez finalizada la instalación de BARF, el/la docente comenzará realizando una pequeña demostración. Abrirá la carpeta “​Entrada de cine​” en donde están los mismos archivos de la clase pasada y una solución posible al problema de la entrada de cine. Puede mostrar a la clase el código de la solución abriendo el archivo “​entrada_de_cine.c​”. A continuación, se procederá a tomar nota de cuáles son los archivos que se hallan en dicha carpeta: “​entrada_de_cine.c​”, ”​funciones.h​”, ”​funciones.c​” y ”​compilar_y_ejecutar.sh​”. Luego, hacer doble clic en “​compilar_y_ejecutar.sh​” y ver qué ocurre en esa misma carpeta. Lo que pasará es que se creará el archivo “​entrada_de_cine​”. ¿Por qué ocurre esto? ¿Qué hace ese nuevo archivo?
Para intentar dilucidar entre todos qué podría hacer este archivo, abrirlo con un editor de textos, como ​gVim​ o ​LibreOffice Writer , y ver si se puede inferir algo de su contenido. Como se trata de un archivo binario, todo lo que verán es una secuencia de caracteres que aparentemente no tiene sentido. ¿Qué significa todo este texto incomprensible? ¿Qué pasaría si agregamos una línea al final del código y volvemos a hacer doble clic en “​compilar_y_ejecutar.sh​”? ¿Cambia este archivo? Para que puedan comparar si hubo cambios en ese archivo antes y después de agregar una línea de código, se sugiere que previo de volver a compilar y ejecutar, el/la docente cambie el nombre del archivo por “​entrada_de_cine_anterior​” o alguna variante similar que dé cuenta que se trataba de la primera versión del archivo. Luego de realizar algún pequeño cambio en el código del programa (por ejemplo, agregar una instrucción que imprima un texto al final), compilar y ejecutar, se generará un nuevo archivo “​entrada_de_cine​”. Si queremos comparar caracter a caracter este archivo con el anterior, va a resultar difícil y tedioso. La manera más sencilla es comparar los tamaños de los archivos. Si uno fuera más grande que otro, entonces no podrían contener el mismo texto. De hecho, el más grande será “​entrada_de_cine​”. ¿Por qué ocurre esto? ¿Cuál será la relación entre el código del programa que hicieron y este archivo? Aparentemente si tenemos más líneas de código parecería que el archivo generado es más grande.
El/La docente contará a la clase que, efectivamente, existe una relación directa entre el código que escribieron en C y el archivo “​entrada_de_cine​”. Este último es el mismo programa que ellas y ellos hicieron en C pero traducido al ​lenguaje de máquina​. ¿Y qué es el lenguaje de máquina? Son un conjunto de instrucciones muy sencillas que la computadora sabe ejecutar. Pero este conjunto de instrucciones no es el mismo para toda computadora ni todo dispositivo. Por ejemplo, el lenguaje de máquina que usan sus computadoras de escritorio es diferente del
13 Puede que otros editores de texto no permitan abrir el binario por cuestiones de formato.
lenguaje de máquina que usan los celulares. Esto se debe a diversas decisiones de diseño que toman quienes desarrollan cada dispositivo. Como programar en lenguaje de máquina suele requerir más tiempo ya que las instrucciones son muy simples y, por ende, el programa final requiere mayor cantidad de instrucciones, se diseñaron otros lenguajes de programación como C y como Alice que nos brindan instrucciones más ricas, es decir, que equivalen a realizar varias de las instrucciones de máquina en una sola instrucción de C o de Alice. Sin embargo, las computadoras no entienden ni C ni Alice sino que sólo pueden ejecutar programas escritos en su propio lenguaje de máquina. ¿Cómo se resuelve este problema de programar en un lenguaje que nos resulta más cómodo a nosotros pero que la máquina no sabe interpretar? Con un programa conocido como compilador que traduce entre un lenguaje (como C o Alice) y el lenguaje de la máquina en la que queremos ejecutarlo .
Recapitulando la microactividad que realizamos antes, teníamos un programa escrito en C en el archivo “​entrada_de_cine.c​”. Luego hicimos doble clic en el archivo ”​compilar_y_ejecutar.sh​” lo cual creó el archivo “​entrada_de_cine​” y ejecutó el programa. ¿Qué fue lo que pasó entonces? Al hacer doble clic en ”​compilar_y_ejecutar.sh​” se ejecutaron 2 comandos:
1. Se compiló, es decir, se tradujo el programa escrito en C al lenguaje de máquina generando el archivo “​entrada_de_cine​”. Este archivo contiene el programa que hicimos en lenguaje de máquina.
2. Se ejecutó dicho archivo lo que equivale a ejecutar el programa contenido en él.
Como se mencionó en la clase pasada, al código escrito en C o en un lenguaje que no sea de máquina se lo conoce como ​código fuente​ mientras que al código compilado se lo conoce como código binario, código objeto ​o ​ ejecutable .
Al finalizar esta explicación, comenzaremos a trabajar con BARF, un software desarrollado por
programadores argentinos, de código abierto
16 y gratuito que permite, entre muchas otras cosas,
visualizar (técnicamente ​desensamblar​) el código de máquina producido luego de compilar un programa hecho en un lenguaje como C. Para ejecutar BARF basta con hacer doble clic en el archivo “​ejecutarBARF.sh​” . Lo que hará BARF es leer el archivo “e​ ntrada_de_cine​” y generar distintos gráficos en una carpeta con nombre “​entrada_de_cine_cfg​”.
La primera actividad se realizará entre todos y consistirá en abrir y analizar el gráfico “​main.pdf​”, ubicado en la carpeta mencionada en el párrafo anterior, el cual muestra nuestro programa en el lenguaje de la máquina que estamos usando. En la figura 9.1 se observa un gráfico similar o igual al que se verá en la clase. ¿Qué reconocen o pueden inferir de él?
14 Existen otras soluciones que determinan otro tipo de lenguajes conocidos como ​interpretados​ sobre los cuales no hablaremos en este curso.
15 En realidad binario, objeto y ejecutable no significan lo mismo aunque en esta instancia no se realizarán las distinciones. El código objeto es el resultado de compilar las partes de un programa por separado. Al juntar todos los códigos objeto se obtiene un ejecutable. El compilador mismo realiza estos 2 procesos. Tanto un objeto como un ejecutable son archivos binarios porque su representación no es textual sino en ceros y unos.
16 Se profundizará sobre el concepto de software libre en la ​clase 19​.
17 Si no tuviera permisos de ejecución, habría que realizar el mismo procedimiento que con el archivo “​instalarBARF.sh​”.
A continuación se detallarán algunas características que las y los estudiantes pueden notar o acerca de las cuales se les puede preguntar:
En el gráfico aparecen los números 5, 20, 50 y 64, los mismos que en el código fuente.
Esos números aparecen en las mismas líneas que códigos en azul que dicen “mov” y
“cmp”. Los códigos en azul son en realidad instrucciones del lenguaje de máquina y,
generalmente, abrevian una palabra más larga y en inglés. ¿Con qué palabra del español podemos relacionar ​mov,​ por ejemplo? ¿Y ​cmp​? Es probable que ​mov​ lo relacionen con palabras derivadas del verbo mover mientras que ​cmp​ puede resultar en una mayor cantidad de palabras posibles. Al igual que hacían en Alice o en C para guardar un valor en una variable, en lenguaje de máquina la instrucción que nos permite guardar una valor en la memoria es ​mov​, es decir, “mueve/copia/guarda” un valor a un lugar de la memoria.
El ​cmp​, en cambio, viene de “comparar” dos valores. En las alternativas condicionales de
su código C, es decir, en las condiciones de los ​if {} else {}​ ellas y ellos compararon por mayor o por menor (o por mayor e igual y menor e igual) la edad con otro valor (5 o 6 y 64 o 65). Al igual que el ​mov​ y el ​cmp​, el resto de las instrucciones del lenguaje de máquina
realizan tareas muy simples. Un elemento interesante para trabajar son las flechas que relacionan distintos bloques de código. Éstas expresan los 2 caminos posibles de una instrucción ​if {} else {}​. El
primer caso corresponde al primer ​if {}​ en el que se chequea si la edad es mayor a 6. Si es menor a 6 años, entonces guardo el valor 20 en la variable ​valor_entrada​ y va directamente a la penúltima línea. Esto se indica mediante la flecha roja, es decir, el rojo
nos dice que se entró al ​if
{} ​ y el verde que se entró al ​else
{}​. Si seguimos por la
primera flecha verde, es decir, si la edad es mayor o igual a 6 años, se vuelve a ejecutar
otro ​if {} else {}​ y por eso vuelven a aparecer otras dos flechas roja y verde. La flecha azul indica a qué instrucción debemos ir una vez que terminamos de ejecutar un if {}​ o un ​else {}​. En todos los casos de este programa, siempre se va a la penúltima instrucción.
El resto de los valores y las instrucciones que aparecen no se trabajarán durante el curso puesto que el objetivo no es aprender lenguaje de máquina sino conocer cómo hace la computadora para ejecutar un programa. Simplemente se puede agregar que el resto de las palabras azules son otras instrucciones muy simples como el ​mov​ y el ​cmp​, y que el resto de los valores son indicaciones que ayudan al programador que necesita leer el código de máquina a entender en profundidad qué es lo que hace el programa.
La segunda actividad consistirá en sugerirle a las y los estudiantes que realicen algún cambio pequeño en el código del programa -agregar o quitar una condición, cambiar alguno de los valores, sumar líneas que impriman más texto, etc.- y que vean cómo cambia el código binario utilizando BARF. Se espera que puedan establecer una relación entre el cambio que realizaron en el código C frente al cambio obtenido en el código binario.
Como cierre, se sugiere repasar los conceptos trabajados durante la clase. Cuando programamos en algún lenguaje de programación necesitamos realizar un paso intermedio para que la computadora pueda ejecutar ese programa ya que ésta sólo sabe ejecutar instrucciones que estén escritas en lenguaje de máquina (​mov,​ ​cmp,​ etc.). Requerimos entonces un programa especial llamado ​compilador​ que traduce todo el texto del programa a lenguaje de máquina. Se habla de código fuente​ para referirse a el o los archivos que contienen el programa en algún lenguaje de programación (en nuestro caso sería “​entrada_de_cine.c​”) y de ​archivo binario​ para referirse al programa ya compilado, en lenguaje de máquina, que puede utilizar directamente la computadora (en nuestro caso sería “​entrada_de_cine​”). Es importante enfatizar que las aplicaciones que utilizamos diariamente suelen estar compiladas: el sistema operativo, las apps que descargamos, el navegador web, el procesador de texto, etc.
En la primera parte de la clase se buscará determinar qué es y qué no es una computadora, y cuáles son sus características distintivas. Para ello, como primera actividad, se propondrá un sencillo juego en donde las y los estudiantes deben “adivinar” cuáles de las siguientes imágenes u
18 son computadoras y cuáles no lo son. El objetivo es que las y los estudiantes
comprendan que muchos de los dispositivos electrónicos que utilizamos en nuestra vida cotidiana
son computadoras aunque no tengan la forma clásica de una.
18 Si se pudiera trabajar con objetos físicos a lo largo de toda la clase, tanto los dispositivos como los componentes, mucho mejor. Dependerá de la disponibilidad de cada institución.
TV LED por dentro
Cabina del avión Airbus 380
Finalizada esta primera actividad, el/la docente preguntará a sus estudiantes si se les ocurre qué determina que un artefacto electrónico sea o no una computadora. En este punto puede que se enumeren muchos componentes accesorios (placa gráfica, placa de sonido, disco rígido, placa madre, distintos periféricos, etc.). El/La docente los irá anotando en el pizarrón y, en caso de que no se mencionen el procesador y la memoria, buscará promover la aparición de estos componentes con frases como:
Si abrimos muchos programas al mismo tiempo la computadora empieza a andar lenta
porque se quedó con poca … (memoria ​RAM​) Una computadora puede ser más rápida que otra porque tiene un … más rápido (​procesador​)
Si no se hubieran mencionado periféricos de entrada (teclado, mouse, micrófono, escáner), de salida (monitor, impresora, auriculares) y de entrada/salida (pantalla táctil, impresora multifunción) el/la docente completará la lista con la categoría que faltase.
Al concluir con el listado de componentes de una computadora, el/la docente seleccionará aquellos que sean periféricos de entrada y preguntará a la clase si encuentran alguna relación
entre ellos, una característica común, si podrían agruparlos dentro de alguna categoría. Entre las características que podrían ser mencionadas destacamos:
1. Se conectan a la “computadora” 19
2. Sirven para que la computadora reciba información del mundo
3. Permiten a las personas ingresar datos
A medida que se vayan mencionando las características anteriores se puede ir realizando un gráfico en el pizarrón en el que haya un cuadrado vacío que represente a la computadora y, una vez mencionada las características 1 y 2 o 1 y 3, flechas que conecten a cada uno de los periféricos con la computadora. De este modo comenzaremos a construir la figura 10.1.
Luego de caracterizar y categorizar a los periféricos de entrada se procederá de modo similar con los periféricos de salida -colocando flechas que vayan de la computadora al periférico- y los de entrada/salida -colocando flechas bidireccionales entre la computadora y el periférico.
Entre los componentes listados puede que haya también periféricos de almacenamiento (disco rígido, memoria USB, CD) y periféricos de comunicación (módem, router, placa de red). Se puede mencionar que estos también son periféricos.
Una vez colocadas todas las flechas de los periféricos se puede intentar reconocerlos en otros dispositivos que no sean la computadora de escritorio o las notebooks y netbooks. Por ejemplo,
19 ​Computadora​ se menciona entre comillas puesto que todavía no se llegó a una definición acerca de qué es una computadora.
¿qué periféricos tenemos en un smartphone? ¿Y en una consola de videojuegos? ¿Y en la máquina para votar? Por ejemplo, los parlantes de una computadora portátil o el teclado de un celular táctil vienen embebidos. Sin embargo, no dejan de ser periféricos de la computadora. Simplemente están integrados en ella.
La cuestión que resta abordar es a dónde entran y de dónde salen esas flechas que conectan a los periféricos. ¿Se puede ser más específico que simplemente notando que se conectan con la computadora? Entre los componentes listados hay dos que todavía no fueron incorporados en el esquema: el procesador y la memoria RAM. Se les puede preguntar a la clase qué creen o suponen que realizan estos dos componentes y en qué parte del esquema los ubicarían.
Algunas características de la memoria RAM que pueden surgir:
Sirve para guardar información.
Es una memoria volátil, es decir, si se corta la corriente se pierden los datos.
Los programas se cargan en la memoria RAM.
Si te queda poca o nula memoria RAM la computadora anda lenta.
Algunas características del procesador que pueden surgir:
Realiza todos los cálculos.
Hay distintas velocidades de procesadores.
Una computadora puede tener muchos procesadores.
Suele generar mucho calor.
El/La docente, para relacionar estos componentes con lo visto durante la primera parte de la materia, puede proponer pensar qué pasaría si nuestra computadora no tuviera procesador o no tuviera memoria RAM. En el primer caso, por ejemplo, no podríamos crear programas ya que es el procesador el que ejecuta las instrucciones (en las clases ​13​ y ​14​ se verá este aspecto con más detalle). Si no tuviéramos memoria RAM nuestros programas no podrían guardar información en variables ya que éstas se almacenan en la memoria RAM (en las clases ​11​ y ​12​ se profundizará su funcionamiento). Por lo tanto, una máquina que no nos permitiera correr programas o que no les permitiera a los programas guardar información en tiempo de ejecución, no nos permitiría hacer muchas cosas. Por lo tanto, para que una máquina sea considerada una computadora debe tener al menos:
Al menos un procesador.
Al menos un periférico de Entrada o un periférico de Salida .
20 Este último requisito no es técnicamente indispensable pero si no se lo tiene en cuenta la utilidad de la computadora en cuestión se ve francamente disminuida.
https://es.wikipedia.org/wiki/Acceso_directo_a_memoria ​ . 56/117 " id="pdf-obj-55-2" src="pdf-obj-55-2.jpg">
https://es.wikipedia.org/wiki/Acceso_directo_a_memoria ​ . 56/117 " id="pdf-obj-55-4" src="pdf-obj-55-4.jpg">
Para finalizar, resta ver más específicamente a dónde se conectan los periféricos. ¿A la RAM o al procesador? Probablemente las y los estudiantes supongan que al procesador que es el encargado de ejecutar las instrucciones. Esto es correcto pero además algunos dispositivos utilizan la memoria RAM. Por ejemplo, la impresora, para imprimir un archivo, necesita recuperarlo
21 Más detalles sobre el tema pueden consultarse en https://es.wikipedia.org/wiki/Acceso_directo_a_memoria​.
Proponer un intercambio inicial con las y los estudiantes con el objetivo de indagar cuáles son sus conocimientos previos acerca de la “memoria de la computadora”. Una primera pregunta lo suficientemente abierta puede ser:
¿Cuánta memoria tiene su computadora? ¿Y su celular? ¿Tiene memoria el celular?
Probablemente la mayoría pueda decir con mayor o menor grado de seguridad cuánta memoria tiene su computadora o su celular pero muy probablemente se refieran a la memoria RAM o, indistintamente, a la memoria RAM y a la capacidad del disco rígido o la tarjeta de memoria. Aquí se puede tratar de guiar a las y los estudiantes para que reconozcan que hay al menos 2 tipos diferentes de memoria con preguntas como:
Cuando escribo un documento en la computadora o bajo una foto/video o instalo un
programa, ¿en qué parte de la computadora queda guardado? ¿Nunca les pasó que un programa les pidiera que guarden sus trabajos, sesiones,
juegos, etc. antes de salir? Si los están viendo y modificando ¿no están almacenados en algún lugar? ¿Por qué se pierde esa información si no decimos que queremos guardarla? ¿Alguna vez escucharon hablar de memoria RAM? ¿Y de disco rígido?
Luego de una breve discusión sobre estas preguntas, se espera que se reconozca que existen 2 clases de memoria. Si no hubiera surgido ya en el debate, el/la docente contará que la memoria RAM es una memoria de trabajo en donde se guarda información de manera temporal: cuando se corta el suministro eléctrico, esa información se pierde, es volátil. Por otro lado, el disco rígido almacena información de forma permanente o persistente. Entonces:
¿Dónde se guarda lo que estoy escribiendo en un archivo de texto si todavía no apreté la opción de “guardar”? Y, ¿dónde se guarda ese mismo archivo si le pongo un nombre y aprieto la opción de “guardar”?
Hasta aquí las y los estudiantes reconocerán que hay 2 tipos de memoria: una volátil y la otra persistente o permanente. Con el objetivo de que comprendan por qué no usamos siempre el disco rígido, se les propondrá que busquen en Internet cuánto sale una placa de memoria y cuánto un disco rígido. Se les pedirá además que anoten la capacidad de almacenamiento de ambos. A continuación se hará una puesta en común anotando ambas características en el
pizarrón. Muy probablemente la capacidad de la memoria RAM esté expresada en GB y la del disco rígido en GB o TB.
En este punto se aprovechará para comprender las unidades de almacenamiento. Como actividad, se les pedirá que creen un archivo vacío en Linux (botón derecho del mouse) y que se fijen cuánta pesa (0 Byte). Luego, que escriban una sola letra en el archivo, lo guarden y noten cuánto pesa (unos pocos Bytes dependiendo el carácter que hayan escrito). A continuación se les pedirá que copien 1000 veces seguidas (en la misma línea) esa letra, guarden el archivo y verifiquen cuánto pesa (1 KB aproximadamente). Por último deberán estimar cuántas letras deberían escribir para generar un archivo que pese 1 MB y un archivo que pese 1 GB.
En la puesta en común se explicitará que el Byte es una unidad de almacenamiento muy pequeña que permite guardar poca información y se construirá en conjunto la siguiente tabla:
1 ~1000 Byte
1 ~1000 KB
1 ~1000 MB
1 ~1000 GB
Al finalizar esta pequeña actividad, se retomará la discusión anterior sobre el precio y capacidad de almacenamiento de las memorias RAM y los discos rígidos. Se pondrá de manifiesto que la memoria RAM es mucho más cara por cada GB que el disco rígido y se les preguntará a las y los estudiantes:
¿Por qué no usamos solamente el disco rígido entonces, si es más barato?
El/La docente guiará la discusión buscando que las y los estudiantes piensen qué dimensiones resultan más importantes a la hora de comparar 2 computadoras, para así fomentar que surja la noción de “velocidad” o “rapidez”.
Aquí el/la docente realizará una breve explicación de que la mayor diferencia entre los distintos tipos de memoria es el ​tiempo de acceso​, cuanto más rápida más cara y más cerca físicamente del procesador, que procesa la información que allí se guarda (se profundizará esta relación en la clase 14​). Se mostrará una imagen similar a la siguiente para conceptualizar la jerarquía:
Sobre la memoria caché se trabajará en la ​clase 12​ y los registros del CPU serán mencionados en la ​clase 14​.
Para la siguiente actividad se les pedirá a las y los estudiantes que indiquen y justifiquen en qué memoria (RAM o disco) se guardan los siguientes recursos:
1. Una ​variable​ como las que definieron en Alice y en C.
2. Un ​programa​ en un archivo .c que hayan hecho en un editor de C.
3. Un ​programa​ en C ​que​ están escribiendo en el editor y aún ​no guardaron
4. Un ​programa​ en un archivo .c ​que tienen abierto​ en el editor.
(En los puntos 1 y 3 la respuesta es memoria RAM mientras que en el punto 2 es disco rígido. El punto 4 es interesante porque sucede que el archivo se guardó en disco pero cuando se lo abre en el editor también se carga en memoria RAM para poder trabajar más rápido con él.)
En la puesta en común sobre las respuestas, el/la docente hará hincapié en el hecho de que las variables se guardan en la memoria RAM y preguntará:
¿Cómo encuentra la computadora dónde está guardada la variable?
Si tenemos 8GB de memoria RAM y nuestra variable ocupa 4 Bytes, ¿cómo hace para buscar rápidamente esos 4 Bytes entre los 8 mil millones de Bytes existentes?
Con estas preguntas se busca motivar la idea de que la memoria (de cualquier tipo) está ordenada a través de posiciones o direcciones: 1, 2, 3, etc. Por lo tanto, para saber cuál es el valor de una variable debemos saber antes en qué posición está guardada. ¿Cómo realiza este proceso la computadora? Se verá con más detalle en la ​clase 14​. Se mostrará una imagen similar a la siguiente para clarificar:
Para reforzar las unidades de almacenamiento se les pedirá a las y los estudiantes que estimen cuál sería el valor de max si nuestra memoria fuera de 2 GB.
Como actividad práctica, se les pedirá a las y los estudiantes que indaguen las características de la memoria RAM y la capacidad de disco que tienen en sus computadoras y sus celulares.
Por último, el/la docente remarcará los aspectos más importantes trabajados en esta clase:
● Reconocer que en las computadoras que usamos (netbooks, celulares, etc.) hay dos tipos de memoria, una volátil (RAM) y una persistente (disco rígido, tarjeta de memoria). Entender al tiempo de acceso como el criterio para diferenciar la velocidad de distintos tipos de memoria, es decir, el tiempo que le demanda a una memoria leer o escribir un dato. Notar que las variables de nuestros programas se almacenan en la memoria RAM, la cual, para saber dónde guardó cada dato, está dividida en direcciones. A cada dirección o posición de memoria RAM corresponder un valor almacenado en ese lugar. Familiarizarse con las distintas unidades que se utilizan en computación para referirse al tamaño de los datos almacenados: Byte, KB, MB, GB, TB, PB, etc.
Como primera actividad, las y los estudiantes se dividirán en grupos y a cada grupo se les darán las siguientes 3 secuencias de acciones que un programa de edición realiza con una foto almacenada en una memoria USB o pendrive:
abrir(“F:\fotaza.png”)
aplicarFiltroBN
guardarFoto
autoRecortar
Las instrucciones utilizadas realizan las siguientes acciones:
abrir(“F:\fotaza.png”)​: abre la foto “fotaza.png” guardada en la unidad extraible F, es
decir, la memoria USB o pendrive. aplicarFiltroBN​: convierte la “fotaza” en una foto Blanco y Negro.
guardarFoto​: guarda la foto con los cambios aplicados en la memoria USB.
autoRecortar​: quita los bordes de la imagen.
El objetivo del ejercicio es calcular cuánto tardará la ejecución de cada secuencia, considerando el tiempo que demora ejecutar una instrucción y el tiempo que se requiere para leer o escribir la foto en la memoria USB. Para ello, cada grupo recibirá alguno de los siguientes tiempos propuestos:
- Ejecutar una instrucción: 1 ns
- Leer o escribir en la memoria USB: 1 ns
- Leer o escribir en la memoria USB: 10 ns
- Leer o escribir en la memoria USB: 100 ns
Mientras los grupos se ponen a resolver la actividad, el/la docente irá pasando por las mesas de trabajo para irlos orientando. Cuando todos hayan terminado la actividad se realizará una puesta en común y se compararán los tiempos para cada una de las secuencias considerando los 3 pares de tiempos posibles, como se muestra en la siguiente tabla:
(​1​+​1​) + ​1​ = ​3
(​1​+​1​) + ​1​ + (​1​+​1​) = ​5
(​1​+​1​) + ​1​ + (​1​+​1​) + ​1​ + (​1​+​1​) = ​8
(​1​+​10​) + ​1​ = ​12
(​1​+​10​) + ​1​ + (​1​+​10​) = ​23
(​1​+​10​) + ​1​ + (​1​+​10​) + ​1​ + (​1​+​10​) = ​35
(​1​+​100​) + ​1​ = ​102
(​1​+​100​) + ​1​ + (​1

References: resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución