UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS ESCUELA DE COMPUTACION GUIA DE LABORATORIO #02 CICLO: 02/ 2011 Nombre de la Practica: ESTRUCTURAS REPETITIVAS Lugar de Ejecución: Centro de Computo Tiempo Estimado: 2 horas y 30 minutos MATERIA: Lenguajes de Programación 1 I. OBJETIVOS Que el estudiante sea capaz de: • Declarar variables de acuerdo a los requerimientos de datos a manejar • Definir todo tipo de expresiones complejas (matemáticas y lógicas) en un programa VB.NET • Implementar las instrucciones de control repetitiva (For, While, Do) en el cod.fuente • Diseñar la combinación apropiada de las diferentes estructuras vistas en el diseño de un programa cualquiera II. INTRODUCCION TEORICA Declarar variables de acuerdo a los requerimientos de datos a manejar Es muy importante elegir bien el tipo de dato a la hora de declarar una variable, esto nos ayudará a consumir menos recursos de memoria y lograr mayor eficiencia en nuestras aplicaciones. Como vimos en la práctica anterior cada tipo de dato ocupa cierto espacio en memoria. Por tanto debemos ser cuidadosos al momento de elegir un tipo de dato para almacenar la información. Por ejemplo cuando necesitemos almacenar datos que contienen solo números, como por ejemplo un número de teléfono, un número de DUI o ISSS, es mejor declararla de tipo String en vez de tipo Integer o Short, Dado que al declararlos como String estos ocupara en memoria solo la cantidad de bytes necesarios para representar a cada uno de los caracteres que compone la información. Pero entonces cuando debemos declarar variables de tipo numérico, sencillo lo haremos solo cuando necesitemos almacenar datos con los cuales haremos operaciones o cálculos matemáticos con dichas variables. También es necesario al elegir un tipo de dato numérico la cantidad de números que va a almacenar y si estos son de coma flotante o no. Debe de tomar muy en cuenta los rangos de valores que puede tomar cada tipo de dato para hacer la elección correcta. Estructuras Repetitivas Permiten ejecutar un conjunto de sentencias repetidamente una cierta cantidad de veces o hasta que se cumpla una determinada condición. Al conjunto de sentencias se le denomina bucle y a cada repetición del cuerpo del bucle se denomina iteración. Visual Basic.Net cuanta con varias instrucciones para el control de repeticiones de bucles, veamos detalladamente cada una de ellas. 1 Guía # 2: ESTRUCTURAS REPETITIVAS Instrucción Do…Loop Sintaxis: Do While|Until <condición> Do (Instrucciones) (Instrucciones) [Exit Do] [Exit Do] Loop Loop While|Until <condición> Opción 1 Opción 2 While|Until son las palabras clave que se utilizan para repetir el bucle. Solamente se puede utilizar una de las dos. Si utiliza While el bucle se repetirá hasta que la condición se falsa. Por el contrario si utiliza Until, el bucle se repetirá hasta que la condición resulte verdadera. La instrucción Exit Do se utiliza para salir del bucle Do. Si usted utiliza la opción 1, primero se va a evaluar la condición y, depende de la instrucción que usted utilice, se ejecutará el lazo si la condición es verdadera (si utiliza While) ó si la condición es falsa (si utiliza Until). Mientras que con la opción 2, el bucle se ejecutará por lo menos una vez. Instrucción While … End While Sintaxis: While <condición> (Instrucciones) End While La instrucción While se utiliza para repetir un conjunto de acciones cuando se verifica una condición. Instrucción For … Next La instrucción For … Next se utiliza para repetir un conjunto de instrucciones, un número dado de veces. Sintaxis: For contador=<valor inicial> To <valor Final> [Incremento] (Instrucciones) [Exit For] Next [Contador] Donde: • Contador: cualquier variable numérica • Valor Inicial: Es el valor inicial del contador • Valor Final: Es el valor final del contador • Instrucciones: Son las instrucciones que se repetirán un número de veces dada. • Exit For: Es opcional y se utiliza para salir del bucle For. • Next: Marca el final de la instrucción For. Tan pronto como el programa se tope con la instrucción Next, se agregará el valor de incremento al contador y la siguiente iteración del bucle tendrá lugar. Una buena práctica de programación consiste en especificar el nombre del contador en la instrucción Next, pero no es obligación. Lenguajes de Programación 1 2 Guía # 2: ESTRUCTURAS REPETITIVAS III. MATERIALES Y EQUIPO Para la realización de la guía de práctica se requerirá lo siguiente: No. 1 Requerimiento Cantidad Guía de Laboratorio 2 de LP1 1 PC con Microsoft Visual Studio 2008 .NET instalado 1 2 Memoria USB 1 3 Computadora con acceso a Internet 1 IV. PROCEDIMIENTO Para esta práctica deberá crear una carpeta con el nombre de “Práctica2LP1”, en la cual va a guardar todos los archivos de esta práctica y de análisis de resultados. PARTE 1: Aplicación utilizando For … Next Problema a Solucionar: “Calcular y mostrar el factorial de un número” 1. Cree un nuevo proyecto de Windows en VB.Net 2. Diseñe el siguiente esquema de objetos (Figura 1.1) y asigne los valores a las propiedades que se muestran. Propiedades Figura 1.1 Diseño de objetos del Form1 (Controles) Name Text Form1 frmFactorial Calculo del factorial Label1 lblNumero Numero: Label2 lblFactorial Factorial: Textbox1 txtNumero (Vacio) Textbox2 txtFactorial (Vacio) Button1 btnCalcular Calcular Button2 btnSalir Salir 3. Proceda a digital el código detallado a continuación, en el evento y objeto especificado. Objeto y Evento/Nivel btnCalcular Click Dim factorial As Long = 1 Dim i As Long 'Verificamos que el TxtNumero contenga un dato numérico If IsNumeric(txtNumero.Text) Then 'Se realiza un for desde 1 hasta el Número For i = CDbl(txtNumero.Text) To 1 Step -1 'Se multiplica el factorial por todos los números menores factorial *= i Lenguajes de Programación 1 3 Enable False Guía # 2: ESTRUCTURAS REPETITIVAS Next i txtFactorial.Text = factorial.ToString Else MsgBox("Debe ingresar un número!", MsgBoxStyle.Exclamation) txtNumero.Clear() txtNumero.Focus() End If btnSalir Click Redacte el código para salir!! 4. Guarde los cambios en el proyecto actual y realice pruebas con varios números. Responda estas interrogantes: ¿Cree que los tipos de variables elegidas son las correctas?, ¿Debería de realizarse más validaciones en este ejercicio?. Si es así agregue las que considere necesarias. PARTE 2: Aplicación utilizando For … Each Problema a solucionar: “Crear una aplicación para encriptar y desencriptar un mensaje utilizando el código de césar. Este código consiste en sustituir cada letra por la que se encuentra alfabéticamente n posiciones más adelante. A esta n se le conoce como llave” 1. Agregue un nuevo formulario al proyecto actual y elíjalo como formulario de inicio. 2. Diseñe el siguiente esquema de objetos (ver Figura 1.2) y asigne los valores a las propiedades descritas. Figura 1.2 Diseño de objetos del Form2 Lenguajes de Programación 1 4 Guía # 2: ESTRUCTURAS REPETITIVAS Propiedades (Controles) Name Text Enable Form2 frmCesar Encriptador/Desencriptador de Código de César Label1 Lbltitulo Encriptamiento por código César Label2 lblTexto Ingrese el texto a Encriptar/Desencriptar Label3 lblllave Llave Label4 lblResultado (Vacio) Textbox1 txtLlave (Vacio) Textbox2 txtTexto (Vacio) Textbox3 txtResultado (Vacio) RadioButton1 rdbEncriptar Encriptar RadioButton2 rdbDesencriptar Desencriptar Button1 btnEncriptar Encriptar Button2 btnLimpiar Limpiar Button3 btnSalir Salir Checked False True 3. Proceda a digital el código detallado a continuación, en el evento y objeto especificado. Objeto y Evento/Nivel btnEncriptar Click 'Verificamos que la llave contenga un número y que este sea positivo If IsNumeric(txtLlave.Text) AndAlso CInt(txtLlave.Text) > 0 Then txtResultado.Clear() Dim ascii As Short 'Para cada caracter en el objeto txtTexto For Each c In txtTexto.Text 'Verificamos si el usuario desea encriptar o desencriptar el texto If rdbEncriptar.Checked = True Then 'Convertimos el caracter extraido a su equivalente numero ASCII ' y le sumamos la llave ascii = Asc(c) + CInt(txtLlave.Text) Else 'Convertimos el caracter a su equivalente numero ASCII 'y le restamos la llave ascii = Asc(c) - CInt(txtLlave.Text) End If 'Concatenamos en txtResultado el nuevo ascii convertido a caracter txtResultado.Text += Chr(ascii) Next lblresultado.Text = "Texto Encriptado:" Else MsgBox("El dato introducido en la llave es incorrecto", MsgBoxStyle.Critical) txtLlave.Focus() txtLlave.Clear() End If rdbEncriptar If rdbEncriptar.Checked = True Then btnEncriptar.Text = "Encriptar" End If Lenguajes de Programación 1 CheckedChanged 5 Guía # 2: ESTRUCTURAS REPETITIVAS rdbDesencriptar If rdbDesencriptar.Checked = True Then btnEncriptar.Text = "Desencriptar" End If CheckedChanged btnLimpiar Click txtTexto.Clear() txtResultado.Clear() btnSalir Click Redacte el código para salir 4. Guarde los cambios en el proyecto actual y realice pruebas con varios textos y llaves. PARTE 3: Aplicación que utiliza Do … Loop Until Problema a solucionar: “Crear una aplicación que dado un número lo muestre al revés.” 1. Agregue un nuevo formulario al proyecto y elíjalo como formulario de inicio. 2. Diseñe el siguiente esquema de objetos (Figura 1.3) y asigne los valores a las propiedades descritas. Propiedades Figura 1.3 Diseño de objetos del Form3 (Controles) Name Text Form3 frmReves Mostrar un número al revéz Label1 lblNumero Numero: Label2 lblFactorial Al revés: Textbox1 txtNumero (Vacio) Textbox2 txtreves (Vacio) Button1 btnCalcular Calcular Button2 btnSalir Salir Enable False 3. Proceda a digital el código detallado a continuación, en el evento y objeto especificado. Objeto y Evento/Nivel btnCalcular Click If IsNumeric(txtnumero.Text) AndAlso CInt(txtnumero.Text) > 0 Then Dim numero As Integer = CInt(txtnumero.Text) 'Para poner al revés un número hay que ir dividiendo el número 'para sacar al digito mas significativo y colocarlo en el nuevo 'numero en el digito menos significativos y asi sucesivamente Dim div As Integer 'Contiene el dividor para sacar el digito mas significativo Dim r As Integer 'Almacena el digito mas significativo Dim reves As Integer 'Almacena el numero al revés Dim multi As Integer = 1 'Multiplica digito mas significativo txtnumero.Text = numero.ToString 'verificamos la cantidad de digitos del número 'Para asignar su divisor If numero >= 100000 And numero <= 999999 Then div = 100000 Lenguajes de Programación 1 6 Guía # 2: ESTRUCTURAS REPETITIVAS ElseIf numero >= 10000 And numero <= 99999 Then div = 10000 ElseIf numero >= 1000 And numero <= 9999 Then div = 1000 ElseIf numero >= 100 And numero <= 999 Then div = 100 ElseIf numero >= 10 And numero <= 99 Then div = 10 ElseIf numero < 10 Then div = 1 Else MsgBox("Número fuera de rango (1-999999)") Exit Sub End If Do 'Capturamos el digito mas significativo r = numero \ div 'Restamos este digito al numero numero = numero - r * div 'Calculamos el siguiente divisor div = div / 10 'multiplicamos el digito segun su peso y lo sumanos al nuevo numero reves = reves + (r * multi) 'Calculamos el siguiente multiplicador multi = multi * 10 'El proceso se repite hasta que el numero es igual a 0 Loop Until numero = 0 txtreves.Text = reves.ToString End If btnSalir Click Redacte el código para salir 4. Guarde los cambios en el proyecto actual y realice pruebas con varios números. PARTE 4: Aplicación utilizando While … End while Problema a solucionar: “Crear una aplicación que muestre la sucesión de ULAM dado un número entero positivo. La conjetura de ULAM comienza con cualquier numero positivo, Si es par se divide entre 2, si es impar, se multiplica por 3 y se le agrega 1, se obtienen enteros sucesivamente hasta obtener un 1” Propiedades (Controles) Name Text Form4 frmULAM Sucesión de ULAM Label1 lblNumero Sucesión de ULAM: ListBox1 lstLista Button1 btnCalcular Calcular Button2 btnSalir Salir Figura 1.4: Diseño de objetos del Form4 1. Agregue un nuevo formulario al proyecto y elíjalo como formulario de inicio. Lenguajes de Programación 1 7 Enable Guía # 2: ESTRUCTURAS REPETITIVAS 2. Diseñe el siguiente esquema de objetos (Figura 1.4) y asigne los valores a las propiedades ahí descritas. 3. Proceda a digital el código detallado a continuación, en el evento y objeto especificado. Objeto y Evento/Nivel btnCalcular Click Dim numero As Integer Dim texto As String texto = InputBox("Ingrese un número positivo") If IsNumeric(texto) AndAlso CInt(texto) > 0 Then numero = CInt(texto) lstLista.Items.Add(numero) While numero <> 1 If numero Mod 2 = 0 Then numero /= 2 Else numero = (numero * 3) + 1 End If lstLista.Items.Add(numero) End While Else MsgBox("Dato incorrectos. Debe ingresar un número positivo", MsgBoxStyle.Critical) End If btnSalir Click Redacte el código para salir 4. Guarde los cambios en el proyecto actual y realice pruebas con varios números. EJERCICIOS A REALIZAR AL FINALIZAR EL PROCEDIMIENTO • Modifique el formulario desarrollado en la Parte 1, agregando otro boton, el cual realice el calculo del factorial, pero con una estructura de control repetitiva diferente al utilizado inicialmente. • Realice una aplicación que verifique si un número es primo o no. Recuerde que un número primo es aquel que solo puede ser divisible entre el mismo y la unidad. • Realice una aplicación que solicite una contraseña (Usted elije cual sera..). Si la contraseña es correcta muestra en ese formulario un mensaje secreto. El usuario tendrá 3 intentos para ingresar la contraseña correcta. Si no lo logra muestre un mensaje de error en el formulario. V. DISCUSION DE RESULTADOS Elabore un proyecto en el cual solucione los siguientes problemas, cada uno en un form diferente. PROBLEMAS A RESOLVER: 1. Elabore una aplicación que muestre en un control ListBox los números de la serie Fibonacci (0, 1, 1, 2, 3, 5, 8, 13, 21...) generados hasta un número introducido por el usuario. Ejemplo: si el usuario introduce valor 11, la serie a mostrar constaria de estos valores: 0, 1, 1, 2, 3, 5 y 8. No se mostraria el 13 por ser mayor que el valor limite ingresado por usuario. 2. Un estudiante de la materia de Expresión oral y escrita necesita un programa donde pueda introducir un texto y este le calcule la cantidad de palabras que contiene el texto. Lenguajes de Programación 1 8 Guía # 2: ESTRUCTURAS REPETITIVAS 3. Un docente necesita una aplicación para calcular la nota promedio, nota mayor y menor de su grupo de estudiantes del curso de CCNA de la Academia Cisco. El docente ingresará la cantidad de notas a procesar, para luego digitar nota por nota. Una nota es un puntaje “entero” valido solamente entre el rango de 1 – 100 Finalmente, envíe la carpeta del proyecto resultante, de manera comprimida al email de su instructor(a) en la fecha que lo indique!! VII. BIBLIOGRAFÍA • Bill Evjen, Jason Beres y otros (2002), El libro de Visual Basic.NET (1era Ed), España. Editorial Anaya • Ceballos, Francisco Javier (2006), ENCICLOPEDIA DE MICROSOFT VISUAL BASIC (1er Ed), Mexico, Editorial ALFAOMEGA, ISBN: 9701512189 Lenguajes de Programación 1 9