Make your own free website on Tripod.com

Condiciones, Expresiones lógicas y Estructuras de control

 

Las instrucciones de los programas anteriores se han ejecutado en su orden físico. Primero se ejecuta la primera instrucción, luego la segunda, y así sucesivamente. Pero ¿qué ocurre si queremos que la computadora ejecute las instrucciones en otro orden? Suponte que luego de validar la entrada de un dato, queremos hacer un cálculo o imprimir un mensaje, no ambos. Para realizar esta tarea hay que hacer una pregunta y en base a la respuesta se toma un nuevo curso de acción.

 

La instrucción IF permite ejecutar una instrucción en un orden diferente al orden físico.

 

Flujo de control

 

El orden con el que las instrucciones se ejecutan en un programa se llama flujo de control. Cuando una instrucción es ejecutada, el control pasa a la instrucción siguiente.

 

Flujo de control El orden en que la computadora ejecuta las instrucciones en un programa.

Control de estructura Una instrucción que se usa para alterar el flujo de control normalmente secuencial.

El flujo de control es normalmente secuencial, como el de los programas estudiados hasta aquí. Es decir, las instrucciones se ejecutan secuencialmente, una detrás de la otra. Cuando queremos que el flujo de control no sea secuencial, usamos el control de estructuras, instrucción especial que transfiere el control de la instrucción a otra distinta que viene a ser la instrucción siguiente físicamente.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Selección

 

Se utiliza el control de estructura de selección (“branching”) cuando queremos que la computadora elija entre acciones alternas. Hacemos una aseveración, la cual puede ser cierta o falsa. Si la aseveración es cierta, la computadora ejecuta una instrucción determinada. Si es falso, ella ejecuta otra instrucción distinta. La habilidad de la computadora para resolver problemas prácticos es producto de su habilidad para tomar decisiones y ejecutar distintas secuencias de instrucciones.

 

Todo claro, ¿verdad? Pero (como suele ocurrir en C) esto tiene más miga de la que parece: recordemos que en C no existen los números booleanos, luego la condición no puede valer “verdadero” o “falso”. Dijimos que “falso” iba a corresponder a un 0, y “verdadero” a un número distinto de cero (normalmente uno). Por tanto, si escribimos el número 12 y le pedimos que escriba el valor de la comparación (numero>0), un compilador de Pascal escribiría TRUE, mientras que uno de C escribiría 1. Y aún hay más: como un valor de “verdadero” equivale a uno distinto de cero, podemos hacer cosas como ésta:

 

//-------------------------

//  Ejemplo en C          

//  “if” abreviado        

//                         

//  Comprobado con:       

//    Visual C++          

//-------------------------

 

#include <iostream>

 

using namespace std;

 

main()

{

 

int numero;

 

            // Leer el numero

            cout << "Escriba un número:" << endl;

            cin >> numero;

 

            // Imprimir el numero

            if (numero !=0)   

                        cout << "El número no es cero" << endl; // Forma normal

            if (numero)

                        cout << "Y sigue sin serlo" << endl;  // Forma con truco

 

            return 0;

}

 

La sentencia IF

La sentencia o instrucción IF es el control fundamental de la estructura que permite alternativas en el flujo de control. Con el IF podemos hacer una pregunta y elegir un curso de acción determinado: Si (If) la condición existe, entonces (then) se ejecuta una acción, de lo contrario (else) se ejecuta otra acción. Hay que incluir el código para ambas acciones en el programa.

A veces  If-Then_else se usa para verificar la validez de un input. Por ejemplo, si el divisor es cero, nuestro programa deberá imprimir un mensaje indicando el error. He aquí el código:

#include <iostream>

using namespace std;

main()

{

            float divisor;

            float dividendo;

            float resultado;

            cout << "Entra un dividendo: " << endl;

            cin >> dividendo;

            cout << "Entra un divisor: " << endl;

            cin >> divisor;

            if  (divisor != 0)

                        resultado = dividendo / divisor;

            else

                        cout << "La división por cero no está permitida." << endl;

return 0;

}

Bloques

Siguiendo con el ejemplo anterior, suponte que cuandop el divisor es igual a cero queremos hacer dos cosas:  imprimir el mensaje de error y calibrar para que la variable resultado nos dé un valor especial, como 9999.  Necesitamos dos sentencias en el mismo “branch”. Veamos:

#include <iostream>

using namespace std;

main()

{

            float divisor;

            float dividendo;

            float resultado;

            cout << "Entra un dividendo: " << endl;

            cin >> dividendo;

            cout << "Entra un divisor: " << endl;

            cin >> divisor;

            if  (divisor != 0)

            {

                        resultado = dividendo / divisor;

                        cout << "División ejecutada." << endl;

            }

            else

            {

                        cout << "La división por cero no está permitida." << endl;

                        resultado = 9999;

            }

return 0;

}

La forma If-Then-Else

En C++, la sentencia If viene en dos formatos: la forma If-Then-Else y la forma If-Then. Esta es la sintaxis de la primera forma:

if             (expresión)

                Sentencia1A

else

                Sentencia1B

if (horas <= 40.0)

      pago = rate * horas;

else

     pago = rate * (40.0 + horas

                – 40.0) * 1.5);

cout <<pago;

 

 

 

 

 

 

 

 

 

C++

//********************************************

// Programa de Nómina: Forma 1

//********************************************

#include <iostream>

using namespace std;

main ()

{

                // Declaración de variables

                float horas, pagor, pagox, rate, overtime, pagoOvertime;

 

                //Entrada de datos

                cout <<"Entra las horas trabajadas:  " <<endl;

                cin >> horas;

                cout <<"Entra la tarifa por hora:  " <<endl;

                cin >> rate;

                // Cáculo o cómputos

                pagor = rate * horas;    //Pago regular

                // Pago incluyendo las horas extra

                pagox = rate * (40 + 1.5 *  (horas - 40.0)) ;      

                overtime=horas - 40.0;  // Horas extra

                pagoOvertime=(overtime*1.5)*rate;  // Pago de las horas extra

                // Condición

                if (horas <= 40.0) 

                                // Impresión horario regular

                                cout <<"Esta es su paga:  "<<pagor <<endl;

                else        

                                // Impresión horario extra

                                cout <<"Usted trabajó " <<overtime

                                         <<" horas extra,"<<endl

                                         <<"que a tiempo y medio suman $"                                                  <<pagoOvertime<<endl

                                        <<"Este es el pago total:  "<<pagox <<endl;

                return 0;

}

//***************************************************

// Programa de Nómina: Forma 2

//***************************************************

#include <iostream>

using namespace std;

main()

{

                // Declaración de variables

                float horas,pago,rate;

 

                //Entrada de datos

                cout <<"Entra las horas trabajadas:  " <<endl;

                cin >> horas;

                cout <<"Entra la tarifa por hora:  " <<endl;

                cin >> rate;

               

                // Condición y Cáculo o cómputos

                if (horas <= 40.0) 

                       {       pago = rate * horas;

                                // Impresión

                                cout <<"Esta es su paga:  "<<pago <<endl;

                       }

                else        

                       {      

                                pago = rate*(40+1.5*(horas-40));

               

                                // Impresión

                                cout <<"Esta es su paga:  "<<pago <<endl;

                                }

                return 0;

}

Excel

 

1.       Abre Excel y escribe en las celdas correspondientes el texto que aparece al lado izquierdo.

2.       Entra la siguiente fórmula en la celda B6:

=IF(B3>40,B4*(40+1.5*(B3-40)),B3*B4)

La fórmula de B7 es una variante de la anterior.

3.       Aplica el formato “Currency” con dos decimales en las celdas B4 y B6: (Format/Cells/Currency)

4.       Prueba la fórmula entrando datos numéricos en B3 y B4.

 

Nota La fórmula tiene tres secciones representadas con una coma cada una de dichas secciones: la primera sección indica la expresión o condición (IF), la segunda  sección indica el valor cuando la expresión lógica es CIERTA (THEN), y la tercera sección cuando la expresión lógica es FALSA (ELSE). Las tres secciones juntas se escriben entre paréntesis.

 

 

La forma If-Then

A veces hay situaciones en las que, “Si (If) existe una determinada condición, entonces (then)  se ejecuta alguna acción; si no nada”. Ejemplo:

if (a <= b)

            c = 20;

else

            ;

if             (expresión)

                Sentencia

 

if (edad <18 )

                cout << “No eres elegible “;

cout << “votante.” << endl;

 

 

 

 

 

 

 

 

Supongo que está memorizado del tema anterior cómo se expresa “mayor o igual”, “distinto de”, y todas esas cosas. La primera construcción sería el “si ... entonces ...” (if..then en Pascal y otros lenguajes). El formato en C es if (condición) sentencia; Vamos a verlo con un ejemplo:

/*----------------------------------*/

/*  Ejemplo “if” elemental */

/*  Comprobado con:        */

/*    Visual C++             */

/*---------------------------------*/

 

#include <iostream>

 

using namespace std;

 

main()

{

 

                int numero;

 

                // Leer el numero

                cout << "Escriba un número:" << endl;

                cin >> numero;

 

                // Imprimir el numero

                if (numero >0)

                                cout << "El número es positivo" << endl;

                return 0;

}

 

Un error común

Frecuentemente los novatos en C++ confunden el operador = ( que se utiliza para la expresión asignada, como numero = 20) con el otro operador == (expresión lógica). Veamos el error:

 

Cin >> n;

If (n = 3)                                              // Error

            Cout << “n es igual a 3”;

Else

            Cout << “n no es igual a 3”;

 

Este segmento de código siempre imprime: n es igual a 3

Condiciones simultáneas

 

Puede darse el caso de que tengamos que comprobar varias condiciones simultáneas, y entonces deberemos usar “y” (&&), “o” (| |) y “no” (!) para enlazarlas:

if ((opcion==1) (usuario==2))

   if ((opcion==1) | | (opcion==3))

   if ((!(opcion==opcCorrecta)) | | (tecla==kESC))   ...   

En C hay otra forma de asignar un valor según se dé una condición o no. Es el “operador condicional” ? : que se usa condicion ? v1 : v2; y es algo así como “si se da la condición, toma el valor v1; si no, toma el valor v2”. Un ejemplo de cómo podríamos usarlo sería resultado = (operacion == ‘-‘) ? a-b : a+b; que, aplicado a un programita quedaría:

/*-----------------------------*/

/*  Ejemplo                       */

/*  Operador condicional ? */

/*----------------------------*/

 

#include <iostream>

using namespace std;

main()

{

int a, b, resultado;

int operacion;

 

cout << “Escriba un número: “;

cin >> a;

cout << “Escriba otro: “;

cin >> b;

cout << “Escriba una operación (1 = resta; otro = suma): “;

cin >> operacion;

resultado = (operacion == 1) ?  a-b : a+b;

cout << “El resultado es ” << resultado << endl;

return 0;

}

/*-------------------------*/