Ver Mensaje Individual
  #4  
Viejo 09/06/16, 00:21:09
Avatar de Caravantes
Caravantes Caravantes no está en línea
Usuario muy activo
Mensajes: 2,200
Compra y venta: (1)
 
Fecha de registro: feb 2011
Mensajes: 2,200
Modelo de smartphone: Samsung Galaxy S9
Versión de ROM: Android 8
Tu operador: Lowi
Mencionado: 59 comentarios
Tagged: 4 hilos
Cita:
Originalmente Escrito por rgaa3005 Ver Mensaje
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 Ver Mensaje
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.

Última edición por Caravantes Día 09/06/16 a las 00:29:29
Responder Con Cita