albertohilal

Clase 6 granja ejercicio 3

Sep 21st, 2017
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.47 KB | None | 0 0
  1. /*Funciones para denotar los colores de cada elemento*/
  2.  
  3. function colorDeAnimales() {
  4. return(Rojo)
  5. }
  6.  
  7. function colorDeConstrucciones() {
  8. return(Negro)
  9. }
  10.  
  11. function colorDeCultivos() {
  12. return(Verde)
  13. }
  14.  
  15. function colorDeAgua() {
  16. return(Azul)
  17. }
  18.  
  19. /*Funciones para denotar las cantidades de cada
  20. elemento presentes en la hectarea actual*/
  21.  
  22. function cantidadDeAnimales() {
  23. return(nroBolitas(colorDeAnimales()))
  24. }
  25.  
  26. function cantidadDeConstrucciones() {
  27. return(nroBolitas(colorDeConstrucciones()))
  28. }
  29.  
  30. function cantidadDeCultivos() {
  31. return(nroBolitas(colorDeCultivos()))
  32. }
  33.  
  34. function cantidadDeAgua() {
  35. return(nroBolitas(colorDeAgua()))
  36. }
  37. /////////////////////////////////////////////////////////
  38.  
  39. /*a- Programa la funcion cultivoEnPeligro() que indicara
  40. True si en la hectarea actual hay mas animales que cultivos.
  41. Tener en cuenta que si no hay cultivos esta funcion indicara
  42. False sin importar la cantidad de animales que haya
  43. en la celda.*/
  44.  
  45. function hayCultivos(){
  46. return (nroBolitas(Verde)>0)
  47. }
  48.  
  49. function masAnimalesQueCultivos(){
  50. return (cantidadDeAnimales()>cantidadDeCultivos())
  51. }
  52.  
  53. function cultivoEnPeligro() {
  54. return (hayCultivos() && masAnimalesQueCultivos())
  55. }
  56.  
  57.  
  58. /*b- Programa la funcion ConstruccionesEnPeligro()
  59. que indicara True si en la hectarea actual
  60. la cantidad de animales triplica la cantidad de construcciones
  61. Tener en cuenta que si no hay construcciones
  62. esta funcion indicara False sin importar la
  63. cantidad de animales que haya en la celda.*/
  64.  
  65. function hayConstrucciones(){
  66. return (nroBolitas(Negro)>0)
  67. }
  68.  
  69. function animalesTriplicaConstruccion(){
  70. return (cantidadDeAnimales()>=cantidadDeConstrucciones()*3)
  71. }
  72.  
  73. function construccionesEnPeligro(){
  74. return (hayConstrucciones()&& animalesTriplicaConstruccion())
  75. }
  76.  
  77. /*c- Programa la funcon hectareaEnPeligro() que indicara
  78. True si la hectarea actual
  79. tiene construcciones en peligro o cultivos en peligro*/
  80.  
  81. function hectareaEnPeligro(){
  82. return (construccionesEnPeligro()|| cultivoEnPeligro())
  83. }
  84.  
  85. /*d- Programa la funcion hectareaEnPeligroAl(dir)
  86. que indicara True si la hectarea
  87. en direccion dir se encuentra en peligro.*/
  88.  
  89. procedure PuedeMoverDir(dir){
  90. if (puedeMover(dir))
  91. {Mover(dir)}
  92. }
  93.  
  94. function hectareaEnPeligroAl(dir){
  95. //Mover(dir)
  96. PuedeMoverDir(dir)
  97. return(hectareaEnPeligro())
  98. }
  99.  
  100. ///////////////////////////////////////////////
  101. /*Ejercicio 2
  102. Programa la funcion animalesExcedentes() que retorna
  103. la cantidad de animales que habria que sacar de la hectarea
  104. para que deje de estar en peligro.*/
  105.  
  106.  
  107. function excedenteAnimalesEnCultivos(){
  108. excedenCultivos:=(cantidadDeAnimales()-cantidadDeCultivos())
  109. return (excedenCultivos)
  110. }
  111.  
  112. function excedenteAnimalesEnConstrucciones(){
  113. if (cantidadDeConstrucciones()>0){
  114. excedenConstruccion:= ( cantidadDeAnimales()-cantidadDeConstrucciones()*3)}
  115. else
  116. {if (cantidadDeConstrucciones()==0){
  117. excedenConstruccion:= 0}
  118.  
  119. }
  120. return( excedenConstruccion)
  121. }
  122. //////////////
  123. function animalesExcedentes(){
  124. excedenConstruccion:= excedenteAnimalesEnConstrucciones()
  125. excedenCultivos:= excedenteAnimalesEnCultivos()
  126.  
  127.  
  128. if (excedenCultivos > excedenConstruccion){
  129. excedente :=(excedenCultivos)}
  130. else
  131. {if (excedenConstruccion>excedenCultivos){
  132. excedente := (excedenConstruccion)
  133. }
  134. { if (excedenConstruccion==excedenCultivos){
  135. excedente := (excedenConstruccion)
  136. }
  137. }
  138. }
  139. return(excedente)
  140. }
  141. ///////////////////////////////////////////////////////////////
  142. /*Ejercicio 3
  143. Para resolver los conflictos en el campo, programa los siguientes procedimientos:
  144. a- Implementa el procedimiento ResolverConflictoEnHectarea()
  145. que mueve los animales excedentes de una hectarea en peligro
  146. a una hectarea lindante con el siguiente criterio:
  147. Si hay hectarea al Este de la hectarea actual
  148. y ademas la hectarea al Este no esta en peligro,
  149. mueve los excedentes alli.
  150. Si no hay hectarea al Este o la hay pero esta en peligro,
  151. mueve el excedente al Norte
  152. sin importar el estado de esa hectarea.
  153. Precondiciones:
  154. La hectarea actual se encuentre en peligro.
  155. Hay una hectarea al Norte de la hectarea actual.*/
  156.  
  157.  
  158.  
  159. procedure MoverAnimalesExcedentesAl(dir){
  160. excedente := animalesExcedentes()
  161. repeatWith a in 1..excedente
  162. {Sacar(Rojo)}
  163. PuedeMoverDir(dir)
  164. repeatWith i in 1..excedente
  165. {Poner(Rojo)}
  166. }
  167.  
  168. procedure ResolverConflictoEnHectarea(){
  169. if(puedeMover(Este) && hectareaEnPeligroAl(Este)){
  170. MoverAnimalesExcedentesAl(Norte)}
  171. else
  172. {if(puedeMover(Este) == False)
  173. {MoverAnimalesExcedentesAl(Norte)}
  174.  
  175. if (hectareaEnPeligroAl(Este) == False)
  176. {MoverAnimalesExcedentesAl(Este)}
  177. }
  178.  
  179. }
  180.  
  181. /*(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
  182. hectarea actual.*/
  183.  
  184. procedure ProcesarHectarea(){
  185. if (hectareaEnPeligro()){
  186. ResolverConflictoEnHectarea()}
  187. }
  188.  
  189. /*(c) Implementa el procedimiento ProcesarCampoSinBorde() que recorre el campo
  190. utilizando un recorrido de Sur a Norte y de Oeste a Este procesando cada*/
  191.  
  192. /* Llenar el Tablero con una bola azul menos en la
  193. fila superior*/
  194.  
  195. function estaEnBorde (){
  196. return (not puedeMover (Norte ))
  197. }
  198.  
  199. procedure IrAlBorde(dir){
  200. while (puedeMover (dir)){
  201.  
  202. Mover (dir)}
  203. }
  204.  
  205.  
  206. procedure IrASiguienteCelda (){
  207. if (not puedeMover (Este))
  208. {
  209. Mover (Norte)
  210. IrAlBorde (Oeste)}
  211. else
  212. {Mover (Este)}
  213. }
  214.  
  215. procedure ProcesarCampoSinBorde (){
  216. while (not estaEnBorde ())
  217. {
  218. ProcesarHectarea()
  219. //Poner(Azul)
  220.  
  221. IrASiguienteCelda()
  222. }
  223. }
  224.  
  225.  
  226. procedure Main (){
  227. IrAlOrigen()
  228.  
  229. ProcesarCampoSinBorde ()
  230.  
  231. }
Advertisement
Add Comment
Please, Sign In to add comment