PROGRAMACIN - Lic. Andy Gmez De La Torre, MBA APUNTES DEL CURSO No. 6 I. Estructuras de Decisin o Condicionales La estructura condicional se utiliza para indicarle al computador que debe evaluar una condicin y, a partir del resultado, ejecutar el bloque de instrucciones correspondiente. La forma ms comn est compuesta por una proposicin (condicin) que se evala y dos bloques de instrucciones que se ejecutan, uno cuando la condicin es verdadera (seleccin simple y doble) y otro cuando sta es falsa (nicamente en la seleccin doble).
Algunos autores se refieren a este tipo de estructura como estructura de seleccin, estructura selectiva o estructura de decisin; en esta gua, todas estas denominaciones son consideradas sinnimas.
Para que una proposicin (frase declarativa) sea vlida, debe poder afirmarse que es verdadera o falsa. En programacin, se utilizan operadores relacionales (<, =, >) para establecer la relacin que existe entre dos elementos de la proposicin. Adicionalmente, las proposiciones pueden ser sencillas o compuestas. Las proposiciones compuestas se forman con dos o ms proposiciones sencillas unidas por operadores lgicos (y, o, no). Cuando se unen dos proposiciones por medio del operador lgico y, significa que ambas proposiciones deben ser verdaderas (conjuncin). Cuando se unen dos proposiciones por medio del operador lgico o, significa que por lo menos una de las dos proposiciones debe ser verdadera (disyuncin). Ms adelante se detallan cules son los operadores relacionales y lgicos utilizados en Visual Basic .NET
Por su parte, un bloque de instrucciones puede contener una o varias instrucciones que se ejecutan una detrs de otra. La estructura condicional tiene tres variantes: seleccin simple. seleccin doble. seleccin mltiple.
Seleccin Simple (Sentencia IF-THEN)
Esta estructura permite ejecutar condicionalmente una o ms sentencias. La expresin a evaluar dar como resultado un valor booleano True o False. Si es True (Cierto) llevar a cabo el primer grupo de sentencias. Si es False (Falso) no se realizar nada, y el programa continua a la siguiente sentencia.
IF ( condicin ) THEN sentencia(s); ENDIF
Seleccin Doble (Sentencia IFTHENELSE) Esta estructura permite ejecutar condicionalmente una o ms sentencias. La expresin a evaluar dar como resultado un valor booleano True o False. Si es True (Cierto) llevar a cabo el primer grupo de sentencias. Si es False (Falso) llevar a cabo el segundo grupo de sentencias (despus de la instruccin else).
IF ( condicin ) THEN sentencia(s); ELSE sentencia(s); ENDIF
Pgina 2 de 14
La figura a continuacin presenta esquemticamente las formas de representar estas sentencias:
Ejemplos en VB.NET donde se emplean ambas estructuras.
Un empleado gana una comisin del 5%, slo si sus ventas mensuales son mayores a 10,000 balboas Indicar si un nmero es positivo o negativo. Algoritmo: 1. Leer ventas 2. Calcular comision = 0 3. Si ventas > 1000 Entonces 3.1. Calcular comisin = ventas * 0.05 4. Escribir comisin 5. Fin Algoritmo: 1. Leer n 2. Si n < 0 Entonces 2.1. Escribir Nmero Negativo 3. Sino 3.1. Escribir Nmero Positivo 4. Fin
II. Operadores Relacionales o Condicionales Se utilizan para formar expresiones booleanas, es decir, expresiones que al ser evaluadas cuyo resultado ser cierto o falso. Los operadores relaciones son muy empleados en las decisiones IF, en los ciclos WHILE, y en menor nmero en las operaciones de clculo aritmtico-matemtico. Operadores Es CIERTO cuando (THEN) Es FALSO cuando (ELSE) > La expresin1 debe ser > que expresin2 La expresin1 debe ser <= que expresin2 < La expresin1 debe ser < que expresin2 La expresin1 debe ser >= que expresin2 Pgina 3 de 14
>= (mayor o igual) La expresin1 debe ser >= que expresin2 La expresin1 debe ser < que expresin2 <= (menor o igual) La expresin1 debe ser <= que expresin2 La expresin1 debe ser > que expresin2 = La expresin1 debe ser = que expresin2 La expresin1 debe ser <> que expresin2 <> (no igual, diferente) La expresin1 debe ser <> que expresin2 La expresin1 debe ser = que expresin2
Ejemplos Resultado 25 < 24 25 = 25 25<> 4 24>=25 0 (Falso) 1 (Cierto) 1 (Cierto) 0 (Falso) Cuando se comparan caracteres alfanumricos estos se evalan, carcter por carcter de izquierda a derecha. Si las cadenas a evaluar son de diferente longitud, pero iguales hasta el ltimo carcter del ms corto, entonces se considera que la cadena ms corta es menor que la ms larga. Slo son iguales dos cadenas, si ambas tienen los mismos caracteres en la misma secuencia y tienen la misma longitud. Los caracteres en minsculas tienen un mayor valor que los caracteres en minsculas. Ejemplos Resultado A < B Uno = uno ABC<> DEF ABC>abc 1 (Cierto) 0 (Falso) 1 (Cierto) 0 (Falso)
III. Operadores Lgicos o Booleanos Combinan sus operandos de acuerdo con el lgebra de Boole. Los operadores lgicos se combinan con los operadores relaciones para simplificar decisiones mltiples o complejas en una sola instruccin. Los tres operadores ms empleados son: Operadores Cuando es Cierto (THEN) Es Falso cuando (ELSE) AND (y) Cuando todos sus operandos dan como resultado CIERTO Alguno de sus operandos da como resultado FALSO OR () Alguno de sus operandos da como resultado CIERTO Todos sus operandos dan como resultado FALSO NOT (Negacin, No) Este operador lgico se utiliza para invertir el resultado de un operando. Si el resultado del operando es CIERTO lo convierte en FALSO. Si el resultado del operando es FALSO lo convierte en CIERTO.
Pgina 4 de 14
Ejemplos Resultado (7 > 4) OR (5=3) (7>4) AND (5<>3) (16=(4*4)) AND 2<>2 NOT (7>4) Verdad Verdad Falso Falso
Recuerde que se pueden incluir variables y constantes fijas en las operaciores aritmticas internas de los operandos. Igual es conveniente utilizar parntesis para agrupar operandos, e inclusive para agrupar expresiones que incluyan operadores lgicos mixtos, es decir, expresiones boolenas que combinan AND, OR, NOT. Si est interesado en el Algebra de Boole, existen otros operadores lgicos (y tambin otros operadores relacionales).
IV. Estructura Condicional SEGN-HACER (SELECT CASE) SEGN-HACER (SELECT CASE) es una estructura de control empleada en programacin, se utiliza para agilizar la toma de decisiones mltiples. El SELECT CASE no es tan popular como el IF, pero se utiliza con regularidad en la programacin. En principio la funcionalidad de un SELECT CASE tambin se puede implementar con mltiples IFs anidados. En el caso de que haya muchas acciones dependientes de muchos valores iniciales, es recomendable su uso. El SELECT CASE favorece la legibilidad y rapidez en la programacin.
Las estructuras condicionales simple y doble evaluaban una proposicin (condicin) que devolva como resultado nicamente dos valores posibles y excluyentes: verdadero o falso. En cambio, la estructura condicional de seleccin mltiple permite que la condicin devuelva ms de un valor posible y que para cada uno de esos valores se ejecute el bloque de instrucciones correspondiente. Por ejemplo, una situacin tpica de seleccin mltiple es cuando la incorporacin de un estudiante a un equipo depende del color de una balota: si saca una balota roja, su incorporacin al equipo es inmediata; si es azul, la incorporacin ser en julio; y si es blanca, el estudiante no tiene que integrarse al equipo. En esta situacin hay tres valores posibles y cada uno de esos valores implica la ejecucin de una instruccin diferente.
Por lo regular la expresin a evaluar es numrica ya que es ms fcil de implementar, pero tambin se acepta que sean alfanumricas.
Igualmente que la seleccin simple (IF-THEN) y doble (IF-THEN-ELSE), las sentencias SELECT CASE pueden estar anidadas dentro de un programa.
Pgina 5 de 14
Algoritmo Representacin en diagrama Segun variable_numerica Hacer opcion_1: secuencia_de_acciones_1 opcion_2: secuencia_de_acciones_2 opcion_3: secuencia_de_acciones_3 De Otro Modo: secuencia_de_acciones_DOM Fin Segun
Sintaxis en VB.NET Select Case expresin Case valor Sentencias . . . Case Else sentencias End Select
Pgina 6 de 14
Ejemplo de un programa VB.NET que utiliza SEGN-HACER
Un profesor desea establecer un nivel de aprobacin en base a una calificacin. 5 es Excelente, 4 es Bueno, 3 es Regular, y de no cumplirse los anteriores el estudiante Reprob. Algoritmo (PseInt)
Proceso nota Leer calificacion Segun calificacion Hacer 5: Escribir "Excelente" 4: Escribir "Bueno" 3: Escribir "Regular" De Otro Modo: Escribir "Reprob" Fin Segun FinProceso
Codificacin en VB.NET
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim opcion As Integer opcion = Val(TextBox1.Text) Select Case opcion Case 5 TextBox2.Text = "Excelente!" Case 4 TextBox2.Text = "Bueno" Case 3 TextBox2.Text = "Regular" Case Else TextBox2.Text = "Reprob" End Select End Sub End Class
Pgina 7 de 14
V. Estructuras de Repeticin La estructura iterativa o de repeticin permite ejecutar una o varias instrucciones, un nmero determinado de veces o, indefinidamente, mientras se cumpla una condicin. Esta estructura ayuda a simplificar los algoritmos, ahorrando tiempo valioso a quien resuelve problemas con ayuda del computador. Existen cuatro estructuras en Visual Basic .NET: Mientras, Hacer-mientras, Para, y Hacer- hasta.
Estructura Mientras (WHILE-END WHILE) La Estructura Mientras (WHILE-END WHILE) es la estructura bsica de ciclo en VB.NET. Esta repite la ejecucin de un conjunto de sentencias mientras una condicin dada sea cierta. La condicin es verificada antes de ejecutarse el conjunto de sentencias. Sus posibles formas son las siguientes:
REM Formato 1 contador = valor inicial WHILE ( condicin <= valor final ) sentencia(s) contador = contador + incremento END WHILE
REM Formato 2 WHILE ( condicin de control ) sentencia(s) END WHILE
La figura a continuacin presenta esquemticamente las formas de representar estas sentencias:
La representacin de la izquierda se utiliza cuando se requiere que una estructura Mientras se repita un nmero determinado de veces. Para esto se establece un contador, cuyos valores se establecen desde un valor inicial, hasta un valor final. Cada vez que se repita la estructura, el contador se incrementar a travs de un valor de incremento.
La estructura de la derecha se utiliza cuando no sabemos el nmero de veces que la estructura Mientras se repetir, pero se sabe que la misma se repetir mientras la condicin del Mientras sea verdadera.
Pgina 8 de 14
Ejemplo en VB.NET de una Estructura Mientras
Realice la suma de los primeros n nmeros naturales. Algoritmo Diagrama de flujo
1. Leer n 2. Calcular s = 0 3. Calcular c = 1 4. Mientras c <= n 4.1. Calcular s = s + c 4.2. Calcular c = c + 1 5. Escribir s 6. Fin
Codificacin en VB.NET
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim n As Integer, c As Integer, s As Integer n = Val(TextBox1.Text) s = 0 c = 1 While (c <= n) s = s + c c = c + 1 End While TextBox2.Text = Str(s) End Sub End Class
Pgina 9 de 14
Estructura Hacer-Mientras (DO-LOOP WHILE) Los ciclos DO-LOOP WHILE son idnticos a los ciclos WHILE-END WHILE, con una excepcin: DO-LOOP WHILE ejecutar el bloque de cdigo que repite la evaluacin antes de la sentencia LOOP WHILE. Esto significa que el cdigo en el ciclo siempre se ejecutar al menos una vez.
contador = valor inicial Acciones repetitivas contador <= valor final VERDADERO contador = contador + incremento FALSO Acciones repetitivas Condicin VERDADERO FALSO
Por cierto, en PseInt no existe tal estructura, y no confundir con la estructura HACER-HASTA.
Pgina 10 de 14
Realice la suma de los primeros n nmeros naturales. Algoritmo Diagrama de flujo
1. Leer n 2. Calcular s = 0 3. Calcular c = 1 4. Hacer 4.1. Calcular s = s + c 4.2. Calcular c = c + 1 4.3. Mientras (c<=n) 5. Escribir s 6. Fin Inicio Leer n s = 0 c = 0 s = s + c c <= n VERDADERO c = c + 1 Escribir s Fin FALSO
Codificacin en VB.NET
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim n As Integer, c As Integer, s As Integer n = Val(TextBox1.Text) s = 0 c = 1 Do s = s + c c = c + 1 Loop While (c <= n) TextBox2.Text = Str(s) End Sub End Class
Pgina 11 de 14
Estructura Para (FOR-TO-NEXT) La estructura Para (FOR-TO-NEXT) funciona de manera similar a los ciclos Mientras, pero con controles ms precisos sobre cmo se repite el cdigo. La estructura Para tiene tres elementos: Lo primero es el contador con un valor inicial (un nmero entero). La segunda es el valor final en la que el ciclo termina. La tercera es el valor de incremento que define la cantidad a aadir al contador para cada iteracin. Los ciclos Para son tiles cuando un nmero predefinido o calculada de iteraciones es requerido.
Su forma general es:
FOR contador = valor_inicial TO valor_final STEP valor_incremento acciones a repetir NEXT
Cuando se ejecuta una sentencia FOR, primero se asigna el valor inicial a la variable contadora. Luego se comprueba si su valor es menor o igual al valor final. En caso de ser menor o igual se ejecutan las sentencias, y en caso de ser mayor el control del programa finaliza la repeticin. En cada interaccin, la variable se incrementa con el valor establecido en el incremento.
Los autores no se ponen de acuerdo en cmo se representa simblicamente este tipo de ciclo, pero para nuestros efectos prcticos emplearemos la misma representacin que la estructura de repeticin Mientras que utiliza contador.
Realice la suma de los primeros n nmeros naturales. Algoritmo Diagrama de flujo
1. Leer n 2. Calcular s = 0 3. Para c=1 Hasta n Con Paso 1 3.1. Calcular s = s + c 4. Escribir s 5. Fin
Pgina 12 de 14
Codificacin en VB.NET
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim n As Integer, c As Integer, s As Integer n = Val(TextBox1.Text) s = 0 For c = 1 To n Step 1 s = s + c Next TextBox2.Text = Str(s) End Sub End Class
Estructura Hacer-Hasta (DO-LOOP UNTIL) El ciclo DO-LOOP UNTIL trabaja diferente a los ciclos WHILE-END WHILE y DO-LOOP WHILE. Las sentencias que se repiten se ejecutan hasta que la condicin es cierta. Dado que la comprobacin de la condicin se realiza al final las sentencias al menos se ejecutan una vez.
Dado el comportamiento de esta estructura, la condicin se expresa inversamente a como se expresara en una estructura Mientras. Ejemplo: la condicin (contador <=10) se expresara como (contador > 10).
Pgina 13 de 14
Realice la suma de los primeros n nmeros naturales. Algoritmo Diagrama de flujo
1. Leer n 2. Calcular s = 0 3. Calcular c = 1 4. Hacer 4.1. Calcular s = s + c 4.2. Calcular c = c + 1 4.3. Hasta (c>n) 5. Escribir s 6. Fin
Inicio Leer n s = 0 c = 1 s = s + c c = c + 1 c > n Escribir s FALSO VERDADERO Fin
Codificacin en VB.NET
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim n As Integer, c As Integer, s As Integer n = Val(TextBox1.Text) s = 0 c = 1 Do s = s + c c = c + 1 Loop Until (c > n) TextBox2.Text = Str(s) End Sub End Class
Pgina 14 de 14
Sentencias goto Otra forma de construir estructuras de ciclo es a travs de la sentencia "goto" junto con una etiqueta. El programador puede definir una etiqueta, luego utilizar sentencias goto para mover el programa a las partes etiquetadas del programa. Esto, sin embargo, por lo general conduce a un cdigo confuso y no se recomienda en la prctica.
DEFINICIONES
Bucle. Sinnimo ciclo. Es un tipo de estructura de control que permite repetir una o ms sentencias mltiples veces. Tambin es equivalente a estructura de repeticin.
Sentencia. En programacin, una sentencia es una lnea de cdigo en algn lenguaje de programacin.