Post on 18-Sep-2018
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
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
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.
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.
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
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.
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:
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}
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.
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
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
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
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
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
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]
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”“progitt@geb.uma.es”
“ a Eiou_12345_&$-__”
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
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
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
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
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
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
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.
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
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
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.