Herramientas de usuario

Herramientas del sitio


curso-cpp:estructuras-selectivas

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
curso-cpp:estructuras-selectivas [2016/10/06 21:39]
santo [Más ejercicios]
curso-cpp:estructuras-selectivas [2017/10/29 19:28] (actual)
santo
Línea 1: Línea 1:
-======= Estructuras de control selectivas ​[En construcción] ​=======+======= Estructuras de control selectivas =======
  
 Hasta ahora, la lista de instrucciones de nuestro programa que se ejecutarán está **fija**: Esto es, siempre especificamos una lista de instrucciones,​ y **cada una de ellas** es ejecutada en orden, de arriba hacia abajo. Hasta ahora, la lista de instrucciones de nuestro programa que se ejecutarán está **fija**: Esto es, siempre especificamos una lista de instrucciones,​ y **cada una de ellas** es ejecutada en orden, de arriba hacia abajo.
Línea 13: Línea 13:
 La sintaxis (forma de escritura) de la instrucción if es la siguiente: La sintaxis (forma de escritura) de la instrucción if es la siguiente:
  
-<​code>​+<​code ​cpp>
 if (condicion) if (condicion)
 { {
     instruccion1;​     instruccion1;​
     instruccion2;​     instruccion2;​
-    ...+    ​//...
     instruccionFinal;​     instruccionFinal;​
 } }
Línea 27: Línea 27:
 Por ejemplo, el siguiente programa puede utilizarse para leer un número, y escribir en pantalla un mensaje de acuerdo a su signo: Por ejemplo, el siguiente programa puede utilizarse para leer un número, y escribir en pantalla un mensaje de acuerdo a su signo:
  
-<​code>​+<​code ​cpp>
 #include <​iostream>​ #include <​iostream>​
  
Línea 95: Línea 95:
 En efecto, cero es un número especial, el único entero que no es ni positivo ni negativo, y por lo tanto ''​0 < 0''​ y ''​0 > 0''​ son ambas **falsas**. Podemos entonces agregar este caso como un nuevo if en el programa: En efecto, cero es un número especial, el único entero que no es ni positivo ni negativo, y por lo tanto ''​0 < 0''​ y ''​0 > 0''​ son ambas **falsas**. Podemos entonces agregar este caso como un nuevo if en el programa:
  
-<​code>​+<​code ​cpp>
 #include <​iostream>​ #include <​iostream>​
  
Línea 134: Línea 134:
 Notar que en nuestra tercera condición, hemos utilizado por primera vez el operador ''​=='':​ Este operador no tiene **nada** que ver con el ''​='':​ Recordemos que el operador ''​=''​ se utiliza para la **asignación** de variables ("​meter valores en cajas"​). El ''​==''​ en cambio se utiliza para **expresar condiciones**,​ y funciona como la **igualdad matemática**. Notar que en nuestra tercera condición, hemos utilizado por primera vez el operador ''​=='':​ Este operador no tiene **nada** que ver con el ''​='':​ Recordemos que el operador ''​=''​ se utiliza para la **asignación** de variables ("​meter valores en cajas"​). El ''​==''​ en cambio se utiliza para **expresar condiciones**,​ y funciona como la **igualdad matemática**.
  
-El ''​==''​ es un ejemplo de los que de denominan //​operadores de comparación//​. Los veremos en más detalle muy pronto.+El ''​==''​ es un ejemplo de los que se denominan //​operadores de comparación//​. Los veremos en más detalle muy pronto.
  
 Veamos un segundo ejemplo de programa, que muestre un mensaje de acuerdo a la paridad del número ingresado: Veamos un segundo ejemplo de programa, que muestre un mensaje de acuerdo a la paridad del número ingresado:
  
-<​code>​+<​code ​cpp>
 int main() int main()
 { {
Línea 164: Línea 164:
 Es posible escribir lo siguiente: Es posible escribir lo siguiente:
  
-<​code>​+<​code ​cpp>
  
 if (condicion) if (condicion)
Línea 187: Línea 187:
 A continuación mostramos el ejemplo anterior de par o impar, reescrito utilizando la instrucción else: A continuación mostramos el ejemplo anterior de par o impar, reescrito utilizando la instrucción else:
  
-<​code>​+<​code ​cpp>
 int main() int main()
 { {
Línea 230: Línea 230:
 Hemos visto que la sintaxis (escritura) completa del ''​if''​ tiene la siguiente forma: Hemos visto que la sintaxis (escritura) completa del ''​if''​ tiene la siguiente forma:
  
-<​code>​+<​code ​cpp>
 if (condicion) if (condicion)
 { {
Línea 245: Línea 245:
 Veamos algunos ejemplos: Veamos algunos ejemplos:
  
-<​code>​+<​code ​cpp>
  
 // Escritura completa // Escritura completa
Línea 263: Línea 263:
 Los dos ejemplos anteriores son equivalentes,​ ya que hay una sola instrucción entre llaves. Notemos en cambio que los siguientes dos ejemplos **no** son equivalentes:​ Los dos ejemplos anteriores son equivalentes,​ ya que hay una sola instrucción entre llaves. Notemos en cambio que los siguientes dos ejemplos **no** son equivalentes:​
  
-<​code>​+<​code ​cpp>
  
 // Escritura completa // Escritura completa
Línea 296: Línea 296:
 Existe un peligro más cuando omitimos las llaves, y este peligro es el resultado de que en C++ la parte ''​else''​ sea opcional. Supongamos un código como el siguiente: Existe un peligro más cuando omitimos las llaves, y este peligro es el resultado de que en C++ la parte ''​else''​ sea opcional. Supongamos un código como el siguiente:
  
-<​code>​+<​code ​cpp>
 // Ejemplo 1 (resulta correcto) // Ejemplo 1 (resulta correcto)
 if (x > 0) if (x > 0)
Línea 320: Línea 320:
 Veamos a continuación entonces cómo escribir los ejemplos con la escritura completa con llaves: Veamos a continuación entonces cómo escribir los ejemplos con la escritura completa con llaves:
  
-<​code>​+<​code ​cpp>
 // Ejemplo 1 (con llaves, correcto) // Ejemplo 1 (con llaves, correcto)
 if (x > 0) if (x > 0)
Línea 354: Línea 354:
 ===== Ejercicios ===== ===== Ejercicios =====
  
-   * Escribir un programa que lea un numero, y nos diga si es múltiplo de 3 o no. +   ​* ​[[http://​juez.oia.unsam.edu.ar/#/​task/​multi_tres/​statement|Escribir un programa que lea un numero, y nos diga si es múltiplo de 3 o no.]] 
-   * Escribir un programa que lea dos palabras, y nos diga cuál viene primero en el diccionario. +   ​* ​[[http://​juez.oia.unsam.edu.ar/#/​task/​cual_va_primero/​statement|Escribir un programa que lea dos palabras, y nos diga cuál viene primero en el diccionario.]] 
-   * Escribir un programa que lea un número de año, y nos diga si es bisiesto.+   ​* ​[[http://​juez.oia.unsam.edu.ar/#/​task/​es_bisiesto/​statement|Escribir un programa que lea un número de año, y nos diga si es bisiesto.]]
  
 ===== Operadores lógicos ===== ===== Operadores lógicos =====
Línea 372: Línea 372:
 El operador ''​||'',​ denominado "​or",​ se utiliza para formar una condición compuesta en la cual se exige que **al menos una** de otras **dos** condiciones se cumpla. Así por ejemplo, cero será el único número que no cumple la condición ''​x > 0 || x < 0'':​ En esta condición se pide que x sea positivo o negativo. El único número que no cumple ninguna de ellas es el cero. Otro ejemplo es ''​x % 2 == 0 || x % 3 == 0'',​ en el cual se pide que x sea múltiplo de 2 o de 3. Además, si x resulta ser múltiplo de ambos (como por ejemplo, 12), la condición igualmente se cumple, pues con una sola que se cumpla basta, y si se cumplen las dos "​mejor"​. El operador ''​||'',​ denominado "​or",​ se utiliza para formar una condición compuesta en la cual se exige que **al menos una** de otras **dos** condiciones se cumpla. Así por ejemplo, cero será el único número que no cumple la condición ''​x > 0 || x < 0'':​ En esta condición se pide que x sea positivo o negativo. El único número que no cumple ninguna de ellas es el cero. Otro ejemplo es ''​x % 2 == 0 || x % 3 == 0'',​ en el cual se pide que x sea múltiplo de 2 o de 3. Además, si x resulta ser múltiplo de ambos (como por ejemplo, 12), la condición igualmente se cumple, pues con una sola que se cumpla basta, y si se cumplen las dos "​mejor"​.
  
-Finalmente, el operador ! se usa para invertir una condición dada, que generalmente deberá encerrarse entre paréntesis. Por ejemplo, ''​!(x ​0)''​ es completamente equivalente a ''​(x ​<= 0)''​. ''​!(x % 2 == 0 || x % 3 == 0)'',​ por ejemplo, estaría negando la condición anterior de que el número x sea múltiplo de 2 o de 3, y por lo tanto esta condición solamente será cierta cuando el número no sea múltiplo ni de 2 ni de 3.+Finalmente, el operador ! se usa para invertir una condición dada, que generalmente deberá encerrarse entre paréntesis. Por ejemplo, ''​!(x ​0)''​ es completamente equivalente a ''​(x ​>= 0)''​. ​Por otro lado, ''​!(x % 2 == 0 || x % 3 == 0)'',​ por ejemplo, estaría negando la condición anterior de que el número x sea múltiplo de 2 o de 3, y por lo tanto esta condición solamente será cierta cuando el número no sea múltiplo ni de 2 ni de 3.
  
 Utilizando estos operadores lógicos, podemos muchas veces resumir largas cadenas de ifs, en una sola condición compuesta más clara. Veamos por ejemplo el siguiente ejemplo para decidir si un año es bisiesto: Utilizando estos operadores lógicos, podemos muchas veces resumir largas cadenas de ifs, en una sola condición compuesta más clara. Veamos por ejemplo el siguiente ejemplo para decidir si un año es bisiesto:
  
-<​code>​+<​code ​cpp>
 #include <​iostream>​ #include <​iostream>​
  
Línea 408: Línea 408:
 Si bien es correcto, este código puede resumirse en el siguiente mucho más claro, utilizando expresiones lógicas: Si bien es correcto, este código puede resumirse en el siguiente mucho más claro, utilizando expresiones lógicas:
  
-<​code>​+<​code ​cpp>
 #include <​iostream>​ #include <​iostream>​
  
Línea 430: Línea 430:
 ===== El tipo bool ===== ===== El tipo bool =====
  
 +Ya hemos visto los tipos ''​int'',​ ''​string''​ y ''​char''​. Veremos ahora un tipo de datos adicional: El tipo ''​bool''​.
 +
 +Un ''​bool''​ representa el **resultado** de analizar si una condición es **cierta o falsa**. Por lo tanto, un valor ''​bool''​ representa un sí o un no. En C++, el sí se escribe ''​true''​ (del inglés "​verdadero"​) y el no se escribe ''​false''​ (del inglés, "​falso"​).
 +
 +Ahora podemos entender que todos los operadores de comparación que vimos, así como todos los operadores lógicos, operan con expresiones y producen resultados de tipo ''​bool'':​ ''​true''​ cuando la condición analizada es cierta, y ''​false''​ cuando la condición analizada no lo es.
 +
 +Por ejemplo, en el caso de los operadores de comparación,​ ''​1 < 2''​ da por resultado ''​true'',​ que es un valor de tipo ''​bool''​. ''​1 == 2''​ es otro valor de tipo ''​bool'',​ que será ''​false''​. Como con cualquier otro tipo de datos, podemos declarar variables ''​bool'':​
 +
 +<code cpp>
 +bool cond1 = 1 == 2;
 +bool cond2 = 1 < 2;
 +if (cond1)
 +    cout << "Esto no se ejecuta"​ << endl;
 +if (cond2)
 +    cout << "Esto si se ejecuta"​ << endl;
 +if (cond1 || cond2)
 +    cout << "Esto si se ejecuta"​ << endl;
 +if (cond1 && cond2)
 +    cout << "Esto no se ejecuta"​ << endl;
 +</​code>​
 +
 +En este ejemplo, vemos que las operaciones lógicas ''​||''​ y ''&&''​ operan con 2 valores de tipo bool: ''​||''​ da por resultado ''​true''​ cuando al menos uno de los operandos lo es, y ''&&''​ devuelve ''​true''​ solamente cuando ambos operandos lo son.
 +
 +Además, en este ejemplo vemos que lo que hemos llamado ''​condición'',​ y que se debe colocar entre paréntesis en el ''​if'',​ en realidad puede ser cualquier **expresión de tipo bool**. Esto permite guardar valores **bool** intermedios en variables, y usarlos libremente en expresiones compuestas mediante operadores lógicos y de comparación.
 ===== Más ejercicios ===== ===== Más ejercicios =====
  
-    * Escribir un programa que lea tres números, y los vuelva a imprimir pero ordenados de menor a mayor. +    * [[http://​juez.oia.unsam.edu.ar/#/​task/​tri_sort/​statement|Escribir un programa que lea tres números, y los vuelva a imprimir pero ordenados de menor a mayor.]] 
-    * Escribir un programa que lea una hora en formato de 24 horas (exactamente 5 caracteres) y la imprima en forma AM / PM. Ejemplos:<​code>​+    * [[http://​juez.oia.unsam.edu.ar/#/​task/​la_hora/​statement|Escribir un programa que lea una hora en formato de 24 horas (exactamente 5 caracteres) y la imprima en forma AM / PM.]] Ejemplos:<​code>​
             23:12 imprime 11:12 PM             23:12 imprime 11:12 PM
-            10:15 imprime 10:15 AM</​code>​ +            10:15 imprime 10:15 AM 
-    * Leer dos numeros de hasta 2 digitos, e imprimir una "​cuenta"​ del producto. La cuenta debe estar bien alineada a derecha. Ejemplos: <​code>​+            12:15 imprime 12:15 PM 
 +            00:15 imprime 12:15 AM</​code>​ 
 +    * [[http://​juez.oia.unsam.edu.ar/#/​task/​productis/​statement|Leer dos numeros de hasta 2 digitos, e imprimir una "​cuenta"​ del producto.]] La cuenta debe estar bien alineada a derecha. Ejemplos: <​code>​
             Si vienen 12 y 5,             Si vienen 12 y 5,
                12                12
Línea 443: Línea 469:
                60                60
             Si vienen 10 y 10,             Si vienen 10 y 10,
-               12+               10
              x 10              x 10
              ----              ----
curso-cpp/estructuras-selectivas.1475789986.txt.gz · Última modificación: 2016/10/06 21:39 por santo