Capacidad Expresiva del Lenguaje While:

 

            El Lenguaje While pese a tener un juego reducido de instrucciones va a ser capaz de simular las estructuras de control más habituales de un lenguaje de programación.Con esto nos debe quedar claro que la capacidad expresiva del Lenguaje While no está limitada por su reducido conjunto de instrucciones, aunque esto provocará que los programas se hagan rápidamente largos y complicados.Siendo necesario realizar programas muy complejos para implementar operaciones muy sencillas.

 

               ×Procedamos a desarrollar la secuencia de sentencias while equivalentes a las estructuras de control más habituales:

 

Bucle Definido.

 

Sentencia Condicional Incompleta.

 

Sentencia Condicional Completa. 

                                                                                                                                                                                                Bucle Definido:

 

                                               La secuencia de sentencias del cuerpo del bucle se ejecuta tantas veces como el valor de X antes de entrar en el bucle.

 

                                                           do X times

                                                                       ...

                                                                       Sentencia

                                                                       ...

                                                           od

                                                                      

                                               Con la utilización de una variable no usada con anterioridad , Xp+1, controlamos que una posible modificación del valor de X en el cuerpo del bucle no afecte al número de ejecuciones del mismo.

                                                          

                                                           Xp+1:=X;

                                                           while Xp+1 ¹ 0 do

                                                                       ...

                                                                       Sentencia

                                                                       ...

                                                                       Xp+1:=Xp+1-1

                                                           od

 

            Sentencia Incondicional Incompleta:

 

                                               Dependiendo del valor de X, si es nula o no, se ejecutará la secuencias de sentencias o no.

 

                                                           if  X ¹ 0 then ... Sentencia ...

 

                                               Se realiza con la función Signo y el bucle definido que hemos visto.

 

                                                           while X¹0 do                                      Xp+1 es una nueva variable

                                                                       Xp+1:=Xp+1+1;Recordemos que las variables que no son de entrada se inicializan a 0

                                   Signo                           X:=0;

                                                           od

                                                           X:=Xp+1;

                                                           Xp+2:=X;

                                                           while Xp+2¹0 do

                                                                       ...

                        Bucle Definido                                     Sentencia

                                                                       ...

                                                                       Xp+2:=Xp+2 -1;

                                                           od

 

            Sentencia Condicional Completa:

 

                                               Dependiendo del valor de la variable X,si es nula o no,se ejecutará una secuencia de sentencias u otra.

 

                                                           if  X ¹ 0 then ...Sentencia A... else ... Sentencia B...

 

                                               Se realiza con la función Signo , Signo Complementario y con el bucle definido visto antes.

                                              

                                                           Y:=X;                                          Guardamos el valor de la entrada

                                                           while X¹0 do                                      Xp+1 es una nueva variable

                                                                       Xp+1:=Xp+1+1;Recordemos que las variables que no son de entrada se inicializan a 0

                                    Signo                           X:=0;

                                                           od

                                                           X:=Xp+1;

 

                                                            Xp+2:=Y+1;

                                                            while Y ¹ 0 do

           Complementario del                             Xp+2:=0;

                     Signo                                         Y:=0;

                                                            od

                                                            Y:=Xp+2;

                                                           

                                                            Xp+3:=X;

                                                            while Xp+3 ¹ 0 do     

                 Primer Bucle                                  ...

                   definido                                        Sentencia A

                                                                       ...        

                                                            od

 

                                                            Xp+4:=Y;

                 Segundo Bucle                    while Xp+4 ¹ 0 do     

                   definido                                        ...

                                                                       Sentencia  B

                                                                       ...        

                                                            od

 

               

                ×Debemos tener muy presente que la restricción en la expresión de control de bucles indefinidos y en sentencias condicionales ( X ¹ 0) se puede eliminar y permitir cualquier expresión booleana.

                Lo único que debemos hacer es construir una expresión booleana Ec para la condición que queramos utilizar.De manera que  dicha expresión tomará el valor cero si la condición es falsa y uno si la condición es verdadera.Veamos algunos ejemplos:

 

                Para la condición X>Y tenemos la expresión Ec=(X-Y)-[(X-Y)-1].

                Para la condición X<Y tenemos la expresión Ec=(Y-X)-[(Y-X)-1].

                Para la condición X=Y tenemos la expresión Ec=1-[(Y-X)+(X-Y)].

                Para la condición  ØC tenemos la expresión  Ec=1-Ec

               

                Teniendo en cuenta este resultado veamos, por ejemplo, como quedaría el bucle definido con condición C:

 

                while C do                                                       condi:=Ec;

                        ...                                                            while condi ¹ 0 do                                    

                        Sentencia                                                        ...

                        ...                                                                   Sentencia

                od                                                                           ...                    

                                                                                             condi:=Ec;

                                                                                       od

                                                                                                                                  

                                                                                                                                   Volver.