FUNDAMENTOS DE PROGRAMACION

56
Fundamentos de Programación

Transcript of FUNDAMENTOS DE PROGRAMACION

Page 1: FUNDAMENTOS DE PROGRAMACION

Fundamentos de Programación

Page 2: FUNDAMENTOS DE PROGRAMACION

1. PROGRAMACIÓN ESTRUCTURADALa Programación Estructurada consiste en un conjunto de técnicas que emplea un

número limitado de estructuras de control y cuyo objetivo es reducir la complejidad de los problemas y minimizar los errores.

La programación estructurada incorpora:

• diseño descendente (top-down)

• recursos abstractos

• estructuras básicas

DISEÑO DESCENDENTE (TOP-DOWN)

El diseño descendente es la técnica que permite descomponer un problema complejo en problemas más sencillos, realizándose esta operación de forma sucesiva hasta llegar al nivel mínimo de abstracción en el cual se pueden codificar las operaciones en un lenguaje de programación.

Cada nivel de abstracción define de forma más concreta el problema y subdivide las operaciones en otras menos abstractas.

Con esta técnica se crean distintos niveles de refinamiento que se representan de la siguiente forma:

El Nivel 0 es el más abstracto, es la descripción funcional del problema.

El último nivel es el que permite la codificación en un lenguaje de programación concreto.

Ejemplo: Algoritmo que tiene como objetivo calcular la media de las notas de una clase

| PROGRAMACIÓN ESTRUCTURADA 2

Page 3: FUNDAMENTOS DE PROGRAMACION

RECURSOS ABSTRACTOS

El concepto de recurso abstracto es fundamental en la evolución de los lenguajes de programación. Este concepto hace referencia a la visión que se tiene de cada refinamiento en el diseño Top-Down ya que en cada paso se consideran tan sólo aquellos datos importantes para el nivel en el que estamos, obviando el resto -que se resolverán en los siguientes refinamientos-.

TEOREMA DE LA PROGRAMACIÓN ESTRUCTURADA

Un programa que utiliza la técnica de programación estructurada debe ser escrito utilizando sólo tres tipos de estructuras de control: secuenciales, selectivas y repetitivas.

Secuencia: Indica que las instrucciones se ejecutan una después de la otra, en el mismo orden en el cual aparecen en el programa. Se representa gráficamente como una caja después de otra, ambas con una sola entrada y una única salida.

Selección: Plantea la selección entre dos alternativas con base en el resultado de la evaluación de una condición o predicado; equivale a la instrucción IF de todos los lenguajes de programación y se representa gráficamente de la siguiente manera :

En las estructuras de selección siempre se examina una condición y en función de su evaluación la secuencia de ejecución continúa por una rama y otra, es decir, se ejecuta el bloque A si la condición C es verdadera y el bloque B si es falsa.

Iteración: Representa la ejecución repetida de una instrucción mientras que se cumple una determinada condición. El diagrama de flujo para esta estructura es el siguiente:

| PROGRAMACIÓN ESTRUCTURADA 3

Page 4: FUNDAMENTOS DE PROGRAMACION

Aquí el bloque A se ejecuta repetidamente mientras que la condición C se cumpla o sea cierta. También tiene una sola entrada y una sola salida; igualmente A puede ser cualquier estructura básica o conjunto de estructuras.

ETIQUETAS E INSTRUCCIÓN GO-TO

Ocasionalmente se habla de la programación estructurada como una técnica de programación que no utiliza go-to (instrucción de desvío del flujo de control en forma incondicional).

Algunas veces puede estar justificado el uso de go-to, pero esto ocurre en muy raras situaciones y siempre puede ser sustituido por otras sentencias.

VENTAJAS DE LA PROGRAMACIÓN ESTRUCTURADA

Con la programación estructurada obtenemos las siguientes ventajas:

Un programa estructurado no solamente tendrá una estructura, sino también una excelente presentación.

Un programa estructurado tiende a ser mucho más fácil de comprender que programas escritos en otros estilos.

La facilidad de comprensión del contenido de un programa puede facilitar el chequeo de la codificación y reducir el tiempo de prueba y depuración de programas.

Un programa que es fácil para leer y el cual está compuesto de segmentos bien definidos tiende a ser simple, rápido y menos expuesto a mantenimiento.

PROGRAMACION MODULAR

En la programación modular el programa es dividido en módulos. Cada módulo realiza una terea específica y se codifica independientemente de los otros módulos. Cada módulo es analizado, codificado y puesto a punto por separado.

Los programas contienen un módulo denominado módulo principal, el cual supervisa todo lo que sucede, transfiriendo el control a submódulos (los que son denominados subprogramas), para que puedan realizar sus funciones. Sin embargo, cada submódulo devolverá el control al módulo principal una vez completada su tarea. Si las tareas asignadas a cada submódulo son demasiado complejas, se procederá a una nueva subdivisión en otros módulos más pequeños.

| PROGRAMACIÓN ESTRUCTURADA 4

Page 5: FUNDAMENTOS DE PROGRAMACION

En cuanto a la seguridad podemos decir que los módulos son independientes, de modo que ningún módulo puede tener acceso directo a cualquier otro módulo, excepto el módulo al que llama y sus submódulos correspondientes. Sin embargo, los resultados producidos por un módulo pueden ser utilizados por otro módulo cuando se transfiera a ellos el control.

Dada la ventaja de ser independientes el programa puede ser trabajado por diferentes programadores a la vez. Con esto se ahorra tiempo en el diseño del algoritmo y en su posterior codificación. También un módulo puede ser codificado sin afectar a los demás, incluso sin alterar su función principal.

Los módulos toman diferentes nombres, según el lenguaje de programación en el cual estén expresados:

• Subrutinas en BASIC,

• Procedimientos en Pascal, subrutinas en FORTRAN,

• Secciones en COBOL y

• Funciones en general en todos los lenguajes.

| PROGRAMACIÓN ESTRUCTURADA 5

Page 6: FUNDAMENTOS DE PROGRAMACION

2. APLICACIONES DE CONSOLA EN .NETUna aplicación de consola es aquella que se ejecuta en una pantalla del tipo MS-DOS, ahora denominada interfaz de línea de órdenes.

Para crear un proyecto de consola se debe abrir Visual Studio y hacer clic sobre Archivo>Nuevo Proyecto y a continuación seleccionar la plantilla Aplicación de consola.

La plantilla de Aplicación de consola abre un fichero con el siguiente código

Todos los programas de consola de Visual Basic .NET se basan en la definición de un módulo. Para definir un módulo se utiliza la palabra reservada Module que finaliza con End Module. En el interior del módulo se integran todas las órdenes del programa.

El procedimiento de entrada al programa es la definida con la cabecera Sub Main() que finaliza con End Sub. Cuando se compila un programa VB .NET espera que exista un procedimiento Main donde se define el punto de entrada y salida del programa.

Sobre la plantilla de Aplicación de consola se deben realizar todas las incorporaciones de código necesarias para que el programa realice las operaciones que se demandan.

En primer lugar se debe cambiar el nombre Module1 por otro más significativo que esté relacionado con la funcionalidad del programa, por ejemplo, para un pequeño programa que muestre un mensaje “Hola mundo” podemos llamarle Saludo.

Todos los programas deben tener comentarios que documenten el código. Los comentarios se deben introducir con el símbolo ‘ como primer carácter.

‘Este es mi primer programa

Dentro del procedimiento Main se deben incorporar las órdenes del lenguaje de programación que deseamos que se ejecuten en el programa. Por ejemplo, para emitir un mensaje debemos utilizar la orden System.Console.WriteLine.

System.Console.WriteLine(“Hola mundo”)

Para que el mensaje permanezca en pantalla hasta que se pulse la tecla Enter se debe introducir la siguiente instrucción:

System.Console.ReadLine()

| PROGRAMACIÓN ESTRUCTURADA 6

Page 7: FUNDAMENTOS DE PROGRAMACION

Finalmente el programa queda como se muestra a continuación

Podemos mejorar el programa incorporando la orden

Imports nombreNamespace

Esta orden se utiliza para importar espacios de nombres (namespaces). Dicha orden ser utilizará al principio del fichero para indicar al módulo que si no encuentra una clase en el espacio de nombres actual, la busque en una de las que se han definido con Imports.

Si importamos el namespace System, por ejemplo, ya no será necesario escribir System en las órdenes que utilicen este namespace y el código del programa quedaría como sigue:

Guardar un programa

Después de crear el programa se debe guardar utilizando las entradas del menú Archivo>Guardar

Compilar y ejecutar un programa

Todo programa debe ser compilado, esta operación provoca que el programa fuente se traduzca a código intermedio (IL) para poder ejecutarlo posteriormente. El IDE de Visual Studio permite realizar la compilación y ejecución en un paso, utilizando las entradas del menú Depurar>Iniciar depuración (F5).

Al ejecutar el programa del ejemplo se vería una ventana similar a la siguiente:

| PROGRAMACIÓN ESTRUCTURADA 7

Page 8: FUNDAMENTOS DE PROGRAMACION

SALIDA POR PANTALLA DE VARIOS DATOS

Si es necesario mostrar varios datos en una misma línea en la salida por pantalla se puede utilizar un operador de concatenación (&)' concatenar múltiples valores' declarar variablesDim Nombre As StringDim Edad As Integer' asignar valor a las variablesNombre = "Lola"Numero = 35Console.WriteLine& Nombre & " tiene " & Numero & " años")Console.ReadLine()

DIVISIÓN DE UNA LÍNEA DE CÓDIGO

Si una instrucción es muy larga es posible dividirla en varias líneas utilizando el carácter de guión bajo ( _ ) en el punto de la línea de código en donde queremos continuar, teniendo en cuenta que siempre debe haber un espacio en blanco antes y después de este carácter, para que la división de la línea sea efectiva.

EjemploDim Resultado As Boolean

' una sola línea lógica y físicaResultado = ((30 + 5) * 5 > 100) And (52 > 200 / (2 + 5))

' varias líneas físicas, aunque internamente' el compilador reconoce una sola línea lógicaResultado = ((30 + 5) * 5 > 100) And _(52 > 200 / _(2 + 5))

PRÁCTICAS

1. Crear un programa que muestre tu nombre, tus apellidos y tu fecha de nacimiento en una misma línea.

| PROGRAMACIÓN ESTRUCTURADA 8

Page 9: FUNDAMENTOS DE PROGRAMACION

3. VARIABLES Y EXPRESIONES

DECLARACIÓN DE VARIABLES

Las variables declaradas en métodos, propiedades o indizadores se llaman variables locales. Una variable es un dato temporal en memoria que tiene un nombre, un tipo de dato, un ámbito y un alcance, los cuales lo dan forma como se declare esta.

Las variables pueden ser modificadas a lo largo del programa mientras esta sea accesible.

Se pueden declarar varias variables en una sola instrucción y además se pueden asignar directamente sus valores.

Sintaxis:Dim <identificadorVariable(s)>As<Tipo de Dato>[=<Valor>]

EjemplosDim b As Byte=2Dim uno, dos As Integer

Si una variable local no ha sido inicializada de forma expresa el compilador de VB.NET asigna, de forma automática, un valor por omisión correspondiente al tipo de la variable; por ejemplo, las variables numéricas son inicializadas a 0. Un caso especial es el tipo String que se inicializa a Nothing no a cadena vacía.

Para asignar un nuevo valor a una variable se utilizan operadores de asignación. En el caso de una variable ya declarada se usa el operador de asignación (=), como se ve en el siguiente ejemplo:

Dim empleadoNumero As IntegerempleadoNumero = 23;

Identificador

El nombre o identificador de una variable debe cumplir con las siguientes reglas.

Debe iniciar con carácter alfabético. Debería contener solo caracteres alfabéticos, dígitos y carácter de subrayado El nombre no debe exceder a 255 caracteres, etc.

A la hora de asignar un identificador a una variable se debe tener en cuenta que VB .NET no diferencia entre mayúsculas y minúsculas.

Se recomienda evitar poner todas las letras en mayúsculas, empezar con un signo de subrayado y el uso de abreviaturas.

Para escribir el nombre de las variables se recomienda utilizar la nomenclatura camelCasing que consiste en poner en mayúscula el primer carácter de todas las palabras excepto la primera. Utilice camelCasing para variables que definan variables, campos y parámetros, como se muestra en el siguiente ejemplo:

int bucleNumMax;

Período de duración

| PROGRAMACIÓN ESTRUCTURADA 9

Page 10: FUNDAMENTOS DE PROGRAMACION

El período de duración de un elemento declarado es el tiempo durante el cual está disponible para el uso.

Una variable definida tan solo con la palabra clave Dim se elimina de la memoria en el momento en que finaliza la ejecución de la subrutina donde está definida. Si lo que se desea es que conserve su valor entre llamadas se debe utilizar la palabra clave Static

Ejemplo

En el ejemplo siguiente la salida por pantalla será 1 y 2 ya que se mantienen los valores de la variable contador entre las distintas llamadas a la subrutina

Public Sub Metodo1() Static contador As Integer = 0 contador = contador + 1 Console.WriteLine(contador)End Sub

Public Sub Metodo2() Metodo1() Metodo1()End Sub

Ámbito de una variable

El lugar donde se declaren las variables va a determinar el ámbito en el que son accesibles. Se pueden declarar variables en :

Un bloque: Un bloque puede ser, por ejemplo, un If... End If, un Do... Loop o los bloques Get y Set

Un procedimiento: Definidos dentro de un Sub, Function o Property.

Un módulo: Una clase (Class), un módulo (Module) o estructura (Structure)

Un espacio de nombres: Un bloque Namespace.

Las variables abarcan un ámbito delimitado por el bloque en el que están definidas, así una variable definida a nivel de procedimiento, no existirá fuera del mismo. De la misma manera, si definimos una variable en un bloque dentro de un procedimiento, la variable no será accesible más allá de su instrucción de cierre (End, Loop o Next) .

Ejemplo

Las variables a y b no serán accesibles fuera de Main() en el siguiente programa:

Module SumaSub Main()

Dim a As DoubleDim b As Double…….

End SubEnd Module

| PROGRAMACIÓN ESTRUCTURADA 10

Page 11: FUNDAMENTOS DE PROGRAMACION

DECLARACIÓN DE CONSTANTES

Dentro de una aplicación, puede ser adecuado e interesante la declaración y uso de variables constantes cuyo valor asignado, no sea modificable a lo largo de la aplicación y que se utilice para un caso o ejecución determinada.

SintasixConst <identificadorVariable(s)>As<Tipo de Dato>=<Valor>

Ejemplo

El típico valor constante de ejemplo en toda demostración del uso y declaración de variables constantes es el valor PI.

Module PruebaConstansteSub Main()

Const PI As Double = 3.1416 Dim dValor As Decimal dValor = (2 * PI) ^ 2 …….

End SubEnd Module

TIPO DE DATOS

Todas las variables que se utilicen deben pertenecer a un tipo de datos. Cada tipo de datos tiene un nombre, pertenece a una clase, ocupa un espacio en la memoria y permite un rango de valores.

A continuación se muestran los tipos de datos básicos de .NET

Tipo Clase Tamaño Rango de valores

Boolean System.Boolean 4 bytes Trae o False

Byte System.Byte 1 Byte 0 a 255 (sin signo)

Char System.Char 2 Bytes 0 a 65535 (sin signo)

Date System.Datetime 8 Bytes 0:00:00 (medianoche) del 1 de enero de 0001 a 11:59:59 p.m. del 31 de diciembre de 9999.

Decimal System.Decimal 12 bytes +/- 79,228,162,514264,337,593,543,950,335 sin punto decimal; numero mas corto (no 0) es: +/- 0.0000000000000000000000000001

Double System.Double 8 bytes -1.79769313486231E308 hasta -4.94065645841247E-324 para valores

| PROGRAMACIÓN ESTRUCTURADA 11

Page 12: FUNDAMENTOS DE PROGRAMACION

negativos; 4.94065645841247E-324 hasta 1.79769313486232E308 para valores positivos

Integer System.Int32 4 bytes -2,147,483,684 to 2,147,483,647

Long System.Int64 8 bytes -9,223,372,036,854,775,808 hasta 9,223,372,036,854,775,807

Object System.Object 4 bytes Cualquier tipo de dato

Short System.Int16 2 bytes -32,768 a 32,767

Single System.Single 4 bytes -3.402823E38 hasta -1.4401298E-45 para valores negativos; 1.4401298 hasta 3.402823E38 para valores positivos.

String System.String En función de la plataforma de implementación

0 hasta aproximadamente 2 billones de caracteres Unicode

UInteger

System.UInt32 4 bytes 0 a 4.294.967.295 (sin signo)

ULong System.UInt64 8 bytes 0 a 18.446.744.073.709.551.615 (1,8...E+19 †) (sin signo)

UShort System.UInt16 2 bytes 0 a 65.535 (sin signo)

EXPRESIONES y OPERADORES

Las expresiones están formadas por operandos y operadores. Algunos ejemplos de operadores son el operador de concatenación y suma (+) y el operador de división (/). Literales, campos, variables locales y expresiones son ejemplos de operandos.

Operadores matemáticos

Los operadores matemáticos permiten realizar operaciones con valores numéricos

Operador Descripción

+ Suma

- Resta

* Multiplicación

/ División

\ División entera (parte entera de la división)

Mod Residuo (resto de la división entera)

^ Exponenciación (elevar a una potencia)

| PROGRAMACIÓN ESTRUCTURADA 12

Page 13: FUNDAMENTOS DE PROGRAMACION

Ejemplo Dim nInc As Integer For nInc = 1 To 10

If nInc Mod 2 = 0 Then txtOutput.Text += nInc & " es par " & vbNewLine Else txtOutput.Text += nInc & " no es par " & vbNewLine End If

Next txtOutput.Text += "10/0 = " & CStr(10 / 0)

La división entre 0 no está permitida en los cálculos matemáticos ya que produce un resultado infinito, en Visual Basic .NET se maneja esta situación automáticamente y muestra un valor de Infinito.

Operadores lógicos

Los operadores lógicos permiten crear expresiones con valores lógicos (true y false).

Operadores Lógicos Descripción

And Las 2 expresiones deben ser verdaderas

Or Alguna de las 2 expresiones es verdadera

Not Negación del resultado de la expresión

Xor Si 1 y sólo 1 de las expresiones es verdadera

AndAlso Si la primer y segunda condición son verdaderas

OrElse Si la primer o segunda condición es verdadera

Los nuevos operadores lógicos AndAlso y OrElse reciben el nombre de sistema de cortocircuito. Se dice que una operación lógica se encuentra cortocircuitada si el código compilado puede omitir la evaluación de una expresión en función del resultado de otra. Si el resultado de la primera expresión evaluada determina el resultado final de la operación, no es necesario evaluar la segunda expresión, ya que no cambiará el resultado final.

La evaluación cortocircuitada puede mejorar el rendimiento si la expresión omitida es compleja o si implica llamadas de procedimiento.

Ejemplo

En el siguiente código si nCalificacion <= 0 es False ya no se evalúa la siguiente expresión lógica pues la condición va a ser False en todos los casos.

Dim nCalificacion As Integer = 0If nCalificacion <= 0 AndAlso nCalificacion / 0 Then MsgBox("Error de lógica")Else MsgBox("Continuar cálculo")End If

| PROGRAMACIÓN ESTRUCTURADA 13

Page 14: FUNDAMENTOS DE PROGRAMACION

Operadores de asginación abreviados

Visual Basic .NET incorpora nuevos operadores abreviados que facilitan la escritura de código, por ejemplo:

x = x + 1 'Antes escribíax += 1 'Ahora puede escribir

Operadores Abreviados

+=

-=

*=

/=

\=

^

&=

PRECEDENCIA DE OPERADORES

Si una expresión contiene varios operadores, la precedencia de estos controla el orden en que se evalúa cada uno de ellos. Por ejemplo, la expresión x + y * z se evalúa como x + (y * z) porque el operador de multiplicación tiene una precedencia mayor que el de suma.

+ Operadores Asociatividad Tipo() Izquierda a derecha Paréntesis

* / % Izquierda a derecha Multiplicativos

+ - Izquierda a derecha Adición

< <= > >= Izquierda a derecha Relacionales

== != Izquierda a derecha Igualdad

- - = Derecha a izquierda Asignación

ASOCIATIVIDAD

 La asociatividad de los operadores indica el orden en que se ejecutan cuando tienen la misma precedencia. Obviamente, esto es aplicable solamente a los operadores binarios.

Todos los operadores binarios son asociativos por la izquierda salvo los de asignación, que son asociativos por la derecha.

Ejemplos4+3+2

Primero se hace 4+3 y a este resultado se le suma 2 (+ es asociativo por la izquierda).

b = c = d

Primero se asigna a c el valor de d, y después se asigna a b el valor de c (= es asociativo por la derecha)

| PROGRAMACIÓN ESTRUCTURADA 14

Page 15: FUNDAMENTOS DE PROGRAMACION

Es posible controlar la precedencia y la asociatividad utilizando paréntesis.

Ejemplos x + y * z //Se multiplica primero y por z y luego suma el resultado a x,

Si embargo:

(x + y) * z //Suma primero x más y, y luego multiplica el resultado por z.

PRÁCTICAS

1. Escribir un programa que visualice por el monitor dos mensajes que se introducen por teclado (Para realizar esta práctica debe consultar la forma de introducir un mensaje por teclado)

2. Escribir un programa que lea 2 números enteros y calcule la media de los mismos. El resultado debe mostrarse por pantalla

3. Escribir un programa que realice la siguiente operación y la muestre por pantalla

b2−4 ac2 a

Las variables deben ser inicializadas en el momento de la declaración.

| PROGRAMACIÓN ESTRUCTURADA 15

Page 16: FUNDAMENTOS DE PROGRAMACION

4. ESTRUCTURAS DE CONTROL

INTRODUCCIÓN

Habitualmente, en la secuencia de ejecución de un programa, surge la necesidad de repetir la ejecución de determinadas instrucciones o condicionar la ejecución de algunas de ellas. Para dirigir la secuencia de ejecución para que el programa consiga sus objetivos se utilizan las sentencias de control.

Las sentencias de control se pueden agrupar en las siguientes categorías.

Sentencias condicionales. Las instrucciones IF y Select Case se conocen como instrucciones condicionales. Estas instrucciones ejecutan unas u otras instrucciones en función del valor de expresiones.

Sentencias iterativas. Las instrucciones While... End While y Do…Loop incluyen bloques de instrucciones que se ejecutan de forma reiterada mientras se cumple una condición. También se conocen como bucles.

Sentencias de salto. Las instrucciones goto y continue se usan para transferir el control incondicionalmente a otra instrucción. No se recomienda su uso indiscriminado ya que rompe las reglas de la programación estructurada.

Sentencias de control de excepciones. Las instrucciones Try…Catch permiten capturar los errores de ejecución con excepciones que permiten controlar el programa cuando el error se produce.

IF…THEN…ELSE

La construcción If…Then…Else, nos permite ejecutar una o más condiciones que podemos comparar utilizando operadores relacionales y operadores lógicos.

SintasixIF expresión-booleana Then bloque1Else bloque2End IF

La instrucción IF evalúa una expresión booleana. Si el resultado de la expresión booleana es True, el control pasa al primer bloque; si es False y existe una cláusula Else, el control se transfiere al segundo bloque.

Ejemplo

Se puede utilizar una instrucción IF sencilla, como la siguiente:

IF numero Mod 2 = 0 ThenConsole.WriteLine("par")

End IF

O una sentencia IF con Else

Dim intValor As Integer = 5 If intValor > 5 Then

System.Console.WriteLine("Valor mayor que 5")

| PROGRAMACIÓN ESTRUCTURADA 16

Page 17: FUNDAMENTOS DE PROGRAMACION

Else System.Console.WriteLine ("Valor menor que 6")

End If

IF en cascada

La instancia ElseIf permite tener un número arbitrario de ramas. No obstante, las instrucciones controladas por una instrucción ElseIf son mutuamente excluyentes, lo que significa que sólo se ejecuta una instrucción de entre todas las instancias ElseIf.

Sintasix

IF expresión-booleana1 Then bloque1

ElseIf expresión-booleana2 Then bloque2

Else bloque3

End If

Ejemplo

Dim intValor As Integer = 5 If intValor > 5 Then

Console.WriteLine ("Valor mayor que 5") ElseIf intValor < 5 Then

Console.WriteLine ("Valor menor que 5") Else

Console.WriteLine ("Valor igual a 5") End If

Select Case...End Select

Se trata de una evolución en la estructura If...End If de decisión múltiple, y su trabajo consiste en evaluar una expresión y comparar el resultado con la lista de expresiones de cada uno de los casos proporcionados.

SintaxisSelect Case ExpresiónCase ListaExpresionesA código si se cumple ListaExpresionesA [Case ListaExpresionesB] código si se cumple ListaExpresionesB [Case Else] código si no se cumple ninguna ListaExpresionesEnd Select

La lista de expresiones asociada a cada Case en esta estructura estará separada por comas y podrá tener alguno de los siguientes formatos:

Expresión.

ExpresiónMenor To ExpresiónMayor

Is OperadorComparación Expresión

| PROGRAMACIÓN ESTRUCTURADA 17

Page 18: FUNDAMENTOS DE PROGRAMACION

Tras evaluar la expresión de la estructura, si se encuentra una coincidencia con alguno de los Case, se ejecuta el bloque de código situado entre dicho Case y el siguiente. En caso de que no haya ninguna coincidencia, podemos opcionalmente, ejecutar un bloque por defecto, utilizando la palabra clave Case Else. Finalizada esta estructura, la ejecución continuará a partir de la línea situada después de End Select.

EjemploSub Main() Dim Valor As Integer Console.WriteLine("Introducir un número") Valor = Console.ReadLine() Select Case ValorCase 5 Console.WriteLine("El valor es 5")Case 120, 250 Console.WriteLine("El valor es 120 ó 250")Case 3000 To 4000 Console.WriteLine("El valor está en el rango de 3000 a 4000")Case Is < 10 Console.WriteLine("El valor es menor de 10")Case Else Console.WriteLine("El valor es {0}, y no se cumple ningún caso", Valor) End Select Console.ReadLine()End Sub

En el caso de que tras evaluar la expresión, haya más de un Case cuya lista de expresiones se cumpla, se ejecutará el que esté situado en primer lugar. En el ejemplo anterior, cuando la variable Valor contiene 5, se cumplen dos casos.

While... End While

La instrucción While…End While es la más sencilla de todas las sentencias iterativas. Ejecuta repetidamente el bloque de instrucciones que contiene mientras se cumpla una expresión booleana.

SintaxisWhile Expresión

bloque de instruccionesEnd While

EjemploSub Main() Dim Valor As Integer Dim Contador As Integer Console.WriteLine("Introducir un número") Valor = Console.ReadLine() Console.WriteLine("Mostrar en consola todos los números desde 1 hasta el _ introducido") While Contador < Valor Console.Write("-" & Contador) Contador += 1 End While

| PROGRAMACIÓN ESTRUCTURADA 18

Page 19: FUNDAMENTOS DE PROGRAMACION

Console.ReadLine()End Sub

Do...Loop

Esta estructura ejecuta un conjunto de líneas de código en función del valor de una expresión condicional. La condición puede estar situada al comienzo o final de la estructura.

Sintaxis

Condición al principio.

Do While | Until Expresiónbloque de instrucciones

Loop

La diferencia entre usar While o Until reside en que empleando While, el código del bucle se ejecutará mientras la expresión devuelva Verdadero. En el caso de Until, el código se ejecutará mientras que la expresión devuelva Falso.

EjemploSub Main() Dim Valor As Integer Dim Palabra As String Dim Contador As Integer Dim Pruebas As Integer ' bucle con While Do While Valor <> 200

Console.WriteLine("Introducir un número")Valor = Console.ReadLine()

Loop ' bucle con Until Do Until Palabra = "coche"

Console.WriteLine("Introducir una palabra")Palabra = Console.ReadLine()

LoopEnd Sub

Sintaxis

Condición al final.

La diferencia en este caso, consiste en que el contenido de la estructura se ejecuta al menos una vez.

Do bloque de instrucciones

Loop While | Until Expresión

EjemploSub Main() Dim Valor As Integer Dim Palabra As String

| PROGRAMACIÓN ESTRUCTURADA 19

Page 20: FUNDAMENTOS DE PROGRAMACION

' bucle con While Do

Console.WriteLine("Introducir un número")Valor = Console.ReadLine()

Loop While Valor <> 200' bucle con Until Do

Console.WriteLine("Introducir una palabra")Palabra = Console.ReadLine()

Loop Until Palabra = "coche"End Sub

For...Next

Esta estructura ejecuta un bloque de código un número determinado de veces, establecido por un rango de valores y controlado por un contador.

SintaxisFor Contador = Inicio To Fin [Step Incremento]

bloque de instruccionesNext

El elemento Contador se inicializa con un valor y el código existente entre For y Next es ejecutado una serie de veces, hasta que el valor de Contador se iguala a Fin.

Por defecto, los incrementos de Contador son en uno, pero podemos cambiar este aspecto utilizando el modificador Step, mediante el que podemos establecer el número en el que se van a realizar los incrementos. Step también nos permite realizar decremento utilizando un número negativo.

EjemploSub Main()

Dim Contador As IntegerDim Final As Integer

' recorrido simple del bucleConsole.WriteLine("Bucle For normal")For Contador = 1 To 10

Console.WriteLine("Variable Contador: {0}", Contador)NextConsole.WriteLine()

' recorrer el bucle especificando un incrementoConsole.WriteLine("Bucle For con incremento")Console.WriteLine("Introducir el número de ejecuciones para el bucle")Final = Console.ReadLine()For Contador = 1 To Final Step 4

Console.WriteLine("Variable Contador: {0}", Contador)NextConsole.WriteLine()

| PROGRAMACIÓN ESTRUCTURADA 20

Page 21: FUNDAMENTOS DE PROGRAMACION

' recorrer el bucle especificando un decrementoConsole.WriteLine("Bucle For con decremento")For Contador = 18 To 4 Step -1

Console.WriteLine("Variable Contador: {0}", Contador)NextConsole.WriteLine()

' este bucle no se ejecutará, al ser mayor el valor de contador' que el valor final, y no haber establecido un decremento

For Contador = 18 To 4Console.WriteLine("Variable Contador: {0}", Contador)

NextEnd Sub

Se puede optimizar la ejecución en un bucle de este tipo, utilizando como contador una variable de tipo Integer, en vez de una de tipo Short, Long, Decimal, etc. Esto es debido a que los tipos Integer se actualizan más rápidamente que los otros tipos numéricos.

For Each...Next

La instrucción For Each repite un grupo de sentencias para cada elemento de un array o de una colección. Esta sentencia será estudiada con detalle en el capítulo dedicado a Arrays.

SintasixFor Each Elemento In ColecArray

bloque de instruccionesNext

EjemploSub Main()' crear un array y rellenarlo con valores

Dim lsColores() As String = {"Azul", "Verde", "Marino", "Violeta"}Dim lsColor As String

' en cada iteración se obtiene un elemento' del array lsColores, y se guarda en la variable lsColor

For Each lsColor In lsColoresConsole.WriteLine(lsColor)

NextEnd Sub

Continue

La sentencia Continue oblige a ejecutar la siguiente iteración del bucle While, Do o For en el que está contenida.

No se recomienda utilizar esta instrucción pues rompe las reglas de la programación estructurada.

SintasixContinue {While | Do | For}

| PROGRAMACIÓN ESTRUCTURADA 21

Page 22: FUNDAMENTOS DE PROGRAMACION

GoTo

La sentencia GoTo transfiere el control a una línea específica del programa, identificada por una etiqueta.

SintasixGoto etiqueta..etiqueta: bloque de instrucciones

TRY…CATCH

Dentro del esquema de gestión de errores del entorno .NET Framework, encontramos las figuras del error y la excepción. Estos elementos son utilizados indistintamente en muchas ocasiones para hacer referencia genérica a los errores producidos; sin embargo, aunque complementarios, cada uno tiene su propia funcionalidad dentro del proceso de tratamiento de un error.

Error. Un error es un evento que se produce durante el funcionamiento de un programa, provocando una interrupción en su flujo de ejecución. Al producirse esta situación, el error genera un objeto excepción.

Excepción. Una excepción es un objeto generado por un error, que contiene información sobre las características del error que se ha producido.

Visual Basic .NET es un lenguaje orientado a objetos y por lo tanto, la gestión de errores se realiza mediante excepciones. Cuando se produce un error se lanza una excepción. Si utilizamos las instrucciones de código necesarias para gestionar las excepciones, tendremos un control claro en todo momento, sobre la ejecución de nuestras aplicaciones.

Las instrucciones para usar excepciones tienen una estructura como la que se detalla a continuación:

Try bloque de instrucciones donde se detecta la excepciónCatch <tipo_excepción>

bloque de instrucciones en el caso de que suceda una excepción [Finally bloque de instrucciones que se ejecutan en cualquier caso]End Try

EjemploPublic Sub Main()

Dim sValor As StringDim iNumero As IntegerTry' comienza el control de errores

| PROGRAMACIÓN ESTRUCTURADA 22

Page 23: FUNDAMENTOS DE PROGRAMACION

Console.WriteLine("Introducir un número")sValor = Console.ReadLine()

' si no hemos introducido un número...iNumero = sValor ' ...aquí se producirá un error...

' ...y no llegaremos a esta parte del códigoiNumero = iNumero + 1000

Catch' si se produce un error, se genera una excepción' que capturamos en este bloque de código' manipulador de excepción, definido por Catch

Console.WriteLine("Error al introducir el número" & _ControlChars.CrLf &"El valor {0} es incorrecto", sValor)

‘ControlChars.CrLf-> provoca un salto de líneaEnd Try' resto del código del procedimiento' ....Console.ReadLine()

End Sub

PRÁCTICAS

1) Escribir dos versiones (una usando for y otra usando while) de un programa que imprima una escala de temperatura de -30ºC a +45ªC, en la que varíen de 5 en 5 ºC.

2) Escribir un programa que imprima las tablas de multiplicar del número 1 al 10. Cada tabla debe ir separada por una línea en blanco.

3) Escribir un programa que genere, de modo aleatorio, 10 números entre 1 y 100.

Nota:

Randomize([Número]). Inicializa el generador de números aleatorios, que utilizaremos posteriormente en la función Rnd( ). Opcionalmente recibe un número como parámetro que sirve al generador como valor inicial o semilla para la creación de estos números.

Rnd([Número]). Devuelve un número aleatorio de tipo Single, que será menor que 1, pero mayor o igual a cero.

Podemos, opcionalmente, variar el modo de generación del número pasando un valor al parámetro de esta función. En función de si el parámetro es mayor, menor de cero, o cero, el comportamiento de Rnd( ) a la hora de generar el número será diferente.

Dim Contador As Integer

Dim Aleatorio As Single

Randomize()

For Contador = 1 To 10

Aleatorio = Rnd()

Console.WriteLine("Número generado: {0}", Aleatorio)

Next

| PROGRAMACIÓN ESTRUCTURADA 23

Page 24: FUNDAMENTOS DE PROGRAMACION

Console.ReadLine()

El anterior código produce la siguiente salida

Si necesitamos que el número aleatorio esté comprendido en un intervalo de números enteros, utilizaremos esta fórmula

Int((LímiteSuperior - LímiteInferior + 1) * Rnd() + LímiteInferior)

El ejemplo siguiente se crean números aleatorios comprendidos entre el intervalo de los

números 7 y 12.

Dim Contador As Integer

Dim Aleatorio As Single

Randomize()

For Contador = 1 To 10

Aleatorio = Int((12 - 7 + 1) * Rnd() + 7)

Console.WriteLine("Número generado: {0}", Aleatorio)

Next

Console.ReadLine()

4) Escribir un programa genere números aleatorios (entre 1 y 100) y verifique si son pares o impares, mostrando el resultado en la pantalla.

Nota:

Recordar que el operador Mod nos muestra el resto de dos números enteros

5) Escribir un programa que genere aleatoriamente un número como nota de un alumno, y muestre su calificación según la siguiente tabla: (fijar un rango entre 0 y 150)

De 0 a 50 puntos -> SuspensoDe 51 a 75 puntos -> RecuperarDe 76 a 90 puntos -> AprobadoDe 91 a 100 puntos -> Aprobado con méritoMenor que 0 o mayor que 100 -> puntuación inválida.

6) Conversión de un día del año en un par de mes y día. En este ejercicio se implementará un programa que lea de la consola un número entero de día (entre 1 y

| PROGRAMACIÓN ESTRUCTURADA 24

Page 25: FUNDAMENTOS DE PROGRAMACION

365) y lo almacene en una variable entera. El programa convertirá este número en un mes y un día del mes e imprimirá el resultado en la consola. Por ejemplo, el resultado de introducir 40 debe ser “Febrero 9”. (En este ejercicio se ignora el efecto de los años bisiestos.) Realizar una mejora al programa permitiendo realizar la operación múltiples veces hasta que se introduce el 0.

Realizar una mejora creando una excepción propia que lance un error en el caso de que el día no esté en el rango correcto (1:365).

7) Escribir un programa que detecte e imprima en la pantalla números múltiplos de 3. Esos números deben variar de 1 a 100. Controlar que el número esté en el rango establecido. Los números se deben introducir por teclado.

Modificación: Después de escribir el programa crear una excepción y lanzarla si el número no está en el rango establecido.

8) Crear un programa que reproduzca el juego de “Adivina mi número”.

1. El ordenador deberá generar un número aleatorio entre 0 y 100.

2. A continuación nos pide que adivinemos su número, para lo que tendremos que teclear uno.

3. Aparecerá un mensaje en pantalla diciéndonos si nuestro número es mayor o menor o felicitándonos si hemos acertado.

4. Si hemos fallado, nos volverá a pedir otro hasta que lo acertemos.

5. Cuando acertemos, también nos dirá cuántos intentos hemos realizado.

9) Escriba un programa que nos calcule el cambio que debe dar la caja de un supermercado: Dado un precio y una cantidad de dinero, el programa nos dirá cuántas monedas deben darse como cambio de tal forma que el número total de monedas sea mínimo.

10) Modificar el ejemplo anterior y, utilizando control de excepciones correspondiente controlar el error de introducir un String en la entrada.

| PROGRAMACIÓN ESTRUCTURADA 25

Page 26: FUNDAMENTOS DE PROGRAMACION

5. PROCEDIMIENTOS Y PARÁMETROS

INTRODUCCIÓN

Una aplicación implementada en Visual Basic .NET está estructurada en clases o módulos que contienen bloques de código con nombre llamados métodos.

Un método es un miembro de una clase que lleva a cabo una acción y que se compone de una serie de instrucciones C# que han sido agrupadas bajo un nombre determinado. La mayor parte de los lenguajes de programación modernos incluyen un concepto similar; se puede considerar que un método es equivalente a una función, una subrutina, un procedimiento o un subprograma.

En este capítulo se tratarán los métodos estáticos ya que aún no hemos estudiado el concepto de encapsulación.

Ejemplo de métodos

using System;class EjemploClase{

static void EjemploMetodo{

Console.WriteLine (“Método de Ejemplo”);}static void Main(){

//…..}

}

El código mostrado en el ejemplo contiene tres métodos:

El método Main

El método WriteLine

El método EjemploMetodo

El método Main es el punto de entrada de la aplicación, mientras que WriteLine forma parte de Microsoft® .NET Framework y se puede llamar desde un programa. El método WriteLine es un método estático de la clase System.Console. El método EjemploMetodo pertenece a EjemploClase y contiene una llamada al método WriteLine.

CREACIÓN DE MÉTODOS

Cuando se crea un método hay que especificar lo siguiente:

Nombre. Un método no puede tener el mismo nombre que una variable, una constante o cualquier otro elemento que no sea un código y haya sido declarado en la clase. El nombre del método puede ser cualquier identificador permitido de C# y distingue entre mayúsculas y minúsculas.

Lista de parámetros. continuación del nombre del método viene una lista de parámetros para el método. Esta lista aparece entre paréntesis que deben estar presentes aunque no hay ningún parámetro.

| PROGRAMACIÓN ESTRUCTURADA 26

Page 27: FUNDAMENTOS DE PROGRAMACION

Cuerpo del método. Después de los paréntesis viene el cuerpo del método, que debe estar entre llaves ({ y }) aunque no contenga más que una instrucción.

Valor de retorno. Los métodos pueden devolver un valor al finalizar su ejecución, este valor será de un tipo determinado. En el caso de que no devuelva ningún valor se utilizará la palabra reservada void y no se necesita utilizar return.

Todos los métodos en C# pertenecen a una clase, al contrario de lo que ocurre en otros lenguajes de programación como C, C++ y Microsoft Visual Basic®, que permiten subrutinas y funciones globales.

Sintaxis

Para crear un método se utiliza la siguiente sintaxis:

static <tipo de retorno> NombreMetodo (<lista de parámetros> ) {

cuerpo del método return <valor> //debe ser del tipo de retorno

}

El siguiente ejemplo muestra cómo crear un método llamado EjemploMetodo en la clase EjemploClase:

class EjemploClase{

static void EjemploMetodo{

Console.WriteLine (“Método de Ejemplo”);}static void Main(){

Console.WriteLine("Método Principal"); }

}

LLAMADA A MÉTODOS

Después de definir un método, es posible hacer llamadas a ese método desde dentro de la misma clase y desde otras clases.

Para hacer una llamada a un método hay que emplear el nombre del método seguido de una lista de parámetros entre paréntesis. Los paréntesis son obligatorios aunque el método llamado no contenga ningún parámetro, como se ve en el siguiente ejemplo.

EjemploMetodo ( );

El programa del siguiente ejemplo comienza al principio del método Main de EjemploClase. La primera instrucción muestra “Comienza el programa.” La segunda instrucción en Main es la llamada a EjemploMetodo. El flujo de control pasa a la primera instrucción en EjemploMetodo y aparece “Hola, mundo”. Al final del método, el control pasa a la instrucción inmediatamente después de la llamada al método, que es la instrucción que muestra “Termina el programa.”

| PROGRAMACIÓN ESTRUCTURADA 27

Page 28: FUNDAMENTOS DE PROGRAMACION

class EjemploClase{

static void EjemploMetodo ( ) {

Console.WriteLine("Hola, mundo"); } static void Main( ) {

Console.WriteLine("Comienza el programa."); EjemploMetodo ( ); Console.WriteLine("Termina el programa.");

} }

| PROGRAMACIÓN ESTRUCTURADA 28

Page 29: FUNDAMENTOS DE PROGRAMACION

6. ARRAYSUn array es un conjunto de variables que tienen el mismo nombre pero diferentes índice que permite simplificar el uso de estas y aumentar la velocidad de acceso a los datos que almacena el array.

El array puede tener uno o más dimensiones (hasta 60) y cada dimensión tiene un limite inferior que siempre es 0 y un límite superior que es equivalente al tamaño de la dimensión del array menos 1. Esta característica es distinta que en la versión anterior, en donde el límite inferior del array podría empezar en cualquier numero.

La clase base .NET de donde se heredan los Array y pertenece al siguiente NameSpace: System.array.

Declaración de Arrays

A diferencia de Visual Basic 6, en VB.Net se puede declarar e inicializar un array que no tiene tamaño definido.

Otra diferencia es que no exista la sentencia Option base que haga que el limite inferior del array empiece en 0 o 1, este siempre empezara en 0 e ira hasta n-1.

Sintaxis:

<Tipo de declaración><Array>([Tamaño])As<Tipo de Dato>[=<Valores>]

Ejemplo:

Dim Alumnos(30), Cursos(10) as StringDim Edades() as byte={18,20,25,27}Dim Sueldos( , )As decimal

Redimensionando Arrays

Una vez definido la dimensión de un array, este puede modificarse usando las sentencias ReDim, siempre y cuando el array haya sido declarado como dinámico (con Dim).

Sintaxis:

Redim [Preserve]<Array>([Tamaño])As<tipo de Dato>[<=valores>]

Ejemplo:

Dim I, Arreglo() As IntegerRedim Arreglo(5)For I=0 to Ubound(Arreglo)

Arreglo(I)=INext I

PROCEDIMIENTOS

Un procedimiento es un bloque de código o conjunto de instrucciones que es definido en la aplicación y que puede ser usado varias veces mediante una llamada.

Dos características nuevas de los procedimientos, incorporadas en esta versión son:

| PROGRAMACIÓN ESTRUCTURADA 29

Page 30: FUNDAMENTOS DE PROGRAMACION

Recursividad: Es la capacidad del procedimiento para llamarse a si mismo.

Sobrecarga: Consiste en que varios procedimientos pueden tener el mismo nombre.

En Visual Basic tenemos varios tipos de procedimientos:

Subrutinas: Ejecutan una acción sin retornar un valor.

Funciones: Ejecutan una acción retornando un valor.

De Eventos: Se desencadenan con la interacción del usuario a algún evento.

De Propiedades: Devuelven y asignan valores a propiedades de un objeto.

Declaración de un Procedimiento:

Subrutina:

[Public|Private|Friend] Sub <Nombre>([Optional][By Val|By Ref] <Par> As<Tipo> )<Sentencia>[Exit Sub]

Function:

[Public|Private|friend] Function <Nombre>(<parámetros>) As <Tipo><Sentencia>[Exit Function][<Nombre>=<Valor>|return(Valor)]End Function

Notas:

El tipo de argumento por defecto es By Val (En la versión anterior era ByRef)

Si se usa Optional debe inicializarse con un valor (antes no era obligatorio)

Se puede usar return para regresar a la llamada del procedimiento.

LLAMADA A UN PROCEDIMIENTO:

Antes existía una forma de llamar a una subrutina y dos formas de llamar funciones (o como subrutina o como función, esta ultima mediante paréntesis). En cambio ahora, existe una sola forma de llamar procedimientos, sea subrutinas o funciones, que escribiendo el nombre seguido de paréntesis y entre estos los parámetros (si los hay).

Sintaxis:

[Variable=]<Nombre de la Sub o Function>([Parámetro(s)])

| PROGRAMACIÓN ESTRUCTURADA 30

Page 31: FUNDAMENTOS DE PROGRAMACION

7.STRING Y CONVERSIÓN DE TIPOS

INTRODUCCIÓN

En .NET se utiliza el tipo String para procesar cadenas de caracteres Unicode. El nombre del tipo String es una abreviatura de la clase System.String. El compilador procesa esta forma abreviada, por lo que String y System.String se pueden usar indistintamente.

La clase String representa una cadena inmutable de caracteres. Una instancia de String es inmutable, lo que significa que el texto de una cadena no se puede modificar una vez creado. A primera vista podría parecer que algunos métodos modifican un valor String, pero en realidad devuelven una nueva instancia de String que contiene la modificación.

La clase String representa una cadena inmutable de caracteres. Internamente, un String, al ser una lista de caracteres, se puede equiparar con un array de Char, sin embargo, dada su propia necesidad funcional, se han agregado diversos atributos y métodos a la clase String, para simplificar y potenciar su utilización, hasta cierto punto ocultando su real implementación de array interna.

DECLARACIÓN DE UN STRING

Declaración de un string como un tipo

Dim <identificador> As StringDim <identificador> As String = “valor inicial”

Algunos ejemplos:

Dim nombre As StringDim nombre As String = “Ana Gutiérrez”

Declaración de un string como un objeto

Dim <identificador> As New String ()Dim <identificador> As String= New String ()

El constructor está sobrecargado y permite la creación de una instancia con una cadena o la ausencia de la misma.

Algunos ejemplos:

Dim miAmiga As New String("Elena") ‘Con un valor inicialDim miAmigaNo As New String() ‘Sin valor inicialDim miAmiga As String= New String("Elena") ‘declarar e instaciar

Un String se puede considerar es un array de caracteres y permite construir instancias de tipo String como en el siguiente ejemplo.

EjemploSub Main()

Dim transporte As String = New String(New Char() {"t", "r", "e", "n"})Console.WriteLine("transporte --> {0}", transporte)Console.ReadLine()

End Sub

| PROGRAMACIÓN ESTRUCTURADA 31

Page 32: FUNDAMENTOS DE PROGRAMACION

Acceso a un elemento de un String

Para extraer un solo carácter en una posición determinada de una cadena de caracteres utilizando el nombre de la cadena seguido del índice entre corchetes (( índice )). Este proceso es similar al empleado para tablas. El índice del primer carácter de una cadena es cero.

El siguiente código muestra un ejemplo:

Dim s As String= "Alfabeto"dim primerCaracter As CharprimerCaracter=s(0) ‘Se mostrará por pantalla A

Los elementos del string son de sólo lectura. Si se intenta asignar un carácter a una cadena de esta forma, se producirá un error en tiempo de compilación.

s(2) = '*' // Error

MÉTODOS y PROPIEDADES

Los tipos String son objetos y por lo tanto se pueden utilizar los métodos y propiedades que le corresponden.

Propiedades

Length. Devuelve un entero que representa la longitud de la cadenaDim miCadena As StringDim miLongitud As IntegermiCadena = "lola"miLongitud = miCadena.Length ' 4

Métodos estáticos

Copy. Copia una cadena para crear otra nueva: Dim cadena1 As StringDim cadena2 As Stringcadena1 = "uno"cadena2 = String.Copy("OTRO")Console.WriteLine("Cadena1 --> {0}", cadena1)

Console.WriteLine("Cadena2 --> {0}", cadena2)

| PROGRAMACIÓN ESTRUCTURADA 32

Page 33: FUNDAMENTOS DE PROGRAMACION

Concat. Crea una nueva cadena de caracteres a partir de una o más cadenas o de objetos representados como cadenas.

Dim s3 As String= String.Concat("a", "b", "c", "d", "e", "f", "g")

El operador + está sobrecargado para cadenas, por lo que el ejemplo anterior se podría reescribir de la siguiente manera:

Dim s3 As String = "a" + "b" + "c" + "d" + "e" + "f" + "g";

Compare. Compara dos cadenas desde el punto de vista léxico; es decir, compara las cadenas según su ordenación. Compare puede devolver los siguientes valores:

o Un entero negativo si la primera cadena es anterior a la segunda o 0 si las cadenas son iguales o Un entero positivo si la primera cadena es posterior a la segunda

Dim cadena1 As String Dim cadena2 As String Dim cadenaResultado As Integer Console.WriteLine("Introducir primera cadena a comparar") cadena1 = Console.ReadLine() Console.WriteLine("Introducir segunda cadena a comparar") cadena2 = Console.ReadLine() cadenaResultado = String.Compare(cadena1, cadena2) Select Case cadenaResultado Case Is < 0 Console.WriteLine("Primera cadena es menor") Case 0 Console.WriteLine("Las cadenas son iguales") Case Is > 0 Console.WriteLine("Primera cadena es mayor") End Select Console.ReadLine()

Por definición, cualquier cadena (incluyendo una cadena vacía) es siempre mayor que una referencia Nothing, y dos referencias Nothing se consideran iguales al compararlas.

Compare es un método sobrecargado. Existe una versión con tres parámetros, el tercero de los cuales es un valor Bool si en la comparación se deben ignorar las mayúsculas. El siguiente ejemplo muestra una comparación que no distingue mayúsculas y minúsculas:

s1 = "repollo"s2 = "Repollo" comp = String.Compare(s1, s2, true) ‘Ignorar mayúsculas

| PROGRAMACIÓN ESTRUCTURADA 33

Page 34: FUNDAMENTOS DE PROGRAMACION

Métodos no estáticos

Insert. Acepta como parámetro una posición y una cadena y devuelve un string en en que se ha insertado, a partir de la posición indicada, la cadena que se pasó como parámetro.

Dim cadena1 As StringDim cadenaInsert As Stringcadena1 = "Estamos programando"cadenaInsert = cadena1.Insert(2, "MEDIO") ' "EsMEDIOtamos programando"

IndexOf. Indica cuál es el índice de la primera aparición de la subcadena que se pasa por parámetro dentro de la cadena sobre la que se aplica. La búsqueda de dicha subcadena se realiza desde el principio de la cadena, pero es posible indicar en un segundo parámetro opcional de tipo Integer el cual es el índice de la misma a partir del que se desea empezar a buscar. Del mismo modo, la búsqueda acaba al llegar al final de la cadena sobre la que se busca, pero pasando un tercer parámetro opcional de tipo Integer es posible indicar donde terminarla.

Si no encuentra la cadena devuelve un –1.

Dim s As String= "hola"int i=s.IndexOf("h")Console.WriteLine(i) ‘Muestra 0

LastIndexOf. Igual que IndexOf, pero comenzando desde el final del String.

EndsWith. Devuelve true si el final de la instancia de String coincide con un Substring dado y False en caso contrario.

Dim s As String=”hola que tal”If (s.EndsWith(“tal”)) Then Console.WriteLine(“Está en la cadena”)

StartsWith. Devuelve True si el principio de la instancia de String coincide con un Substring dado y False en caso contario.

Dim s As String=”hola que tal”If (s. StarsWith (“tal”)) Then Console.WriteLine(“Está en la cadena”)

String Substring (int posición, int número): Devuelve la subcadena de la cadena sobre la que se aplica que comienza en la posición indicada y tiene el número de caracteres especificados. Si no se indica dicho número se devuelve la subcadena que va desde la posición indicada hasta el final de la cadena.

Dim s1 As StringDim s2 As String=”hola que tal”s1=s2.Substring(9); ‘s1 contiene “tal”

Trim. Elimina todos los espacios al comienzo y al final del string.

Dim s As String=” hola ”s = s.Trim( )Console.WriteLine(s) ‘"hola"

ToUpper y ToLower. Devuelven una cadena con todos los caracteres cambiados a mayúsculas y minúsculas, respectivamente:

Dim sText As String ="El camino al triunfo "

| PROGRAMACIÓN ESTRUCTURADA 34

Page 35: FUNDAMENTOS DE PROGRAMACION

Console.WriteLine(sText.ToUpper( )) ‘EL CAMINO AL TRIUNFO Console.WriteLine(sText.ToLower( )) ‘el camino al triunfo

Equals. Se puede emplear para comparar dos cadenas y ver si son iguales. El método devuelve un valor bool que es true si las cadenas son iguales y false en caso contrario. Es un método sobrecargado y se puede usar como método de instancia o como método estático.

Dim s1 As String= "Bienvenidos" Dim s2 As String= "Bienvenidos"If (s1.Equals(s2)) Then Console.WriteLine("Las cadenas son iguales") If (String.Equals(s1,s2)) Then Console.WriteLine("Las cadenas son iguales")

OPERADORES DE COMPARACIÓN EN STRING

Los operadores = y <> están sobrecargados para la clase String. Estos operadores sirven para examinar los contenidos de cadenas de caracteres.

Dim a As String= "Test"; Dim b As String = "Test"; If (a = b) Then.. ‘ Devuelve true

Los siguientes operadores y métodos son equivalentes:

El operador = es equivalente al método String.Equals.

El operador <> es equivalente al método NOT String.Equals.

Los otros operadores relacionales (<, >, <= y >=) no están sobrecargados para la clase String.

CONVERSIÓN DE TIPOS

CLASE Convert

Los métodos de la clase Convert permiten convertir un tipo base en otro. Los tipos base que se admiten son: Boolean, Char, SByte, Byte, Int16, Int32, Int64, UInt16, UInt32, UInt64, Single, Double, Decimal, DateTime y String.

EjemploSub Main() Dim miNumero As Double miNumero = 23.15

Try ' Devuelve 23 Dim iNumero As Integer iNumero = System.Convert.ToInt32(miNumero) Catch exp As System.OverflowException System.Console.WriteLine("Overflow por la conversión a entero.") End Try

' Devuelve True Dim bNumero As Boolean bNumero = System.Convert.ToBoolean(miNumero)

| PROGRAMACIÓN ESTRUCTURADA 35

Page 36: FUNDAMENTOS DE PROGRAMACION

' Devuelve "23.15" Dim strNumero As String strNumero = System.Convert.ToString(miNumero) Try ' Devuelve '2' Dim chrNumero As Char chrNumero = System.Convert.ToChar(strNumero.Chars(1)) Catch exp As System.ArgumentNullException System.Console.WriteLine("El String es nulo") End Try ' System.Console.ReadLine() devuelve un String que debe ser convertido Dim miEntero As Integer miEntero = 0 Try System.Console.WriteLine("Enter an integer:") miEntero = System.Convert.ToInt32(System.Console.ReadLine()) Catch exp As System.ArgumentNullException System.Console.WriteLine("String está vacío") Catch exp As System.FormatException System.Console.WriteLine("String no tiene el formato correcto") Catch exp As System.OverflowException System.Console.WriteLine("El dato no puede almacenarse como entero") End Try

System.Console.WriteLine("El entero convertido a Double {0}", _ System.Convert.ToDouble(miEntero))

End Sub

Entre las excepciones más comunes a la hora de utilizar Convert se encuentran las siguientes:

Tipo de excepción Condición

InvalidCastException Cuando no se admite la conversión. Conversiones de Char a Boolean, Single, Double, Decimal o

DateTime.

Conversiones de Boolean, Single, Double, Decimal o DateTime a Char.

Conversiones de DateTime en cualquier otro tipo excepto String.

Conversiones de cualquier otro tipo, excepto String en DateTime.

FormatException Cuando se quiere convertir una cadena que no tiene un formato correcto

Una cadena que se va a convertir en un valor Boolean no es Boolean

Una cadena que se va a convertir en un valor Char consta de varios caracteres.

Una cadena que se va a convertir en un tipo numérico no se reconoce como un número válido.

Una cadena que se va a convertir en DateTime no se reconoce como un valor de fecha y hora válido.

OverflowException Cuando la conversión produce un valor fuera del rango a convertir

Si la conversión de un tipo numérico en otro produce una pérdida de precisión (se pierden los dígitos menos significativos), no se produce una excepción sino un

| PROGRAMACIÓN ESTRUCTURADA 36

Page 37: FUNDAMENTOS DE PROGRAMACION

resultado incorrecto. Por ejemplo, si un tipo Double se convierte a Byte se puede producir una pérdida de precisión

Dim valorD As Double = 34.5'Convierte cadena en DecimalvalorD = Convert.ToSByte(valorD)Console.WriteLine(valorD) 'Muestra 34valorD = 456789valorD = Convert.ToSByte(valorD) 'Provoca una excepcion

MÉTODO Parse

Todos los tipos base poseen un método estático llamado Parse que convierte una cadena en el tipo de la clase indicada, por ejemplo:

Dim cadena As String = 30 Dim valorD As Decimal Dim valorI As Integer 'Convierte cadena en Decimal valorD = Decimal.Parse(cadena) 'Convierte cadena en Integer valorI = Integer.Parse(cadena)

Las excepciones más habituales que se pueden producir al aplicar el método Parse son:

Tipo de excepción Condición

ArgumentNullException El valor de la cadena es Nothing

FormatException La cadena no tiene el formato correcto

OverflowException La cadena está fuera del rango de valores permitidos por el tipo de datos al que se convierte

PRÁCTICAS

1. Implementar un programa que lea un número codificado de tal forma que la A es el 0, la B es el 1…J es el 9. El código contendrá estos caracteres y tendrás que construir el número que se esconde tras él. El número debe ser transformado en Int32. Realiza un control exhaustivo de excepciones.

2. Implementar un método que tome como parámetro un string y lo devuelva invertido

3. Hacer un programa que valide un email, las reglas son las siguientes:

a. Eliminar posibles espacios al principio y al final.

b. Que todos los caracteres sean válidos (hacer una cadena con todos los caracteres válidos y comprobar que todos los caracteres del email están incluidos dentro de ella). Sólo permite letras, dígitos, y los símbolos _ - @ y el punto.

c. Que tenga un símbolo @, ni más ni menos.

d. Que tengan al menos un punto a la derecha de @, pero puede ser más de uno

e. Que el lado izquierdo sea más largo que 0

| PROGRAMACIÓN ESTRUCTURADA 37

Page 38: FUNDAMENTOS DE PROGRAMACION

8. MANEJO DE THREADSUn Thread es la unidad básica para que el sistema operativo pueda ejecutar un proceso. Una aplicación (AppDomain) siempre inicia un solo thread, pero este a su vez puede iniciar otros threads. Al proceso de ejecutar varios threads, la llamaremos threading.

La ventaja principal de los threads es tener varias actividades ocurriendo en forma simultánea, lo cual es una gran posibilidad para que los desarrolladores puedan trabajar con varios procesos sin perjudicar otras tareas. Por ejemplo, el usuario pueda interactuar con la aplicación mientras se va ejecutando una consulta de miles de registros.

Se recomienda el uso de Threads en las siguientes situaciones:

Para comunicaciones sobre una red, servidor Web o Servidor de Base de Datos.

Al ejecutar operaciones que demoren bastante tiempo.

Para mantener siempre disponible la comunicación entre el usuario y la interfase, mientras se van ejecutando tareas en segundo plano, etc.

El uso de Threads intensivamente disminuye los recursos del sistema operativo, por tanto solo se recomienda usar en los casos ya descritos, sino la performance de la aplicación disminuirá.

Implementación de Threads

Para implementar Threads se usa el NameSpace: “System.threading.Thread” y luego se hace uso de los métodos que se definen a continuación:

Star: Inicia un Thread, el cual es un proceso de llamada asíncrona. Para saber el estado del Thread hay que usar las propiedades Threadstate y IsAlive.

Abort: Cancela un Thread iniciado, si deseamos saber el estado nuevamente podemos usar las propiedades ThreadState y IsAlive.

Sleep: Ocasiona una pausa en milisegundos del bloqueo de instrucciones.

Suspend: También ocasiona una pausa en el bloque de instrucciones.

Resume: Reinicia una pausa originada con el método Suspend.

Interrupt: Interrumpe una pausa originado una excepción.

Join: Espera un Thread.

Estado de un Thread

Un Thread puede tener diferentes estados en un mismo tiempo, para saber su estado se encuentra la propiedad ThreadState que devuelve un valor que indica el estado actual Thread.

Acción Estado de Transición

Otro Thread llama a Thread.start Unchanged

El Thread inicia su ejecución Running

El Thread llama a Thread.Sleep WaitSleepJoin

| PROGRAMACIÓN ESTRUCTURADA 38

Page 39: FUNDAMENTOS DE PROGRAMACION

El Thread llama a Monitor. Espera en otro objeto

WaitSleepJoin

El Thread llama a thread.join en otro Thread

waitSleepJoin

Otro Thread llama a Thread.Suspend SuspendRequest

El Thread responde a un requerimiento de Thread.Suspend

Suspended

Otro Thread llama a Thread.resume Running

Otro Thread llama a Thread.Interrupt Runnig

Otro Thread llama a Thread.Abort Abort.Request

El Thread responde a Thread.Abort Aborted

| PROGRAMACIÓN ESTRUCTURADA 39

Page 40: FUNDAMENTOS DE PROGRAMACION

Contenido

1. PROGRAMACIÓN ESTRUCTURADA..................................................................1

DISEÑO DESCENDENTE (TOP-DOWN)..................................................................1

RECURSOS ABSTRACTOS.......................................................................................2

TEOREMA DE LA PROGRAMACIÓN ESTRUCTURADA.....................................2

ETIQUETAS E INSTRUCCIÓN GO-TO................................................................3

VENTAJAS DE LA PROGRAMACIÓN ESTRUCTURADA....................................3

PROGRAMACION MODULAR.................................................................................3

2. APLICACIONES DE CONSOLA EN .NET............................................................5

SALIDA POR PANTALLA DE VARIOS DATOS.....................................................7

DIVISIÓN DE UNA LÍNEA DE CÓDIGO.................................................................7

PRÁCTICAS.................................................................................................................7

3. VARIABLES Y EXPRESIONES.............................................................................8

DECLARACIÓN DE VARIABLES............................................................................8

Identificador..............................................................................................................8

Período de duración...................................................................................................9

Ámbito de una variable.............................................................................................9

DECLARACIÓN DE CONSTANTES.......................................................................10

TIPO DE DATOS........................................................................................................10

EXPRESIONES y OPERADORES............................................................................11

Operadores matemáticos.........................................................................................11

Operadores lógicos..................................................................................................12

Operadores de asginación abreviados.....................................................................13

PRECEDENCIA DE OPERADORES....................................................................13

ASOCIATIVIDAD..................................................................................................13

PRÁCTICAS...............................................................................................................14

4. ESTRUCTURAS DE CONTROL..........................................................................15

INTRODUCCIÓN.......................................................................................................15

IF…THEN…ELSE.....................................................................................................15

Select Case...End Select.............................................................................................16

While... End While......................................................................................................17

Do...Loop.....................................................................................................................18

For...Next.....................................................................................................................19

For Each...Next............................................................................................................20

| PROGRAMACIÓN ESTRUCTURADA 40

Page 41: FUNDAMENTOS DE PROGRAMACION

Continue......................................................................................................................20

GoTo............................................................................................................................21

TRY…CATCH............................................................................................................21

PRÁCTICAS...............................................................................................................22

5. PROCEDIMIENTOS Y PARÁMETROS..............................................................25

INTRODUCCIÓN.......................................................................................................25

CREACIÓN DE MÉTODOS......................................................................................25

LLAMADA A MÉTODOS.........................................................................................26

6. ARRAYS.................................................................................................................28

Declaración de Arrays.............................................................................................28

Redimensionando Arrays........................................................................................28

PROCEDIMIENTOS..................................................................................................28

Declaración de un Procedimiento:...........................................................................29

LLAMADA A UN PROCEDIMIENTO:................................................................29

7. STRING Y CONVERSIÓN DE TIPOS..................................................................30

INTRODUCCIÓN.......................................................................................................30

DECLARACIÓN DE UN STRING........................................................................30

Acceso a un elemento de un String.........................................................................31

MÉTODOS y PROPIEDADES...............................................................................31

OPERADORES DE COMPARACIÓN EN STRING............................................34

CONVERSIÓN DE TIPOS.........................................................................................34

CLASE Convert.......................................................................................................34

MÉTODO Parse......................................................................................................36

PRÁCTICAS...............................................................................................................36

8. MANEJO DE THREADS.......................................................................................37

Implementación de Threads....................................................................................37

Estado de un Thread................................................................................................37

| PROGRAMACIÓN ESTRUCTURADA 41