32
Datos Estructurados Strings, Arreglos y Registros Grupo ISCyP 1 Departamento de Ingeniería de la Información y las Comunicaciones Universidad de Murcia 19 de noviembre de 2018 (08:55h) 1 Erratas y sugerencias a [email protected]. Imagen: https://docs.swift.org/swift- book/LanguageGuide/CollectionTypes.html

Datos Estructurados - Strings, Arreglos y Registros · Desarrollo 1 ¿Qué vamos a estudiar? 2 Array 3 String 4 Matrices y otros arrays de arrays 5 Registros 6 Juntando arrays y registros

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Datos Estructurados - Strings, Arreglos y Registros · Desarrollo 1 ¿Qué vamos a estudiar? 2 Array 3 String 4 Matrices y otros arrays de arrays 5 Registros 6 Juntando arrays y registros

Datos EstructuradosStrings, Arreglos y Registros

Grupo ISCyP1

Departamento de Ingeniería de la Información y las ComunicacionesUniversidad de Murcia

19 de noviembre de 2018 (08:55h)

1Erratas y sugerencias a [email protected]. Imagen: https://docs.swift.org/swift-book/LanguageGuide/CollectionTypes.html

Page 2: Datos Estructurados - Strings, Arreglos y Registros · Desarrollo 1 ¿Qué vamos a estudiar? 2 Array 3 String 4 Matrices y otros arrays de arrays 5 Registros 6 Juntando arrays y registros

Índice de Contenidos

1 ¿Qué vamos a estudiar?

2 Array

3 String

4 Matrices y otros arrays de arrays

5 Registros

6 Juntando arrays y registros

Grupo ISCyP (DIIC. Univ. de Murcia) Datos Estructurados 19 de noviembre de 2018 (08:55h) 2 32

Page 3: Datos Estructurados - Strings, Arreglos y Registros · Desarrollo 1 ¿Qué vamos a estudiar? 2 Array 3 String 4 Matrices y otros arrays de arrays 5 Registros 6 Juntando arrays y registros

Desarrollo

1 ¿Qué vamos a estudiar?

2 Array

3 String

4 Matrices y otros arrays de arrays

5 Registros

6 Juntando arrays y registros

Grupo ISCyP (DIIC. Univ. de Murcia) Datos Estructurados 19 de noviembre de 2018 (08:55h) 3 32

Page 4: Datos Estructurados - Strings, Arreglos y Registros · Desarrollo 1 ¿Qué vamos a estudiar? 2 Array 3 String 4 Matrices y otros arrays de arrays 5 Registros 6 Juntando arrays y registros

Motivación

EjemploColocar n-bolas a distancia vertical equidistantes.

• Coloca 1 bola y muévela en horizontal. Usa %.• ¿Cómo lo hacemos para dos?• ¿Y para tres?•

· · ·

• ¿Y para n?

Con lo estudiado, resuelve los siguientes problemas:• Codificar un punto n-dimensional.• Codificar el peso de n-personas.• Codificar una recta del plano.• Codificar la posición y velocidad de un objeto en el plano.• Codificar una lista de rectas en el plano.• Codificar el nombre, edad y dirección de n-personas.• ...

Imposible hacerlo únicamente con datos simples ... necesitamos otros tipos de datos !!Grupo ISCyP (DIIC. Univ. de Murcia) Datos Estructurados 19 de noviembre de 2018 (08:55h) 4 32

Page 5: Datos Estructurados - Strings, Arreglos y Registros · Desarrollo 1 ¿Qué vamos a estudiar? 2 Array 3 String 4 Matrices y otros arrays de arrays 5 Registros 6 Juntando arrays y registros

Tipos de datos

Estructurasde Datos

⎧⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨

⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎩

Estáticos

⎧⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨

⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎩

Simples o Fundamentales

⎧⎪⎪⎪⎪⎪⎨

⎪⎪⎪⎪⎪⎩

Carácter char

Enteros int� ���

Reales float� ���

Booleano boolean

Enumerados enum

Compuestos o Estructurados

⎧⎪⎪⎪⎪⎪⎨

⎪⎪⎪⎪⎪⎩

Strings

Arreglos

Registros

Conjuntos

Archivos

Dinámicos

⎧⎪⎪⎪⎪⎪⎨

⎪⎪⎪⎪⎪⎩

Pilas

Colas

Listas

ÁrbolesGrafos

Grupo ISCyP (DIIC. Univ. de Murcia) Datos Estructurados 19 de noviembre de 2018 (08:55h) 5 32

Todos los datos son del mismo tipo de dato.• Secuencia de caracteres: String• Lista de datos: array

Todos los datos pueden ser tipos de datos diferentes.• Estructura o registro: class (con Processing).

Page 6: Datos Estructurados - Strings, Arreglos y Registros · Desarrollo 1 ¿Qué vamos a estudiar? 2 Array 3 String 4 Matrices y otros arrays de arrays 5 Registros 6 Juntando arrays y registros

Antes de continuar .... algo sobre la memoria

• Código: Las instrucciones a ejecutar.• Datos estáticos (Data): Variables globales y constantes.• Pila de llamadas (Stack) guarda información de de las

funciones: los parámetros, las variables locales y los resultadosde retorno de las funciones o métodos, ....

• Datos dinámicos (Heap): Asignaciones dinámicas de memoria(malloc (en C), getmem (en Pascal), o new (en Processing, Java,C#, C++,... ). Cuando ya no se necesita la memoria asignadadinámicamente se debe usar métodos para que la memoria puedaser liberada ya sea manualmente como en C o automáticamentecon un recolector de basura (garbage collector) como en Java.

Stack:

x

@2f99fa5

var intintchar

Heap:

Grupo ISCyP (DIIC. Univ. de Murcia) Datos Estructurados 19 de noviembre de 2018 (08:55h) 6 32

Page 7: Datos Estructurados - Strings, Arreglos y Registros · Desarrollo 1 ¿Qué vamos a estudiar? 2 Array 3 String 4 Matrices y otros arrays de arrays 5 Registros 6 Juntando arrays y registros

Antes de continuar .... y algo sobre las funciones 1/2

En una función:• Un parámetro es una variable de entrada.

Representa a uno dato que espera recibir lafunción.

• Un argumento es el valor literal o variableque se le asigna a un parámetro cuando lafunción es invocada.

• Formas de pasar un argumento a unafunción:

• Paso de argumentos por valor: copiar elcontenido del argumento al parámetro.delámbito local de la función.Dos valores duplicados e independientes. Lamodificación del valor del parámetro noafecta al argumento.

• Paso de argumentos por referencia:proporcionar al parámetro la dirección dememoria donde está almacenado el dato.Un solo valor. Dos referencias al mismovalor. La modificación del valor delparámetro afecta al argumento.

En Java todos los argumentos pasan por valor.

Grupo ISCyP (DIIC. Univ. de Murcia) Datos Estructurados 19 de noviembre de 2018 (08:55h) 7 32

Page 8: Datos Estructurados - Strings, Arreglos y Registros · Desarrollo 1 ¿Qué vamos a estudiar? 2 Array 3 String 4 Matrices y otros arrays de arrays 5 Registros 6 Juntando arrays y registros

Antes de continuar .... y algo sobre las funciones 2/2

Grupo ISCyP (DIIC. Univ. de Murcia) Datos Estructurados 19 de noviembre de 2018 (08:55h) 8 32

Page 9: Datos Estructurados - Strings, Arreglos y Registros · Desarrollo 1 ¿Qué vamos a estudiar? 2 Array 3 String 4 Matrices y otros arrays de arrays 5 Registros 6 Juntando arrays y registros

Desarrollo

1 ¿Qué vamos a estudiar?

2 Array

3 String

4 Matrices y otros arrays de arrays

5 Registros

6 Juntando arrays y registros

Grupo ISCyP (DIIC. Univ. de Murcia) Datos Estructurados 19 de noviembre de 2018 (08:55h) 9 32

Page 10: Datos Estructurados - Strings, Arreglos y Registros · Desarrollo 1 ¿Qué vamos a estudiar? 2 Array 3 String 4 Matrices y otros arrays de arrays 5 Registros 6 Juntando arrays y registros

Array y acciones básicasUn array es un tipo de dato formado por un conjunto de datos, todos del mismo tipo.

• Declaración de una variable con tipo de dato array.

1 TipoDato [] variable; // Declaración

• Reserva de memoria para una variable con tipo de dato array.

1 variable = new TipoDato[n]; // n es el número de datos

Se usa un índice entre 0 y variable.length-1.• Asignación de valores en una posición.

1 variable[i] = valor; // Asignación

No confundir índice con término (valor asociado a un índice).• Recuperación del valor de una posición: basta mencionar al término.

1 variable[i] = variable[k] * 2; // Ejemplo de recuperación y asignación.

Grupo ISCyP (DIIC. Univ. de Murcia) Datos Estructurados 19 de noviembre de 2018 (08:55h) 10 32

Page 11: Datos Estructurados - Strings, Arreglos y Registros · Desarrollo 1 ¿Qué vamos a estudiar? 2 Array 3 String 4 Matrices y otros arrays de arrays 5 Registros 6 Juntando arrays y registros

Un ejemplo

La información de un vector se almacena como una lista de 2 números reales. Define los 2 vectoresortonormales del espacio cartesiano. Calcula su suma (componente a componente) y muestra elresultado.

1 float[] u; // Declaración de variables

2 u = new float [2]; // Reserva de memoria

3 u[0] = 1.0; // Inicialización de valor a cada término.

4 u[1] = 0.0;

6 float[] v = new float [2]; // Declaración y reserva de memoria

7 v[0] = 0.0; // Inicialización de valor a cada término.

8 v[1] = 1.0;

10 float[] suma = {0.0, 0.0}; // Declaración, reserva e inicialización

12 for (int i = 0; i < suma.length; i++) { // Para cada posición hacer:

13 suma[i] = u[i] + v[i]; // Recuperar términos de u[] y v[] y asignar al término v[]

14 }

16 for (int i=0; i<suma.length; i++) {

17 print("\t" + suma[i]); // Recuperar términos de suma.

18 }

Grupo ISCyP (DIIC. Univ. de Murcia) Datos Estructurados 19 de noviembre de 2018 (08:55h) 11 32

Page 12: Datos Estructurados - Strings, Arreglos y Registros · Desarrollo 1 ¿Qué vamos a estudiar? 2 Array 3 String 4 Matrices y otros arrays de arrays 5 Registros 6 Juntando arrays y registros

Arrays y funcionesUn array es un tipo de dato formado por un conjunto de datos, todos iguales.

• Funciones que retornan un array

1 TD[] nombreFuncion(td1 par1 , td2 par2 , ....) {

2 TD[] variable; // Declarar variable cuyo valor-referencia será retornado.

3 variable = new TD[num]; // Asignar una referencia y reservar memoria.

4 ....

5 for(i in I) Asignar valor al término TD[i] // Dar valor a los términos

6 ....

7 return variable; // Retornar la referencia a la zona de memoria

8 }

• Funciones que modifican arrays o simplemente los usa. Cuidado con el ALIASING !!

1 unTD nombreFuncion (.... TD[] parámetro, ....) {

2 unTD variable; // si vas a retorna un valor.

3 ....

4 for(i in I) modificar términos o usar términos parámetro[i]

5 ....

6 return variable; // Si es void, nada que retornar

7 }

Pasa una copia de la referencia de memoria del lugar donde se almacenan los datos.

Grupo ISCyP (DIIC. Univ. de Murcia) Datos Estructurados 19 de noviembre de 2018 (08:55h) 12 32

Page 13: Datos Estructurados - Strings, Arreglos y Registros · Desarrollo 1 ¿Qué vamos a estudiar? 2 Array 3 String 4 Matrices y otros arrays de arrays 5 Registros 6 Juntando arrays y registros

Ejercicios - I

E�������� �

Compara y programa las funciones que se indican para puntos de la recta real y puntos del plano:• Crear un punto aleatorio.• Calcular el punto medio de dos puntos dados.• Mostrar un punto dado.• Transformar las coordenadas de un punto para ser su punto simétrico respecto del origen .• La que realiza la transformación anterior y además retorne la distancia entre ambos puntos.

Para puntos del plano:• Guarda en una variable el valor del punto antes de ser transformado y comprueba el aliasing.• Haz la tabla de seguimiento para el punto (2� 10).

• Crea una función que retorne una copia de un punto dado.

Muestra qué ocurre en la memoria en cada caso.

Grupo ISCyP (DIIC. Univ. de Murcia) Datos Estructurados 19 de noviembre de 2018 (08:55h) 13 32

Page 14: Datos Estructurados - Strings, Arreglos y Registros · Desarrollo 1 ¿Qué vamos a estudiar? 2 Array 3 String 4 Matrices y otros arrays de arrays 5 Registros 6 Juntando arrays y registros

Ejercicios - II

E�������� �

Sobre una lista de naturales (enteros positivos) construir las siguientes funciones• Crear una lista aleatoria de longitud n.• Crear una lista aleatoria de longitud n con los n primeros (y distintos) números naturales.

Diseños: (prueba y error) vs ruleta.• Crear una copia de la lista.• Modificar los valores pares de una lista para que valgan la mitad.• Modificar cada término según la expresión a

i

= ai−1 + a

i

+ ai+1.

• Mostrar los valores de una lista de naturales.

Muestra qué ocurre en la memoria en cada caso.

Grupo ISCyP (DIIC. Univ. de Murcia) Datos Estructurados 19 de noviembre de 2018 (08:55h) 14 32

Page 15: Datos Estructurados - Strings, Arreglos y Registros · Desarrollo 1 ¿Qué vamos a estudiar? 2 Array 3 String 4 Matrices y otros arrays de arrays 5 Registros 6 Juntando arrays y registros

Desarrollo

1 ¿Qué vamos a estudiar?

2 Array

3 String

4 Matrices y otros arrays de arrays

5 Registros

6 Juntando arrays y registros

Grupo ISCyP (DIIC. Univ. de Murcia) Datos Estructurados 19 de noviembre de 2018 (08:55h) 15 32

Page 16: Datos Estructurados - Strings, Arreglos y Registros · Desarrollo 1 ¿Qué vamos a estudiar? 2 Array 3 String 4 Matrices y otros arrays de arrays 5 Registros 6 Juntando arrays y registros

String y acciones básicasUn String es un tipo de dato formado por una secuencia de char.

Suele ser un caso excepcional comportándose de forma diferente a char[]. Depende del lenguaje.• Declaración de una variable de tipo String.

1 String str;

• Asignación de valor a una variable String.Cantidad de caracteres en un String: str.length()

• Asignación directa

1 str = "listaDeCaracteres";

NO necesita reserva de memoria. Se realiza en la asignación.• Asignación a partir de un char[]

1 char[] caracteres = {’h’, ’o’, ’l’, ’a’};

2 str = new String(caracteres);

SÍ necesita reserva de memoria. Se calcula a partir del char[]• Recuperación del carácter situado en una posición.

1 char caracter = str.charAt(indice)

• NO se puede cambiar el carácter de una posición. Un término de un String es una constante.Grupo ISCyP (DIIC. Univ. de Murcia) Datos Estructurados 19 de noviembre de 2018 (08:55h) 16 32

Page 17: Datos Estructurados - Strings, Arreglos y Registros · Desarrollo 1 ¿Qué vamos a estudiar? 2 Array 3 String 4 Matrices y otros arrays de arrays 5 Registros 6 Juntando arrays y registros

Strings y funcionesUn String es un tipo de dato formado por una secuencia de char.

• Funciones que crean Strings

1 String nombreFuncion(td1 par1 , td2 par2 , ....) {

2 String str; // Declaración de una secuencia de caracteres.

3 ....

4 str= otroStr + "secuencia"; // Una asignacion de valor al string.

5 ....

6 return str; // Retorna la referencia donde se encuentra la secuencia.

7 }

• Funciones que usan un string como parámetro no modifican el argumento.

1 td nombreFuncion (.... String parametro , ....) {

2 ....

3 // Instrucciones que usen el valor del parámetro

4 ....

5 return salida; // Retorna valor si td no es void

6 }

• Funciones que modifican un string• No se puede modificar un String.• Se guarda en el “Java constant pool” y es intocable.

Grupo ISCyP (DIIC. Univ. de Murcia) Datos Estructurados 19 de noviembre de 2018 (08:55h) 17 32

Page 18: Datos Estructurados - Strings, Arreglos y Registros · Desarrollo 1 ¿Qué vamos a estudiar? 2 Array 3 String 4 Matrices y otros arrays de arrays 5 Registros 6 Juntando arrays y registros

Desarrollo

1 ¿Qué vamos a estudiar?

2 Array

3 String

4 Matrices y otros arrays de arrays

5 Registros

6 Juntando arrays y registros

Grupo ISCyP (DIIC. Univ. de Murcia) Datos Estructurados 19 de noviembre de 2018 (08:55h) 18 32

Page 19: Datos Estructurados - Strings, Arreglos y Registros · Desarrollo 1 ¿Qué vamos a estudiar? 2 Array 3 String 4 Matrices y otros arrays de arrays 5 Registros 6 Juntando arrays y registros

Matrices y acciones básicasUna matriz es una lista de arrays.

• Declaración de una matriz (tipo de dato array de array).

1 TipoDato [][] variable; // Declaración

• Reserva de memoria para una variable con tipo matriz.

1 variable = new TipoDato[n][m]; // Reserva para nxm datos

Se usan dos índice entre 0 y variable.length-1 y 0 y variable[k].length-1.• Asignación de valores en una posición.

1 variable[i][j] = valor; // Asignación

No confundir índice con término (valor asociado a DOS índices).• Recuperación de valor de una “posición”: basta mencionar al término.

1 variable[i][j] = variable[k][t] * 2; // Ejemplo de recuperación y asignación.

Grupo ISCyP (DIIC. Univ. de Murcia) Datos Estructurados 19 de noviembre de 2018 (08:55h) 19 32

Page 20: Datos Estructurados - Strings, Arreglos y Registros · Desarrollo 1 ¿Qué vamos a estudiar? 2 Array 3 String 4 Matrices y otros arrays de arrays 5 Registros 6 Juntando arrays y registros

Un ejemplo

Suma dos matrices de números enteros.

1 int [][] a; // Declaración de variable

2 a = new int [2][2]; // Reserva de memoria

3 a[0][0] = 1.0; a[0][1] = 0.0; // Inicialización de valor a cada término

4 a[1][0] = 0.0; a[1][1] = 1.0

6 float[] b = new int [2][2]; // Declaración y reserva de memoria

7 b[0][0] = 0.0; b[0][1] = 1.0; // Inicialización de valor a cada término

8 b[1][0] = 1.0; b[1][1] = 0.0

10 int [][] suma = { {0.0, 0.0}, // Declaración, reserva e inicialización

11 {0.0, 0.0} };

13 for (int i = 0; i < suma.length; i++) { // Para cada índice en i hacer:

14 for (int j = 0; j < suma[i]. length; j++) { // Para cada índice en j hacer:

15 suma[i][j] += a[i][j] + b[i][j]; // Recuperar términos [i][j] y

16 } // asignar al término suma[i][j]

17 }

19 for (int i = 0; i < suma.length; i++) { // Para cada índice en i hacer:

20 for (int j = 0; j < suma[i]. length; j++) { // Para cada índice en j hacer:

21 print("\t" + suma[i]); // Recuperar términos [i][j] de suma.

22 }

23 println ();

24 }

Grupo ISCyP (DIIC. Univ. de Murcia) Datos Estructurados 19 de noviembre de 2018 (08:55h) 20 32

Page 21: Datos Estructurados - Strings, Arreglos y Registros · Desarrollo 1 ¿Qué vamos a estudiar? 2 Array 3 String 4 Matrices y otros arrays de arrays 5 Registros 6 Juntando arrays y registros

Y ¿qué hay de las funciones?Un array es un tipo de dato formado por un conjunto de datos, todos iguales.

• Funciones que retornan un array

1 td[][] nombreFuncion(td1 par1 , td2 par2 , ....) {

2 td[][] variable; // Declarar variable cuyo valor-referencia será retornado.

3 variable = new td[d1][d2]; // Asignar una referencia y reservar memoria.

4 ....

5 for(i,j) Asignar valores a los términos td[i][j]

6 ....

7 return variable; // Retornar la referencia a la zona de memoria

8 }

• Funciones que modifican arrays o simplemente los usa. Cuidado con el ALIASING !!

1 unTD nombreFuncion (.... td[][] parámetro, ....) {

2 unTD variable; // si vas a retorna un valor.

3 ....

4 for(i,j) modificar términos o usar términos parámetro[i][j]

5 ....

6 return variable; // Si es void, nada que retornar

7 }

Pasa una copia de la referencia de memoria del lugar donde se almacenan los datos.

Grupo ISCyP (DIIC. Univ. de Murcia) Datos Estructurados 19 de noviembre de 2018 (08:55h) 21 32

Page 22: Datos Estructurados - Strings, Arreglos y Registros · Desarrollo 1 ¿Qué vamos a estudiar? 2 Array 3 String 4 Matrices y otros arrays de arrays 5 Registros 6 Juntando arrays y registros

Algunos ejercicios

E�������� �

Construye cada una de las funciones cuyo propósito se indica a continuación:1 Generar matrices aleatorias para rangos dados.2 Calcular la suma de dos matrices, si es posible.3 Modificar los valores de una matriz multiplicando cada elemento por una constante dada.4 Mostrar los valores de una matriz.

E�������� �

Para resolver un sistema de ecuaciones por Gauss ¿cómo se programaría?Recuerda que dadas a1x + b1y + ���

a2x + b2y + ���

se pasa a a1x + b1y + ���

0x + b

2y + ���

realizando esta suma

+a2(a1x + b1y + ���)+ −a1(a2x + b2y + ���)

0x + b

2y + ���

R2 ← a2 × R1 − a1 × R2

Grupo ISCyP (DIIC. Univ. de Murcia) Datos Estructurados 19 de noviembre de 2018 (08:55h) 22 32

Page 23: Datos Estructurados - Strings, Arreglos y Registros · Desarrollo 1 ¿Qué vamos a estudiar? 2 Array 3 String 4 Matrices y otros arrays de arrays 5 Registros 6 Juntando arrays y registros

Otros arrays de arrays

• Se puede incrementar la dimensionalidad añadiendo un índice más por cada dimensión.

1 int[] vd1; int [][] vd2; int [][][] vd3; int [][][][] vd4; ....

• Se puede establecer que todas las listas tengan la misma longitud.

1 int[] vd1 = new int[n]; // lista de n-enteros

2 int [][] vd2 = new int[m][n]; // lista de m-listas de n-enteros

3 int [][][] vd3 = new int[k][m][n];// lista de k-listas de m-listas de n-enteros

4 ..etc..

• Se puede tener una lista formada por listas de longitud diferente:

1 // Declaración y reserva de memoria para

2 // una lista de dos listas, con longitudes desconocidas.

3 int [][] arrayEscalonado = new int [2][];

5 // Reserva de memoria para cada una de las dos listas.

6 arrayEscalonado [0] = new int [4]; // La primera tiene 4 elementos.

7 arrayEscalonado [1] = new int [2]; // La segunda tien 2 elementos.

Por eso es muy importante hacer referencia a la longitud de la segunda lista (de enteros) conla sentencia array[i].length.

Grupo ISCyP (DIIC. Univ. de Murcia) Datos Estructurados 19 de noviembre de 2018 (08:55h) 23 32

Page 24: Datos Estructurados - Strings, Arreglos y Registros · Desarrollo 1 ¿Qué vamos a estudiar? 2 Array 3 String 4 Matrices y otros arrays de arrays 5 Registros 6 Juntando arrays y registros

Desarrollo

1 ¿Qué vamos a estudiar?

2 Array

3 String

4 Matrices y otros arrays de arrays

5 Registros

6 Juntando arrays y registros

Grupo ISCyP (DIIC. Univ. de Murcia) Datos Estructurados 19 de noviembre de 2018 (08:55h) 24 32

Page 25: Datos Estructurados - Strings, Arreglos y Registros · Desarrollo 1 ¿Qué vamos a estudiar? 2 Array 3 String 4 Matrices y otros arrays de arrays 5 Registros 6 Juntando arrays y registros

Registros y acciones básicasUn registro es un tipo de dato formado por un conjunto de datos, posiblemente de tipos diferentes.

• Definición de un tipo de dato de tipo registro.

1 class NombreDelRegistro {

2 td1 campo1;

3 td2 campo 2;

4 .....

5 }

• Declaración de una variable con tipo de dato registro.

1 NombreDelRegistro variable;

• Reserva de memoria para una variable con tipo de dato registro.

1 variable = new NombreDelRegistro ();

• Asignación de valores a un campo

1 variable.campo = valor;

• Recuperación de valores a un campo, basta mencionar al campo. P.e.

1 resultado = variable.campo * 2;

Grupo ISCyP (DIIC. Univ. de Murcia) Datos Estructurados 19 de noviembre de 2018 (08:55h) 25 32

Page 26: Datos Estructurados - Strings, Arreglos y Registros · Desarrollo 1 ¿Qué vamos a estudiar? 2 Array 3 String 4 Matrices y otros arrays de arrays 5 Registros 6 Juntando arrays y registros

Un ejemplo

La información de cada persona viene dada por su nombre, edad (en años naturales) y la nota enISCyP. Dada la información de 3 personas (Juan, María y Luis), calcula la nota media de suscalificaciones en ISCyP.

1 // Creación del registro Persona.

2 class Persona {

3 String nombre;

4 int edad;

5 float nota;

6 }

8 // Declaración de tres variables de tipo registro Persona

9 Persona juan , maria , luis;

11 // Reserva de memoria para guardar un String, un entero y un real para cada variable.

12 // Asigna una referencia a la dirección de memoria donde se encuentran los 3 datos.

13 juan = new Persona();

14 maria = new Persona();

15 luis = new Persona();

17 .... terminar en papel ...

Grupo ISCyP (DIIC. Univ. de Murcia) Datos Estructurados 19 de noviembre de 2018 (08:55h) 26 32

Page 27: Datos Estructurados - Strings, Arreglos y Registros · Desarrollo 1 ¿Qué vamos a estudiar? 2 Array 3 String 4 Matrices y otros arrays de arrays 5 Registros 6 Juntando arrays y registros

Registros y funcionesUn registro es un tipo de dato formado por un conjunto de datos, posiblemente de tipos diferentes.

• Funciones que retornan registros

1 NombreDelRegistro nombreFuncion(td1 par1 , td2 par2 , ....) {

2 NombreDelRegistro = variable;

3 variable = new NombreDelRegistro ();

4 ....

5 asignacion de valores a los campos

6 ....

7 return variable;

8 }

• Funciones que modifican registros o simplemente los usa. ALIASING !!

1 td nombreFuncion (.... NombreDelRegistro parametro , ....) {

2 td variable; // si vas a retorna un valor.

3 ....

4 asignacion/uso de valores a los campos de parametro

5 ....

6 return variable; // Si es void, nada que retornar

7 }

Pasa una copia de la referencia de memoria del lugar donde se almacenan los datos.

Grupo ISCyP (DIIC. Univ. de Murcia) Datos Estructurados 19 de noviembre de 2018 (08:55h) 27 32

Page 28: Datos Estructurados - Strings, Arreglos y Registros · Desarrollo 1 ¿Qué vamos a estudiar? 2 Array 3 String 4 Matrices y otros arrays de arrays 5 Registros 6 Juntando arrays y registros

Ejercicios

E�������� �

Para el ejemplo anterior• Crea una función que modifique la nota de un alumno por una nota dada.

Guarda en una variable el valor de la variable que va a ser modificada antes de lainvocación para comprobar el aliasing.

• Modifica la función para que nos indique si la nota se ha modificado con éxito. Una nota semodifica con éxito si no es negativa ni superior a 10.

• Crea una función que retorne la nota media de 3 alumnos.• En el setup() debe mostrar el funcionamiento de las funciones.

E�������� �

• Crea el tipo de dato Circulo.• Construye una función que crea un círculo aleatorio.• Crea una función que muestre un círculo dado.• Programa una función que use las funciones anteriores para crear y dibujar n-círculos.

Grupo ISCyP (DIIC. Univ. de Murcia) Datos Estructurados 19 de noviembre de 2018 (08:55h) 28 32

Page 29: Datos Estructurados - Strings, Arreglos y Registros · Desarrollo 1 ¿Qué vamos a estudiar? 2 Array 3 String 4 Matrices y otros arrays de arrays 5 Registros 6 Juntando arrays y registros

Desarrollo

1 ¿Qué vamos a estudiar?

2 Array

3 String

4 Matrices y otros arrays de arrays

5 Registros

6 Juntando arrays y registros

Grupo ISCyP (DIIC. Univ. de Murcia) Datos Estructurados 19 de noviembre de 2018 (08:55h) 29 32

Page 30: Datos Estructurados - Strings, Arreglos y Registros · Desarrollo 1 ¿Qué vamos a estudiar? 2 Array 3 String 4 Matrices y otros arrays de arrays 5 Registros 6 Juntando arrays y registros

Los elementos de un array pueden ser registros.

Si los elementos del array 1D, 2D, 3D, ... son registros, será necesario hacer el correspondiente new

antes de usar dicha variable.Ejemplo. Cómo codificar un tablero de ajedrez.

1 class Pieza {

2 int color;

3 String nombre;

4 }

6 Pieza [][] tablero = new Pieza [8][8];

7 for (int i=0; i<tablero.length; i++)

8 for (int j=0; j<tablero[i]. length; j++) {

10 // Para asignar un valor a un término del array se tiene que Reservar memoria

11 tablero[i][j] = new Pieza (); // porque cada término es un registro.

13 if (i<2) { // Fichas blancas

14 tablero[i][j].color = 255; // Asigna color al registro

15 if (i==1) {

16 tablero[i][j]. nombre = "Peón";// Asigna nombre al registro

17 } else {

18 // Resto de las piezas

19 }

20 }

21 ....

22 }

Grupo ISCyP (DIIC. Univ. de Murcia) Datos Estructurados 19 de noviembre de 2018 (08:55h) 30 32

Page 31: Datos Estructurados - Strings, Arreglos y Registros · Desarrollo 1 ¿Qué vamos a estudiar? 2 Array 3 String 4 Matrices y otros arrays de arrays 5 Registros 6 Juntando arrays y registros

El campo de un array puede ser un arrray

Un campo de un registro puede estar formado un array 1D, 2D, 3D, ... Será necesario hacer elcorrespondiente new antes de usar el correspondiente campo.

Ejemplo.Un ejemplo de cómo codificar un corredor de F1.

1 int numeroCarreras = 10;

3 class Corredor {

4 String nombre;

5 int[] posiciones;

6 }

8 Corredor alonso = new Corredor (); // Crear un corredor

9 alonso.nombre = "Alonso"; // Asignar valor al campo .nombre.

12 // Para asignar un valor al campo .posiciones hay que Reservar memoria para el campo

13 int[] posiciones = new int[numerCarreras ]; // puesto que es un array.

15 for (int i = 0; i < posiciones.length; i++)

16 Corredor.posicionesEnCarrera[i] = simulaCarrera(i);

Grupo ISCyP (DIIC. Univ. de Murcia) Datos Estructurados 19 de noviembre de 2018 (08:55h) 31 32

Page 32: Datos Estructurados - Strings, Arreglos y Registros · Desarrollo 1 ¿Qué vamos a estudiar? 2 Array 3 String 4 Matrices y otros arrays de arrays 5 Registros 6 Juntando arrays y registros

Ejercicio

E�������� �

¿Cómo habría que dar valores a la variable titulos de una universidad si tiene 3 grados, cadauno con 4 cursos y cada curso con 20 personas?

1 class Persona {

2 String nombre;

3 int edad;

4 }

6 class Curso {

7 int numCurso;

8 Persona [] personas;

9 }

11 class Grado {

12 String nombre;

13 Curso [] cursos;

14 }

16 Grado [] titulos;

Grupo ISCyP (DIIC. Univ. de Murcia) Datos Estructurados 19 de noviembre de 2018 (08:55h) 32 32