Está en la página 1de 3

program {

return (coordenadaXConMásBolitas())
}

function coordenadaXConMásBolitas () {

/*Proposito: Describe la coordenada X de la celda con mas bolitas en total.


Precondicion: Ninguna.
Tipo: Numero.*/

IrAlBorde(Oeste)
IrAlBorde(Sur)
while (totalDeBolitas() /= celdaConMasBolitas ()) { /* Esta funcion solo va
hasta la celda con mas bolitas, ya que lo que importa es el numero conseguido en
celdasConMasBolitas(),
entonces cuando es igual el total de bolitas de una celda a ese numero, se frena.
Quedando asi en la
celda con mas bolitas. */
IrAProximaCelda()
}
return (coordenadaX()) // Retorna la coordenada X de la celda con mas
bolitas.
}

function celdaConMasBolitas () {

/*Proposito: Describe la coordenada X de la celda con mas bolitas en total


en el tablero.
Precondicion: Ninguna.
Tipo: Direccion.*/

cantidadDeBolitasDeLaCelda := totalDeBolitas() // Empieza con el total de


bolitas de la celda inicial del recorrido.
IrAlBorde(Oeste)
IrAlBorde(Sur)
while (puedeMover(Este) || puedeMover(Norte)) {
cantidadDeBolitasDeLaCelda := maximoEntre_Y_
(cantidadDeBolitasDeLaCelda, totalDeBolitas()) // Actualiza la variable si celda
actual tiene mas bolitas. Sino no.
IrAProximaCelda () // Proxima celda del recorrido por celdas.
}
cantidadDeBolitasDeLaCelda := maximoEntre_Y_ (cantidadDeBolitasDeLaCelda,
totalDeBolitas()) // Revisa la ultima celda del recorrido.
return (cantidadDeBolitasDeLaCelda) //Retorna la mayor cantidad de bolitas
de una celda.
}

function maximoEntre_Y_ (numero1, numero2) {

/*Proposito: Describir que valor es mayor entre *numero1* y *numero2*.


Parametros: *numero1* Numero. Espera el primer numero.
*numero2* Numero. Espera el segundo numero.
Precondicion: Ninguna.*/

valor1 := numero1
valor2 := numero2

return (choose valor1 when (valor1 >= valor2) // Esto retorna el valor
maximo entre 2 numeros.
valor2 otherwise)
}

function totalDeBolitas () {

/*Proposito: Describe el total de bolitas que hay en la celda inicial.


Precondicion: Ninguna.
Tipo: Numero.*/

return (nroBolitas(Rojo) + nroBolitas(Azul) + nroBolitas(Negro) +


nroBolitas(Verde))
}
-----------------------------------------------------------------------------------
-------------------------------
procedure IrAProximaCelda () {

/*Proposito: Ir a la proxima celda del recorrido por celdas.


Obs. : La celda proxima a la celda mas al este es la celda al norte de la
mas al oeste.
Precondicion: Que exista una celda al norte de la celda mas al oeste de la
fila. */

if (puedeMover (Este))
then {
Mover (Este)
}
else {
IrAlBorde (Oeste)
Mover (Norte)
}
}
-----------------------------------------------------------------------------------
---------------------------------
function coordenadaX () {

/*Proposito: Retorna la coordena X donde se encuentra posicionado el


cabezal.
Precondicion: Ninguna.
Tipo: Numero.*/

return (cantidadDeCeldasDeLaFila () - distanciaAlBorde_ (Este))


}

function distanciaAlBorde_ (direccion) {

/*Proposito: Describe a que distancia del borde *direccion* se encuentra la


celda inicial.
Parametros: *direccion* Direccion. Espera la direccion de borde.
Precondicion: Ninguna.
Tipo: Numero.*/

distanciaAlBorde := 0
while (puedeMover(direccion)) {
Mover(direccion)
distanciaAlBorde := distanciaAlBorde + 1
}
return (distanciaAlBorde)
}
function cantidadDeCeldasDeLaFila () {

/*Proposito: Indicar la cantidad de celdas que tiene la fila inicial.


Precondicion: Ninguna.
Tipo: Numero */

cantidadDeCeldasDeFila := 0
IrAlBorde(Oeste)
while (puedeMover(Este)) {
Mover(Este)
cantidadDeCeldasDeFila := cantidadDeCeldasDeFila + 1
}
return (cantidadDeCeldasDeFila)
}

También podría gustarte