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
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)||
(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
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.
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