[C con Clase] Método de la burbuja (era: problemas con la posicion del puntero en un fichero, funciones fread, frwite, fseek etc.)

Salvador Pozo salvador en conclase.net
Mie Mar 21 20:38:17 CET 2012


El pasado 2012-03-21 19:12:37, Albert_Munich escribió:
 
A> Hola, una pregunta corta, que no he encontrado por internet.
A> trabajando con booleanas, que diferencia hay entre = y == ?

Hola:

En todos los lenguajes de programación existen diferencias entre asignaciones y comparaciones. C y C++ no son una excepción.

En algunos lenguajes, para diferenciar mejor las dos operaciones, se usan operadores diferentes. Este es el caso por el que preguntas.

El operador = es el de asignación. Se asigna al operando a la izquierda el valor de la expresión a la derecha, por ejemplo:
a = 10+2;
Asigna a "a" el resultado de evaluar la expresión 10+2, es decir, 12.

El operador == es el de comparación, el resultado de aplicar este operador a las expresiones a la derecha e izquierda de él es un valor booleano: true o false. Si las expresiones son equivalentes, el resultado es true, en caso contrario, false. Por ejemplo:
(10+2) == 12
Da como resultado true.
0 == 232
Da como resultado false.

A> es que dependiendo lo que pongo, mi programa se comporta muy diferente
A> palabraencontrada = false, o palabraencontrada == false?

Por supuesto que el resultado es diferente.

Si usas la primera expresión dentro de un if pasa lo siguiente:
1) Se asigna a palabraencontrada el valor false
2) La expresión obtenida se evalúa como un booleano, en este caso ya lo es, si no lo fuera se hace un casting (conversión de tipo). En este caso, el valor es false, siempre, independientemente del valor previo de palabraencontrada.

Si usas la segunda expresión dentro de un if, pasa esto:
1) Se compara el valor de palabraencontrada con false. Si son iguales, es decir, si palabraencontrada es false, el resultado es true, ya que son iguales, y la sentencia if se ejecuta. Si palabraencontrada es true, el resultado es false, ya que son distintas.

A> y dentro los while y if, que se ha de poner?
A> if (palabraencontrada=false) o if(palabraencontrada==false)
A> dependiendo si pongo 1 o 2 iguales el programa me cambia mucho, y como
A> tengo muchas booleanas, no puedo encontrar el error. alguien me lo podria
A> aclarar?

Eso es decisión tuya :)
Seguramente tendrás que usar la segunda.

Algunas notas y "trucos" más sobre este tema:

Cuando hagas comparaciones, si una de las expresiones es constante, es mejor ponerla en primer lugar. Por ejemplo:
a == 10 equivale a 10 == a
Sin embargo la segunda tiene una ventaja. Si por error ponemos sólo un "=", la segunda dará un error al compilar, ya que no es posible asignar valores a una constante.

Cuando compares con true o false, puedes ahorrarte la comparación, por ejemplo:

(a == true) equivale a usar (a)
(a == false) equivale a usar (!a)
(a != true) equivale a (!a)
(a != false) equivale a (a)

Hasta pronto.

-- 
Salvador Pozo (Administrador)
mailto:salvador en conclase.net


Más información sobre la lista de distribución Cconclase