B2 T5 Vectores Ii

2,215 views

Published on

Published in: Technology, Travel
1 Comment
0 Likes
Statistics
Notes
  • Be the first to like this

No Downloads
Views
Total views
2,215
On SlideShare
0
From Embeds
0
Number of Embeds
18
Actions
Shares
0
Downloads
30
Comments
1
Likes
0
Embeds 0
No embeds

No notes for slide

B2 T5 Vectores Ii

  1. 1. Tema 5. Vectores 1. Introducción 2. Operaciones con vectores 2.1. Operaciónes básicas: asignación 2.2. Recorrido secuencial de un vector 2.3. Búsqueda en un vector (No ordenado y Ordenado) 3. Matrices 3.1. Introducción 3.2. Sintaxis 3.3. Ejemplos 4. Operaciones con matrices 4.1. Recorrido de una matriz - Por filas, columnas 4.2. Traspuesta, suma, producto Bibliografía: – Biondi y Clavel, 1989 – Joyanes – Weiss – Cairó
  2. 2. 5.2. Operaciones con vectores (cont.) Búsqueda en un vector • Problema habitual en programación: buscar un elemento en un vector. • Tenemos que distinguir dos casos: – Los elementos del vector no están ordenados. Es necesario recorrer todo el vector para comprobar si un elemento está o no. – Los elementos del vector están ordenados. Se puede establecer una relación de orden ≤ entre los elementos del vector: v(1) ≤ v(2) ≤ v(3) ≤ ... ≤ v(n) No será necesario recorrer todo el vector en todos los casos.
  3. 3. Búsqueda secuencial en vectores no ordenados Algoritmo Búsqueda_secuencial_1_1 (V, N, X, Posición, Existe) es V: Vector [1..M] de T; {p. dato} N: numérico; {p. dato; posiciones ocupadas del vector} X: T; {p. dato; elemento buscado} Posición: numérico; {p. resultado; posición del elemento, si está} Existe: lógico; {p. resultado; indicará si hemos encontrado el elemento} Inicio Posición := 1; Existe := falso; mientras Posición < N y V(Posicion) <> X hacer Posición := Posición + 1; fin mientras; si V(Posición) = X entonces existe := Cierto; Fin si Fin
  4. 4. Búsqueda secuencial en vectores no ordenados Algoritmo Búsqueda_secuencial_1_2 (V, N, X, Posición, Existe) es V: Vector [1..M] de T; {p. dato} N: numérico; {p. dato; posiciones ocupadas del vector} X: T; {p. dato; elemento buscado} Posición: numérico; {p. resultado; posición del elemento, si está} Existe: lógico; {p. resultado; indicará si hemos encontrado el elemento} Inicio Posición := 1; Existe := falso; mientras Posición <= N y Existe = falso hacer si V(Posición) = X entonces existe := Cierto; sino Posición := Posición + 1; fin si fin mientras; Fin
  5. 5. Búsqueda secuencial en vectores ordenados Algoritmo Búsqueda_secuencial_2 (V, N, X, Posición, Existe) es V: Vector [1..M] de T; N, Posición: numérico; X: T; Existe: lógico; Inicio Posición := 1; Existe := falso; mientras Posición < N y V(Posición) < X hacer Posición := Posición + 1; fin mientras; si V(Posición) = X entonces Existe := Cierto; fin si; Fin
  6. 6. Búsqueda en vectores ordenados Algoritmo Búsqueda_binaria (V, N, X, pos, existe) es V: Vector [1..M] de T; {p. dato} N: numérico; {p. dato} X: T; {p. dato} Pos: numérico; {p. resultado} Existe: lógico; {p. resultado} Inf, Sup, Med: numérico; Inicio Inf := 1; Sup := N; Mientras Inf <> Sup hacer Med := (Inf + Sup) div 2; Si X > V(Med) entonces Inf := Med + 1; Sino {X <= V(Med) } Sup := Med; finsi Fin mientras Si V(inf) = X entonces existe := cierto; pos := inf; sino existe := falso; finsi Fin
  7. 7. 5.3. Matrices 5.3.1. Introducción – ¿Qué ocurre cuando el tipo base de un array es otro array? Mat = vector[1..4] de (vector[1..5] de enteros); X: Mat; X X(1) X(2) X(3) X(4) Tenemos un array de 20 enteros, organizados en 4 bloques de 5 enteros cada uno: X(1) tendrá X(1,1), X(1,2), X(1,3), X(1,4), X(1,5) y así X(2), X(3) y X(4)
  8. 8. • Obviamente, para acceder a cada elemento individual serán necesarios dos índices: uno por cada dimensión. X(1) X[1,1] X[1,2] X[1,3] X[1,4] X[1,5] X(2) X[2,1] X[2,2] X[2,3] X[2,4] X[2,5] X(3) X[3,1] X[3,2] X[3,3] X[3,4] X[3,5] X(4) X[4,1] X[4,2] X[4,3] X[4,4] X[4,5] 5.3.2. Sintaxis Además de la sintaxis anterior, que es genérica: <tipo-matriz> ::= <tipo> = vector [<tipo-indice>{,<tipo-indice>}] de <tipo-base> <tipo-indice> ::= <elemento-inicial> .. <elemento-final> 5.3.3. Ejemplos Notas = vector[1..4,1..9] de numérico; {Notas: 4 cursos x 9 asignaturas} Temperaturas = vector[1..12,1..31] de numérico; {Temperaturas anuales x meses} Nombres = vector[1..4,1..40] de cadenas; {Nombres de 40 alumnos x 4 cursos} N: Notas; T: Temperaturas; {T(6, 1): temperatura asociada al 1 de junio}
  9. 9. 5.4. Operaciones sobre matrices 5.4.1. Recorrido • También se puede aplicar el tratamiento secuencial sobre los arrays en general y sobre las matrices en particular. En el caso de un vector: – Esquema 1 (Tratamiento en curso ≠ tratamiento final) iniciar tratamiento; para I de 1 a N-1 hace tratar X(I); {el elemento i-ésimo de la secuencia es X(I)} finpara; tratar X(N); – Esquema 2 (Tratamiento en curso = tratamiento final) iniciar tratamiento; para I de 1 a N hace tratar X(I); {el elemento i-ésimo de la secuencia es X(I)} finpara; Los elementos de la secuencia son escalares.
  10. 10. En el caso de un vector multidimensional (por ejemplo, AMxN) • las filas (o las columnas) de la matriz forman también una secuencia (fila1), (fila2),..., (filaM) (X(1,1),...,X(1,N)), (X(2,1),...,X(2,N)), ..., (X(M,1),...,X(M,N)) • el elemento i-ésimo de la secuencia será una fila o una columna • a su vez, ese elemento puede necesitar también un tratamiento secuencial Recorrido de una matriz por filas Algoritmo Leer_matriz (A, M, N) es {declaración de tipos} matriz = vector[1..100, 1..100] de numérico; {declaración de parámetros} A: matriz; {p. dato-resultado} M, N: numérico; {p. dato; porción utilizable de la matriz} I: numérico; {entero, se usará como índice} Inicio para I desde 1 hasta M hacer leer_fila (A, I, N); fin para Fin
  11. 11. Algoritmo Leer_fila (A, fila, max_col) es {declaración de tipos} matriz = vector[1..100, 1..100] de numérico; {declaración de parámetros} A: matriz; {p. dato-resultado} fila, max_col: numérico; {p. dato} J: numérico; {entero, se usará como índice} Inicio para J desde 1 hasta max_col hacer escribir “Dame el elemento “, J, “ de la fila “, fila, “: “; leer A(fila, J); fin para Fin Generalmente se escribirá de forma compacta: para I desde 1 hasta M hacer para J desde 1 hasta N hacer tratar A(I, J); fin para fin para
  12. 12. Recorrido de una matriz por columnas Algoritmo Mostrar_matriz (A, M, N) es {declaración de tipos} matriz = vector[1..100, 1..100] de numérico; {declaración de parámetros} A: matriz; {p. dato-resultado} M, N: numérico; {p. datos; porción utilizable de la matriz} J: numérico; {entero, se usará como índice} Inicio para J desde 1 hasta N hacer {J=1..N, cada columna J de A} mostrar_columna (A, M, J); fin para Fin
  13. 13. Algoritmo mostrar_columna (A, max_fil, col) es {declaración de tipos} matriz = vector[1..100, 1..100] de numérico; {declaración de parámetros} A: matriz; {p. dato-resultado} col, max_fil: numérico; {p. dato} I: numérico; {entero, se usará como índice} Inicio para I desde 1 hasta max_fil hacer escribir “El elemento “, I, “ de la columna “, col, “es: “; escribir A(I, col); fin para Fin Generalmente se escribirá de forma compacta: para J desde 1 hasta N hacer para I desde 1 hasta M hacer tratar A(I, J); fin para fin para
  14. 14. 5.4.2. Traspuesta, suma y producto • Suma Resumen: Dadas dos matrices A y B de tamaños 100 x 100, en las que están ocupadas M x N posiciones, calcúlese en C la suma de A + B Algoritmo Suma (A, B, C, M, N) es A, B: matriz; {p. dato} C: matriz; {p. resultado} M, N: numérico; {p. dato} • Traspuesta Resumen: Dada una matriz A de tamaño 100 x 100, en la que están ocupadas M x N posiciones, transfórmese A en su traspuesta, sin utilizar ninguna estructura auxiliar Algoritmo Traspuesta (A, M, N) es A: matriz; {p. dato-resultado} M, N: numérico; {p. dato}
  15. 15. • Producto Resumen: Dadas dos matrices A y B de tamaños máximos 100 x 100, en las que están ocupadas AMxN y BNxP posiciones, calcúlese en C el producto de A x B Algoritmo Producto (A, B, C, M, N, P) es A, B: matriz; {p. dato; AMxN y BNxP} C: matriz; {p. resultado; CMxP} M, N, P: numérico; {p. dato}
  16. 16. Algoritmo Calcular N primeros números primos mediante la criba de Eratóstenes Inicialmente todos los números 2..10000 son números primos posibles Si I es un número primo (excepto el 1), elimino todos los números múltiplos de I, entre I*2 y 10000/I: para eliminar substituyo el valor inicial por 0. 1 2 3 4 5 6 7 8 9 10 1 1 1 1 1 1 1 1 1 1 i=2 Suprimir múltiplos de 2, que es primo, porque multiplos(i)=1 1 1 1 0 1 0 1 0 1 0

×