programación matemática. estructuras de control(*) luis cabello

28
ESTALMAT -Andalucía Oriental Actividades 07/08 Sesión: 19 Fecha: 19-04-2008 Título: Estructuras de Control _____________________________________________________________________________ Resumen teórico. En la Consola Abre nuevo proyecto y elige Consola aplicación y ponle el nombre que quieras y escribe: Module Module1 Sub Main() Console.Write( "Hola") Console.Read() End Sub End Module Ejecútalo. Constantes y Variables Constantes: Una constante es algo que permanece inalterable, por eso se llama constante. Las constantes se declaran de la forma: Const nombre de la constante As tipo de dato = valor Por ejemplo: Const n As Integer = 15 ¿Qué ventajas tiene usar constantes en lugar de usar el valor directamente? Pues que, hay ocasiones en las que dicho valor se repite en un montón de lugares, y si por una casualidad decidimos que en lugar de tener el valor 15, queremos que tenga el 22 cambiamos el valor que se le asigna a la constante en la declaración, en vez de tener que buscar los sitios en los que aparece dicho valor y cambiarlo uno a uno. Variables: Una variable es una dirección de memoria en la que se guarda un valor o un objeto. Pero antes de utilizar una variable tenemos que declararla. Esto se hace de la siguiente manera: Dim i As Integer o Dim s As String Con esto le estamos diciendo al vb.NET que reserve espacio en su memoria para guardar un valor de tipo Integer, (numérico), en la variable i y que en la variable s vamos a guardar valores de cadena de caracteres. Las variables se pueden declarar de dos formas, aunque básicamente es lo mismo: 1.- Declarando la variable y dejando que VB asigne el valor por defecto. Página 1

Upload: phamngoc

Post on 06-Jan-2017

219 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programación matemática. Estructuras de control(*) Luis Cabello

ESTALMAT -Andalucía Oriental Actividades 07/08Sesión: 19 Fecha: 19-04-2008 Título: Estructuras de Control _____________________________________________________________________________

Resumen teórico.En la Consola

Abre nuevo proyecto y elige Consola aplicación y ponle el nombre que quieras y escribe:Module Module1

Sub Main() Console.Write("Hola") Console.Read() End Sub

End ModuleEjecútalo.

Constantes y VariablesConstantes:Una constante es algo que permanece inalterable, por eso se llama constante. Las constantes se declaran de la forma: Const nombre de la constante As tipo de dato = valor Por ejemplo: Const n As Integer = 15

¿Qué ventajas tiene usar constantes en lugar de usar el valor directamente?Pues que, hay ocasiones en las que dicho valor se repite en un montón de lugares, y si por una casualidad decidimos que en lugar de tener el valor 15, queremos que tenga el 22 cambiamos el valor que se le asigna a la constante en la declaración, en vez de tener que buscar los sitios en los que aparece dicho valor y cambiarlo uno a uno.

Variables:Una variable es una dirección de memoria en la que se guarda un valor o un objeto.

Pero antes de utilizar una variable tenemos que declararla. Esto se hace de la siguiente manera: Dim i As Integer o Dim s As String

Con esto le estamos diciendo al vb.NET que reserve espacio en su memoria para guardar un valor de tipo Integer, (numérico), en la variable i y que en la variable s vamos a guardar valores de cadena de caracteres.

Las variables se pueden declarar de dos formas, aunque básicamente es lo mismo:1.- Declarando la variable y dejando que VB asigne el valor por defecto.

Página 1

Page 2: Programación matemática. Estructuras de control(*) Luis Cabello

ESTALMAT -Andalucía Oriental Actividades 07/08Sesión: 19 Fecha: 19-04-2008 Título: Estructuras de Control _____________________________________________________________________________ Por ejemplo: Dim i As Integer , entonces i tendrá un valor inicial de 0. si queremos que tenga el valor 15, escribiremos i=15.

2.- Declarando la variable y asignándole el valor inicial que queramos que tenga. Dim i As Integer = 15

Recuerda que por defecto, cuando no se asigna un valor a una variable, ésta contendrá : - Las variables numéricas tendrán un valor CERO.- Las cadenas de caracteres una cadena vacía: ""- Las variables Boolean un valor False (recuerda que False y CERO es lo mismo)- Las variable de tipo Objeto tendrán un valor Nothing, es decir nada, un valor nulo.

El Visual Basic no "obliga" a que se declaren todas las variables que vayamos a usar. Pero es una muy aconsejable hacerlo.

Tipos de datos de Visual Basic.NET y su equivalente en el Common Language Runtime (CLR)

Tipo de Visual Basic

Tipo en CLR(Framework)

Espacio de memoria

que ocupa

Valores que se pueden almacenary comentarios

Boolean System.Boolean 2 bytes Un valor verdadero o falso. Valores: True o False. En VB se pueden representar por -1 o 0, en CLR serán 1 y 0, aunque no es recomendable usar valores numéricos, es preferible usar siempre True o False.Dim b As Boolean = True

Byte System.Byte 1 byte Un valor positivo, sin signo, para contener datos binarios.Valores: de 0 a 255.Puede convertirse a: Short, Integer, Long, Single, Double o Decimal sin recibir overflowDim b As Byte = 129

Char System.Char 2 bytes Un carácter Unicode.Valores: de 0 a 65535 (sin signo).

No se puede convertir directamente a tipo numérico.Para indicar que una constante de cadena, realmente es un Char, usar la letra C después de la cadena:Dim c As Char = "N"c

Date System.DateTime 8 bytes Una fecha.Valores: desde las 0:00:00 del 1 de Enero del 0001 hasta las 23:59:59 del 31 de Diciembre del 9999.

Las fechas deben representarse entre almohadillas # y por lo habitual usando el formato norteamericano: #m-d-yyyy#

Página 2

Page 3: Programación matemática. Estructuras de control(*) Luis Cabello

ESTALMAT -Andalucía Oriental Actividades 07/08Sesión: 19 Fecha: 19-04-2008 Título: Estructuras de Control _____________________________________________________________________________

Dim d As Date = #10-27-2001#

Decimal System.Decimal 16 bytes Un número decimal.Valores:de 0 a +/-79,228,162,514,264,337,593,543,950,335 sin decimales;de 0 a +/-7.9228162514264337593543950335 con 28 lugares a la derecha del decimal;el número más pequeño es:+/-0.0000000000000000000000000001 (+/-1E-28). En los literales se puede usar la letra D o el signo @ para indicar que el valor es Decimal.Dim unDecimal As Decimal = 9223372036854775808DDim unDecimal2 As Decimal = 987654321.125@

Double System.Double 8 bytes Un número de coma flotante de doble precisión.Valores:de -1.79769313486231570E+308 a-4.94065645841246544E-324 para valores negativos;de 4.94065645841246544E-324 a 1.79769313486231570E+308 para valores positivos. Se puede convertir a Decimal sin recibir un overflow.Se puede usar como sufijo el signo almohadilla # o la letra R para representar un valor de doble precisión:Dim unDoble As Double = 125897.0235RDim unDoble2 As Double = 987456.0125#

Integer System.Int32 4 bytes Un número entero (sin decimales)Valores:de -2,147,483,648 a 2,147,483,647.

Se puede convertir a Long, Single, Double o Decimal sin producir overflow.Se puede usar la letra I o el signo % para indicar que es un número entero:Dim unEntero As Integer = 250009IDim unEntero2 As Integer = 652000%

Long(entero largo)

System.Int64 8 bytes Un entero largo (o grande)Valores:de -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807. Se puede convertir a Single, Double o Decimal sin producir overflow.Se puede usar la letra L o el signo & para indicar que es un número Long:Dim unLong As Long = 12345678LDim unLong2 As Long = 1234567890&

Object System.Object (class) 4 bytes Cualquier tipo se puede almacenar en una variable de tipo Object.Todos los datos que se manejan en .NET están basados en el tipo Object.

Short(entero corto)

System.Int16 2 bytes Un entero corto (sin decimales)Valores:de -32,768 a 32,767.

Página 3

Page 4: Programación matemática. Estructuras de control(*) Luis Cabello

ESTALMAT -Andalucía Oriental Actividades 07/08Sesión: 19 Fecha: 19-04-2008 Título: Estructuras de Control _____________________________________________________________________________

Se puede convertir a: Integer, Long, Single, Double o Decimal sin producir un overflow.Se puede usar la letra S para indicar que es un número entero corto:Dim unShort As Short = 32000S

Single System.Single 4 bytes Número de coma flotante de precisión simple.Valores:de -3.4028235E+38 a -1.401298E-45 para valores negativos;de 1.401298E-45 a 3.4028235E+38 para valores positivos.

Se puede convertir a: Double o Decimal sin producir overflow.Se pueden usar la letra F y el símbolo ! para indicar que es un número Single:Dim unSingle As Single = 987.125FDim unSingle2 As Single = 65478.6547!

String(cadenas de longitud variable)

System.String (clase) Depende de la plataforma

Una cadena de caracteres Unicode.Valores:de 0 to aproximadamente 2 billones (2^31) de caracteres Unicode.

Se puede usar el símbolo $ para indicar que una variable es un String.

Tipos definidos por el usuario(estructuras)

(heradada de System.ValueType)

Depende de la plataforma

Cada miembro de la estructura tiene su rango, dependiendo del tipo de dato que representa.

Una expresión está compuesta por variables constantes y operadores.

Prioridad de los operadores aritméticos y de concatenación:

Exponenciación (^)Negación (-)Multiplicación y división (*, /)División de números enteros (\)Módulo aritmético (Mod)Suma y resta (+, -)Concatenación de cadenas (&)

Operadores de comparación:Igualdad (=)Desigualdad (<>)

Página 4

Page 5: Programación matemática. Estructuras de control(*) Luis Cabello

ESTALMAT -Andalucía Oriental Actividades 07/08Sesión: 19 Fecha: 19-04-2008 Título: Estructuras de Control _____________________________________________________________________________ Menor o mayor que (<, >)Mayor o igual que (>=)Menor o igual que (<=)

Operadores lógicos:

Negación (Not)Conjunción (And, AndAlso)Disyunción (Or, OrElse, Xor)La prioridad de los operadores igual que matematicas.

Podemos usar cualquier constante o variable en las expresiones, e incluso, podemos usar el resultado de esa expresión para asignar un valor a una variable.

Por ejemplo:Dim x As Integer = 25Dim i As Integeri = x * 2

En este caso, se evalúa el resultado de la expresión, (lo que hay a la derecha del signo igual), y el resultado de la misma, se asigna a la variable que estará a la izquierda del signo igual.

Incluso podemos hacer cosas como esta:

i = i + 15, esto no tiene sentido en matemáticas.

Esto último se llama incrementar una variable, y el vb.NET tiene su propio operador para estos casos, es decir cuando lo que asignamos a una variable es lo que ya había antes más el resultado de una expresión:

i += 15

Aunque también se pueden usar: *=, /=, -=, etcétera, dependiendo de la operación que queramos hacer con el valor que ya tuviera la variable.

Por tanto i = i * 2, es lo mismo que i *= 2

Página 5

Page 6: Programación matemática. Estructuras de control(*) Luis Cabello

ESTALMAT -Andalucía Oriental Actividades 07/08Sesión: 19 Fecha: 19-04-2008 Título: Estructuras de Control _____________________________________________________________________________ No podemos asignar a una variable de tipo numérico el resultado de una expresión alfanumérica:i += "10 * 25"

Ya que "10 * 25" es una constante de tipo cadena, no una expresión que multiplica 10 por 25.Al estar entre comillas dobles se convierte automáticamente en una constante de cadena y deja de ser una expresión numérica.

Y si tenemos Option Stric On, tampoco podríamos usar números que no fuesen del tipo Integer:i += 25 * 3.1416

Ya que el VB se quejará... aunque para solventar estos inconvenientes existen unas funciones de conversión, que sirven para pasar datos de un tipo a otro.

En este caso, usamos la función Val para convertir una cadena en un número, pero ese número es del tipo Double y si tenemos Option Strict On, no nos dejará convertirlo en un Integer... así de "estricto" es el Option Strict.

Para solucionarlo, usaremos la función CType:i = CType(Val("10 * 25"), Integer)Con esto le estamos diciendo al VB que primero convierta la cadena en un número mediante la función Val, (que devuelve un número de tipo Double), después le decimos que ese número Double lo convierta en un valor Integer.

También podríamos hacerlo de esta otra forma:i = CInt(Val("10 * 25"))

Pero cuidado con los valores que se evalúan, ya que si el valor que se quiere asignar no "cabe" en la variable a la que lo asignamos, nos dará un error de overflow... es decir que el número que queremos asignar es más grande de los que ese tipo de datos puede soportar... para solucionar esto, habrá que usar un tipo de datos que soporte valores mayores... a eso es a lo que me refería con lo de la conversión a otros tipos sin producir overflow de la tabla anterior.

Por ejemplo:i = CInt(Val("25987278547875"))dará error, porque el número ese que está dentro de las comillas es demasiado grande para almacenarlo en una variable de tipo Integer.

Página 6

Page 7: Programación matemática. Estructuras de control(*) Luis Cabello

ESTALMAT -Andalucía Oriental Actividades 07/08Sesión: 19 Fecha: 19-04-2008 Título: Estructuras de Control _____________________________________________________________________________ Veamos un resumen de las distintas funciones de conversión de tipos y algunos ejemplos:(estos están tomados de la ayuda de Visual Basic .NET)

Nombre de la función

Tipo de datos que devuelve

Valores del argumento "expresion"

CBool(expresion) Boolean Cualquier valor de cadena o expresión numérica.CByte(expresion) Byte de 0 a 255; las fracciones se redondean.CChar(expression) Char Cualquier expresión de cadena; los valores deben

ser de 0 a 65535.CDate(expresion) Date Cualquier representación válida de una fecha o una

hora.CDbl(expresion) Double Cualquier valor Duoble, ver la tabla anterior para

los valores posibles.CDec(expresion) Decimal Cualquier valor Decimal, ver la tabla anterior para

los valores posibles.CInt(expresion) Integer Cualquier valor Integer, ver la tabla anterior para

los valores posibles, las fracciones se redondean.CLng(expresion) Long Cualquier valor Long, ver la tabla anterior para los

valores posibles, las fracciones se redondean.CObj(expresion) Object Cualquier expresión válida.CShort(expresion) Short Cualquier valor Short, ver la tabla anterior para los

valores posibles, las fracciones se redondean.CSng(expresion) Single Cualquier valor Single, ver la tabla anterior para

los valores posibles.CStr(expresion) String Depende del tipo de datos de la expresión. -

Nota:Todos los objetos de vb.NET tienen unos métodos para realizar conversiones a otros tipos, al menos de número a cadena, ya que tienen la propiedad .ToString que devuelve una representación en formato cadena del número en cuestión (igual que CStr).-

CType(expresion, Tipo)

El indicado en el segundo

Cualquier tipo de datos

Página 7

Page 8: Programación matemática. Estructuras de control(*) Luis Cabello

ESTALMAT -Andalucía Oriental Actividades 07/08Sesión: 19 Fecha: 19-04-2008 Título: Estructuras de Control _____________________________________________________________________________

parámetro Val(expresion) Double Una cadena de caracteres.

Fix(expresion) Depende del tipo de datos de la expresión

Cualquier tipo de datos

Int(expresion) Depende del tipo de datos de la expresión

Cualquier tipo de datos

Int y Fix devuelve un valor del mismo tipo que el que se indica en el parámetro o expresión, pero sin decimales.

Estructuras de decisión

If <expresión a evaluar> Then <Lo que haya que hacer si la expresión evaluada devuelve Verdadero>

Esta es la forma más simple, ya que aquí lo que se hace es evaluar la expresión que se indica después de IF y si esa expresión devuelve un valor verdadero, (es decir es verdad), se ejecutan los comandos que haya después de THEN y si esa expresión no es cierta, se ejecuta lo que haya en la siguiente línea.

Eso mismo también se suele usar de esta otra forma:If <expresión a evaluar> Then <Lo que haya que hacer si la expresión evaluada devuelve Verdadero>End If

If <expresión a evaluar> Then <Lo que haya que hacer si la expresión evaluada devuelve Verdadero>Else <Lo que haya que hacer si no se cumple>End If

Página 8

Page 9: Programación matemática. Estructuras de control(*) Luis Cabello

ESTALMAT -Andalucía Oriental Actividades 07/08Sesión: 19 Fecha: 19-04-2008 Título: Estructuras de Control _____________________________________________________________________________ Después de Else podemos usar otro IF si así lo creemos conveniente, esto es útil cuando queremos comprobar más de una cosa y dependiendo del valor, hacer una cosa u otra:

If a = 10 Then ' Lo que sea que haya que hacer cuando a vale 10ElseIf a = 15 Then ' Lo que haya que hacer cuando a vale 15Else ' Lo que haya que hacer en caso de que a no valga ni 10 ni 15End If' Esto se ejecuta siempre después de haberse comprobado todo lo anterior.

Fíjate que en medio de cada If / Then he usado lo que se llama un comentario.Los comentarios empiezan por una comilla simple (apóstrofe), en los comentarios podemos poner lo que queramos, con la seguridad de que no será tenido en cuenta por el Visual Basic.La expresión que se indica después de IF puede ser una expresión "compuesta", es decir se pueden indicar más de una expresión, pero para ello hay que usar algunos de los operadores lógicos, tales como AND, OR o NOT.

Por ejemplo si queremos comprobar si el valor de i es mayor que 200 o es igual a 150, haríamos algo así:If i > 200 Or i = 150 Then

Pero si lo que queremos es que el valor de i sea mayor que 200 y menor de 500, habría que usar AND:If i > 200 And i < 500 Then

Por último, si queremos que la condición se cumpla cuando i NO sea igual a 100:If Not i = 100 ThenAunque esto mismo podríamos haberlo hecho de esta otra forma:If i <> 100 Then

Con AND se cumple la verdad si las dos expresiones son verdaderas.Con Or se cumple si cualquiera de las expresiones es verdadera.Por supuesto, podemos usar expresiones en las que se mezclen AND y OR, aunque en estos casos es recomendable el uso de paréntesis para separar las expresiones "dudosas".

Ya que estamos, decirte que los símbolos que podemos usar para efectuar comparaciones, son estos:

Página 9

Page 10: Programación matemática. Estructuras de control(*) Luis Cabello

ESTALMAT -Andalucía Oriental Actividades 07/08Sesión: 19 Fecha: 19-04-2008 Título: Estructuras de Control _____________________________________________________________________________ = igual< menor que> mayor que<= menor o igual>= mayor o igual<> distintoSeguramente ya lo sabías, pero... nunca está de más.

Para terminar, decirte que las expresiones que se pueden usar con el IF pueden ser tanto numéricas como alfanuméricas o de cadena, ya que también puede ser conveniente saber si el contendido de la cadena s es mayor que la palabra "hola", aunque en este tipo de expresiones, se evalúa tal y como si se fuese a clasificar... es decir "ahora" será menor que "hola", ya que si lo clasificáramos, tendríamos que la letra A está antes que la H.Aquí también juega un poco el Option Compare Binary ya que se hacen distinciones de mayúsculas y minúsculas, aunque a la hora de clasificar (u ordenar), las minúsculas están después de las mayúsculas, por tanto "Amigo" será menor que "amigo" si es que tenemos puesto el Option Compare Binary.Pero serán iguales si está puesto el Option Compare Text.

Si quieres hacer algunas pruebas, puedes crear un proyecto del tipo Consola y usar el Console.WriteLine para mostrar cosas en la pantalla, aunque debes acordarte al final de poner un Console.ReadLine para que la pantalla se quede visible hasta que pulses Intro.

Dim unByte As Byte = 129Dim unBoolean As Boolean = TrueDim unChar As Char = "N"c'Dim unChar2 As Char = "B" ' (Con Option Strict On da error)Dim unaFecha As Date = #10/27/2001#Dim unDecimal As Decimal = 99912581258.125DDim unDecimal2 As Decimal = 9876543210123456@Dim unDoble As Double = 125897.12045RDim unDoble2 As Double = 2457998778745.4512#'Dim unInt As Integer = 24579987787456 ' (Con Option Strict On da error)Dim unEntero As Integer = 250009IDim unEntero2 As Integer = 652000%Dim unLong As Long = 123456789LDim unLong2 As Long = 987654&Dim unShort As Short = 32000S

Página 10

Page 11: Programación matemática. Estructuras de control(*) Luis Cabello

ESTALMAT -Andalucía Oriental Actividades 07/08Sesión: 19 Fecha: 19-04-2008 Título: Estructuras de Control _____________________________________________________________________________ 'Const n As Integer = 15'Dim i As Integer

i = 10i += 25 + (n * 2)Console.WriteLine("(i=10, n=15), 'i += 25 + (n * 2)' es igual a: " & CStr(i))i += CType(Val("10 * 25"), Integer)'i = CInt(Val("25987278547875")) ' (dará error)i = CInt(Val("25000"))Console.WriteLine(i)'unDoble = Fix(unDoble2)Console.WriteLine("unDoble = Fix(" & unDoble2.ToString & ") : " & unDoble.ToString)unDoble2 = 2457998778745.665#unDoble = CInt(unDoble2)Console.WriteLine("unDoble = Int(" & unDoble2.ToString & ") : " & unDoble.ToString)'unDoble = CInt(unDoble2)'Console.WriteLine("unDoble = CInt(" & unDoble2.ToString & "): " & unDoble.ToString)'unDoble = Fix(8.9)Console.WriteLine("unDoble = Fix(8.9) : " & unDoble.ToString)'unDecimal = Fix(8.9D)Console.WriteLine("unDecimal = Fix(8.9D) : " & unDecimal.ToString)'Console.WriteLine("i vale: " & CStr(i))If i > 1500 Then Console.WriteLine("i es mayor de 1500")End If'i = 200Console.WriteLine("Se asigna el valor " & CStr(i) & " a i")If i > 15 + n Then Console.WriteLine("i es mayor de 15 + n")Else Console.WriteLine("i NO es mayor de 15 + n")

Página 11

Page 12: Programación matemática. Estructuras de control(*) Luis Cabello

ESTALMAT -Andalucía Oriental Actividades 07/08Sesión: 19 Fecha: 19-04-2008 Título: Estructuras de Control _____________________________________________________________________________ End If'If i > 200 Or i < 500 Then Console.WriteLine("el valor de i es mayor de 200 O menor de 500")End IfIf i > 100 And i < 500 Then Console.WriteLine("el valor de i es mayor de 100 Y menor de 500")End IfIf Not i = 100 Then Console.WriteLine("i NO vale 100")End If

Dim a As Integer = 100Dim b As Integer = 50Dim x As Integer = n * 2 + 10If a = 100 Or (b > 50 And x = n * 2) Then Console.WriteLine ("SI: If a = 100 Or b > 50 And x = n * 2 Then")End If

If "amigo" > "Amigo" Then Console.WriteLine ("amigo > Amigo")Else Console.WriteLine ("amigo no es > Amigo")End IfConsole.ReadLine ()

Bucles en Visual Basic

For / Next, con este tipo de bucle podemos repetir un código un número determinado de veces.

La forma de usarlo sería:For <variable numérica> = <valor inicial> To <valor final> [Step <incremento>] ' contenido del bucle, lo que se va a repetirNextLa variable numérica tomará valores que van desde el valor inicial hasta el valor final, si no se especifica el valor del incremento, éste será 1.Pero si nuestra intención es que el valor del incremento sea diferente a 1, habrá que indicar

Página 12

Page 13: Programación matemática. Estructuras de control(*) Luis Cabello

ESTALMAT -Andalucía Oriental Actividades 07/08Sesión: 19 Fecha: 19-04-2008 Título: Estructuras de Control _____________________________________________________________________________ un valor de incremento; lo mismo tendremos que hacer si queremos que el valor inicial sea mayor que el final, con idea de que "cuente" de mayor a menor, aunque en este caso el incremento en realidad será un "decremento" ya que el valor de incremento será negativo.

Lo entenderemos mejor con un algunos ejemplos:

Dim i As Integer'For i = 1 To 10 ' contará de 1 hasta 10 ' la variable i tomará los valores 1, 2, 3, etc.Next'For i = 1 To 100 Step 2 ' contará desde 1 hasta 100 (realmente 99) de 2 en 2 ' la variable i tomará los valores 1, 3, 5, etc.Next'For i = 10 To 1 Step -1 ' contará desde 10 hasta 1 ' la variable i tomará los valores 10, 9, 8, etc.Next'For i = 100 To 1 Step -10 ' contará desde 100 hasta 1, (realmente hasta 10) ' la variable i tomará los valores 100, 90, 80, etc.Next'For i = 10 To 1 ' este bucle no se repetirá ninguna vezNext'For i = 1 To 20 Step 50 ' esto sólo se repetirá una vezNext

En algunos casos, hay que tener en cuenta que el valor final del bucle puede que no sea el indicado, todo dependerá del incremento que hayamos especificado. Por ejemplo, en el tercer

Página 13

Page 14: Programación matemática. Estructuras de control(*) Luis Cabello

ESTALMAT -Andalucía Oriental Actividades 07/08Sesión: 19 Fecha: 19-04-2008 Título: Estructuras de Control _____________________________________________________________________________ bucle, le indicamos que cuente desde 1 hasta 100 de dos en dos, el valor final será 99.

While / End While, se repetirá mientras se cumpla la expresión lógica que se indicará después de While.

La forma de usarlo es:While <expresión> ' lo que haya que hacer mientras se cumpla la expresiónEnd WhileCon este tipo de bucles, se evalúa la expresión y si el resultado es un valor verdadero, se ejecutará el código que esté dentro del bucle, es decir, entre While y End While.La expresión será una expresión lógica que se evaluará para conseguir un valor verdadero o falso.Veamos algunos ejemplos:

Dim i As Integer'While i < 10 Console.WriteLine(i) i = i + 1End WhileConsole.ReadLine()''Dim n As Integer = 3i = 1While i = 10 * n ' no se repetirá ninguna vezEnd While

En el primer caso, el bucle se repetirá mientras i sea menor que 10, fíjate que el valor de i se incrementa después de mostrarlo, por tanto se mostrarán los valores desde 0 hasta 9, ya que cuando i vale 10, no se cumple la condición y se sale del bucle.En el segundo ejemplo no se repetirá ninguna vez, ya que la condición es que i sea igual a 10 multiplicado por n, cosa que no ocurre, ya que i vale 1 y n vale 3 y como sabemos 1 no es igual a 30.

Do / Loop, este tipo de bucle es muy parecido al anterior, aunque algo más flexible.

Página 14

Page 15: Programación matemática. Estructuras de control(*) Luis Cabello

ESTALMAT -Andalucía Oriental Actividades 07/08Sesión: 19 Fecha: 19-04-2008 Título: Estructuras de Control _____________________________________________________________________________ Si se utiliza sólo con esas dos instrucciones, este tipo de bucle no acabará nunca y repetirá todo lo que haya entre Do y Loop.

Pero la flexibilidad a la que me refería es que este tipo de bucle se puede usar con dos instrucciones que nos permitirán evaluar expresiones lógicas:While y UntilPero no debemos confundir este While con el While/End While que acabamos de ver anteriormente, aunque la forma de usarlo es prácticamente como acabamos de ver.La ventaja de usar While o Until con los bucles Do/Loop es que estas dos instrucciones podemos usarlas tanto junto a Do como junto a Loop, la diferencia está en que si los usamos con Do, la evaluación se hará antes de empezar el bucle, mientras que si se usan con Loop, la evaluación se hará después de que el bucle se repita al menos una vez.

Veamos cómo usar este tipo de bucle con las dos "variantes":Do While <expresión> 'Loop

Do 'Loop While <expresión>

Do Until <expresión> 'Loop

Do 'Loop Until <expresión>

Página 15

Page 16: Programación matemática. Estructuras de control(*) Luis Cabello

ESTALMAT -Andalucía Oriental Actividades 07/08Sesión: 19 Fecha: 19-04-2008 Título: Estructuras de Control _____________________________________________________________________________ Usando Do con While no se diferencia en nada con lo que vimos anteriormente, con la excepción de que se use junto a Loop, pero como te he comentado antes, en ese caso la evaluación de la expresión se hace después de que se repita como mínimo una vez.

Until, a diferencia de While, la expresión se evalúa cuando no se cumple la condición, es como si negáramos la expresión con While (Not <expresión>)Una expresión usadas con Until podríamos leerla de esta forma: hasta que la expresión se cumpla:

Do Until X > 10 (repite hasta que X sea mayor que 10)Veamos un ejemplo para entenderlo mejor:

i = 0Do Until i > 9 Console.WriteLine(i) i = i + 1Loop

Este bucle se repetirá para valores de i desde 0 hasta 9 (ambos inclusive).Y este también:

i = 0Do While Not (i > 9) Console.WriteLine(i) i = i + 1Loop

Con esto entenderás mejor a lo que me refería con negar la expresión con While.En el caso de que Until se use junto a Loop, la expresión se comprobará después de repetir al menos una vez el bucle.

Cuando se quiere abandonar un bucle antes de que acabe de forma lógica lo haremos con: Exit For, Exit While, Exit Do.

Página 16

Page 17: Programación matemática. Estructuras de control(*) Luis Cabello

ESTALMAT -Andalucía Oriental Actividades 07/08Sesión: 19 Fecha: 19-04-2008 Título: Estructuras de Control _____________________________________________________________________________ En esta primera sesión Vamos a trabajar los siguientes contenidos:

- Formularios, controles y eventos (Cont.)- Constantes y variables (cont.).- Estructuras de control.- Estructuras de repetición.- Procedimientos.

Actividades:Actividad 1: Formularios, controles y eventos.Inicio del Proyecto “Visor de Imágenes” Como se usan tanto los visores de imágenes para visualizar fotos, etc. Diseña un visor de imágenes como el que se muestra en la figura.

Solución: Vamos a seguir trabajando con el entorno del lenguaje para ir haciéndose una idea de las inmensas posibilidades que tiene.Además nos vamos a ir adentrando poco a poco en la idea de la programación orientada a objetos. Visual Basic 2005 es un lenguaje orientado a objetos. Un Objeto es una estructura de programación que encapsula datos y funciones en una sola unidad y a la que solo se puede acceder a través de sus interfaces (propiedades,

métodos y eventos).Las Propiedades son atributos que describen al Objeto. Los métodos acciones que el objeto es capaz de realizar. Los eventos son métodos que se ejecutan de un modo especial provocados por el usuario al interactuar con los controles de un formulario.

Primero crea un formulario llamado Visor Imagen, Luego crea un lugar donde quieres que aparezca la imagen, un botón imagen para mostrarla, un botón para cerrar el programa, otro para cerrar el formulario, un botón para dibujar el borde, dos etiquetas para ver las coordenadas y dos botones de aumento y disminución. El Código para dar sentido a los eventos es el siguiente:

Public Class frmVisor

Private Sub btnSeleccionaImagen_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnSeleccionaImagen.Click

Página 1

Page 18: Programación matemática. Estructuras de control(*) Luis Cabello

ESTALMAT -Andalucía Oriental Actividades 07/08Sesión: 19 Fecha: 19-04-2008 Título: Estructuras de Control _____________________________________________________________________________ 'Mostrar el cuadro de diálogo abrir If ofdSeleccionaImagen.ShowDialog = Windows.Forms.DialogResult.OK Then 'Cargar la Imagen en el cuadro de Imagen PicAlojoImagen.Image = Image.FromFile(ofdSeleccionaImagen.FileName) 'Mostrar el nombre del archivo en el titulo del formulario Me.Text = "Ver imagen (" & ofdSeleccionaImagen.FileName & ")" End If End Sub

Private Sub btnCerrar_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnCerrar.Click Me.Close() End Sub

Private Sub btnAmpliar_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnAmpliar.Click Me.Width = Me.Width + 20 Me.Height = Me.Height + 20 End Sub Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click Me.Width = Me.Width - 20 Me.Height = Me.Height - 20 End Sub

Private Sub btnDibujaBorde_Click(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles btnDibujaBorde.Click Dim objGraphics As Graphics objGraphics = Me.CreateGraphics objGraphics.Clear(System.Drawing.SystemColors.Control) objGraphics.DrawRectangle(Pens.Blue, _ PicAlojoImagen.Left - 1, PicAlojoImagen.Top - 1, _ PicAlojoImagen.Width + 1, PicAlojoImagen.Height + 1) objGraphics.Dispose() End Sub

Private Sub PicAlojoImagen_MouseLeave(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles PicAlojoImagen.MouseLeave

Página 2

Page 19: Programación matemática. Estructuras de control(*) Luis Cabello

ESTALMAT -Andalucía Oriental Actividades 07/08Sesión: 19 Fecha: 19-04-2008 Título: Estructuras de Control _____________________________________________________________________________ lblX.Text = "" lblY.Text = "" End Sub

Private Sub PicAlojoImagen_MouseMove(ByVal sender As Object, ByVal e As _ System.Windows.Forms.MouseEventArgs) Handles PicAlojoImagen.MouseMove lblX.Text = "X: " & e.X lblY.Text = "Y: " & e.Y End Sub

Private Sub frmVisor_Load(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles Me.Load lblX.Text = "" lblY.Text = "" End Sub End Class

Actividad 2: Formularios, controles y eventos.Visor de Imágenes (continuación).Mejora el Visor de Imágenes dotándole de opciones de configuración, de un menú, de una barra de herramientas y de una barra de estado.Formulario de Opciones

Agrega un nuevo formulario Opciones a nuestro proyecto.Añade dos botones, OK y Cerrar.

Página 3

Page 20: Programación matemática. Estructuras de control(*) Luis Cabello

ESTALMAT -Andalucía Oriental Actividades 07/08Sesión: 19 Fecha: 19-04-2008 Título: Estructuras de Control _____________________________________________________________________________ Ahora programamos para que el formulario Opciones tenga el mismo icono que el formulario VisorImagen. Para ello haz doble clic en el formulario y en los iconos y escribe el siguiente código.

Public Class frmOpciones

Private Sub frmOpciones_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load Me.Icon = frmVisor.Icon End Sub

Private Sub btnOK_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnOK.Click Me.Close() End Sub

Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles btnCancelar.Click Me.Close() End Sub

End Class

Ahora en el formulario visor Imagen Creamos el Botón Opciones y lo programamos para que muestre el formulario Opciones.

Private Sub btnOpciones_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnOpciones.Click frmOpciones.Show() frmOpciones.WindowState = FormWindowState.Normal End Sub

Terminemos de montar el formulario Opciones y para ello creamos un cuadro de texto con una o varias líneas y con ScrollBars y haz doble clic sobre él y observa los posibles eventos.

Página 4

Page 21: Programación matemática. Estructuras de control(*) Luis Cabello

ESTALMAT -Andalucía Oriental Actividades 07/08Sesión: 19 Fecha: 19-04-2008 Título: Estructuras de Control _____________________________________________________________________________ Cambiamos propiedades para que el Botón OK funcione lo mismo que Intro y el Botón Cancelar lo mismo que escape.Ahora creamos un tabControl con dos fichas, una, General, que contiene una etiqueta, un cuadro de texto y una confirmación de salida y otra, Apariencia con un GroupBox y dentro dos RadioButton.Menú de Opciones Os propongo para la siguiente sesión que vayáis pensando en esta parte donde crearemos un menú, un menú contextual, una barra de herramientas y una barra de estado. Crea un menú con las opciones Fichero y Herramientas. Ahora programamos las opciones del Menú, que se consigue copiando código de un sitio a otro. ¿Por qué?Pongamos un menú contextual al cuadro donde se muestra la imagen y como opción de ese menú la opción Dibuja borde. Ahora vamos a asignar una combinación de teclas a cada una de las opciones del menú.

Con ToolStrip se crea una barra de herramientas y con StatusStrip una barra de estado para que quede el formulario Visor Imagen como se muestra en la imagen.

Actividad 3: Variables y estructuras de Control.Programa: Números Primos

Idea un programa para decidir si un número es primo. Depura el programa para que sea lo mas eficiente posible.Solución: Una forma de ver si un número es primo es probar a dividirlo por todos los números menores que él y si ninguno lo divide, el número es primo. Diseña el algoritmo.Diseña un formulario como el del margen y programa los controles para que funcione.

Página 5

Page 22: Programación matemática. Estructuras de control(*) Luis Cabello

ESTALMAT -Andalucía Oriental Actividades 07/08Sesión: 19 Fecha: 19-04-2008 Título: Estructuras de Control _____________________________________________________________________________ Mejoremos el algoritmo. Observa que el divisor (distinto del número n) más grande posible es n/2, así que podríamos probar sólo hasta el n/2 en vez de n-1. Pero si n/2 es un número entero que es divisor de n, entonces 2 también es divisor, pero ya probamos antes si el 2 dividía a n. Así que no hace falta probar con el n/2. Entonces el siguiente divisor más grande posible es n/3, pero por un razonamiento análogo, tampoco hace falta probarlo ya que antes habíamos probado con 3. La pregunta es hasta cuando hay que probar.El Código sería:Public Class Form1 Dim numero, j, i, p, num, n As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If IsNumeric(TextBox1.Text) = False Then MsgBox("Por Favor, introduce un valor numérico", MsgBoxStyle.Critical) TextBox1.Text = "" TextBox1.Focus() Exit Sub End If If CSng(TextBox1.Text) <= 0 Then MsgBox("Por Favor, introduce un número positivo", MsgBoxStyle.Question) TextBox1.Text = "" TextBox1.Focus() Exit Sub End If If CDec(TextBox1.Text) <> Int(CDec(TextBox1.Text)) Then MsgBox("Que sea entero", MsgBoxStyle.Exclamation) TextBox1.Text = "" TextBox1.Focus() End If If RadioButton1.Checked = True Then numero = CInt(TextBox1.Text) If numero = 1 Then TextBox2.Text = "No es primo" End If For i = 2 To Int(CInt(Math.Sqrt(numero))) If numero Mod (i) = 0 Then TextBox2.Text = "No es primo" Exit For Else TextBox2.Text = "Es primo"

Página 6

Page 23: Programación matemática. Estructuras de control(*) Luis Cabello

ESTALMAT -Andalucía Oriental Actividades 07/08Sesión: 19 Fecha: 19-04-2008 Título: Estructuras de Control _____________________________________________________________________________ End If Next End If End SubEnd Class

Actividad 4: Procedimientos.Programa: Números PrimosMejora el programa Números Primos para que utilice una función.Se trata de escribir la función “esprimo” que devolverá el valor -1 si el número introducido es primo y en caso contrario devuelve cero.Solución:Un procedimiento es un conjunto discreto de código que puede ser ejecutado desde otros bloques de código.Existen dos tipos de procedimientos:

• Que devuelven un valor (denominados funciones).• Que no devuelven un valor(denominados subrutinas o simplemente

procedimientos)FuncionesPublic Function Nombre(ByVal o ByRef variable As …) As … Codigo…End Function

Subrutinas o procedimientosPublic Sub Nombre(ByVal o ByRef variable As …) Codigo…End SubVamos a crear la función Esprimo que acepta como parámetro un número y devuelve el valor -1 si es primo y en caso contrario el valor cero.Escribe el siguiente código antes de End Class: Public Function Esprimo(ByVal primo As Integer) As Integer Dim i As Integer Esprimo = -1 'Si llega a ser primo devuelve -1 If primo = 1 Then Esprimo = 0 Exit Function End If For i = 2 To Int(CInt(Math.Sqrt(primo))) 'Raiz cuadrada de n

Página 7

Page 24: Programación matemática. Estructuras de control(*) Luis Cabello

ESTALMAT -Andalucía Oriental Actividades 07/08Sesión: 19 Fecha: 19-04-2008 Título: Estructuras de Control _____________________________________________________________________________ If primo Mod i = 0 Then Esprimo = 0 'No, no es primo y devuelve 0 Exit For 'Sale del For...Next End If Next i End FunctionAhora cambio el código:

Por este otroj = Esprimo(numero)If j = -1 Then TextBox2.Text = "Es primo"Else TextBox2.Text = "No es primo"End IfObserva como funciona la función.

Actividad 5: Variables , estructuras de Control y procedimientos.Programa: Divisores de un númeroMejora el programa anterior para que escriba los divisores de un número en un control de tipo ListView.Solución:Intenta tú hacer el algoritmo y luego refinarlo para que sea más eficiente.La solución que te proponemos es escribir el siguiente procedimiento al final del código.

Sub divisores(ByVal dividendo As Integer) Dim p As Integer ListView1.Items.Clear()

Página 8

Page 25: Programación matemática. Estructuras de control(*) Luis Cabello

ESTALMAT -Andalucía Oriental Actividades 07/08Sesión: 19 Fecha: 19-04-2008 Título: Estructuras de Control _____________________________________________________________________________ For p = 1 To Int(CInt(Math.Sqrt(dividendo))) If dividendo Mod p = 0 Then ListView1.Items.Add(Str(p)) End If Next If Int(CInt(Math.Sqrt(dividendo))) = CInt(Math.Sqrt(dividendo)) Then For p = Int(CInt(Math.Sqrt(dividendo))) - 1 To 1 Step -1 If dividendo Mod p = 0 Then ListView1.Items.Add(Str(dividendo / p)) End If Next Else For p = Int(CInt(Math.Sqrt(dividendo))) To 1 Step -1 If dividendo Mod p = 0 Then ListView1.Items.Add(Str(dividendo / p)) End If Next End If End Sub

Luego añade la instrucción que llama a este procedimiento justo detrás de donde se escribe en las cajas de texto si es primo o no.

Actividad 6: Variables y estructuras de control.Programa: Poliedros. Diseña una solución que permita elegir de un cuadro combinado uno de los poliedros regulares y tras introducir su arista calcule el área de dicho poliedro.

Solución:a) Diseña la solución Poliedros como en la imagen adjunta.

Llama al formulario frmPoliedros. Utiliza el icono Poliedros.

b) En el cuadro combinado, en la propiedad Ítems, introduce los nombres de los poliedros regulares, uno en cada línea. En la propiedad Text, escribe Cubo o Hexaedro

c) Haz doble-clic sobre el cuadro combinado y escribe el código:

Private Sub cmbPoliedro_SelectedIndexChanged(ByVal…

Página 9

Page 26: Programación matemática. Estructuras de control(*) Luis Cabello

ESTALMAT -Andalucía Oriental Actividades 07/08Sesión: 19 Fecha: 19-04-2008 Título: Estructuras de Control _____________________________________________________________________________ Select Case cmbPoliedro.Items.IndexOf(cmbPoliedro.Text)

Case 0 pbxPoliedro.Image = Image.FramFile(“Tetraedro.gif”)Case 1 pbxPoliedro.Image = Image.FromFile(“Cubo.gif”)Case 2 pbxPoliedro.Image = Image.FramFile (“Octaedro.gif”)Case 3

pbxPoliedro.Image = Image.FramFile(“Dodecaedro.gif”)Case 4 pbxPoliedro.Image = Image.FramFile(“Icosaedro.gif”)

End SelectEnd Sub

d) Haz doble-clic sobre el botón Calcular y escribe el código:Private Sub ButCalcular_Click(ByVal… a Dim Arista As Single Dim Área As SingleDebes introducir el código parea comprobar que los valores introducidos son numéricos y mayores que cero.

Arista = CSng(txtArista.Text) Select Case cmbPoliedro.Items.IndexOf(cmbPoliedro.Text)

Case -1 MsgBox (“Selecciona un poliedro de la lista”, MsgBoxStyle.Critical)

cmbPoliedros.Focus() Exit SubCase 0 Área = Arista ^ 2 * Math.Sqrt(3)Case 1 Área = 6 * Arista ^ 2Case 2 Área = 2 *Arista ^ 2 * Math.Sqrt(3)

Case 3 Área = 5 *Arista ^ 2 * Math.Sqrt(3)

Case 4 Área = 3 *Arista ^ 2 * Math.Sqrt(25+10 * Math.Sqrt(5)) End Select TxtÁrea.Text = Format(Área, “#,##0,00”)End sub

Página 10

Page 27: Programación matemática. Estructuras de control(*) Luis Cabello

ESTALMAT -Andalucía Oriental Actividades 07/08Sesión: 19 Fecha: 19-04-2008 Título: Estructuras de Control _____________________________________________________________________________

Actividad 7: Estructuras de repetición.Mejora el programa de la actividad anterior haciendo que escriba la fórmula del área de poliedro elegido.

Actividad 8: Variables y estructuras de control.Programa: Suma.

Diseña una solución para sumar los números enteros existentes entre dos números enteros dados de antemano, ambos inclusive.Solución:Haz el formulario y haz doble clic en el botón calcular y programa dicho evento.Primero Haz el algoritmo que resuelva el problema.Necesitas al menos tres variables para almacenar los números inicial, final e ir acumulando la cantidad:

Inicio = CInt(txtInicio.Text)Final = CInt(txtFinal.Text)Sumador = 0

El bloque iterativo sería: For Contador = Inicio To Final Sumador = Sumador + Contador NextActividad 9: Variables y estructuras de control.Programa: Dado.Diseña una solución que calcule el número de lanzamientos de un dado de seis caras para obtener un resultado determinado.

Solución:En el cuadro de texto de los resultados, en la propiedad Multiline selecciona True y en ScrollBar elige Vertical.Haz doble clic en “Comenzar lanzamientos” para escribir el evento.Tienes que inicializar la generación de números al azar mediante la siguiente instrucción: Randomize() Inicializa las dos variables Lanzamientos = 0 CaraAleatoria = 0

Por otro lado el código que resuelve el problema es:

Página 11

Page 28: Programación matemática. Estructuras de control(*) Luis Cabello

ESTALMAT -Andalucía Oriental Actividades 07/08Sesión: 19 Fecha: 19-04-2008 Título: Estructuras de Control _____________________________________________________________________________ Do CaraAleatoria = Int(6 * Rnd() + 1) pbxCara.Image = Image.FromFile(CaraAleatoria & ".bmp") txtResultados.Text = txtResultados.Text & CStr(CaraAleatoria) & vbCrLf Lanzamientos = Lanzamientos + 1 Loop Until CaraAleatoria = CInt(txtCaraDeseada.Text)

Página 12