Titulo.jpg (10742 bytes)
FlechaI.jpg (2886 bytes) casa.jpg (31539 bytes) FlechaD.jpg (2791 bytes)

Operaciones condicionales

el if...else

los if anidados

Operadores l�gicos dentro de los if

Varias sentencias dentro de un if

Una variable utilizada como expresi�n.

Switch.

El operador ?


Introducci�n:

Hasta aqu� hemos resuelto problemas que requer�an la realizaci�n de operaciones una a continuaci�n de la otra; esto es, una programaci�n esencialmente lineal.

No siempre los problemas que se nos plantean requieren solo de operaciones que se suceden sin disyuntivas.  Muy por el contrario, muchas veces es necesario seleccionar entre dos o m�s variantes.

Para ello C++ dispone de las operaciones condiciona�les: if  y switch.

Estudio del if.

Como todas las instrucciones y funciones propias en C++ se debe escribir con min�sculas.   Su estructura es:

if (expresi�n)

            instrucci�n1;

            [else

                        instrucci�n 2;]

instrucci�n 3;

 Como se ve,  el else indica opci�n.

 Las expresiones en el if, en general,   utilizan los operadores de comparaci�n.   As�:

<     menor que
<=   menor o igual
>     mayor que
>=   mayor o igual
==   igual
!=          diferente

que guardan este mismo orden de precedencia entre ellos.
Cuando la <expresi�n> es verdadera, su resultado ser� un n�mero diferente de cero, y cuando es falsa, cero. Si el resultado es distinto de cero, esto es, la <expresi�n> es verdadera, se ejecuta la instrucci�n1 y a continuaci�n la instrucci�n3; si, por el con�trario, el resultado de la <expresi�n> es cero, esto es, la <expresi�n> es falsa, y existe el comando else, se ejecutar� la instrucci�n2 y a continuaci�n la instrucci�n3.    Si no existe el else, entonces se ejecutar� la instrucci�n3.

Veamos una funci�n que diferencia entre dos n�meros, de tipo float, cu�l es el mayor, y devuelva su valor .

float maximo (float a,float b)
{  float mayor;
   if( a>b) mayor = a;
     else mayor = b;
     return (mayor);
}

 La sentencia que inicia con if nos indica que si �a� es mayor que �b� se ejecutar� la asignaci�n inmediata siguiente al par�ntesis, esto es, �mayor = a�.  De lo contrario tendremos que se ejecuta el else, esto es,          �mayor = b�.

El programa puede tener una peque�a variaci�n si se elimina la variable �mayor�.

float maximo (float a,float b)
{   if( a>b) return (a);
   else return (b);
}

Los if anidados.

Los if pueden estar unos dentro de otros.  As�:

 if( condici�n1 == verdadero )
    if( condici�n2 == verdadero )
         cout << "condici�n1 verdadero; condici�n2 verdadero\n";
    else
        cout << "condici�n1 verdadero; condici�n2 falso\n";
else
    cout << "condici�n1 falso\n";


En el ejemplo anterior la �ltima l�nea refiere simplemente la �condici�n1� como falsa, ya que al no cumplirse el primer if nunca se llega a evaluar si la �condici�n2� es verdadera o no, por lo que no puede decirse nada sobre ella.

Para aclarar la dependencia o referencia entre los if y los else pueden incluirse entre {} las operaciones correspondientes a cada uno.  As�

if( condici�n1 == verdadero )
{   if( condici�n1 == verdadero )
      { cout << "condici�n1 verdadero; condici�n2 verdadero\n";
      }
    else
      { cout << "condici�n1 verdadero; condici�n2 falso\n";
      }
}
else
{ cout << "condici�n 1 falso\n";
}

Operadores l�gicos dentro de los if

Tambi�n los if pueden tener operadores l�gicos dentro de <expresi�n>.

Veamos como se usan los operadores l�gicos en la siguiente funcion que nos permite transformar las may�sculas en min�sculas y viceversa , y que si el dato transferido no es una letra devuelve el mismo valor .
 

int Mayuscula_Minuscula(char caracter,char &resultado)
{ if (caracter >= 'a' && caracter <= 'z')
       resultado = caracter - 32;
  else
     if (letra2 >= 'A' && letra2 <= 'Z')
       resultado = caracter + 32;
     else resultado = caracter;
}

Observe que para significar los caracteres, Z,  se usa � �, mientras que cuando se encierran varios caracteres que forman una cadena se utiliza � �.

Como se ve, en las expresiones que deben evaluar los if aparecen dos proposiciones l�gicas vinculadas por el operador && (AND).  Esto significa que deben cumplirse ambas condiciones.

Tabla de verdad de AND y OR

valor 1 valor 2 AND OR
1 1 1 1
1 0 0 1
0 1 0 1
0 0 0 0

Varias sentencias dentro de un if

Veamos en la siguiente funci�n como se incluyen varias sentencias dentro de un if. Para ello se forma un bloque con los consiguientes{} dentro de los cuales se situan las sentencias que queremos se realizan al cumplirse el if.  Lo mismo podemos hacer despues de un else

void Ordenar(float &a, float &b)
{ float c;
   if (a>b)
     { c = a;
       a = b;
       b = c;
     }
}


Usamos en la funci�n la transferencia de parametros por referencia ya que para ordenar los valores deberemos de intercambiar, si fuera necesario, el contenido de a y de b.

En la funci�n solo existe la opci�n a>b.  Se ejecutar�n tres l�neas de programa dentro del if.  En el bloque pueden existir tantas l�neas como sean necesarias.

Una variable utilizada como expresi�n.

La decisi�n del if se efect�a seg�n sea diferente de cero o igual a cero el valor que alcanza la <expresi�n>. Tambi�n C++ acepta que la <expresi�n> sea una variable num�rica u operaciones aritm�ticas.

La siguiente funci�n permite alternar el valor de una variable.  Si ella llega a la funci�n como 0 sale como 1 y viceversa.

int inversor(float dato)
{ if (dato) return (0);
  else return (1);
}

Aqu� se observa c�mo la <expresi�n> es simplemente la variable �dato�.

Es tambi�n v�lido realizar una operaci�n aritm�tica dentro de la <expresi�n> y seg�n el resultado que se asigne al lado izquierdo de la operaci�n, as� se realizar� o no el if.

La siguiente funci�n devuelve una valor verdadero si el n�mero que ingresa en ella como par�metro es mayor que un dato preestablecido.

int filtro(int dato)
{ const numero = 3;
  if (numero - dato) return (0);
     else return (1);    
}

Switch.

Otra variante para tomar alternativas de caminos es el switch.

La sintaxis del switch es:

switch <expresi�n>
{ case <valor>: instrucci�n;
  default: instrucci�n;
}

El resultado de <expresi�n> debe de ser un valor entero o convertible a entero sin dudas.

Este tipo de operaci�n permite decidir --seg�n el valor que tome una variable-- cu�l acci�n se ejecuta de entre un grupo de operaciones previamente construidas.

La siguiente funci�n cambia el color que estamos usando seg�n la selecci�n que se haga en un men� dise�ado previamente al efecto.

void cambio_color(int seleccion)
{ switch (seleccion-48)
 {case 1 : textcolor(RED); break;
  case 2 : textcolor(GREEN); break;
  case 3 : textcolor(WHITE); break;
  case 4 : textcolor(LIGHTBLUE);break;
  default : textcolor(YELLOW);break;
 }
}


Dentro de la <espresion>  que debe evaluar el case esta contenida una operaci�n.  Esto se hace ya que “seleccion“ fue captado como char y, por tanto, su contenido es el c�digo ASCII correspondiente, al restarle 48 lo llevamos a 0.  
El switch selecciona el case en funci�n del resultado final de la operaci�n que exista en <expresi�n>.  De manera que si <expresion> da por resultado 1 la sentencia que se ejecutar� ser� la que esta a la derecha de ese case.

Los case pueden ir de 0 hasta 255.

En cada case puede haber m�s de una l�nea, las cuales se encerrar�n entre {}.  Las acciones que queremos se realicen concluyen con un break, o de lo contrario se realizar�n todas las l�neas de programa que hay en los siguientes case al primero que se ejecute

Si la <expresi�n> no coincide con ning�n <valor> se ejecutar� la l�nea correspondiente a default.

El operador ?

Por �ltimo veamos el operador   ?

Su sintaxis es:

<variable> = <condici�n> ? <valor1> : <valor2>;

Si la <condici�n> es cierta, --diferente de 0--, el valor que se asignar� a la “variable” es “valor1” . Si la <condici�n> es falsa—0--, entonces se asignar� el “valor2” a la “variable”.

Veamos la funci�n inversor que estudiamos antes como quedar�a si utilizamos este operador

void inversor(int &a)

{ int a=0;
  cout << (a = (a==0)? 1:0);
}


Si el valor inicial es 0, la <condici�n> ser� verdadera, y “a” tomar� el valor  uno y; por el contrario, si fuera diferente de 0, “a” adquirir� el valor cero.

arriba.jpg (2978 bytes) casa.jpg (31539 bytes)
Hosted by www.Geocities.ws

1