Autor Tema: Como puedo hacer esto??  (Leído 1735 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado samshiel_pic

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 777
    • Electrónica·Ingenia
Como puedo hacer esto??
« 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]


Desconectado esteban_68

  • PIC12
  • **
  • Mensajes: 86
Re: Como puedo hacer esto??
« Respuesta #1 en: 07 de Agosto de 2011, 15:36:12 »
¿no te sirve usar lo siguiente?

if (    (w>=(u-10) ) && (w<=(u+10) )   ) {
   tu funcion
     }
« Última modificación: 07 de Agosto de 2011, 15:41:39 por esteban_68 »

Desconectado samshiel_pic

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 777
    • Electrónica·Ingenia
Re: Como puedo hacer esto??
« Respuesta #2 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.

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Como puedo hacer esto??
« Respuesta #3 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
"Nada es imposible, no si puedes imaginarlo"

Desconectado martincnc

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 352
Re: Como puedo hacer esto??
« Respuesta #4 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

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Como puedo hacer esto??
« Respuesta #5 en: 07 de Agosto de 2011, 23:03:38 »
Con la condicional de esteban deberia funcionar.
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado samshiel_pic

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 777
    • Electrónica·Ingenia
Re: Como puedo hacer esto??
« Respuesta #6 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.