Professional Documents
Culture Documents
Marzo 2018
Introducción
Esta guía está pensada como una introducción a la programación para estudiantes que no tienen
ninguna experiencia previa en programación. En las primeras clases se trabajará con U NIVERSO 10×10.
Este Universo está inspirado en el lenguaje de programación Gobstones [2] desarrollado por un equipo
liderado por Pablo (a) Fidel Martínez López, Profesor de la Universidad Nacional de Quilmes, con el objeto
de introducir a los estudiantes a la práctica de la programación. Los problemas de la guía y buena parte
del material teórico están tomados en su mayoría con pequeñas adaptaciones, del curso de Introducción
a la Programación de la Universidad Nacional de Quilmes [1]. En la segunda parte se verán algunas
estructuras básicas de almacenamiento de la información, así como algoritmos para crearlas y algoritmos
para consultarlas.
Calendario académico
El calendario de este cuatrimestre consta de 16 semanas cada una con dos clases. Se pierden cuatro
por los feriados del jueves 29/3 y lunes 2/4, 30/4 y 9/7, y dos que se invierten en los parciales y las
posteriores al segundo parcial que son para recuperación de los que no promocionaron. Todas las demás
se dedican a clases teórico-prácticas. Las instancias de evaluación que aparecen marcadas con negrita.
1
Diseño de Algoritmos y Estructuras de Datos (2221)
1. Instalar el Python
Para que instalar el Python y que pueda editarse y ejecutarse desde el Notepad++ como el las máqui-
nas del labo hay que seguir una serie de pasos.
Paso 1. Vayan a la página del Python https://www.python.org/downloads/windows/ (esta página con-
tiene links a todas las últimas versiones de Python para Windows) y descárguense la última versión estable.
Recomiendo la 3,5,4 del 2017-08-08. Vayan al link Download Windows x86 executable installer
Paso 2. Vayan a la página del Notepad++ https://notepad-plus-plus.org/download/v7.5.6.html y
descárguense la última versión estable. Recomiendo bajarse la de 32 bits que seguro va a funcionar. El
primer link debajo de la palabra DOWNLOAD en botón verde.
Paso 3. Vayan a:
https://sourceforge.net/projects/npp-plugins/files/NppExec/NppExec%20Plugin%20v0.5.3/ y bá-
jense el plugin NppExec_053_dll_Unicode.zip
Paso 4. Instalen el Python. En general si le dan OK a todas las opciones de instalación quedará instalado
en la carpeta C:\Python35 aunque las nuevas versiones de instaladores lo ubican en:
C:\Users\SuNommbreDeUsuario\AppData\Local\Programs\Python\Python35-32. Esta dirección es clave
para el Paso 9. de la instalación.
Paso 5. Instalen el Notepad++.
Paso 6. Descompriman el NppExec_053_dll_Unicode.zip y copien el contenido en la carpeta
Notepad++/plugins.
Paso 7. Hecho esto, dependiendo de las versiones de soft instaladas, posiblemente al ejecutar el Note-
pad++ el NppExec ya haya quedado instalado. Eso lo sabrán yendo al menú desplegable Plugins, si al
desplegarlo aparece una línea con el NppExec, es que ya quedó instalado. En caso contrario tienen que ir
al menu Plugins>Plugin Manager>Show Plugin Manager para instalarlo. En ese caso les abre una venta-
na con una cantidad de plugins para instalar, buscan el NppExec marcan el cuadradito que aparece a su
izquierda y luego el botón de instalar en la esquina inferior derecha de la ventana.
Paso 8. Una vez instalado el NppExec, va a ocupar un renglón en el menú de Plugins. Seleccionen ese
menú Plugins>NppExec y tilden las opciones:
Save all files on execute
Follow \$(CURRENT_DIRECTORY)
Paso 9. Vuelvan a arrancar el Notepad++ y presionando F6 les va a aparecer una ventana Execute. En
esa ventana escriban c:\python34\python.exe "\$(FULL_CURRENT_PATH)" Aquí depende de la carpeta
en que hayan instalado el Python en su máquina. Para que no tengan que escribir esto cada vez que
ejecutan presionen el botón «save» y graben esa orden con un nombre (sugerencia Python3).
Paso 10. Para que el Notepad++ reconozca la sintaxis y la coloree tienen que grabar a los archivos con
extensión .py Al poner Guardar como en Notepad++ les aparece una ventana. Abajo de la línea para poner
el nombre aparece otra línea con el nombre de Tipo y un menú desplegable con todas las extensiones,
ahí elijan la que es .py
Paso 11. Una vez completados estos pasos un programa escrito en Python puede ejecutarse mediante F6
y dando OK a la ventana que se abre.
Si se trabaran en alguna parte del proceso de instalación del Notepad++ pueden usar como editor al-
ternativo el Sublime Text http://www.sublimetext.com/. Pueden instalarlo después de instalar el Python.
Idealmente el procesador de texto reconocerá automaticamente el Python y con la combinación de teclas
Control b pueden ejecutar un programa.
¿Qué es programar?
Comunicado: programa con las instrucciones para hacer ese algo. Se puede escribir en
algun lenguaje, por ejemplo castellano.
Elementos a respetar
Reglas de sintaxis
Semántica
Me río en el baño.
Me baño en el río.
Comienza con una instrucción Inicio() y termina con una instrucción Fin(s) En el medio
pueden escribirse instrucciones como Poner('R'), Mover('S') y Sacar('R')
Propósito: especifica el QUÉ hace un programa (su EFECTO sobre el universo incial). El
propósito no especifica CÓMO lo debe hacer el programa.
Precondición: propiedad sobre el universo inicial que el usuario debe garantizar antes de
ejecutar.
Problema 1. Escriban un programa que ponga una bolita verde en la celda actual. Ejecuten el pro-
grama, indicando si el efecto es el esperado.
Problema 2. Escriban un programa que ponga una bolita de cada color en la celda actual. Ejecuten el
programa, indicando si el efecto es el esperado. ¿Se le ocurre otro programa que resuelva el mismo
problema?
Problema 3. Ejecuten los dos programas siguientes, anotando el efecto final obtenido. ¿Notan alguna
diferencia? Expliquen su respuesta.
Inicio() Inicio()
Poner('R') Sacar('R')
Sacar('R') Poner('R')
Fin() Fin()
Problema 4. Ejecuten los dos programas siguientes, anotando el efecto final obtenido. ¿Notan alguna
diferencia? ¿Se les ocurre algún tablero en el que podrían diferir los efectos finales? Defiendan su
punto de vista con argumentos y ejemplos.
Inicio() Inicio()
Poner('R') #¾Sabías que un programa puede estar vacío?
Sacar('R') # O que puede tener comentarios que no se ejecuten
Fin() Fin()
Problema 5. Escriban un programa que ponga una bolita de color azul en la celda lindante al sur de
la actual, dejando el cabezal en la celda inicial. Indiquen el resultado obtenido.
Problema 6. Los siguientes programas resuelven incorrectamente el problema anterior. ¿Por qué?
Comparen estos programas con su solución del problema anterior.
Inicio() Inicio()
Mover('S') Poner('A')
Poner('A') Mover('E')
Fin() Mover('O')
Fin()
Problema 7. Hagan corresponder las siguientes oraciones que describen propósitos (efectos) con
sus respectivos programas.
Pone dos bolitas azules y una verde; el cabezal queda en la misma posición.
Mueve el cabezal hacia el este.
Saca una bolita azul de la celda al este, sin mover el cabezal.
Pone un cuadrado 2 × 2 bolitas azules sin mover el cabezal.
Saca una bolita azul de la celda al este, dejando el cabezal ahí.
Problema 8. Indiquen por qué las siguientes oraciones nunca podrían identificar correctamente el
propósito de un programa.
Problema 9. Escriban el efecto de cada uno de los siguiente programas; recuerden especificar todos
los cambios, incluyendo la posición final del cabezal. Luego, comparen su solución con la de al
menos tres compañeros y, en caso de haber grandes discrepancias, consulten con el docente.
Inicio() Inicio() Inicio()
Sacar('A') Mover('E') Poner('R')
Sacar('V') Mover('E') Sacar('A')
Poner('R') Poner('N') Sacar('V')
Fin() Fin() Fin()
Problema 10. Escriban un programa que primero ponga una bolita verde y luego la saque. ¿Cuál es
el efecto de este programa? ¿Se podría simplificar?
Problema 11. Escriban tres programas con tres, cinco y siete comandos respectivamente cuyo efecto
sea poner una bolita roja en la celda lindante al este dejando, al finalizar, el cabezal en la celda
inicial. Ejecuten cada uno de sus programas en un tablero apropiado. ¿Es posible darse cuenta cuál
programa se ejecuta viendo únicamente los efectos en el tablero?
Problema 12. Hagan corresponder las siguientes oraciones que describen precondiciones con sus
respectivos programas.
Procedimientos
Reduce el trabajo.
Problema 1. Discutan con compañeros cuáles serían las precondiciones razonables para procedi-
mientos que:
Importante: no hay que escribir ningún programa, simplemente basta con discutir cuál es la precon-
dición que esperarían de semejante programa.
Problema 2. hagan corresponder las siguientes oraciones que describen propósitos con sus respec-
tivos procedimientos.
Pone una linea azul de longitud 3 hacia el este; el cabezal queda a tres celdas hacia el este de
la celda actual.
Pone una bolita azul y mueve el cabezal a la celda lindante al este.
Reemplaza dos bolitas rojas por dos bolitas azules, dejando el cabezal en la misma posición.
Problema 3. Tómense a lo sumo 3 minutos (cronometrados) para entender qué hace el siguiente
procedimiento sin ejecutarlo. Cuando se acabe el tiempo, escriban un texto describiendo en caste-
llano describiendo lo que crean que hace el procedimiento.
Problema 4. Tómense a lo sumo 3 minutos (cronometrados) para entender qué hace el siguiente
procedimiento sin ejecutarlo. Cuando se acabe el tiempo, escriban un texto describiendo en caste-
llano describiendo lo que crean que hace el procedimiento.
Parámetros y argumentos
Parámetro: nombre que varía dentro del procedimiento y que figura en el encabezado
del mismo.
Argumento: valor fijo con que se invoca al procedimiento. Toma en el encabezado del
procedimiento, en el momento en que este es invocado, el lugar del parámetro.
Problema 5. Hagan corresponder las siguientes oraciones que describen propósitos y precondicio-
nes con sus respectivos procedimientos. Nota: puede ser necesario corresponder más de una ora-
ción con cada procedimiento, en ese caso, ambas oraciones deben ser ciertas.
def A(c): def B(c): def C(c, r): def D(c, r):
Sacar(c) Poner(c) A(c) C(c, r)
Sacar(c) Poner(c) B(r) Mover('E')
C(r,c)
¿Qué relacién hay entre los parámetros de distintos procedimientos que tienen el mismo identificador
(nombre)?
Problema 6. Corrijan el siguiente código que tiene errores en cuanto al alcance de los parámetros.
def PonerCuadradito2(c): def PonerLinea2()
# Pone un cuadrado de 2 por 2 de color c. # Poner una linea de tamaño 2 de color c.
# El cabezal queda en la posición actual # El cabezal queda en la posición actual
PonerLinea2() Poner(c)
Mover('N') Mover('E')
PonerLinea2() Poner(c)
Mover('S') Mover('O')
Problema 7. Indiquen cuáles de las siguientes tiras de símbolos son expresiones del U NIVERSO 10 X 10
(es decir, denotan un valor). Además, para aquellas que sean expresiones, indicar si son literales o
no y cuál es su tipo (i.e., si denota un número, una dirección o un color). Justifiquen.
a) 7 g) 0 V 0
b) 1 + 6 h) 0 R0 + 0 A0
c) + i) Mover(’S’)
d) −1 + 6 j) CantidadDeBolitas(’R’)
e) 7/ / 5 k) + 5 con parametro.
f) 7 %5 l) Poner(c) con c parámentro
Problema 9. Agrupen las siguientes expresiones de forma tal que las expresiones que denotan el
mismo valor pertenezcan al mismo grupo, suponiendo que se evaluán en el tablero de la Figura 1
(a). ¿Cómo habría que agruparlas si el tablero fuera el de la Figura 1 (b) y (c)?
Problema 11. Indiquen cuáles de las siguientes invocaciones están bien escritas en U NIVERSO 10 X 10,
teniendo en cuenta que Pepe(c,d,n) es un procedimiento que recibe un color c, una dirección d y
un número n. Justifiquen.
Problema 12. Escriban un procedimiento PonerCasiCien usando Repetir que ponga 99 bolitas verdes
en la celda actual.
Problema 14. Usando como base el procedimiento anterior, escriban un procedimiento PonerTantasXComoY
(c1,c2) que, dados dos colores c1 y c2, ponga en la celda actual tantas bolitas de color c1 como bo-
litas de color c2 haya en la celda actual. ¿Cómo se debería invocar PonerTantasXComoY para resolver
el ejercicio anterior?
Problema 15. Escriban un procedimiento PonerN(n, c) que tenga como parámetros una cantidad n y
un color c cuyo propósito sea colocar n bolitas de color c en la celda actual.
Problema 16. Resuelvan el Problema 14. utilizando PonerN en conjunto con el procedimiento CantidadDeBolitas.
¿Cuál es la ventaja de utilizar PonerN?
Problema 18. Utilizando SacarN, escriban el procedimiento SacarTodas(c) que, dado un color c, sa-
que todas las bolitas de color c de la celda actual. ¿Este procedimiento funciona siempre?
Problema 19. Utilizando SacarTodas, escribir el procedimiento LimpiarCelda que saque todas las bo-
litas de la celda actual. ¿Este procedimiento funciona siempre?
Problema 20. Escriban un programa que coloque una bolita roja en cada celda. ¿Cuál es la menor
cantidad de líneas con las que se puede resolver el problema?
Referencias
[1] Universidad Nacional de Quilmes. Introducción a la programación.