tema 5. tipos de datos definidos por el usuario -...

26
21-nov-05 Introducción a los Computadores Tema 5. D. Usuario 1 Tema 5. Tipos de datos definidos por el usuario Contenido del tema: – Enumerados – Arrays Cadenas de caracteres – Registros Arrays, cadenas de caracteres y registros en C++ Francisco Rus Mansilla Dpto. Lenguajes y Ciencias de la Computación 21-nov-05 Introducción a los Computadores Tema 5. D. Usuario 2 Tipos simples definidos por el usuario • Los tipos enumerados : Permiten definir nuevos tipos simples, de cardinalidad (n) reducida, y valores fácilmente interpretables. Se declaran en la sección de TIPOS de un algoritmo. ENUM {Id 1 , Id 2 , ..., Id n } IdTipoEnumerado Literales: identificadores: Id 1 , Id 2 , ..., Id n Son tipos ordinales: ORD(), SUC() y PRED(). No tienen operadores específicos. Representación física: como N o como Z. La entrada/salida no está permitida. El tipo booleano puede verse como un enumerado con dos valores: ENUM {VERDADERO, FALSO} B

Upload: nguyentram

Post on 18-Sep-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Tema 5. Tipos de datos definidos por el usuario - lcc.uma.esrusman/docencia/ic/tema5_2005_2006.pdf · Tema 5. D. Usuario 1 Tema 5. ... • Supongamos que un fabricante de máquinas

1

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

1

Tema 5. Tipos de datos definidos por el usuario

Contenido del tema:– Enumerados– Arrays– Cadenas de caracteres– Registros– Arrays, cadenas de caracteres y registros en C++

Francisco Rus Mansilla

Dpto. Lenguajes y Ciencias de la Computación

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

2

Tipos simples definidos por el usuario

• Los tipos enumerados:– Permiten definir nuevos tipos simples, de cardinalidad

(n) reducida, y valores fácilmente interpretables.– Se declaran en la sección de TIPOS de un algoritmo.

ENUM {Id1, Id2, ..., Idn} IdTipoEnumerado– Literales: identificadores: Id1, Id2, ..., Idn– Son tipos ordinales: ORD(), SUC() y PRED().– No tienen operadores específicos.– Representación física: como N o como Z.– La entrada/salida no está permitida.– El tipo booleano puede verse como un enumerado con

dos valores: ENUM {VERDADERO, FALSO} B

Page 2: Tema 5. Tipos de datos definidos por el usuario - lcc.uma.esrusman/docencia/ic/tema5_2005_2006.pdf · Tema 5. D. Usuario 1 Tema 5. ... • Supongamos que un fabricante de máquinas

2

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

3

Los tipos simples mejoran la legibilidad...

CONSTN ROJO = 1 /***********************/N VERDE = 2 /* Valores arbitrarios */N AMARILLO = 3 /***********************/

VARN color, semaforo

INICIOcolor = ROJO // Más legiblesemaforo = 9 // Nada lo impide

... y no haya manera de restringirlo y/o controlarlo.

... aunque el dominio sea arbitrario...

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

4

Los tipos enumerados...

• Mejoran la legibilidad y permiten restringir y controlar el dominio.TIPOS

ENUM {rojo, amarillo, verde} TpColorVAR

TpColor semaforoN posicion

INICIOsemaforo = amarilloposicion = ORD(rojo) // Asigna 1semaforo = PRED(verde) // Asigna amarillosemaforo = SUC(verde) // Error semánticosemaforo = naranja // Valor no permitidosemaforo = 1 // Error semántico

Page 3: Tema 5. Tipos de datos definidos por el usuario - lcc.uma.esrusman/docencia/ic/tema5_2005_2006.pdf · Tema 5. D. Usuario 1 Tema 5. ... • Supongamos que un fabricante de máquinas

3

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

5

Tipos enumerados en C++/*Como definir tipos enumerados y variables de dicho tipo.*/

enum TpColor {rojo, azul,verde};

int main() {

TpColor c1,c2;

c1 = rojo;

c2 = c1; //c1 y c2 con el mismo valor

return 0;

}

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

6

Tipos de datos compuestos

• Se componen de otros tipos (simples o compuestos a su vez).– Componentes homogéneos: arrays.

– Componentes heterogéneos: registros.

• No ordenados: no se les puede aplicar los operadores relacionales.

• La asignación entre datos del mismo tipo compuesto es siempre posible: copia completa del dato.

Page 4: Tema 5. Tipos de datos definidos por el usuario - lcc.uma.esrusman/docencia/ic/tema5_2005_2006.pdf · Tema 5. D. Usuario 1 Tema 5. ... • Supongamos que un fabricante de máquinas

4

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

7

Necesidad de los arrays

• Los tipos simples son atómicos.

• Para representar colecciones de elementos los tipos simples no son manejables.

• Las colecciones de elementos pueden ser:– Homogéneas: todos los datos del mismo tipo →

empleamos arrays para guardarlos.– Heterogéneas: pueden incluir datos de distinto tipo →

empleamos registros para guardarlos.

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

8

Ejemplo de necesidad de los arrays

• Supongamos que un fabricante de máquinas de café estáinteresado en conocer la popularidad de las diferentes combinaciones de café que dispensa la máquina. La máquina en cuestión dispone de cuatro botones etiquetados como 1, 2, 3 y 4 junto con una nota que explica la función de cada uno de ellos:

1. Café solo, sin azúcar.

2. Café solo, con azúcar.3. Café con leche, sin azúcar.4. Café con leche, con azúcar.

Page 5: Tema 5. Tipos de datos definidos por el usuario - lcc.uma.esrusman/docencia/ic/tema5_2005_2006.pdf · Tema 5. D. Usuario 1 Tema 5. ... • Supongamos que un fabricante de máquinas

5

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

9

Inicializar contadores

Leer Selección

Selección !=0

Actualizar Contador

Leer Selección

Imprimir contadores

1≤Selecc.≤4SiNo

Si

No

Fin

Inicio

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

10

Diseño en pseudolenguaje: tipos simplesALGORITMO InformarCafeteraVAR

N soloSin, soloCon, conLeche, sinLeche, seleccion

INICIOsoloSin = 0soloCon = 0conLeche = 0sinLeche = 0Escribir (“¿Que número de

bebida ha seleccionado?: “)Leer (seleccion)

MIENTRAS seleccion != 0 HACERCASO seleccion SEA

1: soloSin = soloSin + 12: soloCon = soloCon + 13: conLeche= conLeche + 14: sinLeche= sinLeche + 1

SINO//No hacer nada

FINCASOEscribir(“¿Que número debebida ha seleccionado?:“)Leer (seleccion)

FINMIENTRASEscribir (“Solo Sin Azúcar: “)Escribir (soloSin)...FIN InformarCafetera

Page 6: Tema 5. Tipos de datos definidos por el usuario - lcc.uma.esrusman/docencia/ic/tema5_2005_2006.pdf · Tema 5. D. Usuario 1 Tema 5. ... • Supongamos que un fabricante de máquinas

6

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

11

Si se aumenta el número de productos...ALGORITMO InformarCafeteraVAR

N soloSin, soloCon, conLeche, sinLeche, teCon,teSin,..., colaCon, seleccion

INICIOsoloSin = 0soloCon = 0conLeche = 0sinLeche = 0teSin = 0teCon = 0...colaCon = 0Escribir (“¿Que número de bebida ha seleccionado?: “)Leer (seleccion)

MIENTRAS seleccion != 0 HACERCASO seleccion SEA

1: soloSin = soloSin + 12: soloCon = soloCon + 13: conLeche= conLeche + 1...

SINO//No hacer nada

FINCASOEscribir(“¿Que número debebida ha seleccionado?:“)Leer (seleccion)

FINMIENTRASEscribir (“Solo Sin Azúcar: “)Escribir (soloSin)...FIN InformarCafetera

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

12

Concepto de array o vector

• Un array es una estructura de datos.

• Un array es una estructura homogénea:– Los datos son todos del mismo tipo → tipo base

• Un array es una colección finita de elementos.

• Los elementos del array están ordenados según un índice (esto es, están indizados) ordinal.

• El tamaño del array debe especificarse en tiempo de compilación:– Se usa para ello una constante simbólica o literal.– El tamaño (número de elementos) no cambia durante la ejecución

del programa.

Page 7: Tema 5. Tipos de datos definidos por el usuario - lcc.uma.esrusman/docencia/ic/tema5_2005_2006.pdf · Tema 5. D. Usuario 1 Tema 5. ... • Supongamos que un fabricante de máquinas

7

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

13

Declaración de tipos y variables array

El tipo array:Formado por todos los posibles arrays de tipo base T que se puedan formar.

Cardinalidad:#Array = (#TipoBase)#TipoÍndice

Declaraciones:TIPOSTipoBase TipoArray [IndInicial..IndFinal]

VARTipoArray nuevoArrayTipoBase2 otroArray[IndInicial2..IndFinal2]

TIPO ORDINAL

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

14

Ejemplo de declaración de array

CONSTN NUM_DÍAS = 31

TIPOSR TipoMes[1..NUM_DÍAS]

VARTipoMes mesHoras

ARRAY mesHoras

Componente 1

Componente 2 mesHoras[3]

Componente 31

.......

1 2 3 4 28 29 30 31 Indice:

Page 8: Tema 5. Tipos de datos definidos por el usuario - lcc.uma.esrusman/docencia/ic/tema5_2005_2006.pdf · Tema 5. D. Usuario 1 Tema 5. ... • Supongamos que un fabricante de máquinas

8

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

15

Operaciones con arrays

1. Asignación (inicialización).2. Lectura/escritura.3. Recorrido (acceso secuencial).4. Modificación.5. Ordenación.6. Búsqueda de elementos.

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

16

Asignación e inicialización de un array

– Asignación de un elemento:mesHoras[20] = 7.0

– Asignación de todos los elementos:PARA posicion = 1 HASTA NUM_DÍAS HACER

mesHoras[posicion] = 10.0FINPARA

– Inicialización en tiempo de declaración:VAR

N ejemplo[-4..0] = {1, 3, 5, 0, 1}

Page 9: Tema 5. Tipos de datos definidos por el usuario - lcc.uma.esrusman/docencia/ic/tema5_2005_2006.pdf · Tema 5. D. Usuario 1 Tema 5. ... • Supongamos que un fabricante de máquinas

9

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

17

Asignación de un array a otro array

• ¡Siempre que sean del MISMO tipo array!VAR

TipoMes mes, copiaMesINICIO

// Inicializo mes con un bucle, por ejemplocopiaMes = mes // Asignación directa permitida

FIN

Es equivalente a:PARA posicion = 1 HASTA NUM_DÍAS HACER

copiaMes[posicion]= mes[posicion]FINPARA

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

18

Lectura/escritura y recorrido de un array

• Se emplean bucles, aunque puede haber otras estructuras selectivas...

PARA posicion = 1 HASTA NUM_DIAS HACERSI posicion MOD 2 != 0 ENTONCES// Sólo leemos las posicines pares

Leer(mes[posicion])Escribir(mes[posicion]*0.5)

FINSImes[posicion] = SQRT(mes[posicion])

FINPARA

• El recorrido es un acceso secuencial al array para aplicar la misma operación sobre cada elemento.

Page 10: Tema 5. Tipos de datos definidos por el usuario - lcc.uma.esrusman/docencia/ic/tema5_2005_2006.pdf · Tema 5. D. Usuario 1 Tema 5. ... • Supongamos que un fabricante de máquinas

10

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

19

Ejemplo: suma y media de elementosALGORITMO CalcularMediaPuntos (S Z suma, media)CONST

N NUM_PUNTOS = 30TIPOS

Z TPuntos [1..NUM_PUNTOS] VAR

TPuntos puntos; Z s; N componenteINICIO

s = 0PARA componente = 1 HASTA NUM_PUNTOS HACER // Recorro para leer

Leer(puntos[componente])FINPARAPARA componente = 1 HASTA NUM_PUNTOS HACER // Recorro para acumular

s = s + puntos [componente] FINPARAsuma = smedia = suma DIV NUM_PUNTOS

FIN CalcularMediaPuntos

Añadir subprogramación

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

20

Solución para el problema de la cafeteraALGORITMO InformarCafeteraCONST

N NUMERO = 8 // Número de bebidasTIPOS

N TArrFreq [1..NUMERO]VAR

TArrFreq frecuenciaN bebida

INICIO// Inicialización de las frecuenciasPARA bebida=1 HASTA NUMERO HACER

frecuencia[bebida] = 0FINPARAEscribir (“¿Que número de bebida ha

seleccionado? (0 para acabar): “)

Leer(bebida) MIENTRAS bebida != 0 HACER

SI (bebida >=1)Y(bebida<=NUMERO)ENTONCES

frecuencia[bebida] = frecuencia[bebida] +1

FINSI /* Este ‘SI’ evita el índice fuera de rango */Escribir (“¿Que número de

bebida ha seleccionado: “) Leer(bebida)

FINMIENTRAS// Impresión de resultados

FIN InformarCafetera

Page 11: Tema 5. Tipos de datos definidos por el usuario - lcc.uma.esrusman/docencia/ic/tema5_2005_2006.pdf · Tema 5. D. Usuario 1 Tema 5. ... • Supongamos que un fabricante de máquinas

11

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

21

Paso de arrays como parámetrosCONST

N MAX_NUM = 10TIPOS

N TpArray[0..MAX_NUM-1]ALGORITMO TpArray Ejemplo (E TpArray a; ES TpArray b)VAR

TpArray unArrayINICIO

...DEVOVER(unArray)

FIN EjemploALGORITMO PrincipalVAR

TpArray uno, dos, tresINICIO

...tres = Ejemplo(uno, dos)

...

Los arrays pueden ser parámetros de E, S o ES

Una función puede devolver un array

Se definen las constantes y los tipos arrays que luego puede usarse en el paso de parámetros

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

22

Arrays en C++

Declaración de variables:float vector[3];float vector[3] = {17.3 , 3.5 , 7.0};

Declaración de tipos:

typedef float TVector [3];TVector vector; vector[0] = 0.5;

Paso de arrays como parámetros:typedef int TVector[20];void LeerVector (TVector &v, const intelementos);

Se indica la dimensión del array, preferiblemente con una constante simbólica.

Los índices siempre van desde 0 a la dimensión - 1

Declaro un tipo arrayque luego uso en el paso de parámetros

0 1 2

Page 12: Tema 5. Tipos de datos definidos por el usuario - lcc.uma.esrusman/docencia/ic/tema5_2005_2006.pdf · Tema 5. D. Usuario 1 Tema 5. ... • Supongamos que un fabricante de máquinas

12

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

23

Arrays bidimensionales: matrices

TIPOS NN TEjemplo [1..N][1..M]

...

...

.

.

.

.

.

.

.

.

.

.

.

.

1

2

N

1 2 3 M-2 M-1 M Indice:

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

24

Filas y columnas de una matrizT I P O S NN T M a t r i z [ 1 . . 5 ] [ 1 . . 6 ] V A R I A B L E S T M a t r i z m

F i l a 1

F i l a 5

F i l a 2

F i l a 3

F i l a 4

C o l u m n a 1

C o l u m n a 2

C o l u m n a 3

C o l u m n a 6 C o l u m n a 5

C o l u m n a 4

T a b l a o M a t r i z

2 3 2 2 2 4 2 5 2 1 26

3 3 3 2 3 4 3 5 3 1 36

4 3 4 2 4 4 4 5 4 1 46

5 3 5 2 5 4 5 5 5 1 56

1 3 1 2 1 4 1 5 1 1 16

Page 13: Tema 5. Tipos de datos definidos por el usuario - lcc.uma.esrusman/docencia/ic/tema5_2005_2006.pdf · Tema 5. D. Usuario 1 Tema 5. ... • Supongamos que un fabricante de máquinas

13

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

25

Ejemplo: procesamiento de una matrizALGORITMO ProcesarMatrizCONST

N MAX_FIL = 6N MAX_COL = 8

TIPOSZ TVectorFil [1..MAX_FIL] Z TVectorCol [1..MAX_COL]TVectorCol TMat [1..MAX_FIL]

VARTMat aTVectorFil b // Suma filasTVectorCol c // Suma columnasN fi, coZ suma

INICIOEscribir(“Escribe los valores de la matriz, fila a fila: “)PARA fi = 1 HASTA MAX_FIL HACER

PARA co = 1 HASTA MAX_COL HACERLeer(a[fi][co])

FINPARAFINPARA/* Suma de filas */PARA fi = 1 HASTA MAX_FIL HACER

suma = 0PARA co = 1 HASTA MAX_COL HACER

suma = suma + a[fi][co]

FINPARAb[fi] = suma

FINPARA

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

26

Continuación.../* Suma de columnas */PARA co = 1 HASTA MAX_COL HACER

suma = 0PARA fi = 1 HASTA MAX_FIL HACER

suma = suma + a[fi][co]FINPARAc[co] = suma

FINPARA

/* Escribir la matriz */PARA fi = 1 HASTA MAX_FIL HACER

PARA co = 1 HASTA MAX_COL HACEREscribir(a[fi][co])

FINPARAEscribir(b[fi], ‘\n’)

FINPARA

// Escribir suma de columnasPARA co = 1 HASTA MAX_COL HACER

Escribir(c[co])FINPARA

FIN ProcesarMatriz

Page 14: Tema 5. Tipos de datos definidos por el usuario - lcc.uma.esrusman/docencia/ic/tema5_2005_2006.pdf · Tema 5. D. Usuario 1 Tema 5. ... • Supongamos que un fabricante de máquinas

14

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

27

Otro ejemplo: producto matricialALGORITMO MultiplicarMatricesCONST

N MAX = 10TIPOS

R TMatriz [1..MAX][1..MAX]VAR

TMatriz matrizA,matrizB,matrizCN numFilas, numColumA, numColumBR suma

INICIO// Lectura de datosEscribir (“Número de filas y columnas”)Leer (numFilas, numColumA)LeerMatriz (matrizA,numFilas, numColumA)Leer(numColumB)LeerMatriz (matrizB,numColumA, numColumB)/* El número de filas de B debe coincidir

con el de columnas de A */// Proceso C = AxBmatrizC = ProductoMat(matrizA, matrizB,

numFilas, numColumA, numColumB)

// Presentación de resultadosEscribirMat (matrizC, numFilas,

numColumB)FIN MultiplicarMatrices

El subalgoritmoProductoMatlo implementamos luego...

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

28

Subalgoritmo para el producto matricialALGORITMO TMatriz ProductoMat (EE TMatriz mA, mB; E E N totFil,filCol,

totCol)VARTMatriz resultN k, fil, colR suma

INICIOPARA fil = 1 HASTA totFil HACER

PARA col = 1 HASTA totCol HACERsuma = 0.0PARA k = 1 HASTA filCol HACER

suma = suma + mA[fil][k] * mB[k][col]FINPARAresult[fil][col] = suma

FINPARAFINPARADEVOLVER result

FIN ProductoMat

Page 15: Tema 5. Tipos de datos definidos por el usuario - lcc.uma.esrusman/docencia/ic/tema5_2005_2006.pdf · Tema 5. D. Usuario 1 Tema 5. ... • Supongamos que un fabricante de máquinas

15

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

29

Arrays de varias dimensiones

¿Arrays MultidimensionalesMultidimensionales ?Arrays de tres, cuatro,..., n dimensiones.

Ejemplo:CONST

N MAX_IND1 = 10N MAX_IND2 = 10N MAX_IND3 = 20

TIPOSR TVector [1..MAX_IND3]TVector TMatriz [1..MAX_IND2]TMatriz TArray3D [1..MAX_IND1]

VARTArray3D tridimensional

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

30

Un array tridimensional es un cubo

Columnas

Filas

Profun

didad

NN TArray3D [1..MAX1][1..MAX2][1..MAX3]

Page 16: Tema 5. Tipos de datos definidos por el usuario - lcc.uma.esrusman/docencia/ic/tema5_2005_2006.pdf · Tema 5. D. Usuario 1 Tema 5. ... • Supongamos que un fabricante de máquinas

16

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

31

C++ permite arrays multidimensionales

typedef float TMatriz [MAX1][MAX2];typedef float TCubo [MAX1][MAX2][MAX3];

TCubo cubo; // Array tridimensional

// Posible inicializaciónfor (int i=0; i<MAX1; i++)

for (int j=0; j<MAX2; j++)for (int k=0; k<MAX3; k++)

cubo[i][j][k] = 0.0;

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

32

Cadenas de caracteres

• Una cadena de caracteres es una secuencia de cero (cadena vacía) o más caracteres de entrada/salida.

• La longitud de una cadena es el número de caracteres que contiene.

• Las cadenas de caracteres constantes literales se escriben entre comillas dobles

• Ejemplos: “12 de octubre de 1.492”“[email protected]

“ a Eiou_12345_&$-__”

Page 17: Tema 5. Tipos de datos definidos por el usuario - lcc.uma.esrusman/docencia/ic/tema5_2005_2006.pdf · Tema 5. D. Usuario 1 Tema 5. ... • Supongamos que un fabricante de máquinas

17

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

33

Representar cadenas de caracteres

• Vamos a emplear arrays de caracteres para representar cadenas de caracteres.

• Un delimitador (‘\0’ o CHR(0)) delimitará la cadena dentro del array.

• Una cadena vacía quedará perfectamente representada por un delimitador en la primera posición del array.

• A partir del delimitador, el contenido del array no importa.

• La primera aparición del delimitador marcará la terminación de la cadena.

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

34

Declaración de cadenas de caracteres

• Cuando se declara un array de caracteres su contenido es indefinido.

CONSTN MAX_LONG = 17

TIPOSC TpCadena [1..MAX_LONG]

VARTpCadena cadena

e # 5 µ Ö g Ο • ∆ φ ∼ η / ∀ . Θ

2 3 17 1 16 15 14 13 12 11 10 9 8 7 6 5 4

Uno de los posibles estados iniciales del vector cadena

Page 18: Tema 5. Tipos de datos definidos por el usuario - lcc.uma.esrusman/docencia/ic/tema5_2005_2006.pdf · Tema 5. D. Usuario 1 Tema 5. ... • Supongamos que un fabricante de máquinas

18

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

35

Variables tipo cadena de caracteres

• La posición del carácter terminador marcará el final de la cadena.

• Por ejemplo, cadena[1] = ‘\0’ creará una cadena vacía (“”).

e # 5 \0 Ö \0 Ο • ∆ φ ∼ η / ∀ . Θ

2 3 17 1 16 15 14 13 12 11 10 9 8 7 6 5 4

Cadena de caracteres vacía (terminador en la primera posición del array, aunque puede haber otros más adelante)

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

36

Asignación de cadenas

• La asignación entre dos arrays puede hacerse siempre que ambos sean del mismo tipo.

• Esto incluye a los arrays de caracteres donde se guardan cadenas.VAR

TpCadena cad1, cad2...

cad1 = cad2 // Copia de todo el array• Asignación de constantes literales

– El terminador se añade automáticamente.

– La última posición del array se reserva para el terminador.VAR

TpCadena cad1 = “ejemplo”, cad2...

cad2 = “Cadenamuylargaquenocabe” // Sólo se // almacenan 16 // caracteres

Page 19: Tema 5. Tipos de datos definidos por el usuario - lcc.uma.esrusman/docencia/ic/tema5_2005_2006.pdf · Tema 5. D. Usuario 1 Tema 5. ... • Supongamos que un fabricante de máquinas

19

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

37

Lectura no estándar hasta fin de cadena

CONSTC RETORNOCARRO = CHR(13)C TERMINADOR = CHR(0)N LONGITUD = 100

TIPOSC TCadena [1..LONG_MAX]

/* Lectura hasta el final de la cadena(retorno de carro o longitud máxima) */

ALGORITMO LeerCadena (SS TCadena cadena )VAR

N componenteC caracter

INICIO

componente = 1Leer(caracter)MIENTRAS (componente < LONG_MAX) Y

(caracter != RETORNOCARRO) HACERcadena[componente] = caracterLeer(caracter)componente = componente + 1

FINMIENTRAScadena[componente] = TERMINADOR

FIN LeerCadena

Declaración de constantes y tipos:

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

38

Lectura estándar hasta delimitadorCONSTC RETORNOCARRO = CHR(13)C BLANCO = CHR(32)C TABULADOR = CHR(9)C TERMINADOR = CHR(0)N LONGITUD = 100

TIPOSC TCadena [1..LONG_MAX]

ALGORITMO B EsDelimitador(E C car)VAR

B esDel = FALSOINICIO

SI car == RETORNOCARRO Ocar == BLANCO Ocar == TABULADOR ENTONCES

esDel = VERDADEROFINSIDEVOLVER esDel

FIN EsDelimitador

/* Lectura hasta delimitador (blanco, tabulador, retorno de carro) o longitud máxima */

ALGORITMO Leer (SS TCadena cadena )VAR

N componenteC caracter

INICIOcomponente = 1Leer(caracter)MIENTRAS componente < LON_MAX Y

NO EsDelimitador(caracter) HACERcadena[componente] = caracterLeer(caracter)componente = componente+1

FINMIENTRAScadena[componente] = TERMINADOR

FIN Leer

Este algoritmo lo podemos suponer implementado por el pseudolenguaje

Page 20: Tema 5. Tipos de datos definidos por el usuario - lcc.uma.esrusman/docencia/ic/tema5_2005_2006.pdf · Tema 5. D. Usuario 1 Tema 5. ... • Supongamos que un fabricante de máquinas

20

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

39

Escritura estándar de cadenasCONST

C TERMINADOR = CHR(0); N LONG_MAX = 100TIPOS

C Tcadena[1..LONG_MAX]// Precondición: cadena correctamente definidaALGORITMO Escribir (E TCadena cadena)VAR

N compINICIO

comp = 1MIENTRAS (cadena[comp] != TERMINADOR) HACER

Escribir(cadena[comp])comp = comp + 1

FINMIENTRASFIN Escribir

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

40

Longitud de una cadena de caracteresCONST

C TERMINADOR = CHR(0); N LONG_MAX = 100TIPOS

C Tcadena[1..LONG_MAX]// Precondición: cadena correctamente definidaALGORITMO Longitud (E TCadena cadena)VAR

N compINICIO

comp = 1MIENTRAS (cadena[comp] != TERMINADOR) HACER

comp = comp + 1FINMIENTRASDEVOLVER (comp – 1)

FIN Longitud

Page 21: Tema 5. Tipos de datos definidos por el usuario - lcc.uma.esrusman/docencia/ic/tema5_2005_2006.pdf · Tema 5. D. Usuario 1 Tema 5. ... • Supongamos que un fabricante de máquinas

21

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

41

Comparación de cadenasCONST

C TERMINADOR = CHR(0); N LONG_MAX = 100TIPOS

C TCadena [1..LONG_MAX]ALGORITMO B Iguales(E TCadena cadena1, cadena2)VAR

N comp, longCad1, longCad2B igual

INICIOigual = VERDADEROlongCad1 = Longitud (cadena1)longCad2 = Longitud (cadena2)SI longCad1 == longCad2 ENTONCEScomp = 1// ... Seguimos a continuación

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

42

Comparación de cadenas (continuación)

//... viene de atrásMIENTRAS (comp <= longCad2) Y iguales HACER

SI cadena1[comp]!= cadena2[comp] ENTONCESigual = FALSO

FINSIcomp = comp + 1

FINMIENTRASSINO

igual = FALSOFINSIDEVOLVER igual

FIN Iguales

Page 22: Tema 5. Tipos de datos definidos por el usuario - lcc.uma.esrusman/docencia/ic/tema5_2005_2006.pdf · Tema 5. D. Usuario 1 Tema 5. ... • Supongamos que un fabricante de máquinas

22

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

43

Búsqueda de subcadenas (patrones)CONST

C TERMINADOR = CHR(0)N LONG_MAX = 100

TIPOSC TCadena [1..LONG_MAX]

// Precondición: las cadenas deben estar correctamente definidasALGORITMO Z Posicion (EE TCadena texto, patron)VARN i, j, longTxt,longPtrZ posB encontrado

INICIOlongTxt = Longitud (texto)longPtr = Longitud (patron)i = 0encontrado = FALSO// Sigue detrás...

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

44

Búsqueda de subcadenas (continuación)MIENTRAS (i + longPtr<=longTxt) Y (NO encontrado) HACER

j = 1MIENTRAS (j<=longPtr) Y (texto[i+j] == patron[j]) HACER

j = j + 1FINMIENTRASSI j > longPtr ENTONCES

encontrado = VERDADEROSINO

i = i + 1FINSI

FINMIENTRASSI encontrado ENTONCES

pos = i+1SINO

pos = -1FINSIDEVOLVER pos

FIN Posicion

Page 23: Tema 5. Tipos de datos definidos por el usuario - lcc.uma.esrusman/docencia/ic/tema5_2005_2006.pdf · Tema 5. D. Usuario 1 Tema 5. ... • Supongamos que un fabricante de máquinas

23

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

45

Cadenas de caracteres en C++

#include <cstring> // Librería de cadenas// strcpy(des,org): copiar cadenas// strcmp(a, b): comparar cadenas// strcat(des,org): concatena cadenas...const unsigned int MAX_LONG = 256;typedef char TpCadena[MAX_LONG];

...TpCadena cad1 = “inicializo bien”, cad2;cad1 = “asignacion incorrecta”;cad2 = cad1; // Asignación incorrectastrcpy(cad1, “asignacion correcta”);strcpy(cad2,cad1); // Asignación correcta

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

46

Concepto de registro

• Un registro es una colección heterogénea (de distinto tipo) de uno o más elementos.

• Cada uno de los elementos de un registro recibe el nombre de campo.

• Los campos de un registro puede ser de cualquier tipo simple o estructurado: no tiene un único tipo base.

• Un tipo registro se declara en la sección de TIPOS y permite declarar variables de tipo registro.

Page 24: Tema 5. Tipos de datos definidos por el usuario - lcc.uma.esrusman/docencia/ic/tema5_2005_2006.pdf · Tema 5. D. Usuario 1 Tema 5. ... • Supongamos que un fabricante de máquinas

24

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

47

Declaración de registros

TIPOSREGISTRO TpRegistro1 // Nuevo tipo

<TipoBase1> campo1<TipoBase2> campo2, campo3...

FINREGISTROVARTpRegistro1 unReg, otroReg // RegistrosREGISTRO yOtroMas // Otro registro

<TipoBase3> campoA<TipoBase4> campoB...

FINREGISTRO

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

48

Ejemplo de declaración de registros

TIPOSN TDíaENUM {Enero, Febrero, Marzo, Abril, Mayo, Junio, Julio,

Agosto, Septiembre, Octubre, Noviembre, Diciembre} TMesZ TAñoREGISTRO TFecha // Un nuevo tipo registro

TDía d // Campos del tipo registro TFechaTMes m // Cada campo tiene su tipo e identificadorTAño a

FINREGISTRO

VARTFecha f // Un nuevo registroTFecha nace = {31, Diciembre, 2004} // Inicialización

Page 25: Tema 5. Tipos de datos definidos por el usuario - lcc.uma.esrusman/docencia/ic/tema5_2005_2006.pdf · Tema 5. D. Usuario 1 Tema 5. ... • Supongamos que un fabricante de máquinas

25

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

49

Más ejemplos de declaraciones

TIPOSENUM {oros, copas, espadas, bastos} TpaloENUM {as, dos, tres, cuatro, cinco, seis, siete, sota, caballo, rey} TValorREGISTRO TCarta

TPalo pTValor v

FINREGISTROREGISTRO TTiempo

N horas // Los campos pueden ser del mismo tipo baseN minutos, segundos

FINREGISTRO

VARTCarta cTTiempo t1, t2

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

50

Operaciones básicas con registros

• Asignación: siempre que los registros sean exactamente del mismo tipo.t1 = t2 // Registros del mismo tipo

Se copian todos los campos de t2 en t1.

• Acceso a los campos mediante el operador ‘punto’:t1.horas = t2.horast1.minutos = t2.minutost1.segundos = t2.segundos// Equivale a la asignación t1 = t2

Page 26: Tema 5. Tipos de datos definidos por el usuario - lcc.uma.esrusman/docencia/ic/tema5_2005_2006.pdf · Tema 5. D. Usuario 1 Tema 5. ... • Supongamos que un fabricante de máquinas

26

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

51

Registros en C++const char FINCAD = ‘\0’;const int MAXCAD = 20;const int ENTER = ‘\n’;typedef char TCadena[MAXCAD+1]; // MAXCAD caracteres + FINCADstruct TFecha{ // Nuevo tipo registro

int dia, mes, anho;};struct TPersona{ // Nuevo tipo registro

TCadena nombre, apellido1, apellido2;int edad;TCadena nif;TFecha fecha_nacimiento;

};...TPersona tu = {“Juan”, “Perez”,”Perez”,22,”55”,12,12,1999};tu.fecha_nacimiento.mes = 11;strcpy(tu.nombre, “Pepe”);

21-nov-05Introducción a los ComputadoresTema 5. D. Usuario

52

Bibliografía

• Programación en C++. Algoritmos, estructuras de datos y objetos. L. Joyanes. McGraw-Hill, 2000.

• Cómo programar en C/C++. H.M. Deitel, P.J. Deitel. Prentice Hall, 1995.

• Pascal. Dale/Orshalick. Ed. McGraw Hill 1986• Programación I. José A. Cerrada y Manuel Collado.

U.N.E.D. 1993.• Fundamentos de Programación. Joyanes Aguilar.

McGraw Hill. 2ª Edición, 1996.• Introduction to programming with Modula-2. Saim

Ural/Suzan Ural. Wiley. 1987.