TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Marttyn en 24 de Octubre de 2011, 14:03:02

Título: Es posible? if(MIN<Variable<MAX)
Publicado por: Marttyn en 24 de Octubre de 2011, 14:03:02
Lo que dice el titulo, estaba haciendo un programa que tiene que comprobar si un valor se encuentra dentro de un rango minimo y maximo.
Hasta ahora lo estoy haciendo asi:

Código: C
  1. if((MIN < Valor) && (Valor < MAX)){
  2. ....
  3. }

Pero me preguntaba si se podria hacer del siguiente modo y si funcionaria:
Código: C
  1. if(MIN < Valor < MAX){
  2. ....
  3. }

Como tengo que hacer esto unas cuantas veces y con diferentes rangos, de la segunda manera me queda un poco mas prolijo y entendible, e incluso puede que ahorre lineas de compilador :)

Salu2
Título: Re: Es posible? if(MIN<Variable<MAX)
Publicado por: NANO1985 en 24 de Octubre de 2011, 14:45:10
yo creo que si es posible... en mi caso lo hubiera hecho de la primera forma,... quizás por costumbre, pero la segunda creo que tambien es posible.
saludos
Título: Re: Es posible? if(MIN<Variable<MAX)
Publicado por: manwenwe en 24 de Octubre de 2011, 14:45:21
Si se puede entonces yo he perdido horas de vida jeje

¿Has probado a ver si compila? Yo jugaría que, en ANSI C, la sentencia if sólo evalua una única condición. Supongo que lo más fácil es que pruebes a ver si el compilador "se lo come".

De todas formas si lo que te molesta es que sea poco lejible, siempre tienes la opción de anidar (y tabular) que queda más clarito...

Código: [Seleccionar]
if(MIN<VALOR)
     if(MAX>VALOR)
          LoQueSea();


1 saludo.
Título: Re: Es posible? if(MIN<Variable<MAX)
Publicado por: Marttyn en 24 de Octubre de 2011, 14:50:05
Lo de anidar creo que lo veo peor para entender jeje
No probe a compilar porque el programa es mucho mas grande que eso, y tengo tantos cabos sueltos que si compilo me tira un monton de errores... y aunque compile no quiere decir que el resultado sea el esperado, y como preparar una simulacion me cuesta un monton de trabajo preferi preguntar  :mrgreen:
Título: Re: Es posible? if(MIN<Variable<MAX)
Publicado por: gera en 24 de Octubre de 2011, 14:55:30
No, la forma correcta de hacerlo en C es con el &&. Ya que evalua una condicion a la vez. Es molesto, es poco estetico, pero asi es C jeje.
Saludos!
Título: Re: Es posible? if(MIN<Variable<MAX)
Publicado por: Nocturno en 24 de Octubre de 2011, 15:03:18
Probablemente compile bien pero no funcione como esperas.

Si evalúa la primera condición MIN<VALOR antes que la segunda, asignará a esa condición un 0 o un 1 según sea su resultado, y este 0 o 1 será comparado con MAX.
Título: Re: Es posible? if(MIN<Variable<MAX)
Publicado por: Suky en 24 de Octubre de 2011, 15:23:47
Esto hace poco se había preguntado en el foro, como contesto Gera de forma completa en ese momento:

if((MIN < Valor) && (Valor < MAX))


Saludos!
Título: Re: Es posible? if(MIN<Variable<MAX)
Publicado por: Marttyn en 24 de Octubre de 2011, 15:32:27
Noc, suponia lo que tu dices... pero la esperanza es lo ultimo que se pierde :D
Pues seguire como iba, muchas gracias a todos!
Título: Re: Es posible? if(MIN<Variable<MAX)
Publicado por: Arte8bits en 25 de Octubre de 2011, 03:52:28
Hola,
prueba si te compila esto:

//Incluye esto en el .h
#define ESTA_EN_MEDIO(min, valor, max)        if((min < valor) && (valor < max))


Y luego usa libremente ESTA_EN_MEDIO(MIN, Valor, MAX) cuando quieras (incluyendo el .h)

Si necesitas algo en C que no éxiste... créatelo!

Saludos

---
http://www.javierlongares.com/arte-en-8-bits/
Título: Re: Es posible? if(MIN<Variable<MAX)
Publicado por: Geo en 25 de Octubre de 2011, 15:33:08
Hola,
prueba si te compila esto:

//Incluye esto en el .h
#define ESTA_EN_MEDIO(min, valor, max)        if((min < valor) && (valor < max))
Quedaría mejor si dejas el if fuera del #define, así:
Código: C
  1. #define ESTA_ENMEDIO( a, b, c ) ( ( a < b ) && ( b < c ) )
Para poder hacer algo como esto:
Código: C
  1. if ( ESTA_ENMEDIO( 5, 8, 10 ) )
  2.         {
  3.                 // Está en el intervalo
  4.         }
  5.         else
  6.         {
  7.                 // NO está en el intervalo
  8.         }
Ya luego verías cosas como que estuviera en el intervalo incluyendo los límites (<=) o no (<).

Nota: ¿sería posible que se revisaran los colores del resaltador de sintaxis? Creo que en estos casos no ayuda a la legibilidad, sino todo lo contrario :p.
Título: Re: Es posible? if(MIN<Variable<MAX)
Publicado por: Suky en 25 de Octubre de 2011, 21:21:50
Nota: ¿sería posible que se revisaran los colores del resaltador de sintaxis? Creo que en estos casos no ayuda a la legibilidad, sino todo lo contrario :p.

No, son propios del plugin GeSHI.

Saludos
Título: Re: Es posible? if(MIN<Variable<MAX)
Publicado por: Geo en 26 de Octubre de 2011, 01:24:21
Al menos el color de fondo, por ejemplo a blanco, con el gris creo que se pierden muchos colores.