Fundamentos - APÉNDICE
Fundamentos - APÉNDICE
Fundamentos - APÉNDICE
APÉNDICE
Conceptos generales
o Programa
o Sintaxis
o Paradigma
o Lenguaje de programación
o Computadora
o Error
El lenguaje Gobstones
El entorno de Gobstones
o Tablero
o Bolitas
o Cabezal
o Boom
o Palabras reservadas
Fundamentos de programación
o Programas
o Procedimientos
o Repetición simple
o Parámetros y argumentos
o Alternativa condicional
o Funciones
Procedimientos primitivos
Funciones primitivas
Conceptos generales
Programa
Sintaxis
Paradigma
Lenguaje de programación
Computadora
Error
El lenguaje Gobstones
Gobstones es un lenguaje gráfico desarrollado por docentes e
investigadores de la Universidad Nacional de Quilmes, diseñado para la
enseñanza de ideas básicas de programación.
El entorno de Gobstones
Tablero
El tablero es una cuadrícula compuesta por celdas. Las distintas tareas que
hacen nuestros programas con las bolitas y el tablero nos permiten
representar y resolver problemas muy variados. Podemos ver su estado
antes y después de ejecutar un programa.
Bolitas
Cada celda del tablero puede contener un número ilimitado de bolitas que
pueden ser de cuatro colores diferentes: Negro, Verde, Rojo y Azul. Las
herramientas que nos provee Gobstones para manipular las bolitas nos
permiten lograr diferentes configuraciones del tablero para modelar
situaciones y resolver problemas.
Cabezal
Boom
Palabras reservadas
Los lenguajes cuentan con palabras reservadas para fines específicos, eso
significa que no podemos usarlas en cualquier situación. Algunos ejemplos
de Gobstones son program, procedure y function.
Fundamentos de programación
Programas
program {
Mover(Este)
Poner(Azul)
}
Procedimientos
Nombre
Todos los procedimientos llevan un nombre que explica la tarea que
realiza. Es importante que sea un nombre expresivo, es decir, que deje
claro lo que hace. De esa forma, cuando leemos su nombre podemos
entender su objetivo a simple vista, sin necesidad de profundizar en cómo
está hecho.
Subtareas
Los procedimientos son una herramienta muy útil para organizar la
resolución de un problema. Identificar y separar las partes que componen
un problema nos permite resolver las pequeñas tareas que lo conforman y,
al reunirlas, poder solucionarlo. Al utilizar procedimientos reconocemos
esas tareas, les ponemos nombre y las resolvemos definiendo un nuevo
procedimiento. De esta forma tenemos el procedimiento creado y a
disposición para invocarlo todas las veces que sean necesarias.
Definición e invocaciones
La definición de un procedimiento es la porción de código que desarrolla la
tarea que resuelve. Esta definición no implica su uso, solo su existencia.
Para definir un procedimiento debemos utilizar la palabra
reservada procedure luego el nombre elegido en con la primera letra de cada
palabra en mayúsculas (DeEstaForma) seguido por paréntesis (). Por último,
entre llaves, las acciones y comandos que lo conforman. Por ejemplo:
procedure PonerUnaBolitaDeCadaColor(){
Poner(Rojo)
Poner(Verde)
Poner(Azul)
Poner(Negro)
}
program {
PonerUnaBolitaDeCadaColor()
}
Repetición simple
program{
repeat(5){
Poner(Azul)
}
}
Caso borde
Tenemos que prestar atención al orden en el que damos las instrucciones
que reúne la repetición para garantizar que al comienzo y al final (o en los
“bordes”) se comporte como esperamos. Si no consideramos los casos
bordes en una repetición en la que combinamos acciones y movimientos
en el tablero es muy probable que pasemos celdas sin completar la acción
deseada o nos salgamos de los márgenes del tablero. Una buena estrategia
para evitarlo es considerar el último caso por fuera de la repetición.
Por ejemplo, queremos colocar una bolita azul en cada celda de este
tablero:
Si intentamos repetir la acción de Poner(Azul) y Mover(Este) cuatro veces, en
el último paso vamos a estar fuera de los márgenes del tablero y las
instrucciones no serán válidas. Si, en cambio, repetimos esas acciones tres
veces no colocaremos una bolita azul en la última celda. La solución es
hacer tres repeticiones y por fuera de su estructura nos encargamos de
poner la bolita en la última celda:
program{
repeat(3){
Poner(Azul)
Mover(Este)
}
Poner(Azul)
}
Parámetros y argumentos
// Al invocar el procedimiento podemos elegir hacia qué dirección queremos movernos. Por ejemplo, si
quisiéramos un programa que nos permita movernos dos celdas al Oeste deberíamos hacer:
program {
Mover2PasosHaciaEl(Oeste)
}
Alternativa condicional
program {
if(hayBolitas(Azul)) {
Sacar(Azul)
} // en este caso si hay al menos una bolita azul va a sacar una.
}
program {
if(hayBolitas(Azul)) {
Sacar(Azul)
} else {
Poner(Azul)
} // en este caso si hay al menos una bolita azul va a sacar una. Si no hay ninguna bolita azul va a poner
una.
}
Funciones
function nroBolitasTotal() {
return (nroBolitas(Azul) + nroBolitas(Negro) + nroBolitas(Rojo) + nroBolitas(Verde))
}
Procedimientos primitivos
Poner(color)
program {
Poner(Rojo) // pone una bolita roja en la casilla actual.
}
Sacar(color)
program {
Sacar(Negro) // saca una bolita negra de las que hay en la casilla actual.
}
Mover(direccion)
Mueve el cabezal indicador de la casilla actual un paso hacia la dirección
indicada. Ejemplo:
program {
Mover(Este) // mueve el cabezal una vez hacia el Este.
}
IrAlBorde(direccion)
program {
IrAlBorde(Norte) // mueve el cabezal de la celda actual a la última celda en la dirección Norte.
}
VaciarTablero()
program {
VaciarTablero() // En un tablero con alguna o muchas bolitas, las saca todas.
}
Funciones primitivas
nroBolitas(color)
nroBolitas(Rojo) // retorna 4
opuesto(direccion)
opuesto(numero)
Retorna un número: el original, negado. Ejemplo:
siguiente(direccion)
previo(direccion)
hayBolitas(color)
puedeMover(direccion)