domingo, 29 de marzo de 2015

Estructura If con anidamientos -Sentencia Select -Sentencia For... Next -While --Wend -Do-loop .Goto



Las sentencias de control, denominadas también estructuras de control, permiten tomar decisiones y realizar un proceso repetidas veces. 


IF THEN  

Permite tomar una decisión referente al camino a seguir o acción a ejecutar en un proceso basándose en el resultado (verdadero o falso) de una condición . Su sintaxis es:
If condición Then acción 1 Else acción 2 .  donde condición debe ser una expresión numérica relacional o lógica. El resultado que se obtiene al evaluar la condición es verdadero (true) o falso (false) acción 1 o 2.


ANIDAMIENTOS DE SENTENCIAS

 If.. Las sentencias If... Then... Else pueden estar anidadas, con la ultima limitación de la longitud de una linea lógica, las palabras reservadas Then o Else pueden escribirse otra sentencia If por ejemplo:


If a >b Then Print;"es mayor que ";b; Else 

Print a; "es igual a "; b


Si en una linea lógica no hay el mismo numero de clausulas Then y Else, la regla es que cada Else corresponde con el If mas próximo que no haya sido emparejado. Por ejemplo:

If a= b Then if b= c Then Print "a =b=c" 
Else Print "b<> c"


En este ejemplo aparecen dos clausulas if y una Else. pues bien, aplicando la regla anterior la clausula Else se corresponde con el segundo. If. otro ejemplo:



If a = 0 Then If b  <> 0 Then S = S+b  Else S=S+a



IF. THEN-- ELSE..

 cuando se utilice una estructura If tiene que escribirla de la forma que se presenta a continuación, de lo contrario ocurrirá un error de sintaxis:


If condicion-1 then

Sentencia-1
[ Else if condicion-2 Then
Sentencias-2]
 [Else
Sentencias-n
End if


La ejecución de esta estructura sucede de la siguiente forma, si se cumple la condición 1, se ejecutan las sentencias-1, y si no se cumple, se examinan secuencialmente las condiciones siguientes hasta Else, ejecutándose las sentencias correspondientes al primer Else If cuya condición sea cierta. Si todas las condiciones son falsas, se ejecutan las sentencias-n correspondientes a Else.

Por ejemplo, supongamos que al efectuar una compra en un almacén as de 100 unidades de un mismo articulo nos hacen un descuento de un 40%, entre 25 y 100, un 20%, entre 10 y 24, un 10%,y no hay descuento para una adquisición de menos de 10 unidades. Calcula el importe a pagar.


If cantidad> 100 Then

importe= cantidad * precio unidad * 0.6
Else if cantidad >= 25 Then
importe= cantidad * precio unidad * 0.8
Else if cantidad >= 10 Then

importe= cantidad * precio unidad * 0.9
Else

importe= cantidad * precio unidad * 0
End If


 If.. Then.. Else, que traducido viene a ser algo así: Si llueve Entonces haces esto Si no haces esto otro. Es como el interruptor eléctrico de tu lámpara: si está abierto la luz se apaga, y si está cerrado, se enciende. Y expresándolo en la jerga que entienden los ordenadores, la primera parte de la instrucción ( If) lo que hace es evaluar si la expresión propuesta (en este caso si llueve o no) devuelve True o False. Si... de nuevo aparecen los operadores lógicos. En las instrucciones condicionales pueden utilizarse todos los operadores lógicos que ya conocemos.

La instrucción If se puede escribir de tres formas distintas, según el número de condiciones que haya que evaluar:
Sintaxis de línea única, en la que se omite la palabra clave Else  es decir, que no hay que hacer nada si no se cumple la condición propuesta:
          If llueve Then abrir paraguas

Sintaxis típica de bloque en la que sí se indica qué hacer si la condición propuesta no devuelve True.
Hay que cerrarla con End If
 If llueve Then

abrir paraguas
Else
no abrir paraguas
End If
También puede utilizarse esta sintaxis aunque no se escriba la parte Else.
Con la siguiente sintaxis se pueden evaluar condiciones distintas pudiendo tomar diferentes decisiones o siempre la misma, segun convenga:
If llueve Then
abrir paraguas
ElseIf llueve mucho Then
sacar la barca
sacar el casco
ElseIf graniza Then Else
If llueve Then
ir la playa End If O bien:
no salir de casa
no salir de casa ElseIf llueve mucho Then
ir la playa
ElseIf graniza Then no salir de casa Else
End If
Aunque en este caso sería más eficiente usar el operador Or, ya que con una sola evaluación se hallaría la decisión, que es única:
If llueve O graniza Or llueve mucho Then
no salir de casa Else
End If
ir la playa
En el enunciado de la condición If pueden utilizarse todos los operadores lógicos que ya conocemos, pudiéndose escribir expresiones muy complejas.
Si lo que queremos es evaluar siempre la misma condición, y tomar distintas decisiones, es preferible utilizar la otra instrucción condicional de VBScript: Select Case

Select Case que tiempo hace?
Case llueve mucho
Case graniza
sacar la barca
ir la playa
sacar el casco
Case Else
End Select
En cualquier caso, con ambas instrucciones, si más de una condición devuelve True, solamente se ejecutarán las decisiones de la primera de ellas, ignorándose el resto. Las dos instrucciones se puede utilizar cuantas veces sea preciso, asi como anidarlas. He aquí un ejemplo sencillo de anidamiento:

If llueve Then
If llueve poco Then
abrir paraguas A
If llueve mucho Then
End If abrir paraguas B
if no hace sol Then
End If Else coger paraguas
no coger paraguas
End If if hace sol Then End If
End If


SELECT CASE

 Esta sentencia permite ejecutar una de varias acciones en función del valor de una expresión. Es una alternativa al If... Then... Else if cuando lo que se necesita es compara la misma expresión con diferentes valores. su sintaxis es


Select Case expr-test

case lista 1  [sentencias 1]
case lista 2 [sentencias 2]
case Else[ Sentencias n]]
End select


donde expr-test es una expresión numérica o alfanumérica, y lista 1, lista 2 presentan una lista que puede tener cualquiera de las formas siguientes

expresión [ , expresión]---
expresión to expresión


Is operador-de-relación expresión, combinación de las anteriores separadas por como.



FOR.. NEXT  

 La sentencia For da lugar a un lazo o bucle y permite ejecutar un conjunto de sentencias cierto número de veces. Su sintaxis es:
For variable= expresión 1 To expresión 2 [step
expresión 3]
[Sentencias]
[Exit for]
[Sentencias]
Next  [variable]  variable]  --]


Cuando se ejecuta una sentencia for en la que el valor de la expresión 3 es positivo o no se ha especificado, primero se asigna el valor de la expresión 1 a la variable y a continuación se comprueba si la variable es mayor que la expresión 2, en cuyo caso se salta el cuerpo del bucle y se continua en la linea que esta a continuación de la sentencia Next por uiltimo la variable se incrementa en el valor de la expresión 3, o en 1 si step no se especifica un bucle For-- Next se ejecuta mas rápidamente cuando la variable es entera y las expresiones 1,2,3 constantes por ejemplo:

Sub For-click ()
Dim I As Integer, suma As Integer
For I- I To 99 step 2´para 1= 1,2,3-- hasta 99
suma= suma +1
Nex I
Print suma
End Sub

BUCLES ANIDADOS  
Un bucle For-- Next puede colocarse dentro de otro bucle For--Next entonces se dice que estan anidados. En este caso, cada blucle debe tener un nombre de variable único, La sentencia Next para el bucle interior debe aparecer ante que la del bucle exterior, Esto es: 


For var 2=.- 

For var 2 =--
Next var 1


Si los bucles anidados tiene el mismo punto de terminación, puede utilizarse para todos ellos una sola sentencia Next, la cual tomara la forma: NEXT VAR 1, VAR, 2

En el ejemplo siguiente las sentencias Next J, Next¡ podrían ser sustituidos por la sentencia Nextj,¡:


Dim aste As string, guion A string, resu As string

Dim ¡ As integer, J As Integer
aster= "*": guión ="-": resu=" "
For J =1 To s
resu= resu & guion: Print resu
Next J
Next 1


WHILE-- WEND 

  Un bucle while repite la ejecución de un conjunto de sentencias mientras una condición dada sea cierta. La condición se verifica antes de ejecutarse el conjunto de sentencias


While condición

[Sentencias]
Wend
donde condición es cualquier expresión numérica relacional o lógica. La ejecución de la sentencia while sucede así:
1.- Se evalúa la condición
2.-Si el resultado de la evaluación es falso, las sentencias que forman el cuerpo de while no se ejecutan y se pasa el control a la siguiente sentencia en el código a wend.
3.-Si el resultado de la evaluación es verdadero se ejecutan las sentencias que forman el cuerpo de while y el proceso descrito se repite desde el punto 1.


Por ejemplo el código siguiente imprime los valores s enteros entre 1 y 10:



Dim n As Integer

n= 1   ´valor inicial de n
While n <=10        ´mientras n sea menor o igual que 10--
Print n;   ´escribir el valor n
n= n+1   escribir el valor n
Wend    ´siguiente valor de n


Los bucles while-- wend pueden anidarse a cualquier nivel, cada wen emparejara con el while mas recientes.Una sentencia while sin emparejar da lugar a un error while sin emparejar da lugar a un error while sin wend y una sentencia wend sin emparejar da lugar a un error wend sin while.



DO...LOOP

 un loop (bucle) repite la ejecución de un conjunto de sentencias mientras condición o después de ejecutarse el conjunto de sentencias


Formato 1:

Do [{While/until}condicion]
[sentencias]
[Exit Do]
Loop
Formato Z:
Do
[Sentecias]
[Exit Do]
[Sentencias]
Loop [{While/until}condicion]


Donde condición es cualquiera expresión que se evalué a Ture o a False. Estas sentencias permita realizar varias estructuras diferentes. permite, como se aprecia en los formatos, crear bucles con la condición de terminación al final o al principio del bloque de sentencias. Pro ejemplo:



Sub Form - Click()

Dim I As integer, Suma As Integer
1=1
Do whil I <=99 "Hacer mientras I <=99
Suma= suma +
1=I+2
Loop
Print suma
End sub


Este ejemplo indica que cuando hagamos click sobre el formulario se vera sobre el mismo la suma de los números impares entre 1 y 99. El mismo resultado se obtiene con el ejemplo que se presenta a continuación:



Sub form-click()

Di I As integer, suma As Integer
I=99
Do
Suma=Suma+1
I=I=2
Loop until I 2 I
Print Suma
End sub


La Sentencia Exit Do permite salir de una bucle  Do Loop antes de que finalice este.

Goto: Transfiere el control a una línea especifica del código, identificada por una etiqueta o por un numero de línea su sintaxis es:
Goto{etiqueta/numero de línea}
Si la línea a la que se transfiere el control, es una sentencia ejecutable, se ejecuta esa sentencia y las que le siguen. Si no es ejecutable la ejecución se inicia en la primera sentencia ejecutable y que se encuentra tras dicha linea por ejemplo el siguiente procedimiento calcula e imprima el área de uno o mas círculos


Private Sub form-click ()

Dim r As Sisngle, a As single
Print" Escribir 0 para finalizar"
comienzo:
r=inpuntBoxC"radio:´)
Ifr<= 0 Then
Exit Susb
Else
a=3.141592* ^2
Print "Area="; a
End if
Goto comienzo
End sub