Cita:
Originalmente Escrito por rgaa3005
hay 2 cosas que no he logrado idear como ejecutar y es porque creo que no estoy haciéndolo de la manera correcta. Que pasa si entro a la habitación y quiero dar un comando más largo que tenga más de una orden, por ejemplo: "enciende el tv y el aire de la sala".
|
Creo que la solución a este problema es sencilla. Para chequear la orden verbal, no utilices estructuras If-Else-Else-Endif sino varias estructuras individuales y sucesivas de tipo If-Endif, del modo siguiente:
Código:
- Si %avcomm ~ *tv*/*televisión*/*televisor* And+ %avcomm~*sala*/*salita*
- Enviar el comando de encender la tv de la sala, si %avcomm ~ *encender*/*enciende*
- Enviar el comando de apagar la tv de la sala Si %avcomm ~ *apagar/apaga*
- Endif
- Si %avcomm=*aire* And+ %avcomm=*sala*/*salita*
- Enviar el comando de encender el aire de la sala, si %avcomm ~ *encender*/*enciende*
- Enviar el comando de apagar el aire de la sala Si %avcomm ~ *apagar/apaga*
- Endif
De este modo te funcionará bien la orden "enciende el tv y el aire de la sala", y puedes añadir más estructuras independientes para otros aparatos o para otras funciones (de los mismos aparatos).
Has planteado un sistema que no tiene en cuenta el orden de las palabras, por lo cual se montaría un buen follón al decir "enciende el tv y apaga el aire de la sala". La tarea no detecta cuál aparato hay que encender y cuál hay que apagar. Te sugiero que previamente pongas algún chequeo para evitar órdenes que incluyan información contradictoria, del tipo siguiente:
Código:
- Si %avcomm ~ *encender*/*enciende* And+ %avcomm ~*apagar*/*apaga*
- Emitir mensaje de error.
- Detener tarea.
- Finsi
Cita:
Originalmente Escrito por rgaa3005
Lo otro que no se me ocurre es que tal si le digo "pon el canal 310", recordemos que en un control marcar el 310 implicaría 3 ordenes diferentes como marcar el 3, marcar el 1 y marcar el 0
|
Yo probaría con el siguiente esquema:
Código:
- Si %avcomm ~ *pon*/*poner* And+ %avcomm~*canal*
- Localizar y aislar la serie numérica que va justo detrás de la palabra "canal" ("310", en el ejemplo)
- Comprobar que el número es válido (supierior a cero e inferior a un millón o lo que corresponda).
- Detectar cuántos dígitos tiene esa serie numérica (3, en este ejemplo)
- Bucle for para cada uno de esos dígitos
- Enviar el comando u orden correspondiente a ese dígito.
- Fin del bucle For
- Endif
Espero que lo hayas entendido y te parezca una buena opción. Si necesitas ayuda con los detalles, pues vuelve a preguntar.