You are on page 1of 7

Programación I – Algoritmos y Estructura de Datos I

DEFINICIÓN FORMAL DEL ROBOT

OBJETIVOS
Disponer de un modelo de máquina simple con un conjunto de instrucciones limitado,
especialmente orientado a la utilización de las estructuras de control de un lenguaje “Pascal”, para
iniciarse en la expresión formal de algoritmos.
El alumno expresará problemas de movimiento en términos de conjunto de instrucciones simples;
podrá construir nuevas instrucciones; manejará señales de control para la toma de decisiones y
asimismo podrá ordenar al robot la realización de cálculos simples.
Conceptualmente dispondrá de una “calculadora + movimientos + información del mundo que lo
rodea” y podrá organizar trayectorias, trayectorias con obstáculos o trayectorias con cálculo.
El objetivo central es la introducción natural de las estructuras de control de decisión y asignación,
así como la noción de dato (constante y variable) y el concepto de Entrada y Salidas e información
con un modelo de referencia muy claro.

JUSTIFICACION
La utilización de alguna forma de máquina abstracta simple en la iniciación a la Informática es una
herramienta didáctica muy difundida en el mundo (tortuga-Logo, Karen, Mix, etc). En general cada
modelo se orienta hacia un lenguaje o un nivel de programación, y es habitual que se limiten las
capacidades de la máquina o al movimiento o al cálculo.
Para coordinar los objetivos del curso de Programación I, se desarrolló una máquina algo más
completa que hemos llamado CARLITOS.
CARLITOS se presenta como un robot con cinco capacidades básicas:
Se mueve.
Se orienta hacia la derecha e Izquierda.
Dispone de sensores visuales para reconocer obstáculos en su camino y para identificar
alguna forma simple pre-especificada (flores y papeles). Puede juntar estos objetos en su
bolsa o bien descargarlos desde ella, uno por vez.
Puede realizar cálculos elementales.
Puede leer e informar sus resultados.

Para poder desarrollar estas capacidades, Carlitos reconocerá un conjunto de instrucciones


primitivas las que le permitirán movilizarse a lo largo de una ciudad.
Con este conjunto de órdenes Carlitos podrá resolver problemas de:
Recorridos.
Recorridos con obstáculos.
Cálculos simples.
Cálculos con informes.
Recorridos con cálculo e informe.

A su vez, como se propicia la modularización, se permitirá que el programa pueda, a partir de las
instrucciones primitivas, definir, mediante procedimientos, nuevas instrucciones con una función
más compleja.
Por último el estilo de análisis del problema y de programación inducido tiene varias ventajas:
Necesariamente se tratará de programas estructurados.
Naturalmente se aproximará al PASCAL.
Deberá desarrollar módulos y un método de descomposición de problemas tipo
“refinamientos sucesivos”.
Describiremos en las secciones siguientes el ámbito en el cual se desplaza el robot, así como las
instrucciones básicas que es capaz de reconocer.

Pág. 1 de 7
Programación I – Algoritmos y Estructura de Datos I

AMBITO DEL ROBOT


Al igual que lo visto anteriormente, Carlitos podrá desplazarse por un ciudad. Dicha ciudad está
formada por calles y avenidas. Denominaremos avenidas a las arterias verticales, en tanto que las
calles serán las arterias horizontales.
Nuestra ciudad tendrá 100 calles y 100 avenidas, dispuestas de la forma que lo muestra la figura
siguiente:

(100, 100)
.
.
.
. . . . . . . . . . . . .
.
Calle 2 .
Calle 1 .
(1, 1) Avenida 2 (100, 1)

Cada una de las esquinas está determinada por dos coordenadas. La primera indica el número de
avenida y la segunda el número de calle.
Tenga en cuenta que para llegar hasta la calle 100 o hasta la avenida 100, estando en la esquina
(1,1) tenemos que recorrer 99 “cuadras” (o pasos del robot, pues un paso es igual a una cuadra).
Las flores, papeles y obstáculos se encuentran siempre ubicados en las esquinas. En el caso de los
obstáculos, Carlitos los detecta desde la esquina anterior.

USO DE VARIABLES
Como vimos dentro de los objetivos, Carlitos es capaz de realizar recorridos, y además, tiene la
posibilidad de efectuar cálculos sencillos. Ahora bien, para que Carlitos pueda resolver estos
cálculos debemos introducir un nuevo concepto: variable.
Carlitos debe tener capacidad para “recordar” ciertos datos. Al igual que los seres humanos, poseerá
memoria. Esto es, mediante algún dispositivo será capaz de retener información.
Una variable es un lugar de la memoria donde se puede guardar información durante un lapso de
tiempo. Se la identifica con un nombre, que generalmente indica el tipo de información que
contendrá.
Básicamente, una variable puede verse como una “caja” dentro de la memoria en la cual se puede
guardar un número, una letra, u otros elementos que veremos más adelante. La ventaja principal es
que, como su nombre lo indica, el dato que guardamos puede ir variando a medida que avanzamos
en nuestro algoritmo.
Como ya dijimos, una variable es identificada mediante un nombre. Como veremos en la
descripción de las primitivas del robot, dentro de cada algoritmo existirá una zona, perfectamente
acotada, dentro de la cual es obligatorio indicar a Carlitos las variables que manejará el algoritmo.
Esa zona está ubicada inmediatamente luego de Program <nombre>. Este lugar no es caprichoso,
nótese que es lo primero que se define de un algoritmo. Esto se debe a que si nuestro algoritmo
necesita variables, las mismas deben ser definidas previas a su utilización. Ahora bien, una vez
definidas, las mismas son conocidas dentro del algoritmo y cuando éste finaliza las variables dejan
de tener validez.

Analicemos el siguiente ejemplo, donde recorreremos la avenida 1 desde la calle 1 y hasta la calle
100, debiendo determinar la cantidad de flores y papeles que encuentra en el recorrido:

Pág. 2 de 7
Programación I – Algoritmos y Estructura de Datos I

Program ejemplo
var flores, papeles (1)
Begin
Iniciar
flores := 0 (2)
papeles := 0 (3)
{ recorro todas las cuadras de la ciudad}
For 99 do
Begin
If hay flor then
flores := flores + 1 (4)
If hay papel then
papeles := flores + 1 (5)
avanzar
End
End.

Analicemos cuidadosamente este ejemplo. Vemos que luego de encabezar nuestro algoritmo con
Program definimos las variables (1). Esto significa que el algoritmo llamado ejemplo tiene
definidas dos variables: flores y papeles.
Las instrucciones (2) y (3) están asignando un valor inicial a las variables. El símbolo de asignación
es := e indica que la variable que aparece a su izquierda toma el valor que aparece a la derecha.
Analicemos ahora las instrucciones (4) y (5). Aquí vemos que la acción a tomar si hay flor o papel
en la esquina es contar que tenemos un objeto más. En este caso, la asignación debe leerse como: se
resuelve lo que aparece a derecha del símbolo, y ese resultado es asignado a la variable que aparece
a izquierda. En el caso (4), la asignación se resolverá como: flores tiene hasta el momento el valor 0
(asignado en (2)) más 1 da como resultado1; este valor es asignado a la variable flores, que apartir
de este momento tiene el valor 1.

PRIMITIVAS DEL ROBOT


Definiremos ahora, cada una de las instrucciones que reconoce el robot. Describiremos su sintaxis y
semántica, la cual debe ser utilizada y respetada para construir los algoritmos de la práctica.

Iniciar
Sintaxis: Iniciar
Semántica: coloca a Carlitos en la esquina de coordenadas (1,1) orientado hacia arriba
(Norte)

Caminar
Sintaxis: Avanzar
Semántica: desplaza a Carlitos un paso (una cuadra) en el sentido en que se encuentra
orientado.

Reorientarse
Sintaxis: Derecha
Semántica: gira a Carlitos 90º en sentido horario, pero no lo desplaza.

Sintaxis: Izquierda
Semántica: gira a Carlitos 90º en sentido contrario al horario, pero no lo desplaza.

Pág. 3 de 7
Programación I – Algoritmos y Estructura de Datos I

Juntar objetos
Sintaxis: Juntar Flor
Semántica: levanta una flor que se encuentra en la esquina y la deja en la bolsa que lleva.

Sintaxis: Juntar Papel


Semántica: levanta un papel que se encuentra en la esquina y lo deja en la bolsa que lleva.

Depositar objeto
Sintaxis: Depositar Flor
Semántica: saca de la bolsa una flor, la cual es depositada en la esquina.

Sintaxis: Depositar Papel


Semántica: saca de la bolsa un papel, el cual es depositado en la esquina.

Posicionamiento
Sintaxis: Pos(av, ca)
Semántica: posiciona al robot en la esquina de coordenadas av y ca orientado hacia arriba
(Norte).

Sintaxis: Posav
Semántica: devuelve el número de avenida en que está ubicado el robot.

Sintaxis: Posca
Semántica: devuelve el número de calle en que está ubicado el robot.

Informar
Sintaxis: Write <dato>
Semántica: comunicar el resultado de alguna operación o recorrido. Dato puede ser un texto
encerrado por comillas o puede ser una variable.

Programa
Sintaxis: Program <nombre>
Begin ..… End
Semántica: indica a Carlitos que a partir de ese momento se codificarán todas las
instrucciones que conforman su algoritmo.

Procedimiento:
Sintaxis: Procedure <nombre>
Begin ….. End
Semántica: permite definir un módulo encargado de resolver un problema específico. Todas
las instrucciones que componen el procedimiento se escriben luego de Begin y finalizan con
End.

Bloques:
Sintaxis: Begin ….. End.
Semántica: dentro de las estructuras condicionales e iterativas, puede aparecer una
instrucción o un conjunto de instrucciones. Carlitos puede reconocer una instrucción, en
caso de necesitar más de una las mismas deben escribirse dentro de un bloque Begin …..
End.

Pág. 4 de 7
Programación I – Algoritmos y Estructura de Datos I

Condicional
Sintaxis 1: If <condición lógica> then
Acción o bloque de acciones
Sintaxis 2: If <condición lógica> then
Acción o bloque de acciones
Else
Acción o bloque de acciones
Semántica: evalúa la condición lógica, si es verdadera ejecuta todas las instrucciones
escritas dentro del then. Por el contrario, si es falsa, saltea el then y ejecuta todas las
instrucciones que se escriben por el else.

Iteración
Sintaxis: For <n> do
Acción o bloque de acciones
Semántica: ejecuta un conjunto de instrucciones tantas veces como indique el número n.

Sintaxis: While <condición lógica> do


Acción o bloque de acciones
Semántica: evalúa la condición lógica; si es verdadera ejecuta un conjunto de instrucciones
y cuando llega a la última vuelve a evaluar la condición, repitiendo las instrucciones
nuevamente si la condición es verdadera. Este proceso se repite hasta que la condición se
evalúe a falso; en ese caso el while termina.

Sintaxis: Repeat
Acción o bloque de acciones
Until <condición lógica>
Semántica: ejecuta la acción o bloque de acciones, hasta llegar al Until. Luego evalúa la
condición lógica; si da falso ejecuta nuevamente las instrucciones comprendidas entre el
Repeat y el Until. Este proceso lo repite hasta que evalúa la condición lógica y ésta es
verdadera.

Nótese que las estructuras Repeat …. Until y While permiten iterar un número no fijo de veces
sobre un conjunto de instrucciones. Las diferencias son:
En el Repeat el conjunto de instrucciones se ejecuta al menos una vez, mientras que en While esto
no ocurre.
En el While la condición se evalúa y se ejecutan las instrucciones si el resultado de la evaluación es
verdadero. En el Repeat para ejecutar nuevamente las instrucciones, la condición lógica debe
retornar como resultado falso.

Símbolos especiales
Sintaxis: :=
Semántica: asigna a la variable (ubicada a la izquierda de := )el resultado de la operación
indicada a la derecha de :=

Sintaxis: +
Semántica: operador de suma.

Sintaxis: -
Semántica: operador de resta.

Sintaxis: *
Semántica: operador de multiplicación.
Pág. 5 de 7
Programación I – Algoritmos y Estructura de Datos I

Sintaxis: /
Semántica: operador de división.

Sintaxis: =, <, >, >=, <=, <>


Semántica: el primer operador compara que la variable escrita a la izquierda tenga igual
contenido que la variable escrita a la derecha. Cada uno de los operadores significa:
>: mayor,
<: menor,
<=: menor o igual,
>=: mayor o igual,
<>: distinto.
Sintaxis: and, or, not
Semántica: operadores lógicos. El significado es el siguiente:
And: y lógico entre dos proposiciones.
Or: o lógico entre dos proposiciones.
Not: negación de una proposición.

Comentarios
Sintaxis: { <comentario>}
Semántica: permite escribir en algún lugar del algoritmo un comentario o especificar una pre
o post condición.

Variables
Sintaxis: Var <lista de variables>
Semántica: Carlitos puede realizar cálculos sencillos. Para ello necesita variables las cuales
deben definirse al comienzo del programa. Definir las variables significa poner Var y
seguidamente los nombres que utilizaremos.

ESTRUCTURA GENERAL DE UN ALGORITMO DE CARLITOS


Los algoritmos que desarrollemos deben respetar cierta estructuración, describiremos seguidamente
dicha estructura básica:

Program <nombre>
Var <lista de variables>

Procedure <nombre 1>


Var <lista de variables>
Begin
……..
End

Procedure <nombre 2>


Var <lista de variables>
Begin
……..
End

Begin
<instrucciones>
End
Pág. 6 de 7
Programación I – Algoritmos y Estructura de Datos I

No se ha definido ningún separador de instrucciones, por lo tanto cada instrucción del algoritmo
debe ser escrita en un renglón distinto.

EJEMPLOS
En esta sección describiremos un conjunto de ejercicios sencillos, que permitirán al Robot realizar
un recorrido por la ciudad.

1. Realice el algoritmo que permite a Carlitos recorrer el perímetro de la ciudad juntando todos
los claveles que aparezcan en las esquinas.

Program Recorrido1

Procedure Lado { recorre cada calle y avenida del perímetro}


Begin
For 99 do {cada arteria tiene 99 cuadras}
Begin
Avanzar

{pregunto si tengo flor para poder juntarla}


If hay flor then
Juntar flor
End
End

Begin
Iniciar {posiciono al robot en (1,1)}
For 4 do {debo recorrer las 4 arterias límites de la ciudad}
Begin
Lado
Derecha
End
End.

2. Realizar un algoritmo que permita a Carlitos recorrer todas las calles de la ciudad depositando
flores en las esquinas libres y juntando todos los papeles que encuentre.

Program Recorrido2

Procedure Calle {permite recorrer cada calle, buscando objetos}


Begin
For 99 do {recorre cada cuadra de la calle}
Begin
If hay papel then
Juntar Papel
If no hay flor then
Depositar Flor
Avanzar
End
End.
Pág. 7 de 7