Taller 13
Nombre: Camilo Rebolledo Curso:10-01
13 Condiciones compuestas con operadores lógicos &
relacionales
Hasta ahora hemos visto los operadores:
relacionales (>, <, >=, <= , ==, !=)
matemáticos (+, -, *, /, %)
pero nos están faltando otros operadores imprescindibles:
lógicos (&&, ||).
Estos dos operadores se emplean fundamentalmente en las estructuras condicionales para agrupar
varias condiciones simples.
Operador &&
¿Traducido se lo lee cómo? Y?. Si la Condición 1 es verdadera Y la condición 2 es verdadera luego
ejecutar la rama del verdadero.
Cuando vinculamos dos o más condiciones con el operador ?&&?, las dos condiciones deben ser
verdaderas para que el resultado de la condición compuesta de Verdadero y continúe por la rama del
verdadero de la estructura condicional.
La utilización de operadores lógicos permiten en muchos casos plantear algoritmos más cortos y
comprensibles.
problema:
Confeccionar un programa que lea por teclado tres números distintos y nos muestre el mayor
Diagrama de flujo:
Este ejercicio está resuelto sin emplear operadores lógicos en un concepto anterior del tutorial. La
primera estructura condicional es una ESTRUCTURA CONDICIONAL COMPUESTA con una
CONDICION COMPUESTA.
Podemos leerla de la siguiente forma:
Si el contenido de la variable num1 es mayor al contenido de la variable num2 Y si el contenido de la
variable num1 es mayor al contenido de la variable num3 entonces la CONDICION COMPUESTA
resulta Verdadera.
Si una de las condiciones simples da falso la CONDICION COMPUESTA da Falso y continua por la
rama del falso.
Es decir que se mostrará el contenido de num1 si y sólo si num1>num2 y num1>num3.
En caso de ser Falsa la condición, analizamos el contenido de num2 y num3 para ver cual tiene un
valor mayor.
En esta segunda estructura condicional no se requieren operadores lógicos al haber una condición
simple.
Programa:
import [Link];
public class CondicionesCompuestas1 {
public static void main(String[] ar) {
Scanner teclado=new Scanner([Link]);
int num1,num2,num3;
[Link]("Ingrese primer valor:");
num1=[Link]();
[Link]("Ingrese segundo valor:");
num2=[Link]();
[Link]("Ingrese tercer valor:");
num3=[Link]();
if (num1>num2 && num1>num3) {
[Link](num1);
} else {
if (num2>num3) {
[Link](num2);
}else {
[Link](num3);
}
}
}
}
Operador II
Traducido se lo lee como ?O?. Si la condición 1 es Verdadera O la condición 2 es Verdadera, luego
ejecutar la rama del Verdadero.
Cuando vinculamos dos o más condiciones con el operador ?Or", con que una de las dos condiciones
sea Verdadera alcanza para que el resultado de la condición compuesta sea Verdadero.
Problema:
Se carga una fecha (día, mes y año) por teclado. Mostrar un mensaje si corresponde al primer trimestre
del año (enero, febrero o marzo) Cargar por teclado el valor numérico del día, mes y año.
Ejemplo: dia:10 mes:1 año:2010.
Diagrama de flujo:
La carga de una fecha se hace por partes, ingresamos las variables dia, mes y año.
Mostramos el mensaje "Corresponde al primer trimestre" en caso que el mes ingresado por teclado
sea igual a 1, 2 ó 3.
En la condición no participan las variables día y año.
Programa:
import [Link];
public class CondicionesCompuestas2 {
public static void main(String[] ar) {
Scanner teclado=new Scanner([Link]);
int dia,mes,año;
[Link]("Ingrese nro de día:");
dia=[Link]();
[Link]("Ingrese nro de mes:");
mes=[Link]();
[Link]("Ingrese nro de año:");
año=[Link]();
if (mes==1 || mes==2 || mes==3) {
[Link]("Corresponde al primer trimestre");
}
}
}
13.1 operadores relacionales
Operadores relacionales. También denominados operadores binarios lógicos y de comparación, se
utilizan para comprobar la veracidad o falsedad de determinadas propuestas de relación. Las
expresiones que los contienen se denominan expresiones relacionales. Aceptan diversos tipos de
argumentos, y el resultado, que es la respuesta a la pregunta, es siempre del tipo cierto o falso, es
decir, producen un resultado booleano. Si la propuesta es cierta, el resultado es true (un valor
distinto de cero), si es falsa false (cero).
Operadores relacionales en C++
< Menor que
> Mayor que
<= Menor o igual que
>= Mayor o igual que
== Igual que (identidad)
! = Desigual que (desigualdad)
13.2 operadores lógicos
Operadores lógicos. Muy utilizados en Informática, Lógica proposicional y Álgebra booleana, entre
otras disciplinas. Los operadores lógicos nos proporcionan un resultado a partir de que se cumpla o
no una cierta condición, producen un resultado booleano, y sus operandos son también valores
lógicos o asimilables a ellos (los valores numéricos son asimilados a cierto o falso según su valor sea
cero o distinto de cero). Esto genera una serie de valores que, en los casos más sencillos, pueden
ser parametrizados con los valores numéricos 0 y 1. La combinación de dos o más operadores
lógicos conforma una función lógica.
Los operadores lógicos son tres; dos de ellos son binarios, el último (negación) es unario. Tienen una
doble posibilidad de representación en el estándar C++ actual: la representación tradicional que se
indica a continuación, y la natural introducida recientemente que se detalla más adelante.
Y lógico && AND
O lógico || OR
Negación lógica ! NOT
Las expresiones conectadas con los operadores && y || se evalúan de izquierda a derecha, y la
evaluación se detiene tan pronto como el resultado verdadero o falso es conocido (muchos
programas tienen una lógica que se basa en este propiedad).
13.3 condicionales compuestos
Cuando se presenta la elección tenemos la opción de realizar una actividad u otra. Es decir tenemos
actividades por el verdadero y por el falso de la condición. Lo más importante que hay que tener en
cuenta que se realizan las actividades de la rama del verdadero o las del falso, NUNCA se realizan las
actividades de las dos ramas.
Representación
gráfica:
En una estructura condicional compuesta tenemos entradas, salidas, operaciones, tanto por la rama
del verdadero como por la rama del falso.
Problema:
Realizar un programa que solicite ingresar dos números distintos y muestre por pantalla el mayor de
ellos.
Diagrama de flujo:
Se hace la entrada de num1 y num2 por teclado. Para saber cual variable tiene un valor mayor
preguntamos si el contenido de num1 es mayor (>) que el contenido de num2, si la respuesta es
verdadera vamos por la rama de la derecha e imprimimos num1, en caso que la condición sea falsa
vamos por la rama de la izquierda (Falsa) e imprimimos num2.
Como podemos observar nunca se imprimen num1 y num2 simultáneamente.
Estamos en presencia de una ESTRUCTURA CONDICIONAL COMPUESTA ya que tenemos
actividades por la rama del verdadero y del falso.
Programa:
import [Link];
public class EstructuraCondicionalCompuesta1 {
public static void main(String[] ar) {
Scanner teclado=new Scanner([Link]);
int num1,num2;
[Link]("Ingrese primer valor:");
num1=[Link]();
[Link]("Ingrese segundo valor:");
num2=[Link]();
if (num1>num2) {
[Link](num1);
} else {
[Link](num2);
}
}
}
Cotejemos el diagrama de flujo y la codificación y observemos que el primer bloque de llaves después
del if representa la rama del verdadero y el segundo bloque de llaves representa la rama del falso.
Compilemos el programa, si hubo errores sintácticos corrijamos y carguemos dos valores, como por
ejemplo:
Ingrese el primer valor: 10
Ingrese el segundo valor: 4
10
Si ingresamos los valores 10 y 4 la condición del if retorna verdadero y ejecuta el primer bloque.
Un programa se controla y corrige probando todos sus posibles resultados.
Ejecutemos nuevamente el programa e ingresemos:
Ingrese el primer valor: 10
Ingrese el segundo valor: 54
54
Cuando a un programa le corregimos todos los errores sintácticos y lógicos ha terminado nuestra tarea
y podemos entregar el mismo al USUARIO que nos lo solicitó.
13.4 análisis del problema
Consiste en entender de qué se trata el problema planteado y realizar su posible solución, tomando
en cuenta tres aspectos:
1. ¿Qué es lo que se pide?
2. ¿Cómo obtener lo que se pide?
3. ¿Qué se necesita para obtener los resultados pedidos?
13.5 código del problema
Los siguientes enlaces apuntan a soluciones a problemas comunes de todos los días que deberá
solucionar para que su código JavaScript se ejecute correctamente...
Errores comunes de principiante
Correcta ortografía y casing
Si su código no funciona y / o el navegador se queja de que algo no está definido, verifique que haya
escrito todos sus nombres de variables, nombres de funciones, etc. correctamente.
Algunas funciones comunes del navegador incorporado que causan problemas son:
Correcto Incorrecto
getElementsByTagName() getElementbyTagName()
getElementsByName() getElementByName()
getElementsByClassName() getElementByClassName()
getElementById() getElementsById()
Posición de punto y coma
Debes estar seguro de no colocar ningún punto y coma incorrectamente. Por ejemplo:
Correcto Incorrecto
[Link] = 'red'; [Link] = 'red;'
Funciones
Hay una serie de cosas que pueden salir mal con las funciones.
Uno de los errores más comunes es declarar una función, pero no llamarla a ninguna parte, Por
ejemplo:
function miFuncion() {
alert('Esta es mi funcion.');
};
Copy to Clipboard
Este código no hará nada a menos que lo llame, por ejemplo, con
miFuncion();
Copy to Clipboard
Alcance de la función
Recuerda que las funciones tienen su propio alcance — no puedes acceder a un valor de variable
establecido dentro de una función desde fuera de la función, a menos que haya declarado la variable
globalmente (es decir, no dentro de ninguna función), o retornar el valor fuera de la función.
Ejecución de código después de una declaración de retorno (Return)
Recuerde también que cuando devuelve un valor de una función, el intérprete de JavaScript sale de la
función — ningún código declarado después de que se ejecute la declaración de devolución (Return).
De hecho, algunos navegadores (como Firefox) le darán un mensaje de error en la consola del
desarrollador si tiene código después de una declaración de devolución. Firefox te ofrece "código
inalcanzable después de la declaración de devolución".
Más abajo podemos observar una función de saludo, posterior a retornar intentamos asignar a la
variable x, el valor de la propiedad que viene en la función. Esto nunca ocurrirá ya que posterior a
retornar un valor se sale del contexto función. En pocas palabras jamás ocurrir la asignación.
Ejemplo de una declaración posterior a una declaración de retorno:
function saludo(nombre){
return "Hola, " + nombre + " que bueno que volviste";
var x = nombre; //Esta linea jamas se ejecutara ya que viene despues de un retorno
Notación de objetos versus asignación normal
Cuando asigna algo normalmente en JavaScript, utiliza un solo signo igual, por ejemplo:
const miNumero= 0;
Copy to Clipboard
Esto no funciona en los Objetos, sin embargo, con los objetos, debe separar los nombres de los
miembros de sus valores mediante dos puntos y separar cada miembro con una coma, por ejemplo:
const miObjeto= {
nombre: 'Felipe',
edad: 27