Sie sind auf Seite 1von 15

CENTRO CONCERTADO DE FORMACIN PROFESIONAL

Tema 7 Vectores Arrays


Programacin
Grupo: DAM 1

Profesor: Teresa Valtuea

UNIDAD 7: VECTORES ARRAYS


7-1. TIPOS DE DATOS POR VALOR Cuando dimensionamos una variable, por ejemplo de tipo Integer, el CLR reserva el espacio de memoria que necesita para almacenar un valor del tipo indicado; cuando a esa variable le asignamos un valor, el CLR almacena dicho valor en la posicin de memoria que reserv para esa variable. Si posteriormente asignamos un nuevo valor a dicha variable, ese valor se almacena tambin en la memoria sustituyendo al anterior. Si a continuacin creamos una segunda variable y le asignamos el valor que contena la primera, tendremos dos posiciones de memoria con dos valores, que en este caso resulta que son iguales porque a la segunda le hemos asignado un valor igual al que tena la primera. Vamos a ver esto con un ejemplo:
Module Module1 Sub Main() ' creamos una variable de tipo Integer Dim i As Integer ' le asignamos un valor i = 15 ' mostramos el valor de i Console.WriteLine("i vale : {0}", i) ' ' creamos otra variable Dim j As Integer ' le asignamos el valor de i j = i Console.WriteLine("hacemos esta asignacin: j = i") ' mostramos el contenido de las dos variables Console.WriteLine("i vale : {0} ' cambiamos el valor de i i = 25 Console.WriteLine("hacemos una nueva asignacin a i") y j vale: {1} ", i, j)

Mdulo Programacin Grupo DAM 1

Profesor: Teresa Valtuea

Unidad 7 Pgina

' mostramos nuevamente los valores Console.WriteLine("i vale : {0} y j vale: {1} ", i, j)

Console.WriteLine("Pulse Intro para finalizar")

Console.ReadLine() End Sub End Module

7-2. TIPOS DE DATOS POR REFERENCIA En Visual Basic .NET podemos crear objetos, los objetos se crean a partir de una clase. Cuando dimensionamos una variable cuyo tipo es una clase, simplemente estamos creando una variable que es capaz de manipular un objeto de ese tipo, en el momento de la declaracin, el CLR no reserva espacio para el objeto que contendr esa variable, ya que esto solo lo hace cuando usamos la instruccin New. En el momento en el que creamos el objeto, (mediante New), es cuando el CLR reserva la memoria para dicho objeto y le dice a la variable en qu parte de la memoria est almacenado, de forma que la variable pueda acceder al objeto que se ha creado. Si posteriormente declaramos otra variable del mismo tipo que la primera, tendremos dos variables que saben manejar datos de ese tipo, pero si a la segunda variable le asignamos el contenido de la primera, en la memoria no existirn dos copias de ese objeto, solo existir un objeto que estar referenciado por dos variables. Por tanto, cualquier cambio que se haga en dicho objeto se reflejar en ambas variables.

La palabra clave New crea una nueva instancia de objeto. La clusula New debe especificar una clase definida desde la que se pueda crear la instancia. Se puede utilizar New en una instruccin de declaracin o en una instruccin de asignacin. Cuando se ejecuta la instruccin, sta llama al constructor de la clase especificada y le pasa los argumentos que se le hayan proporcionado:
Vamos a ver esto con un ejemplo: Module Module1 Class prueba Public nombre As String End Class

Mdulo Programacin Grupo DAM 1

Profesor: Teresa Valtuea

Unidad 7 Pgina

Sub Main() ' creamos una variable de tipo prueba Dim a As prueba ' creamos el objeto en memoria a = New prueba ' le asignamos un valor a.nombre = "hola" ' mostramos el contenido de a Console.WriteLine("a vale : {0}", a.nombre) ' ' dimensionamos otra variable Dim b As prueba ' asignamos el valor de a b = a Console.WriteLine("hacemos esta asignacin: b = a") ' mostramos el contenido de las dos Console.WriteLine("a a.nombre, b.nombre) vale : {0} y b vale: {1} ",

' cambiamos el valor de la anterior a.nombre = "adios" Console.WriteLine("hacemos a.nombre") una nueva asignacin a

' mostramos nuevamente los valores Console.WriteLine("a vale : {0} y b a.nombre, b.nombre) ' las dos llevan adios vale: {1} ",

Console.WriteLine("Pulse Intro para finalizar") Console.ReadLine() End Sub End Module

Mdulo Programacin Grupo DAM 1

Profesor: Teresa Valtuea

Unidad 7 Pgina

Se poda haber utilizado de ejemplo cualquiera de las clases que el .NET Framework ofrece pero lo hemos hecho con la clase prueba que es una clase muy simple. Dimensionamos una variable de ese tipo y despus creamos un nuevo objeto del tipo prueba, el cual asignamos a la variable a. Una vez que tenemos creado el objeto al que hace referencia la variable a, le asignamos a la propiedad nombre de dicho objeto un valor. Lo siguiente que hacemos es declarar otra variable del tipo prueba y le asignamos lo que contiene la primera variable. (Hasta aqu, es casi lo mismo que hicimos anteriormente con las variables de tipo Integer, la nica diferencia es la forma de manipular las clases, ya que no podemos usarlas directamente, porque tenemos que crearlas (mediante New) y asignar el valor a una de las propiedades que dicha clase contenga. Esta es la primera diferencia entre los tipos por valor y los tipos por referencia) Cuando mostramos el contenido de la propiedad nombre de ambas variables, las dos muestran lo mismo pero, cuando asignamos un nuevo valor a la variable a, al volver a mostrar los valores de las dos variables, las dos siguen llevando lo mismo. Esto ocurre porque las dos variables apuntan al mismo objeto que est creado en la memoria. Las dos variables hacen referencia al mismo objeto y cuando se realiza un cambio en una variable ese cambio afecta tambin a la otra porque se est modificando el nico objeto de este tipo que hay creado en la memoria.. Realmente en .NET Framework todos los tipos son clases.

7-3. VECTORES O ARRAYS Las variables que hemos estado usando hasta ahora eran de tipo escalar, solo pueden contener un valor a la vez. Una de las formas en las que podemos agrupar varios datos es mediante arrays (o matrices) Un array es una lista de variables del mismo tipo que comparten el nombre, distinguindose unas de otras por un ndice. Tambin se les puede llamar matrices, aunque ese nombre se utiliza ms para vectores de 2 dimensiones. No aloja un valor sino una referencia al bloque de memoria donde se encuentra. Puede ser de cualquier tipo: entero, cadena, etc. DECLARACIN Dim v() As Integer Dim v As Integer() Dim v(10) As Integer Declara un vector con posiciones de 0 a 10 (11 elementos) Crea un array de tipo Integer llamado v

Mdulo Programacin Grupo DAM 1

Profesor: Teresa Valtuea

Unidad 7 Pgina

ASIGNAR VALORES A UN ARRAY Puesto que las matrices son clases, New puede crear una nueva instancia de matriz: Dim v As Integer() v = New Integer() {1,2,3,...} Declaracin + asignacin Dim v() as Integer = {0,1,2} Declaracin y despues asignacin Dim v(3) As Integer v(0) = 2 v(1) = 5 v(2) = 7 v(3) = 8 ACCEDER A UN ELEMENTO DE UN ARRAY Si queremos utilizar el elemento que est en la posicin 3 se pone el nombre del vector y entre parntesis el ndice o posicin en el que se guarda el valor. Sera v(3) El ndice para poder acceder al elemento del array puede ser cualquier expresin numrica, una variable o una constante, la nica condicin es que el resultado sea un nmero entero.

LMITES DE LOS NDICES DE UN ARRAY El ndice inferior de un array siempre es cero, pero el ndice superior puede ser el que queramos ya que su valor mximo sera 2 ^ 64 1 (el valor mximo de un tipo Long).

TAMAO DE UN ARRAY El tamao de un array es el n de elementos que tiene y se obtiene: v.Length

Mdulo Programacin Grupo DAM 1

Profesor: Teresa Valtuea

Unidad 7 Pgina

BUCLES PARA RECORRER UN VECTOR Si tenemos un vector y queremos recorrerlo lo podemos hacer recorriendo todos sus ndices. Dim Cadenas (10) as String Dim I as Integer For I=0 To Cadenas.Length - 1 Console.WriteLine(Introduce el elemento {0}: , I) Cadenas(I) = Console.ReadLine() Next O con la orden For Each Dim Cadena as String For Each Cadena In Cadenas Console.WriteLine(Cadena) Next Esto es para mostrar resultados, no para darles valor

Mdulo Programacin Grupo DAM 1

Profesor: Teresa Valtuea

Unidad 7 Pgina

PRCTICA VECTORES_1:

Crea un vector de enteros con los valores 2,5,1,8,3,9 Mostrar el contenido del vector Saca por pantalla el valor del ndice 2 Saca por pantalla el resultado de multiplicar 13 por el valor de ndice 4 Crea un nuevo vector, tambin de 5 elementos, cuyos valores los introduciremos por teclado y, muestra sus valores

PRCTICA VECTORES_2:
Pedir por pantalla 5 palabras o 5 nmeros, guardarlos en un vector y mostrarlos luego
por pantalla

Realizar dos bucles, uno para que suba todos los elementos una posicin y el primero
pase a la ltima y otro para que baje todos los elementos una posicin y el ltimo pase a la primera posicin.

PRCTICA VECTORES_3:

Pedir por pantalla 10 palabras y guardarlas en un vector Sacar las palabras del ndice 5 hasta el final Muestra por pantalla todas las palabras que empiezan por P Utilizar bucles para realizar las dos operaciones

Mdulo Programacin Grupo DAM 1

Profesor: Teresa Valtuea

Unidad 7 Pgina

VECTORES MATRICES Los vectores pueden tener varias dimensiones. El visto hasta ahora tiene 1. Pero podemos tener ms, hasta 60. Supongamos que vamos recogiendo una serie de medidas cada una de las 24 horas los 365 das del ao. Declararamos este vector: Dim Medidas(364,23) as Single Tendremos 365 elementos de la primera dimensin cada uno de los cuales contiene 24 elementos de la segunda. El nmero total de elementos ser 365*24. Para darle valor a un elemento de la matriz Medidas(0,0) = 2

VECTORES DINMICOS Podemos declarar un vector sin indicar su tamao inicial. Pero s que tenemos que dejar claro el nmero de dimensiones que tiene: Dim MesDias() as Integer Dim Medidas(,) as Single

Mientras no indiquemos su tamao no podremos acceder a l. Si intentamos hacer esto nos dar error: MesDias(0) = 31 Primero debemos redimensionarlo: Redim MesDias(11) Si queremos guardar los valores que tenga: Redim Preserve MesDias(11) Para preguntar si no tiene tamao: IsNothing(v)

Mdulo Programacin Grupo DAM 1

Profesor: Teresa Valtuea

Unidad 7 Pgina

TIPOS DE VARIABLES EN UN VECTOR Una variable de tipo vector es un valor por referencia En la pila se almacena la referencia y el contenido del vector est en el heap Hasta que no le das un tamao no se crea el vector en el heap Un vector se puede asignar a otro que tenga la misma dimensin y tipo, y cuyos tamaos sean iguales si estn definidos: Dim Medidas(100,6) as Single Dim CopiaMedidas(,) as Single CopiaMedidas = Medidas La asignacin copia la referencia, no el contenido Si hacemos ahora esto: CopiaMedidas(0,0) = 10.7 Medidas(0,0) 10.7

NUMEROS ALEATORIOS Random (Clase) Espacio de nombres: System Representa un generador de nmeros seudoaleatorios, un dispositivo que genera una secuencia de nmeros que cumplen determinados requisitos estadsticos de aleatoriedad. Comentarios Los nmeros seudoaleatorios se eligen con la misma probabilidad en un conjunto finito de nmeros. Los nmeros elegidos no son completamente aleatorios porque se seleccionan mediante un algoritmo matemtico concreto, pero su aleatoriedad es suficiente para fines prcticos. La generacin de nmeros aleatorios comienza por un valor de inicializacin. Si se utiliza la misma inicializacin repetidas veces, se genera la misma serie de nmeros. Una forma de generar secuencias distintas consiste en hacer que el valor de inicializacin dependa del tiempo y, por lo tanto, que se genere una serie distinta con cada nueva instancia de Random. Para mejorar el rendimiento, hay que crear una instancia de Random que genere muchos nmeros aleatorios con el tiempo, en lugar de crear una instancia de Random repetidas veces para generar un nico nmero aleatorio.

Mdulo Programacin Grupo DAM 1

Profesor: Teresa Valtuea

Unidad 7 Pgina

10

Para generar un nmero aleatorio seguro mediante cifrado que pueda utilizarse, por ejemplo, para crear una contrasea segura, hay que utilizar una clase derivada de System.Security.Cryptography.RandomNumberGenerator como System.Security.Cryptography.RNGCryptoServiceProvider. Random.Next (Mtodo)

Devuelve un nmero aleatorio no negativo.


Constructores pblicos Random (Constructor) Sobrecargado. Inicializa una nueva instancia de la clase Random.

Mtodos pblicos Next Sobrecargado. Devuelve un nmero aleatorio.

NextDouble

Devuelve un nmero aleatorio entre 0,0 y 1,0.

Random (Resumen) La utilizamos para calcular nmeros aleatorios Creamos una variable de ese tipo de dato y la funcin Next devuelve un nmero en el rango que le pasemos, el valor mnimo incluido, el mximo no. Dim i As Random = New Random Dim aleatorio As Integer = i.Next(1, 100)

Mdulo Programacin Grupo DAM 1

Profesor: Teresa Valtuea

Unidad 7 Pgina

11

PRCTICA VECTORES_4:
Pide por pantalla palabras hasta que introduzcamos el enter y gurdalos en un vector Cuando acabes muestra por pantalla los valores de los ndices pares del vector y los de
ndices impares.

PRCTICA VECTORES_5:
Pedir por pantalla 15 nmeros y guardarlos en un vector, ninguno de ellos puede
repetirse. Suma los componentes de ndice par y los de ndice impar.

PRCTICA VECTORES_6:
Pedir por pantalla una frase que debe tener 15 palabras y guardar cada palabra como un
elemento de un vector. Introducir una palabra por teclado, buscarla en el array y decir si se encuentra o no y, si la ha encontrado cuantas veces. Si la palabra anterior la ha encontrado, eliminarla del vector tantas veces como estuviera subiendo todos los elementos que se encuentren por debajo una posicin y eliminando el ltimo cada vez

PRCTICA VECTORES_7:
Pedimos por pantalla nmeros hasta introducir espacio en blanco y los vamos guardando
en un vector. Cuando hayamos terminado de introducir nmeros que, nos los muestre por pantalla separados por una coma.

PRCTICA VECTORES_8:
Declara un vector de 1000 elementos Rellnalo con los nmeros del 1 al 1000 Saca por pantalla los valores de los ndices comenzando por el 0 y que vayan de 5 en 5

PRCTICA VECTORES_9:

Calculamos un nmero aleatorio entre 1 y 1000 Ir pidiendo un nmero por pantalla hasta que sea mayor que el aleatorio

Mdulo Programacin Grupo DAM 1

Profesor: Teresa Valtuea

Unidad 7 Pgina

12

PRCTICA VECTORES_10:
Hacer un programa para acertar un nmero calculado aleatoriamente del 1 al 100 A cada intento que diga si es mayor o menor

PRCTICA VECTORES_9:
Introducimos por teclado temperatura media y da del mes de agosto. Sin utilizar ningn
mtodo de ordenacin y, sabiendo que los datos pueden entrar desordenados, hacer un programa que escriba las temperaturas ordenadas por da.

PRCTICA VECTORES_10:
Introducimos por teclado nombre y edad de las personas de Zaragoza. Hacer un programa
que me escriba el nmero de personas que hay de cada edad.

PRCTICA VECTORES_11:
Declara un vector de enteros de dos dimensiones, la primera de tamao 10 y la segunda 5 Rellnalo con el nmero resultado de multiplicar su primer ndice por el segundo
v(2,3) =6 v(5,3) = 15

Saca por pantalla todos sus elementos Saca por pantalla slo los elementos cuyo primer ndice sea el 1

PRCTICA VECTORES_12:
Pide por pantalla 5 nmeros y gurdalos en un vector Redimensiona el vector para que le quepan 10 nmeros en total, sin perder el contenido
que tuviera

Pide por pantalla el resto de los nmeros Cuando acabes de introducir nmeros, escrbelos por pantalla separados por comas
1,4,7,12,3,8

PRCTICA VECTORES_13:
Pide por pantalla 20 nmeros y gurdalos en una matriz (las dimensiones pueden ser 5 * 4)
Mdulo Programacin Grupo DAM 1 Profesor: Teresa Valtuea Unidad 7 Pgina

13

Muestra tanto la matriz introducida como su traspuesta.

PRCTICA VECTORES_14:
Pide por pantalla un nmero y utilizando vectores, di si dicho nmero es capica o no lo es.

PRCTICA VECTORES_15:
Pedir nmeros por pantalla hasta introducir un espacio en blanco e ir guardando esos
nmeros en un vector.

Calcular y escribir la media aritmtica de los nmeros introducidos.

VECTORES: PROPIEDADES Length: devuelve el tamao Si es de varias dimensiones te da el tamao total Rank: indica el nmero de dimensiones Las dimensiones empiezan en 0

MTODOS DE LA CLASE ARRAY Mtodos estticos Array.Sort (v): Ordena los elementos de un vector unidimensional, de menor a mayor si es numrico y, en orden ascendente si es string Array.Reverse (v): invierte el orden de los elementos de un vector unidimensional Array.Clear (v, ndice, longitud): limpia el vector, desde el ndice que le pasamos cogiendo la longitud que le decimos Si el vector es numrico los deja a cero. Si es texto a Si es fecha a 1 de enero de 2001 Array.Copy (v, v1, numero): copia tantos datos como le digamos de un vector a otro. Hay que indicarle la longitud de datos a copiar. El otro vector tiene que tener tamao suficiente para que le quepan los datos El ltimo argumento es el nmero de elementos que se copian. V1 deber tener una dimensin suficiente para poder copiar todos los elementos que le decimos.
Mdulo Programacin Grupo DAM 1 Profesor: Teresa Valtuea Unidad 7 Pgina

14

Empieza a copiar en cero.

Mtodos de instancia Clone( ) : devuelve una copia de la estructura y valores V1 = v.Clone() No se le pasa ningn argumento V1 no necesita ningn tamao porque se redimensiona Clona el vector v en V1 Hay que hacer un Ctype con el Option Strict a On ya que, v.Clone devuelve un object a un vector del tipo que se le indique. V1 = Ctype ( v.Clone() , Integer ( ) ) Si colocamos un vector de tipo String sera por ejemplo: string()

GetLength ( n ) : obtiene el tamao del vector para la dimensin indicada en el parmetro. GetLLowerBound ( n ) : devuelve el ndice ms bajo para la dimensin indicada en el

PRCTICA VECTORES_16:

Pedir por pantalla nmeros hasta introducir el Intro. Mostrar los nmeros ordenados de menor a mayor. Borrar los dos ltimos elementos del vector y mostrarlo. Volver a mostrar los nmeros en orden inverso al anterior.

Mdulo Programacin Grupo DAM 1

Profesor: Teresa Valtuea

Unidad 7 Pgina

15

Das könnte Ihnen auch gefallen