TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: samshiel_pic en 07 de Agosto de 2011, 15:23:55

Título: Como puedo hacer esto??
Publicado por: samshiel_pic en 07 de Agosto de 2011, 15:23:55
Hola chicos tengo una duda. Tengo dos variables ("w" y "u") y cuando "u" se aproxima a +/-10 valores (10 valores por encima o 10 por debajo) de "w" entro en una función if. Vamos a ver si me explico mejor:

la variable "u" se incrementa o decrementa para aproximarse a "w" y cuando entra en el rango de +/-10 de "w" da la condicion para entrar en la función if. Yo lo tengo hecho de esta manera:

Código: C
  1. if ((w == u)||(w == u + 1)||(w == u + 2)||(w == u + 3)||(w == u + 4)||(w == u + 5)||(w == u + 6)||(w == u + 7)||(w == u + 8)||(w == u + 9)||(w == u + 10)||
  2. (w == u - 1)||(w == u - 2)||(w == u - 3)||(w == u - 4)||(w == u - 5)||(w == u - 6)||(w == u - 7)||(w == u - 8)||(w == u - 9)||(w == u - 10))

Es de una forma muy burra :z) :z) pero es la única manera en la que me funciona ya que he intentado de muchas maneras y no hay manera.  :5] :5]

Título: Re: Como puedo hacer esto??
Publicado por: esteban_68 en 07 de Agosto de 2011, 15:36:12
¿no te sirve usar lo siguiente?

if (    (w>=(u-10) ) && (w<=(u+10) )   ) {
   tu funcion
     }
Título: Re: Como puedo hacer esto??
Publicado por: samshiel_pic en 07 de Agosto de 2011, 15:48:08
pues si esteban_68 el problema era que esta encabezonado :z) en esta:
Código: C
  1. if  ((w>=(u-10))||(w<=(u+10)))
no se las veces que la he puesto así y nada. Así que opte por lo bestia  :D :D :D.
Gracias.
Título: Re: Como puedo hacer esto??
Publicado por: rivale en 07 de Agosto de 2011, 17:06:50
porque no pruebas con esto:

if(abs(u-w)<=10)
{


}


con que la diferencia sea menor que 10 se cumplen todas tus condiciones
Título: Re: Como puedo hacer esto??
Publicado por: martincnc en 07 de Agosto de 2011, 19:40:15
Hola samshiel_pic.

Fíjate que la solución que te propone esteban_68 hace uso de la función AND (&&), en cambio en tu replica usas la función OR (||) que siempre se cumple sin importar el valor de la variable.

Si con la solución propuesta por esteban_68 o rivale el programa sigue sin funcionar podes probar con dos IF anidados simples, o sea con una sola condición cada uno, y sin el uso del mayor/menor-igual por si ahí se encuentra el problema.

Código: [Seleccionar]
if (w>(u-11)){
      if (w<(u+11)){
                  //código
}
}

Después contanos como te fue, Saludos
Título: Re: Como puedo hacer esto??
Publicado por: KALLITOS en 07 de Agosto de 2011, 23:03:38
Con la condicional de esteban deberia funcionar.
Título: Re: Como puedo hacer esto??
Publicado por: samshiel_pic en 08 de Agosto de 2011, 04:16:37
Gracias chicos!!! las dos funcionan a la perfección. El problema era mio, en vez de poner la función AND (&&) ponía una OR (||) y no me daba cuenta.  :? Cuando llevas muchas horas de código estas tan saturado que no te percatas de cosas tan tontas. :5] :D

Gracias.