Diferencia entre revisiones de «Sentencias de selección (programación)»

Línea 84: Línea 84:
 
*[[Sentencias de iteración (programación)|Sentencias de iteración (programación)]]
 
*[[Sentencias de iteración (programación)|Sentencias de iteración (programación)]]
 
*[[Sentencias de salto (programación)|Sentencias de salto (programación)]]
 
*[[Sentencias de salto (programación)|Sentencias de salto (programación)]]
 +
*[[Sentencias de expresiones con coma (programación)|Sentencias de expresiones con coma (programación)]]
 
== Fuente  ==
 
== Fuente  ==
 
* [http://www.zator.com/Cpp/E4_10_2.htm Sentencias de selección]
 
* [http://www.zator.com/Cpp/E4_10_2.htm Sentencias de selección]

Revisión del 12:28 29 oct 2012

Sentencias de selección (programación)
Información sobre la plantilla
Concepto:Permiten decidir entre distintos cursos de acción en función de ciertos valores

Sentencias de selección (programación). También llamadas de control de flujo, permiten decidir entre distintos cursos de acción en función de ciertos valores. Existen tres tipos de estas sentencias de selección:

  1. if...else
  2. else if
  3. switch

De no ser por estas sentencias, el flujo de ejecución del programa estaría siempre constreñido a la ejecución de sus sentencias en el orden en que están colocadas en el código fuente.

Sentencia if … else

En su forma abreviada, cuando no existe la cláusula else, esta sentencia permite escoger entre ejecutar o no una sentencia, en función del resultado de una expresión lógica. En su forma ampliada, cuando la cláusula else está presente, permite escoger entre dos opciones alternativas.

Sentencia if-else

Sintaxis

if ( <condición> )  <sentencia1>;
[ else  <sentencia2>; ]

Descripción

  • <condición> debe ser una expresión relacional que devuelve un valor lógico, es decir, un bool, y estar obligatoriamente entre paréntesis. Pueden declararse variables dentro de la <condición>. Por ejemplo, la siguiente es una sintaxis válida:
if (int val = func(arg))
  val = z ;
else  val = y;

El ámbito de la variable val incluye toda la sentencia if, incluyendo, en su caso, el bloque <sentencia2> de else. La cláusula else es opcional, pero no puede haber sentencias entre el if y else.

  • <sentencia1>. Es una sentencia o bloque de código que se ejecuta si <condicion> se evalúa como cierto (true  != 0).
  • <sentencia2> es una sentencia o bloque de código que se ejecuta si existe un else y <condicion> resulta falso (false == 0)

Puesto que el if simplemente chequea el valor resultante de <condicion> (igual o desigual a cero), las dos expresiones siguientes son equivalentes:

if ( expresion )  <sentencia> ;
if ( expresion !=0 ) <sentencia> ;

La forma más general es:

if (<condicion>) {   
}
else  {   
}

Sentencia else if

Estas sentencias no representan en realidad nada nuevo, solo una sucesión de if else anidados, aunque de uso muy frecuente.

if ( <expresion1> )   
else if ( <expresion2> )   
else if ( <expresion3> )   
else   

En realidad, a la luz de lo expuesto en el apartado anterior, su indentación correcta sería:

if ( <expresion1> )   
else
  if ( <expresion2> )      
  else
     if ( <expresion3> )         
     else         

Las expresiones <expresion> son evaluadas correlativamente hasta que se encuentra la primera que devuelve un valor cierto ( != 0 ), en cuyo caso se ejecuta el bloque de código <sentencia> correspondiente y acaba la evaluación. En caso de que ninguna de las <expresion> sea cierta, se ejecuta la <sentencia> correspondiente al else (si existe).

Sentencia switch

Se trata de una sentencia condicional multi-salida en la que las decisiones se toman en función de un valor numérico entero de entre una serie de opciones posibles. Puede existir una cláusula por defecto o bien no adoptarse ninguna acción.

Sentencia switch

Sintaxis

switch ( <expresion> ) {
 case <const1> : <sentencia1>; [break;]
 case <const2> : <sentencia2>; [break;]
   .
   .
   .
 case <constN> : <sentenciaN>; [break;]
[default : <sentenciaD>; ]
}

Descripción

La sentencia switch comprueba cuando una expresión <expresion> entre paréntesis (que se traduce en un valor numérico) coincide con alguno de una serie de valores enteros constantes y diferentes (<constX>). En cuyo caso, se ejecuta un bloque de código específico <sentencia>. En caso de estar presente la cláusula opcional default y no existir concordancia con ninguno de los valores anteriores, se ejecuta una sentencia por defecto (<sentenciaD>). Los valores case y default pueden aparecer en cualquier orden, aunque lo usual es colocar default al final. Los dos puntos : después de <constX> son imprescindibles.

Las expresiones <constX> son expresiones constantes que se resuelven en un entero. Pueden ser simples o compuestas, Ejemplo:

switch (c - 48) {
  case 0: case 1: case 2: case 3: case 4:
  case 5: case 6: case 7: case 8: case 9:
     cout << "Dígito" << endl;
     break;
  case 17: case 21: case 25: case 31: case 37:
  case 49: case 53: case 57: case 63: case 69:
     cout << "Vocal" << endl;
     break;
  default:
     cout << "Otro carácter" << endl;
}

Después de ejecutado el bloque de código correspondiente a una concordancia, siguen las comprobaciones, por lo que puede ser conveniente incluir un break para abandonar el control del switch (no es necesario ningún break después de la última)

Puede Consultar

Fuente