albertohilal

Clase 6 granja ejercicio 5

Sep 26th, 2017
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.66 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 funcion 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. return (cantidadDeAnimales()-cantidadDeCultivos())
  109. }
  110.  
  111. function excedenteAnimalesEnConstrucciones(){
  112. return( cantidadDeAnimales()-cantidadDeConstrucciones()*3)
  113. }
  114. //////////////
  115. function animalesExcedentes(){
  116. if (excedenteAnimalesEnCultivos() > excedenteAnimalesEnConstrucciones()){
  117. excedente :=(excedenteAnimalesEnCultivos()-excedenteAnimalesEnConstrucciones())}
  118. else
  119. {if (excedenteAnimalesEnConstrucciones()>excedenteAnimalesEnCultivos()){
  120. excedente := (excedenteAnimalesEnConstrucciones()-excedenteAnimalesEnCultivos())
  121. }
  122. { if (excedenteAnimalesEnConstrucciones()==excedenteAnimalesEnCultivos()){
  123. excedente := (excedenteAnimalesEnConstrucciones())
  124. }
  125. }
  126. }
  127. return(excedente)
  128. }
  129. ///////////////////////////////////////////////////////////////
  130. /*Ejercicio 3
  131. Para resolver los conflictos en el campo, programa los siguientes procedimientos:
  132. a- Implementa el procedimiento ResolverConflictoEnHectarea()
  133. que mueve los animales excedentes de una hectarea en peligro
  134. a una hectarea lindante con el siguiente criterio:
  135. Si hay hectarea al Este de la hectarea actual
  136. y ademas la hectarea al Este no esta en peligro,
  137. mueve los excedentes alli.
  138. Si no hay hectarea al Este o la hay pero esta en peligro,
  139. mueve el excedente al Norte
  140. sin importar el estado de esa hectarea.
  141. Precondiciones:
  142. La hectarea actual se encuentre en peligro.
  143. Hay una hectarea al Norte de la hectarea actual.*/
  144.  
  145.  
  146.  
  147. procedure MoverAnimalesExcedentesAl(dir){
  148. excedente := animalesExcedentes()
  149. repeatWith a in 1..excedente
  150. {Sacar(Rojo)}
  151. PuedeMoverDir(dir)
  152. repeatWith i in 1..excedente
  153. {Poner(Rojo)}
  154. PuedeMoverDir(-dir)
  155. }
  156.  
  157. procedure ResolverConflictoEnHectarea(){
  158. if(puedeMover(Este) && hectareaEnPeligroAl(Este)){
  159. MoverAnimalesExcedentesAl(Norte)}
  160. else
  161. {if(not puedeMover(Este))
  162. {MoverAnimalesExcedentesAl(Norte)}
  163.  
  164. if (not hectareaEnPeligroAl(Este))
  165. {MoverAnimalesExcedentesAl(Este)}
  166. }
  167.  
  168. }
  169.  
  170. /*(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
  171. hectarea actual.*/
  172.  
  173. procedure ProcesarHectarea(){
  174. if (hectareaEnPeligro()){
  175. ResolverConflictoEnHectarea()}
  176. }
  177.  
  178. /*(c) Implementa el procedimiento ProcesarCampoSinBorde() que recorre el campo
  179. utilizando un recorrido de Sur a Norte y de Oeste a Este procesando cada*/
  180.  
  181. /* Llenar el Tablero con una bola azul menos en la
  182. fila superior*/
  183.  
  184. function estaEnBorde (){
  185. return (not puedeMover (Norte ))
  186. }
  187.  
  188. procedure IrAlBorde(dir){
  189. while (puedeMover (dir)){
  190.  
  191. Mover (dir)}
  192. }
  193.  
  194.  
  195. procedure IrASiguienteCelda (){
  196. if (not puedeMover (Este))
  197. {
  198. Mover (Norte)
  199. IrAlBorde (Oeste)}
  200. else
  201. {Mover (Este)}
  202. }
  203.  
  204. procedure ProcesarCampoSinBorde (){
  205. IrAlOrigen()
  206. while (not estaEnBorde ())
  207. {
  208. //Poner(Azul) lo uso para saber si recorre el campo
  209. ProcesarHectarea()
  210. IrASiguienteCelda()
  211. }
  212. }
  213.  
  214.  
  215. /* 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
  216. los siguientes procedimientos*/
  217.  
  218. /*(a) Implementa el procedimiento AdaptarHectarea() que construye las construcciones
  219. necesarias y/o siembra los cultivos necesarios para que la hectarea deje de estar
  220. en peligro. Precondicion: la hectarea actual esta en peligro.*/
  221.  
  222. procedure AgregaContenido(cant,color){
  223. repeatWith i in 1..cant
  224. {Poner(color)}
  225. }
  226.  
  227. procedure AdaptarCultivos()
  228. {
  229. if (cantidadDeAnimales()>cantidadDeCultivos())
  230. {
  231. equiparacultivos:= cantidadDeAnimales()-cantidadDeCultivos()
  232. }
  233. AgregaContenido(equiparacultivos ,Verde)
  234. }
  235.  
  236.  
  237. function adaptarConstrucciones()
  238. {
  239. if ((cantidadDeAnimales()>=cantidadDeConstrucciones()*3) && (cantidadDeConstrucciones()>0))
  240. {
  241. equiparaconstruccion:= cantidadDeAnimales()-cantidadDeConstrucciones()
  242. }
  243. else
  244. {
  245. if (cantidadDeAnimales()>=cantidadDeConstrucciones()*3 && cantidadDeConstrucciones()==0)
  246. {
  247. equiparaconstruccion:= 0
  248. }
  249. else
  250. {
  251. if (cantidadDeAnimales()<=cantidadDeConstrucciones()*3 )
  252. {
  253. equiparaconstruccion:= 0
  254. }
  255. }
  256. }
  257. return (equiparaconstruccion)
  258.  
  259. }
  260.  
  261. procedure AdaptarConstrucciones()
  262. {
  263. equiparaconstruccion:=adaptarConstrucciones()
  264. AgregaContenido(equiparaconstruccion ,Negro)
  265. }
  266.  
  267. procedure AdaptarHectarea()
  268. {
  269. AdaptarCultivos()
  270. AdaptarConstrucciones()
  271. }
  272.  
  273. /*(b) Implementa el procedimiento ProcesarHectareaDeBorde() que adapta la hectarea
  274. si esta se encuentra en peligro. Precondicion: no tiene.*/
  275.  
  276. procedure ProcesarHectareaDeBorde()
  277. {
  278. if (hectareaEnPeligro()){
  279. AdaptarHectarea()
  280. }
  281. }
  282.  
  283. /*(c) Implementa el procedimiento ProcesarBorde() que recorre el borde Norte procesando
  284. cada hecetarea de borde*/
  285.  
  286.  
  287. procedure IrASiguienteCeldaEste ()
  288. {
  289. if ( puedeMover (Este))
  290. {
  291. Mover (Este)
  292. }
  293. }
  294.  
  295. procedure ProcesarBorde()
  296. {
  297. IrAlBorde(Norte)
  298. IrAlBorde(Oeste)
  299. ProcesarHectareaDeBorde()
  300. while (puedeMover(Este)==True)
  301. {
  302. Mover(Este)
  303. ProcesarHectareaDeBorde()
  304. }
  305. }
  306.  
  307. /*Ejercicio 5
  308. Para finalizar, programa el procedimiento ProcesarCampo() que procesa el campo
  309. por completo. Precondicion: no tiene.*/
  310.  
  311. procedure ProcesarCampo(){
  312. ProcesarCampoSinBorde ()
  313. ProcesarBorde()
  314. }
  315. procedure Main(){
  316. ProcesarCampo()
  317. }
Advertisement
Add Comment
Please, Sign In to add comment