Tema 6. Estructuras de datos 6.1 Introducción 6.2 Vector 6.3 Cadena 6.4 Matriz 6.5 Registro 6.6 Aplicaciones 1 6.1 Introducción Colección de datos que se caracterizan por su organización y las operaciones definidas sobre ella. Datos simples entero, real, carácter, booleano Datos estructurados vector, cadena, matriz, registro, conjunto, lista, árbol, grafo, ... elementos Un solo identificador permite representar múltiples datos individuales, que también són accessibles independientemente. 2 1 6.2 Vector (array) Colección finita y ordenada de elementos homogéneos Cada elemento puede ser identificado por su posición (índice) en el vector del mismo tipo Ejemplo: vector v de 7 elementos enteros 23 9 -5 0 117 -1 -80 v(1) v(2) v(3) v(4) v(5) v(6) v(7) Sólo el vector completo tiene nombre. Se accede a los elementos por medio del índice (posición) de cada uno. 3 Sintaxis Definición: v = [23,9,-5,0, 117,-1,-80]; Acceso a los elementos:nombre(índice) v(1) = v(2) - 30; v(i) = v(i+3) / 1.2; ● En MATLAB se puede operar con el vector completo ● En muchos otros lenguajes, NO. 4 2 Ejemplo % % % % Script Cuadrados Calcula los cuadrados de los 20 primeros naturales y los guarda en un vector for i = 1:20 q(i) = i * i; end 5 Ejemplo de función function s = suma(v) % suma(v) % Calcula la suma de los elementos de % un vector de enteros v n = length(v); s = 0; for i = 1:n s = s + v(i); end 6 3 6.3 Cadena (string) Secuencia finita de caracteres Vector de caracteres cad = ‘valor inicial’; 13 caracteres valor inicial 7 Ejemplo function d = invertir (c) % invertir(c) % Invierte la cadena c. n = length(c); pos = n; for i=1:n d(i) = c(pos); pos = pos – 1; end 8 4 Versión alternativa function d = invertir (c) % invertir(c) % Invierte la cadena c. n = length(c); for i=1:n d(i) = c(n-i+1); end 9 6.4 Matriz (matrix) Vector 1 dimensión 1 índice Matriz 2 dimensiones 2 índices n dimensiones n índices Ejemplo: matriz m de 3x4 elementos enteros 1 2 3 1 34 8 41 2 -56 12 0 m(1,3) 3 45 74 -7 4 1 -3 90 m(3,4) 10 5 Sintaxis Definición: m = [34,-56,45,1; 8,12,74,-3; 41,0,-7,90]; Acceso a los elementos: nombre(ind1,ind2) m(1,3) = m(2,1) - 30; m(i,j) = m(i+3,j-1) / 1.2; 11 Ejemplo % Script Productos Cruzados % Calcula en una matriz los productos cruzados % [1,15] x [1,10] for i = 1:15 for j = 1:10 M(i,j) = i * j; end end 12 6 Ejemplo de función function s = suma(M) % suma(m) % Calcula la suma de los elementos % de una matriz de enteros m [f,c] = size(M); s = 0; for i = 1:f for j = 1:c s = s + M(i,j); end end 13 6.5 Registro • Colección de elementos del mismo o diferente tipo • Los elementos se denominan campos del registro • Cada campo tiene un nombre para referenciarlo Ejemplo: registro alumno con los campos siguientes nombre edad nif direccion nota 14 7 Sintaxis Definición: » al = struct('nombre','Josep Pérez Pérez', 'edad', 21,'nif','12345678X', 'direccion', 'Calle Mayor, 1','nota',7.5) al = nombre: edad: nif: direccion: nota: 'Josep Pérez Pérez' 21 '12345678X' 'Carrer Major, 1' 7.5 » 15 Acceso a los elementos nombre.campo Ejemplo: al.edad = 21; disp(al.nif); ● NO se puede operar con el registro completo ● Sí puede ser el parametro de una función 16 8 Aplicación: autómata celular 2D function n = vida(m) % % % % % Juego de la Vida Autómata de Conway: en un mundo 2D una célula nace si tiene 3 vecinos (de 8), sobrevive si tiene 2 o 3, o muere en caso contrario. [f,c] = size(m); ... 17 function n = vida(m) [f,c] = size(m); for i=1:f for j=1:c switch vecinos(m,i,j) case 2 n(i,j) = m(i,j); case 3 n(i,j) = 1; otherwise n(i,j) = 0; end end end 18 9 function v = vecinos(m, i, j) [f,c] = size(m); v = 0; fsup = mayor(1, i-1); finf = menor(f, i+1); cizq = mayor(1, j-1); cdrc = menor(c, j+1); for x = fsup:finf for y = cizq:cdrc if m(x,y) == 1 v = v + 1; end end end if m(i,j) == 1 v = v - 1; end 19 Bibliografia • L. Joyanes. Fundamentos de Programaciónn: Algoritmos y Estructuras de Datos. McGraw-Hill, 1992. Capítulos 6 y 7. • G. Clavel, J. Biondi. Introducciónn a la Programaciónn 2. Masson, 1985. Capítulos 3 y 4. • J. García de Jalón y otros. Aprenda Matlab 5.3 como si estuviera en primero. Madrid, Febrero 2001. 20 10