• Martes 21 de Mayo de 2024, 12:18

Autor Tema:  No Compara Bien  (Leído 1781 veces)

saulillo

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
No Compara Bien
« en: Martes 29 de Enero de 2008, 16:50 »
0
Hola, en mi programa tengo 3 Forms, en el 3 tengo un StringGrid y quiero acceder a él desde el Form1, lo hace perfectamente pero hay una condicion que no se deberia de cumplir siempre y siempre se cumle. Mirar, tengo el siguiente codigo:

Código: Text
  1.  
  2. for(aux=1;aux<=nfilas;aux++)
  3. {
  4.    valor = StrToFloat(StringGrid1->Cells[colrec][aux];
  5.    
  6.    for(aux1=0;aux1<=nfilas2;aux1++)
  7.    {
  8.        min = StrToFloat(Form3->StringGrid1->Cells[0][aux1];
  9.        max = StrToFloat(Form3->StringGrid1->Cells[1][aux1];
  10.        nuval = (Form3->StringGrid1->Cells[2][aux1];
  11.        ShowMessage("valor: "+AnsiString(valor));
  12.  
  13.        if ((min <= vlaor) || (valor<=max))
  14.        {
  15.             StringGrid1->Cells[ncolum][aux] = nuval;
  16.             ShowMessage("min: "+AnsiString(min));
  17.             ShowMessage("max: "+AnsiString(max));
  18.             ShowMessage("nuval: "+AnsiString(nuval));
  19.        }
  20.    }
  21. }
  22.  
  23.  

Pues bien el problema funciona bien hasta que llega al if, ahi la condicion se cumple siempre. Debo añadir que las variables min, max y valor son float, es decir, comparo 2 float y siempre se cumple la condicion. En los ShowMessage veo que las variables toman los valores correspondientes. Os pongo un ejemplo.

En una de las iteraciones, valor=30, min =1, max=5. La condicion no se cumple, pero entra en el if. Alguien me puede ayudar y decirme que hago mal??

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: No Compara Bien
« Respuesta #1 en: Martes 29 de Enero de 2008, 19:00 »
0
Citar
En una de las iteraciones, valor=30, min =1, max=5. La condicion no se cumple, pero entra en el if. Alguien me puede ayudar y decirme que hago mal??

Creo que estas confundido con el uso de operadores logicos, menciones que la condicion no se cumple pero en realidad SI se cumple, pues estas utilizando un "or" (||):

la tabla de verdad del or:

v o v = v
v o f = v
f o v = v
f o f = f

la unica vez que es falso un or, es cuando los dos valores son falsos, y tu tienes:


min <= valor
1 <= 30 VERDADERO

por lo tanto, al haber un verdadero, toda la condicion es verdadera, tal como puedes ver en la tabla de arriba.

probablemente lo que tu quieres es un "and" (o sea un &&, pero estoy especulando). Si lo que tu quieres es que la variable valor este entre min "y" max, la condicion deberia ser:

Código: Text
  1.  
  2. if ((min &#60;= valor) && (valor&#60;=max))
  3.  
  4.  

O bien, si realmente era un "or" lo que querias, quizas equivocaste el nombre de la variable, pues pusiste vlaor en lugar de valor (pero apuesto a que lo que querias era un "and").

Bueno, ya me diras.

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: No Compara Bien
« Respuesta #2 en: Martes 29 de Enero de 2008, 19:02 »
0
Duplicado borrado

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

saulillo

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: No Compara Bien
« Respuesta #3 en: Martes 29 de Enero de 2008, 19:06 »
0
Gracias por responder, era eso. Pensaba q lo tenia bien porque tb probe a poner && y no salia, debo de haber tocado algo mas para q ahora funcione.

Gracias.