2. Dados 50 números enteros, obtener el promedio de ellos y encontrar los
números que fueron mayores que el promedio.
• Una de las principales dificultades que se observan
con estos problemas es que para la resolución de
ambos es necesario almacenar la totalidad de los
datos a procesar.
• No sería eficiente crear N cantidad de variables para
guardar estos datos.
Es posible resolver estos problemas?
Por qué?
Como ?
3. Es una forma particular de organizar datos en una
computadora para que pueda ser utilizado de manera
eficiente.
Tipos de
Estructuras
Simples
Reales
Enteros
Carácter
Booleano
Cadenas
ARREGLOS: Vectores y
Matrices
Complejas
4. 1. Introducción
• Definición
• Estructura Vector
2. Algoritmos
Típicos
• Cargar un Vector
• Mostrar un Vector
3. Algoritmos
útiles
• Ordenar un Vector
• Buscar en un Vector.
4. Ejercicios
• Ejercicio1
• Ejercicio2
5. Mi vector
Nombre de la variable
9 35 4 826
Elementos
Posición : 0
Mi vector[0] = 9
Un vector es una estructura de datos que puede almacenar un conjunto de
datos de un mismo tipo.
Características:
• Se identifica con un único nombre de variable.
• Cada elemento se almacena en posiciones uno a lado de la otra.
• Se accede a cada uno de sus elementos por la posición que
ocupa
6. Como se dijo anteriormente, los arreglos son estructuras de datos,
por lo tanto las mismas deben ser declaradas.
Dim
nombre_del_vector (tamaño) as
tipo_dato
Dim
nombreVector () as tipoDato
…
…
Redim nombreVector(10)
7. 1. Asignación de valores
Alumnos(3) = “Juan Perez”
Precios(0) = “23.50”
2. En un vector los datos son todos del mismo tipo
23.5 00 0 0Juan Perez0
8. Option explicit on
Dim vec() as integer
Dim n as integer
Sub CarVec()
Dim x as string, i as integer
N= TextBox.Text
Redim Vec(N)
for i:= 0 to N-1 do
x=Grid1.item(i,0).value
vec(i)=cint(x)
next i
End Sub
9. Option Explicit on
Dim vec() as integer
Dim n as integer
Sub MosVec()
Dim i as integer, x as string
Redim vec(n)
for i:= 0 to n-1 do
x= cstr(vec(i) )
Grid1.Item(i,0).value=x
next i
End Sub
10. Pasos para resolver este problema:
Leer un vector de N elementos
Ordenar el vector por un método
Conocido
Mostrar el Vector ordenado
Pasos para resolver este problema:
Leer un vector de N elementos
Ordenar el vector por el método Burbuja
Buscar un elemento (X) entre todos los
elementos del vector
Si encuentra el valor mostrar su posición.
Ordenar los elementos de un vector
Buscar un “valor en un vector de N elementos.
14. Option Explicit on
Dim Vector1() as integer
‘Grid1 es el objeto DataGrid del formulario
'El SUB CarVec copia Grid1 al vector de programa llamado Vec1
Sub CarVec()
Dim n as integer, pos As Integer
'Obteniendo la dimensión del vector
n = CInt(text2.Text)
ReDim Vector1(n)
For pos = 0 To n - 1
Vector1(pos) = Grid1.Item(pos,0)
Next pos
End Sub
Dele 2 Click sobre el boton en el Formulario
Suba a la linea 1 del archivo y escriba las siguientes instrucciones
Private Sub Button1_Click()
Call CarVec
Call OrdVecPro
Call MosVec
End Sub
Avance con el cursor hasta la línea dentro del Button1_Click
15. 'Ordenando por método de la burbuja
Sub OrdVecPro()
Dim i As Integer, j As Integer
Dim aux As Integer, n As Integer
n = CInt(Text2.Text)
'Comienza a recorrer el vector y ordenar
For i = 0 To n - 2
For j = i + 1 To n - 1
If (Vector1(i) > Vector1(j)) Then
aux = Vector1(i)
Vector1(i) = Vector1(j)
Vector1(j) = aux
End If
Next j
Next i
End Sub
'Mostrando el vector ordenado
Sub MosVec()
Dim n As Integer, pos As Integer
n = CInt(Text2.Text)
For pos = 0 To n - 1
Grid1.Item(pos,0) = Vector1(pos)
Next pos
End Sub
16.
17. Precondición
El vector debe estar ordenado
Algoritmo
Se compara el dato buscado con el elemento en el
centro del vector.
Si coinciden, el dato ha sido encontrado
Si el dato es mayor que el elemento central del
vector, se tiene que buscar el dato en segunda mitad
del vector.
Si el dato es menor que el elemento central del
vector, se tiene que buscar el dato en la primera
mitad del vector.
20. Cargar 10 elementos en un vector, sumarlos y mostrar el
resultado.
Pasos para resolver este problema:
Leer un vector de 10 elementos
Sumar los elementos
Mostrar el resultado de la suma en pantalla
Ejemplo 1
Muestra
resultados
Lectura del
vector
Suma de
los elementos
21. Pasos para resolver este problema:
1. Crear un nuevo proyecto con: TextBox1 (N),
DataGridView1 (Vector), Button (boton).
2. Haga 2click sobre el boton Button1.
Private SUB Button1_Click()
CALL Sumar()
End sub
3. Declarar el vector como Variable Global debajo de la
instrucción Public Class Form1
Dim sumandos() as integer
4. Luego Crear el proceso Sumar.
22. Sub Sumar()
Dim suma as integer, N as integer, i as integer, x as string, mensage as
string
N = CInt(Text2.Text)
ReDim sumandos(N)
suma = 0
For i = 0 To N - 1
‘Grid1 es el nombre objeto tipo DataGrid del Formulario
x = Grid1.Item(i,0).value
sumandos(i) = CInt(x)
suma = suma + CInt(x)
Next i
mensage = "La suma total es: " + CStr(suma)
MsgBox («TOTAL»,VBOkOnly,mensage)
End Sub
Lectura desde el DataGrid
Suma de los elementos
Muestra resultados
Dimension del vector
23. Leer un vector de 15 elementos
Acumular en S la sumar los elementos
Dividir S entre 15
Mostrar el Promedio
Recorrer el vector buscando y mostrando
los que sean mayor que el promedio.
Dados 15 números enteros, obtener el promedio de
ellos. Mostrar por pantalla dicho promedio y los números
ingresados que fueron mayores que el promedio
Pasos para resolver este problema:
26. Llamaremos matriz de orden (nXm) sobre el cuerpo de los
números reales a un conjunto de números reales dispuestos en
n filas y m columnas de la siguiente forma:
27. 1. Un nombre
2. La dimensión u orden de una matriz, está dado por la
cantidad de filas (n) y la cantidad de columnas (m) que esta
tenga y se denota por (nxm).
3. Cada elemento de la matriz corresponde a un número real
representado de la forma (Aij) donde i corresponde a la
posición de fila y j corresponde a la posición de la columna
dentro de la matriz. (A2,3)
4. La cantidad de elementos de la matriz se determina
multiplicando la cantidad de filas por la cantidad de
columnas. (A2,3 => Tiene 6 elementos (2X3) )
28. Como se dijo anteriormente, los son
estructuras de datos, por lo tanto las mismas deben
ser declaradas con Dim.
Dim
nombre_matriz (fila,columna) as tipo_dato
Dim
nombre_matriz (,) as tipo_dato
Redim nombre_matriz(10,10)
29. • Asignación de valores
Alumnos(1,1) = 5
Alumnos(2,4) = 4
• Los valores de la matriz son todos del mismo tipo
9 35 4 826
9 35 4 826
9 35 4 826
Alumnos
30. Option Explicit on
Dim Mat() as integer
Dim n as integer, m as integer
Sub CarMat()
Dim x as string, i as integer
Dim j as integer
Redim Mat (n,m)
for i:= 0 to n-1 do
for j=0 to m-1 do
x=Grid1.Item(j,i)
Mat(i,j)=cint(x)
next j
next i
End Sub
DF ?
31. Option Explicit on
Dim Mat() as integer
Dim n as integer, m as integer
Sub CarMat()
Dim x as string, i as integer
Dim j as integer
Redim Mat (n,m)
for i:= 0 to n-1 do
for j=0 to m-1 do
x = cstr(Notas(i,j))
Grid1.Item(i,j)=x
next j
next i
End Sub
DF ?
32. “La sencillez de la matriz y el hecho de
que las matrices organicen información
numérica (y también de otros tipos
permite que sean utilizadas en casi todos
los ámbitos del saber científico: física,
sociología, astronomía, ingeniería y
tantos otros mas.”
33. Tipo de Matriz Ejemplo
1. Matriz FIla: Es la que tiene una sola fila. A(1 x M)
2. Matriz Columna: Es la que tiene una sola columna . A (N x 1)
3. Matriz nula si: Aij =0
Donde:
i => 0 <= i <= n
j => 0 <= j <= m
4. A será llamada matriz cuadrada
Donde: n=m.
5. Matriz diagonal :
Donde:
n = m => Igual Nro. Filas y Columnas
Aij =0 => Donde i <> j
34. Tipo de Matriz Ejemplo
6. A será llamada matriz identidad si:
n = m => Debe ser Matriz Cuadrada => Nro. Filas = Nro. Colum.
A(i,j) =0 => Donde i <> j
A(i,j) =1 => Donde i = j
7. Matriz triangular superior si:
n = m => Debe ser Matriz Cuadrada => Nro. Filas = Nro. Colum.
A(i,j) =0 => Donde i > j
8. Mmatriz triangular inferior si
n = m => Debe ser Matriz Cuadrada => Nro. Filas = Nro. Colum.
A(i,j) =0 => Donde i < j
9. Matriz simétrica
n = m => Debe ser Matriz Cuadrada => Nro. Filas = Nro. Colum.
A(i,j) = A(j,i)
35. 10 20 102
50 35 36
52 74 32
El numero de Filas es
IGUAL al numero de
Columnas
36. 10 20 102
50 35 36
52 74 32
Resulta de
Intercambiar
el elementos
en las filas
por las
columnas y
viceversa
La
matriz
debe ser
cuadrada
10 50 52
20 35 74
102 36 32
X=Mat(j,i)
Mat(j,i)=Mat(i,j)
Mat(i,j)=x
37. 0 0 0
0 0 0
0 0 0
Todos sus
elementos
son nulos
38. 10 20 102
50 35 36
52 74 32
Matriz cuadrada
donde sus elementos
Fila = columna
‘Este pedazo de código
‘muestra los elementos de la
‘diagonal principal de la
‘matriz Mat.
For i = 0 To n - 1
For j = 0 To n - 1
If (i = j) Then
msgbox(Mat(i,j))
End If
Next j
Next i
39. 10 20 102
50 35 36
52 74 32
Matriz cuadrada. Observe las
posiciones donde :
Fila+columna= Dimension-1
‘Este pedaso de código
‘muestra los elementos de la
‘diagonal secundaria de la
‘matriz Mat.
Col=n-1
For i = 0 To n - 1
MsgBox(Mat(i,col))
Col=col-1
Next i
40. 1 5 80
0 10 50
0 0 1
Matriz Cuadrada
cuyos elementos
debajo la diagonal
principal son todos
CERO
Dim i,j,n as integer
i=o
n=cint(text1.text) – 1
Error=false
While(i<=n AND error=false)
j=0
while(j<=n and error=false)
if (i > j)then
if (mat (i,j) <> 0)then error = true end if
end if
j=j+1
wend
i=i+1
Wend
If(error = true)then
msgbox(“No es triangular superior”)
Else
msgbox(“Es triangular superior)
End if
41. “La utilización de matrices (arrays)
constituye actualmente una parte
esencial de los lenguajes de
programación, ya que la mayoría de los
datos se introducen en los ordenadores
como tablas organizadas en filas y
columnas : hojas de cálculo, bases de
datos,....”
42. 10 20
50 35
52 4
Las
matrices
deben ser
de igual
dimensión
10 50
20 35
10 36
El resultado
de la SUMA
ira en una
tercer
matriz
+
=
20 70
70 70
62 40
Tan solo
avanzar en
la matriz
resultante
44. 10 20
50 35
52 4
10 5 2 1
20 2 1 0* =
500 90 40 10
1200 320 135 50
600 268 108 52
El Numero de COLUMNAS de la primer matriz debe ser igual que el Numero
de filas de la segunda matriz
(Matriz1
(Matriz2
(Matriz3
(2,0)
(0,2) (2,2)
(2,1)
(1,2)
50. Para tomar en cuenta !!!
Para resolver matrices se debe siempre tratar de :
Mapear la Matriz. En cada posición poner que fila y que columna ocupa
el elemento
Identificar las posiciones de los elementos a analizar
Encontrar la relación Fila Versus Columna para cada elemento que
se esta analizando en la matriz. Esto es la clave para ver como es mas
conveniente moverse en la matriz:
Por fila y columnas ó por columna y luego filas.
51. Una universidad necesita controlar los
resultados de los alumnos en las distintas
materias de la facultad de Ingeniería.
El programa debe ingresar las calificaciones
de los alumnos y visualizar en pantalla la
media de notas por alumno y la media de
notas por materia.
Las asignaturas están codificadas de 1 a 6 y
hay 30 alumnos.
Dim nombres(5) as string
Dim nombres() as string
……………………
……………………
Redim nombres(5)
Se comienza comparando el primer elemento con el segundo, si están desordenados se intercambian. Luego se compara el segundo con el tercero, intercambiándolos si están desordenados.
Este proceso que se realiza sobre todos los elementos constituye una pasada sobre el vector. Al terminar algunos de los elementos más pequeños se han “burbujeado” hacia arriba, mientras que los más grandes se han “hundido”, de aquí el nombre del método.
Encontrando el Primero Comenzar con el primer elemento (i)
e ir comparando con el siguiente hasta el ultimo (j)
Encontrando el Segundo Al termniar de comparar el primero con todos
saltar al segundo elemento (i)y comparar el segundo con todos
Dim nombres(5,2) as string
Dim nombres(2,8) as string
……………………
……………………
Redim nombres(2,5)
El recorrido de las matrices puede realizarse tanto por filas como por columnas, de acuerdo al problema a resolver
No olvide aumentar el codigo suficente para que se armen las 3 matrices.
No olvide que al hacer click en cada celda de Grid1 o Grid2 para pedir datos
Grid3 debe quedar bloqueada para no permita modificar sus valores o datos
Private Sub Command1_Click()
Call Suma
End Sub
Private Sub Suma()
Dim fil, col,a,b As Integer
Dim nfil, ncol As Integer
nfil = CInt(Combo1.Text)
ncol = CInt(Combo2.Text)
ReDim mat3(nfil - 1, ncol - 1)
For fil = 0 To nfil - 1
For col = 0 To ncol – 1
a=cint(grid1.textmatrix(fil,col))
b=cint(grid2.textmatrix(fil,col))
grid3.textmatrix(fil, col) = cstr(a+b)
Next col
Next fil
End Sub
Al avanzar en la matriz resultante necesito:
Una variable NUEVA ( K) que avance en la primer matriz por
columnas y la misa variable avanza en la segunda matriz en filas
No olvide aumentar el codigo suficente para que se armen las 3 matrices.
No olvide que al hacer click en cada celda de las matrices Grid 1 y Grid2
Grid3 debe quedar bloqueada para que el usuario no pueda modificar sus valores
Private Sub Command1_Click()
Call Producto
End Sub