martes, 10 de febrero de 2009

Ejercicio 10. Sentencias ifelse. Procedimientos con retorno (to-report)


En el ejercicio 9 introdujimos las sentencias condicionales if. En este ejercicio utilizaremos la sentencia condicional ifelse.

Si recordamos, cuando empleábamos la sentencia if, si se cumplía la condición que proseguía a if, se ejecutaban un conjunto de comandos que escribíamos entre corchetes, y, si no se cumplía, no se hacía nada: el programa ignoraba los comandos escritos entre corchetes.

La filosofía de la sentencia ifelse consiste en que si se cumple una determinada condición, se ejecutarán una serie de comandos (al igual que ocurría con if) pero si no se cumple, en lugar de no hacer nada, se ejecutarán otra serie de comandos. Su sintaxis es la que se muestra a continuación:
ifelse condición
[
;; comandos que se ejecutan si se cumple la condición
]
[
;; comandos que se ejecutan si no se cumple la condición]
]

Con procedimientos con retorno, nos referimos a aquellos que devuelven cierto valor al procedimiento que les ha llamado.

Un procedimiento con retorno (a diferencia de un procedimiento convencional) comienza con la palabra clave to-report y termina con la palabra end. La variable o valor que devuelve al procedimiento llamante va precedido de la palabra clave report.

La sintaxis genérica de este tipo de procedimientos es la que se muestra a continuación:

to-report nombre_del_procedimiento [valor_recibido_del_procedimiento_llamante]
;; comandos
;; [...]

report valor_resultante
end


Aclaremos todo esto con un programa sencillo: elaboraremos un procedimiento que recibirá un número y nos devolverá su valor absoluto.

El código es el siguiente (escríbelo en la pantalla de procedimientos):
to-report valor_absoluto [numero]
ifelse numero >= 0
[
report numero
]
[
report (-1) * numero
]
end

A continuación, escribe lo siguiente en la ventana de comandos, para probar el correcto funcionamiento del procedimiento que has elaborado:

show valor_absoluto (5)
show valor_absoluto (-5)

2 comentarios:

hiram_economia dijo...

como estas primero qeu nada gracias por tus explicaciones que de mucha ayuda me han servido, ahora:

tengo un problema en este ejercico y el siguiente
- en este ejercicio al anotar el (-1) el procedures me aparece que el comando no esta en el diccionario de netlogo

-y en el siguiente ejercicio despues de ejecutar la notacion em dice que nada llamado edad ha sido explicado

que hago, please help me
de antemano gracias

DP dijo...

Hola hiram_economia

Con respecto a tu primera pregunta (ejercicio 10), ¿qué versión de Netlogo estás usando? Todos los ejemplos de este tutorial se han programado con la versión 4.0.4. En cualquier caso, puedes probar a dejar un espacio entre el menos y el uno. Es decir, en vez de escribir

report (-1) * numero

prueba a escribir:

report (- 1) * numero

Coméntame si se ha solucionado tu problema así.