[ Foro de C ]

Uso de && o ||

05-Aug-2014 18:39
Invitado (MiJiC)
1 Respuestas

Hola, en el apartado de "do....while", se propone hacer un ejercicio en el que se vayan metiendo números positivos hasta que se meta un cero o un negativo, finalmente te da la suma total.

Como veréis en el código a continuación, he usado "&&" para dar las condiciones a "while" y poder salir del bucle "do...while". Mi duda es que no acabo de entender el uso de "&&" o "||", si se supone que el uso de  "||" es equivalente a decir "una opción u otra" ¿porqué el programa solo hace caso de ambas opciones solo usando "&&"? Si se cambia "&&" por "||" el programa solo te da la suma total introduciendo cero, con un número negativo lo incluye en la suma.
//--------------------------------------------------------------------------------------------------------------------------------
#include <stdio.h>

int main()
{
int num;
int total;

printf("Introduce numeros positivos para sumarlos, para terminar introduce cero o un numero negativo.\n");

do
{
total=num+total;
scanf("%d",&num);
}
while ((num>0)&&(num!=0));//Si cambiamos && por ||, solo hace caso del cero para salir

printf("La suma total es %d.\n",total);

return 0;
}
//----------------------------------------------------------------------------------------------------------------------------

Gracias!


05-Aug-2014 21:20
Luis Torres (+18)

En primer lugar, necesitas inicializar las variables "num" y "total" a cero, de lo contrario puede que tengan valores basura que afectarán el resultado final de las operaciones que se realicen sobre estas variables.

No necesitas usar ni && ni || para que tu programa funcione correctamente, basta con que la condición del while sea:


} while (num>0);



De todas maneras, si quieres saber lo que pasa cuando usas ||, de la siguiente manera:


} while ( (num>0) || (num!=0));


Te puedo decir que, con un || existen tres posibilidades de que ésta sea verdadera y una de que sea falsa:
Será verdadera cuando:
  1.- La condición de la izquierda y la de la derecha sean (ambas) verdaderas.
  2.- La condición de la izquierda sea verdadera y, la de la derecha falsa.
  3.- La condición de la izquierda sea falsa y, la de la derecha verdadera.
Y, será falsa cuando:
  4.- La condición de la izquierda y la de la derecha sean (ambas) falsas.
Veamos lo que sucede al momento de ingresar un número negativo. Si "num" es negativo:
  La condición de la izquierda (num>0) será falsa y, la condición de la derecha (num!=0) será verdadera, nos encontramos en el caso 3, por lo tanto la condición general será evaluada como verdadera y, se ejecutará de nuevo el ciclo do-while, sumando el número negativo al total.

Espero que te haya servido de orientación.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)