Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Funciones para denotar los colores de cada elemento*/
- function colorDeAnimales() {
- return(Rojo)
- }
- function colorDeConstrucciones() {
- return(Negro)
- }
- function colorDeCultivos() {
- return(Verde)
- }
- function colorDeAgua() {
- return(Azul)
- }
- /*Funciones para denotar las cantidades de cada
- elemento presentes en la hectarea actual*/
- function cantidadDeAnimales() {
- return(nroBolitas(colorDeAnimales()))
- }
- function cantidadDeConstrucciones() {
- return(nroBolitas(colorDeConstrucciones()))
- }
- function cantidadDeCultivos() {
- return(nroBolitas(colorDeCultivos()))
- }
- function cantidadDeAgua() {
- return(nroBolitas(colorDeAgua()))
- }
- /////////////////////////////////////////////////////////
- /*a- Programa la funcion cultivoEnPeligro() que indicara
- True si en la hectarea actual hay mas animales que cultivos.
- Tener en cuenta que si no hay cultivos esta funcion indicara
- False sin importar la cantidad de animales que haya
- en la celda.*/
- function hayCultivos(){
- return (nroBolitas(Verde)>0)
- }
- function masAnimalesQueCultivos(){
- return (cantidadDeAnimales()>cantidadDeCultivos())
- }
- function cultivoEnPeligro() {
- return (hayCultivos() && masAnimalesQueCultivos())
- }
- /*b- Programa la funcion ConstruccionesEnPeligro()
- que indicara True si en la hectarea actual
- la cantidad de animales triplica la cantidad de construcciones
- Tener en cuenta que si no hay construcciones
- esta funcion indicara False sin importar la
- cantidad de animales que haya en la celda.*/
- function hayConstrucciones(){
- return (nroBolitas(Negro)>0)
- }
- function animalesTriplicaConstruccion(){
- return (cantidadDeAnimales()>=cantidadDeConstrucciones()*3)
- }
- function construccionesEnPeligro(){
- return (hayConstrucciones()&& animalesTriplicaConstruccion())
- }
- /*c- Programa la funcion hectareaEnPeligro() que indicara
- True si la hectarea actual
- tiene construcciones en peligro o cultivos en peligro*/
- function hectareaEnPeligro(){
- return (construccionesEnPeligro() || cultivoEnPeligro())
- }
- /*d- Programa la funcion hectareaEnPeligroAl(dir)
- que indicara True si la hectarea
- en direccion dir se encuentra en peligro.*/
- procedure PuedeMoverDir(dir){
- if (puedeMover(dir))
- {Mover(dir)}
- }
- function hectareaEnPeligroAl(dir){
- //Mover(dir)
- PuedeMoverDir(dir)
- return(hectareaEnPeligro())
- }
- ///////////////////////////////////////////////
- /*Ejercicio 2
- Programa la funcion animalesExcedentes() que retorna
- la cantidad de animales que habria que sacar de la hectarea
- para que deje de estar en peligro.*/
- function excedenteAnimalesEnCultivos(){
- return (cantidadDeAnimales()-cantidadDeCultivos())
- }
- function excedenteAnimalesEnConstrucciones(){
- return( cantidadDeAnimales()-cantidadDeConstrucciones()*3)
- }
- //////////////
- function animalesExcedentes(){
- if (excedenteAnimalesEnCultivos() > excedenteAnimalesEnConstrucciones()){
- excedente :=(excedenteAnimalesEnCultivos()-excedenteAnimalesEnConstrucciones())}
- else
- {if (excedenteAnimalesEnConstrucciones()>excedenteAnimalesEnCultivos()){
- excedente := (excedenteAnimalesEnConstrucciones()-excedenteAnimalesEnCultivos())
- }
- { if (excedenteAnimalesEnConstrucciones()==excedenteAnimalesEnCultivos()){
- excedente := (excedenteAnimalesEnConstrucciones())
- }
- }
- }
- return(excedente)
- }
- ///////////////////////////////////////////////////////////////
- /*Ejercicio 3
- Para resolver los conflictos en el campo, programa los siguientes procedimientos:
- a- Implementa el procedimiento ResolverConflictoEnHectarea()
- que mueve los animales excedentes de una hectarea en peligro
- a una hectarea lindante con el siguiente criterio:
- Si hay hectarea al Este de la hectarea actual
- y ademas la hectarea al Este no esta en peligro,
- mueve los excedentes alli.
- Si no hay hectarea al Este o la hay pero esta en peligro,
- mueve el excedente al Norte
- sin importar el estado de esa hectarea.
- Precondiciones:
- La hectarea actual se encuentre en peligro.
- Hay una hectarea al Norte de la hectarea actual.*/
- procedure MoverAnimalesExcedentesAl(dir){
- excedente := animalesExcedentes()
- repeatWith a in 1..excedente
- {Sacar(Rojo)}
- PuedeMoverDir(dir)
- repeatWith i in 1..excedente
- {Poner(Rojo)}
- PuedeMoverDir(-dir)
- }
- procedure ResolverConflictoEnHectarea(){
- if(puedeMover(Este) && hectareaEnPeligroAl(Este)){
- MoverAnimalesExcedentesAl(Norte)}
- else
- {if(not puedeMover(Este))
- {MoverAnimalesExcedentesAl(Norte)}
- if (not hectareaEnPeligroAl(Este))
- {MoverAnimalesExcedentesAl(Este)}
- }
- }
- /*(b) Implementa el procedimiento ProcesarHectarea() que resuelve el conflicto en la hectarea si es que esta en peligro. Precondicion: Hay una hectarea al Norte de la
- hectarea actual.*/
- procedure ProcesarHectarea(){
- if (hectareaEnPeligro()){
- ResolverConflictoEnHectarea()}
- }
- /*(c) Implementa el procedimiento ProcesarCampoSinBorde() que recorre el campo
- utilizando un recorrido de Sur a Norte y de Oeste a Este procesando cada*/
- /* Llenar el Tablero con una bola azul menos en la
- fila superior*/
- function estaEnBorde (){
- return (not puedeMover (Norte ))
- }
- procedure IrAlBorde(dir){
- while (puedeMover (dir)){
- Mover (dir)}
- }
- procedure IrASiguienteCelda (){
- if (not puedeMover (Este))
- {
- Mover (Norte)
- IrAlBorde (Oeste)}
- else
- {Mover (Este)}
- }
- procedure ProcesarCampoSinBorde (){
- IrAlOrigen()
- while (not estaEnBorde ())
- {
- //Poner(Azul) lo uso para saber si recorre el campo
- ProcesarHectarea()
- IrASiguienteCelda()
- }
- }
- /* Ejercicio 4 Todas las hectareas en el borde Norte requeriran de una adaptacion especial que permitira que los animales actualmente presentes puedan permanecer en la hectarea sin ponerla en peligro. Para esta adaptacion programa
- los siguientes procedimientos*/
- /*(a) Implementa el procedimiento AdaptarHectarea() que construye las construcciones
- necesarias y/o siembra los cultivos necesarios para que la hectarea deje de estar
- en peligro. Precondicion: la hectarea actual esta en peligro.*/
- procedure AgregaContenido(cant,color){
- repeatWith i in 1..cant
- {Poner(color)}
- }
- procedure AdaptarCultivos()
- {
- if (cantidadDeAnimales()>cantidadDeCultivos())
- {
- equiparacultivos:= cantidadDeAnimales()-cantidadDeCultivos()
- }
- AgregaContenido(equiparacultivos ,Verde)
- }
- function adaptarConstrucciones()
- {
- if ((cantidadDeAnimales()>=cantidadDeConstrucciones()*3) && (cantidadDeConstrucciones()>0))
- {
- equiparaconstruccion:= cantidadDeAnimales()-cantidadDeConstrucciones()
- }
- else
- {
- if (cantidadDeAnimales()>=cantidadDeConstrucciones()*3 && cantidadDeConstrucciones()==0)
- {
- equiparaconstruccion:= 0
- }
- else
- {
- if (cantidadDeAnimales()<=cantidadDeConstrucciones()*3 )
- {
- equiparaconstruccion:= 0
- }
- }
- }
- return (equiparaconstruccion)
- }
- procedure AdaptarConstrucciones()
- {
- equiparaconstruccion:=adaptarConstrucciones()
- AgregaContenido(equiparaconstruccion ,Negro)
- }
- procedure AdaptarHectarea()
- {
- AdaptarCultivos()
- AdaptarConstrucciones()
- }
- /*(b) Implementa el procedimiento ProcesarHectareaDeBorde() que adapta la hectarea
- si esta se encuentra en peligro. Precondicion: no tiene.*/
- procedure ProcesarHectareaDeBorde()
- {
- if (hectareaEnPeligro()){
- AdaptarHectarea()
- }
- }
- /*(c) Implementa el procedimiento ProcesarBorde() que recorre el borde Norte procesando
- cada hecetarea de borde*/
- procedure IrASiguienteCeldaEste ()
- {
- if ( puedeMover (Este))
- {
- Mover (Este)
- }
- }
- procedure ProcesarBorde()
- {
- IrAlBorde(Norte)
- IrAlBorde(Oeste)
- ProcesarHectareaDeBorde()
- while (puedeMover(Este)==True)
- {
- Mover(Este)
- ProcesarHectareaDeBorde()
- }
- }
- /*Ejercicio 5
- Para finalizar, programa el procedimiento ProcesarCampo() que procesa el campo
- por completo. Precondicion: no tiene.*/
- procedure ProcesarCampo(){
- ProcesarCampoSinBorde ()
- ProcesarBorde()
- }
- procedure Main(){
- ProcesarCampo()
- }
Advertisement
Add Comment
Please, Sign In to add comment