Si vienes a la programación desde una base matemática, este detalle sutil puede atraparte fácilmente.

C++ es un lenguaje de programación ampliamente utilizado, pero también uno en el que los errores de programación son más comunes. Muchos de estos errores se deben a errores lógicos. En particular, los errores cometidos durante las operaciones de comparación pueden afectar la precisión y confiabilidad de su código.

El lenguaje C++ tiene un error de comparación particular que muchos desarrolladores nuevos pasan por alto. Este error resulta de una comprensión incorrecta de cómo funcionan los operadores al realizar comparaciones múltiples. Descubra cómo evitar este error común y por qué ocurre en primer lugar.

Comparaciones en C++

El lenguaje de programación C++ ofrece muchas características y herramientas diferentes, junto con operaciones básicas como operadores de comparación. Los operadores de comparación son operaciones especiales en lenguajes de programación que puede usar para comparar datos entre sí. Los desarrolladores usan estos operadores con bastante frecuencia, especialmente al crear algoritmos.

instagram viewer

Puede ver operadores de comparación en muchos ejemplos diferentes en la vida diaria. Por ejemplo, cuando compra en el supermercado, tiene en cuenta estos operadores para comparar precios. Si el precio de un producto es más bajo que el otro, elige ese producto.

Puede ver los operadores de comparación en declaraciones if-else Muy a menudo. Los operadores de comparación son el lugar al que acudir para comprobar si un valor es mayor, menor o igual que otro valor. Hay un detalle muy pequeño pero importante que no debes pasar por alto. Los resultados de las expresiones de comparación devuelven verdadero o falso, que son valores booleanos. Estos valores son uno de los componentes básicos de la estructura de control en la programación.

Por ejemplo, en el lenguaje de programación C++, el "==El operador comprueba si dos valores son iguales. Si los valores son iguales, el resultado devuelve verdadero. De lo contrario, el resultado será falso.

si (a == b)
{
devolververdadero;
}
demás
{
devolverFALSO;
}

Un ejemplo de un problema de comparación

Uno de los errores comunes que cometen los principiantes de C++ es el uso de operadores de comparación. Estos operadores permiten a los programadores comparar dos valores y realizar diferentes operaciones en función del resultado de esa comparación. Sin embargo, el uso incorrecto de estos operadores puede provocar errores inesperados.

Por ejemplo, aunque la expresión 3 < 15 < 10 es matemáticamente incorrecta, C++ considera que su resultado es verdadero. Puede demostrar esto escribiendo el siguiente programa de prueba simple.

Primero, crea un archivo llamado prueba.cpp. Abra este archivo usando su editor de código favorito y agréguele el siguiente código.

#incluir
En t un = 15;

En tprincipal()
{
si (3 < un < 10)
{
estándar::cout << "fu" << estándar::final;
}
demás
{
estándar::cout << "abucheo" << estándar::final;
}

devolver0;
}

Puede usar este comando para compilar y ejecutar el código:

g++ prueba.cpp -o Prueba

Ahora tienes un programa llamado Prueba. Ejecute el programa y examine su salida.

C++ consideró que 3 < 15 < 10 era cierto al ejecutar este programa. ¿Por qué podría salir el resultado de esta manera, a pesar de que es una afirmación matemáticamente incorrecta?

Causas del problema de comparación en C++

Como la mayoría de los lenguajes de programación, C++ lee el código de izquierda a derecha. Cada operador de comparación produce un valor booleano. Los valores booleanos no solo significan verdadero y falso; tienen un equivalente matemático.

El principio de funcionamiento de un la computadora depende de unos y ceros. Para una computadora, el resultado de algo es verdadero o falso. Los programas de computadora generalmente tratan el número 1 como verdadero y el número 0 como falso.

Examine el problema de comparación nuevamente y lea el enunciado de izquierda a derecha; Verás que hay dos comparaciones diferentes. La primera comparación es entre los números 3 y 15. Este es un valor verdadero porque 3 es menor que 15.

La segunda comparación es entre ese resultado y el número 10. Dado que necesita realizar una comparación numérica, C++ convierte silenciosamente el valor verdadero booleano en 1. 1 es menor que 10, por lo que el resultado general es verdadero.

En conclusión, aunque parezca una falacia matemática, esta afirmación es cierta para C++ y computadoras.

Cómo resolver problemas de comparación en C++

C++, junto con la mayoría de los otros lenguajes de programación, usa una sintaxis diferente para la comparación lógica que las matemáticas tradicionales. La expresión matemática 3 < a < 15 significa que “3 es menor que a y a es menor que 15.” Sin embargo, como ha visto, C++ interpreta esa expresión de manera diferente.

Para representar y en C++, use el operador &&. Luego puede encadenar expresiones booleanas y construir lógica usando operadores como && para representar Y, || para representar OR, y ! para representar NO. Idiomas como Java usa los mismos operadores lógicos.

Usando el operador lógico correcto, puede corregir el error en el ejemplo anterior:

#incluir
En t un = 15;

En tprincipal()
{
si (3 < un && un < 10)
{
estándar::cout << "fu" << estándar::final;
}
demás
{
estándar::cout << "abucheo" << estándar::final;
}

devolver0;
}

Ahora este código probará si el valor a es mayor que 3 y si el valor a es menor que 10. Compile y ejecute el programa y observe el resultado.

El ejemplo anterior imprimió "foo", pero el programa ahora imprime "boo", como se pretendía. El valor booleano del lado izquierdo de la comparación (3 < a) es verdadero. El valor del lado derecho (a < 10) es falso. Desde verdadero y falso es siempre FALSO, la expresión general se evalúa como falsa, por lo que la condición falla y el demás carreras de bloques.

Intenta cambiar el AND (&&) operador a un OR (||) y observando el diferente resultado.

La importancia de las comprobaciones lógicas en C++

Las comparaciones lógicas en C++ implican el uso de valores booleanos y operadores de comparación. Asegúrese de utilizar los valores booleanos y los operadores de comparación correctos para controlar el funcionamiento de sus programas. Puede ser difícil detectar expresiones mal formadas porque C++ a menudo llevará a cabo un comportamiento diferente en lugar de fallar por completo.

Ahora sabe cómo los compiladores ignoran este problema y tratan cada comparación como un valor booleano al leer de izquierda a derecha. Esté atento a este problema en cualquier idioma que utilice y aprenda a reconocer sus efectos para poder estar un paso por delante.