Visual basic.net : ESTRUCTURAS DE CONTROL(5)

Page 1

ESTRUCTURAS DE CONTROL 1. CONDICIONALES SIMPLES La instrucción de condición en VB es el if que dispone de varios formatos. Formato 1: Para ejecutar condicionalmente una sola instrucción.

If condición Then instrucción

Solo dispone de la parte cierta. Formato 2: Para ejecutar condicionalmente múltiples instrucciones en el caso de ser cierta la condición

If condición Then Instrucciones End If

Formato 3: Evalúa la condición y si es verdadera ejecuta la instrucción1 en caso de ser falsa ejecutaría la instrucción2.

If condición Then Instrucción1 Else Instrucción2

Formato 4: Ejecuta condicionalmente un grupo de instrucciones, dependiendo del valor de una expresión 1-Se puede usar la forma de una sola línea (formato 1 y formato 3) para pruebas cortas y sencillas. Sin embargo, la forma de bloque del resto de los formatos proporciona más estructura y flexibilidad que la forma de línea simple y, generalmente, es más fácil de leer, de mantener y de depurar.

If condición Then [Bloque de instrucciones 1] Else [Bloque de instrucciones 2] End If

2- Con los formatos 1 y 3 es posible ejecutar múltiples instrucciones como resultado de una decisión If...Then, pero todos deben estar en la misma línea y separados por dos puntos, como en la instrucción siguiente: If A > 10 Then A = A + 1 : B = B + A : C = C + B 3-El código que sigue a la palabra clave Then se examina para determinar si una instrucción es o no un bloque If. Si en la misma línea, después de la instrucción Then, aparece algo que no sea un comentario, la instrucción se trata como una instrucción If de una sola línea. 4-Una instrucción de bloque If debe ser el primero en una línea. Las partes Else, ElseIf y End If, de la instrucción, sólo pueden ser precedidas por un número de línea o un etiqueta de línea. 5- El bloque If debe terminar con una instrucción End If. Formato 5: Puede de usar la siguiente sintaxis, más versátil:

If condición-1 Then [Bloque instrucciones 1] [ElseIf condición-2 Then [bloque instrucciones 2]] . . . [Else [bloque instrucciones n]] End If

La sintaxis de la instrucción If...Then...Else tiene tres partes: condicion-1, condición-2: es una expresión numérica o expresión de cadena que puede ser evaluada en True o False. Si condición es Null, condición se considera False. Bloque instrucciones 1- Una o más instrucciones , ejecutados si condición es True. Bloque instrucciones 2- Una o más instrucciones, ejecutados si la condición-n asociada es True.

Lola Cano Gil

1


Bloque de instrucciones 3- Una o más instrucciones ejecutadas si ninguna de las anteriores expresiones condición o condición-2 es True. Cuando se ejecuta un bloque If, se prueba condición. Si condición es True, se ejecutan las instrucciones que están a continuación de Then. Si condición es False, cada ElseIf condición (si existe) se evalúa a su vez. Cuando se encuentra una condición True se ejecutan las instrucciones que siguen inmediatamente a la instrucción Then asociada. Si ninguna de las condiciones ElseIf es True (o si no hay cláusulas ElseIf), se ejecutan las instrucciones que siguen a Else. Después de la ejecución de las instrucciones que siguen a Then o Else, la ejecución continúa con la instrucción que sigue a .End If. Las cláusulas Else y ElseIf son opcionales. Se pueden tener en un bloque ElseIf, tantas cláusulas If como se deseen, pero ninguna puede aparecer después de una cláusula Else. Las instrucciones de bloque If se pueden anidar; es decir, unas pueden contener a otras. Select Case (punto siguiente) puede ser más útil cuando se evalúa una sola expresión que tiene varias acciones posibles. Ejercicio contraseña. 5.1 Calcular la password de entrada. 1. Fase diseño Pass

contraseña

Limpiar

Label1

salir

2. Propiedades en fase diseño: TIPO-OBJETO ventana

BOTON

Caja de texto etiqueta

NOMBRE FORM1

contraseña limpiar salir pass LABEL1

PROPIEDAD TEXT CANCELBUTTON ACCPETBUTTON TEXT TEXT TEXT TEXT

VALOR Contraseña salir contraseña contraseña limpiar fin

PassWordChar

*

TEXT

3. Código:

Lola Cano Gil

2


Private Sub CONTRASEÑA_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CONTRASEÑA.Click Static contador As Integer contador += 1 If PASS.Text = "xxxx" Then Label1.Text = "contraseña coreccta, intentos: " + Str(contador) Else Label1.Text = "contraseña incoreccta , intentos: " + Str(contador) End If End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click End End Sub Private Sub limpiar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles limpiar.Click PASS.Text = "" PASS.Focus() End Sub

Ejercicio NIF (IF y Arrays) 5.2 Calcular la letra del NIF para un DNI. Se trabaja con Arrays. 4. Fase diseño

dni

letra

nif

limpiar

calcular

salir

5. Propiedades en fase diseño: TIPO-OBJETO ventana

NOMBRE FORM1

Letra NIF salir calcular calcular limpiar fin

dni

PROPIEDAD TEXT CANCELBUTTON ACCPETBUTTON TEXT TEXT TEXT TEXT

letra

ReadOnLy

True

BOTON

Caja de texto

Lola Cano Gil

calcular limpiar salir

VALOR

3


etiqueta

nif

ReadOnLy

True

LABEL1 Label2 Label3

TEXT TEXT TEXT

DNI: Letra: NIF:

6. Código: Private Sub limpiar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles limpiar.Click letra.Text = "" nif.Text = "" dni.Text = "" dni.Focus() End Sub

Private Sub calcular_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles calcular.Click Dim tabla As String() = {"T", "R", "W", "A", "G", "M", "Y", "F", "P", "D", "X", "B", "N", "J", "Z", "S", "Q", "V", "H", "L", "C", "K", "E", "T"} If dni.Text = "" Then MessageBox.Show("debes introducir un DNI") dni.Focus() Else letra.Text = tabla((CInt(dni.Text) Mod 23)) nif.Text = dni.Text + letra.Text End If End Sub Private Sub salir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles salir.Click End End Sub Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load dni.Text = "" End Sub End Class

2.- CONDICIONALES MÚLTIPLES. Ejecuta uno de varios grupos de instrucciones, dependiendo del valor de una expresión. Expresiónprueba: Cualquier numérica o expresión de cadena

expresión

Select Case expresiónprueba [Case listaexpresión-n [instrucciones-n]] . . .

[Case Else expresiónlista-n: Lista delimitada por puntos y coma de una o más de las formas [instruccionessiotro]] siguientes: expresión, expresión To expresión, Is expresión operadordecomparación. La palabra End Select clave To especifica un intervalo de valores. Si se usa la palabra clave To, el valor menor debe aparecer antes de To. Use la palabra clave con operadores de comparación (excepto Is y Like) para especificar un intervalo de valores. Si no se suministra, la palabra clave Is se inserta automáticamente. Lola Cano Gil

4


instrucciones-n: Una o más instrucciones ejecutadas si expresiónprueba coincide con cualquier parte de listaexpresión-n. instruccionessiotro: Una o más instrucciones ejecutadas si expresiónprueba no coincide con nada de la cláusula Case. Si expresiónprueba coincide con cualquier listaexpresión asociada con una cláusula Case, las instrucciones que siguen a esa cláusula Case se ejecutan hasta la siguiente cláusula Case o, para la última cláusula, hasta la instrucción End Select. El control pasa después a la instrucción que sigue a End Select. Si expresiónprueba coincide con una expresión de listaexpresión en más de una cláusula Case, sólo se ejecutan las instrucciones que siguen a la primera coincidencia.La cláusula Case Else se usa para indicar las instrucciones que se van a ejecutar si no se encuentran coincidencias entre expresiónprueba y una listaexpresión en cualquiera de las otras selecciones de Case. Cuando no hay una instrucción Case Else y ninguna expresión listada en las cláusulas Case coincide con expresiónprueba, la ejecución continúa en la instrucción que sigue a End Select. Aunque no es requerido, es buena idea tener una instrucción Case Else en el bloque Select Case para manejar valores imprevistos de expresiónprueba. Se pueden usar expresiones múltiples o intervalos en cada cláusula Case. Por ejemplo, la línea siguiente es válida: Case 1 To 4, 7 To 9, 11, 13, Is > MaxNumber El operador de comparación Is no es lo mismo que la palabra clave Is usada en la instrucción Select Case. 6.-También se puede especificar intervalos y expresiones múltiples para cadenas de caracteres. En el siguiente ejemplo, Case coincide con las cadenas que son exactamente iguales a todo, cadenas que están entre nueces y sopa en orden alfabético y el valor actual de ElemPrueba: Case "iguales a todo", "nueces" To "sopa", ElemPrueba Las instrucciones Select Case se pueden anidar. Cada instrucción Select Case debe tener su correspondiente instrucción End Select. Ejercicio Select Case 1 5.3

TextBox1

Sacar el nombre y la imagen de un animal que empieza por una letra: Trabajar con Select Case y PictureBox.. 7. Fase diseño

PictureBox

Label1 Botón pulsar TextBox2 Botón salir

8. Propiedades en fase diseño: TIPO-OBJETO Lola Cano Gil

NOMBRE

PROPIEDAD

VALOR 5


ventana

FORM1

BOTON

PLUSAR Salir TextBox1

Caja de texto

etiqueta PictureBox

TEXT CANCELBUTTON ACCPETBUTTON TEXT TEXT TEXT

ANIMALES salir PULSAR PULSAR SALIR

MaxLength

1

TextBox2

text

LABEL1 PictureBox1

TEXT SizeMode BorderStyle

Introducir una letra: StrechImage Fixed3D

Private Sub SALIR_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SALIR.Click Private Sub PULSAR_Click(ByVal sender As System.Object, ByVal e As Me.Close() System.EventArgs) Handles PULSAR.Click End Sub Select Case TextBox1.Text Case "a", "A" TextBox2.Text = "Abeja" Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As PictureBox1.Image = Image.FromFile("imagenes/abeja.gif") System.EventArgs) TextBox1.TextChanged Case "b",Handles "B" ' CADA VEZ QUE CAMBIA LA LETRA CAMBIO EL ROTULO DEL BOTON TextBox2.Text = "Burro, Ballena" PULSAR.Text = "Animales=que empiezan por .." & TextBox1.Text PictureBox1.Image End sub Image.FromFile("imagenes/burro_animado.gif") Case "C", "c" TextBox2.Text = "Caballo,cerdo" PictureBox1.Image = Image.FromFile("imagenes/caballo.gif") Case Else TextBox2.Text = "No se ninguno por " & TextBox1.Text End Select ' PONGO EL FOCO DE ATENCION EN LA CAJA DE TEXTO TEXTBOX1.TEXT TextBox1.Text = "" TextBox1.Focus() End Sub 9. Código: Ejercicio aleatorio 5.4 Adivinar un numero. Practicar Rnd. 10. Fase diseño

11. Propiedades en fase diseño: TIPO-OBJETO NOMBRE Lola Cano Gil

PROPIEDAD

VALOR 6


ventana

FORM1

Caja de texto

N

TEXT CANCELBUTTON TEXT TEXT TEXT

BOTON

Button1a Salir

etiqueta

LABEL1

TEXT

aleatorio salir Generar un numero &Salir Introducir un numero entre..

12. Código: Public Class Form1 Inherits System.Windows.Forms.Form Dim num As Integer Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Randomize() End Sub Private Sub n_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles n.KeyPress Dim P As Byte If Asc(e.KeyChar) = 13 Then Select Case Int(n.Text) Case Is > num P = MsgBox("EL NÚMERO ES MENOR ", 4, "¿QUIERES CONTINUAR?") Case Is P = Case Is P =

= num MsgBox("HAS ACERTADO ", 4, "¿QUIERES CONTINUAR?") < num MsgBox("EL NÚMERO ES MAYOR ", 4, "¿QUIERES

CONTINUAR?") End Select If P = 7 Then MsgBox(" el número era: " & num & " adios") : End Else : n.Text = "" End If End If End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click num = Int(99 * Rnd() + 1) n.Focus() End Sub

3. ESTRUCTURAS DE BUCLES. 3.1. DO…….LOOP Repite un bloque de instrucciones cuando una condición es True o hasta que una condición se convierta en True. Formato1: Lola Cano Gil

7


Do [{While | Until} condición [Instrucciones] [Exit Do] [Instrucciones] Loop

Do While condición [Instrucciones]  [Exit Do] [Instrucciones] Loop

Hacer mientras condición ………………….. [salir de hacer] ………………… fin-mientras

Do Until condición [Instrucciones]  [Exit Do] [Instrucciones] Loop

Hacer hasta condición ………………….. [salir de hacer] ………………… fin-hasta

Puede usar esta sintaxis válida equival ente:

Formato2: Puede usar esta sintaxis válida equivalente:

Do [Instrucciones] [Exit Do] [Instrucciones] Loop [{While | Until} condición]

Do

Hacer ………………….. [salir de hacer] ………………… mientras condición

Do

Hacer ………………….. [salir de hacer] ………………… hasta condición

[Instrucciones]  [Exit Do] [Instrucciones] Loop While condición [Instrucciones]  [Exit Do] [Instrucciones] Loop Until condición

La sintaxis de la instrucción Do...Loop tiene estas partes: Condición: Numérico o expresión de cadena que es True o False. Si la condición es Null, condición se considera False. Instrucciones: Una o más instrucciones que se repiten mientras o hasta que condición sea True. La instrucción Exit Do sólo se puede usar dentro de una estructura de control Do...Loop, para proporcionar una forma alternativa de salir de un Do...Loop. Se puede colocar cualquier número de instrucciones Exit Do en cualquier lugar del Do...Loop. Exit Do, usado a menudo en la evaluación de alguna condición (por ejemplo, If...Then), transfiere control a la instrucción que sigue inmediatamente a la instrucción Loop. Cuando se usa con instrucciones anidadas Do...Loop, Exit Do transfiere control al bucle que está anidado un nivel por encima del bucle donde ocurre.

3.2. BUCLE FOR….NEXT Repite un grupo de instrucciones un número especificado de veces.

For contador = principio To fin [Step incremento] [Instrucciones] [Exit For] [Instrucciones] Lola Cano Gil

Next [contador]

La sintaxis de la instrucción For...Next tiene estas partes: Contador: Variable numérica que se usa como contador de bucle. La variable 8


no puede ser ningún elemento de matriz o ningún elemento de tipo definido por el usuario. Principio: Fin:

Valor inicial del contador.

Valor final del contador.

Incremento: Cantidad en la que cambia el contador cada vez a través del bucle. Si no se especifica, el valor predeterminado de incremento es uno. instrucciones Una o más instrucciones entre For y Next que se ejecutan un número especificado de veces. El argumento incremento puede ser positivo o negativo. El valor del argumento incremento determina la manera en que se procesa el bucle, como se muestra a continuación: Valor

El bucle se ejecuta

Positivo o 0

contador <= fin

Negativo

contador >= fin

Una vez que se inicia el bucle y se han ejecutado todas las instrucciones en el bucle, incremento se suma a contador. En este punto, las instrucciones en el bucle se pueden ejecutar de nuevo (basados en la misma prueba que causó que el bucle se ejecutara inicialmente) o se sale del bucle y la ejecución continúa con la instrucción que sigue a la instrucción. Cambiar el valor de contador mientras se está dentro de un bucle, puede hacer difícil su lectura y depuración. La instrucción Exit For sólo se puede usar dentro de una estructura de control For Each...Next o For...Next, para proporcionar una manera alternativa de salir. Se pueden colocar en el bucle cualquier número de instrucciones Exit For. La instrucción Exit For, el cual se usa a menudo en la evaluación de alguna condición (por ejemplo, If...Then), transfiere el control a la instrucción que sigue inmediatamente a la instrucción Next. Se pueden anidar bucles For...Next, colocando un bucle For...Next dentro de otro. Para ello, proporcione a cada bucle un nombre de variable único como su contador. La siguiente construcción es correcta: For I = 1 To 10 For J = 1 To 10 For K = 1 To 10 Next K Next J Next I 6.

Si se omite un contador en una instrucción Next, la ejecución continúa como si aquél se hubiera incluido. Ocurre un error si se encuentra una instrucción Next antes de su instrucción For correspondiente.

Lola Cano Gil

9


Programa ejercicio tabla multiplicar (con for): 5.6 1. Fase dise帽o: Label1

Label2

numero

visualizar

limpiar

Label3

solucion

fin

2. Propiedades en fase de dise帽o: TIPO-OBJETO Ventana

Bot贸n

Etiqueta

Caja de texto

NOMBRE Form1

visualizar limpiar fin Label1 Label2 Label3 numero solucion

PROPIEDAD Text Backcolor Font CancelButton AcceptButton Text Text Text Visible Text Text Text ReadOnly Multiline ScrollBars

VALOR Ejercicio 13 InactiveCaption Microsoft Sans Serif, 10 pto, style=Bold fin visualizar VISUALIZAR LIMPIAR SALIR False

True True Vertical

3. C贸digo:

Private Sub fin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles fin.Click End End Sub Private Sub limpiar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles limpiar.Click numero.Text = "" solucion.Text = "" numero.Focus() End Sub Private Sub visualizar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles visualizar.Click Dim i As Integer If numero.Text = "" Then Lola Cano Gil

10


MessageBox.Show("Debes introducir el numero de la tabla que quieres visualizar ") numero.Focus() Else For i = 0 To 10 Step 1 solucion.Text &= numero.Text & " x " & i & " = " & (numero.Text * i).ToString & Chr(13) & Chr(10) Next End If End Sub Private Sub visualizar_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles visualizar.MouseMove Label1.Text = "Muestra la tabla de multiplicar del numero que colocamos en la caja de texto" Label1.Visible = True End Sub Private Sub fin_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles fin.MouseMove Label1.Text = "Pulsar para salir de la aplicación" Label1.Visible = True End Sub Private Sub limpiar_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles limpiar.MouseMove Label1.Text = "Limpia la caja de texto" Label1.Visible = True End Sub Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove Label1.Visible = False End Sub

3.3. FOR EACH…..Next Este bucle es parecido al anterior For….Next, pero es muy útil para recorrer matrices sin necesidad del índice. Dim i As Integer For Each i In a TextBox7.Text = TextBox7.Text & CStr(i) & " " Next

For Each variable [ As tipo ] In matriz [Instrucciones] [Exit For] [Instrucciones] ……………….

Next [variable]

Si variable no está declarada fuera del bucle, puede utilizar la cláusula As para declararla como parte de la instrucción For Each. Ejercicio Array 5.7 Se trabaja con Arrays, propiedades y métodos, For…. Next y For Each…..Next 1. Fase diseño

Lola Cano Gil

11


2. Código: Public Class Form1 Inherits System.Windows.Forms.Form Dim a() As Integer = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 24, 25, 34, 0, -1, 56, 89} ……………………………………… Private Sub ver_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ver.Click Dim i% For i = 0 To a.Length - 1 TextBox1.Text = TextBox1.Text & a(i) If i < a.Length - 1 Then TextBox1.Text = TextBox1.Text & "," End If Next End Sub Private Sub suma_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles suma.Click Dim i% Dim sum As Long = 0 For i = 0 To a.Length - 1 sum += a(i) Next TextBox2.Text = sum End Sub Private Sub ordenar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ordenar.Click Dim b(a.Length - 1) As Integer Dim i% a.CopyTo(b, 0) Array.Sort(b) For i = 0 To b.Length - 1 TextBox3.Text = TextBox3.Text & b(i) If i < b.Length - 1 Then TextBox3.Text = TextBox3.Text & "," End If Next End Sub Private Sub invertir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles invertir.Click Lola Cano Gil

12


Dim b(a.Length - 1) As Integer Dim i% a.CopyTo(b, 0) Array.Reverse(b) For i = 0 To b.Length - 1 TextBox4.Text = TextBox4.Text & b(i) If i < b.Length - 1 Then TextBox4.Text = TextBox4.Text & "," End If Next End Sub Private Sub numero_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles numero.Click TextBox5.Text = a.Length End Sub Private Sub dimension_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dimension.Click TextBox6.Text = a.Rank End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim i As Integer For Each i In a TextBox7.Text = TextBox7.Text & CStr(i) & " " Next End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub End Class Ejercicio propuesto: 5.8 Ejercicio array2. Introducir los nombres y notas de alumnos de una determinada asignatura. Calcular y visualizar: Numero de alumnos aprobados. Numero de alumnos suspensos. La nota media. Cual es la nota mรกs alta y a que alumno le corresponde. La nota mรกs baja y el alumno que la tiene. Tres modos de solucionarlo: 1- dos arrays (notas y nombres) 2- 1 array dos dimensiones. 3- Con estructuras

Lola Cano Gil

13


3.4. BUCLE WHILE….WEND While condición

Ejecuta una serie de instrucciones mientras una condición dada sea True.

[instrucciones] ……………….. Wend

La sintaxis de la instrucción While...Wend tiene estas partes: Condición: Expresión numérica o expresión de cadena cuyo valor es True o False. Si condición es Null, condición se considera False.

Instrucciones:Una o más instrucciones ejecutadas mientras la condición es True. Si condición es True, todas las instrucciones en instrucciones se ejecutan hasta que se encuentra la instrucción Wend. Después, el control vuelve a la instrucción While y se verifica de nuevo condición. Si condición es aún True, se repite el proceso. Si no es True, la ejecución se reanuda con la instrucción que sigue a la instrucción Wend. Los bucles While...Wend se pueden anidar a cualquier nivel. Cada Wend coincide con el While más reciente. Sugerencia La instrucción Do...Loop proporciona una manera más flexible y estructurada de realizar los bucles.

Lola Cano Gil

14


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.