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:
Sentencia Condicional Incompleta.
Sentencia Condicional Completa.
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