Actualizado el 15 de Junio del 2021 (Publicado el 17 de Noviembre del 2018)
1.361 visualizaciones desde el 17 de Noviembre del 2018
2,2 MB
34 paginas
Creado hace 11a (03/09/2013)
Fundamentos de la programación
5
Grado en Ingeniería Informática
Grado en Ingeniería del Software
Grado en Ingeniería de Computadores
Facultad de Informática
Luis Hernández Yáñez/Pablo Moreno Ger
Universidad Complutense
Tipos de datos
Arrays de nuevo
Arrays y bucles for
Más sobre arrays
Inicialización de arrays
Enumerados como índices
Paso de arrays a subprogramas
Implementación de listas
Cadenas de caracteres
Cadenas de caracteres de tipo string
Entrada/salida con string
Operaciones con string
Estructuras
Estructuras dentro de estructuras
Arrays de estructuras
Arrays dentro de estructuras
Listas de longitud variable
Un ejemplo completo
El bucle do..while
l
r
e
G
o
n
e
r
o
M
o
b
a
P
/
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
Fundamentos de la programación: Tipos de datos estructurados
514
517
520
522
523
524
525
528
531
535
539
541
543
549
550
551
552
558
562
l
r
e
G
o
n
e
r
o
M
o
b
a
P
/
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
l
r
e
G
o
n
e
r
o
M
o
b
a
P
/
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
Fundamentos de la programación: Tipos de datos estructurados
Página 514
Clasificación de tipos
Simples
Estándar: int, float, double, char, bool
Conjunto de valores predeterminado
Definidos por el usuario: enumerados
Conjunto de valores definido por el programador
Estructurados
Colecciones homogéneas: arrays
Todos los elementos del mismo tipo
Colecciones heterogéneas: estructuras
Los elementos pueden ser de tipos distintos
Fundamentos de la programación: Tipos de datos estructurados
Página 515
Colecciones o tipos aglomerados
Agrupaciones de datos (elementos):
Todosdelmismotipo: arrayo tabla
Detiposdistintos: estructura, registroo tupla
Arrays (tablas)
Elementos organizados por posición: 0, 1, 2, 3, ...
Acceso por índice: 0, 1, 2, 3, ...
Una o varias dimensiones
Estructuras (tuplas, registros)
Elementos (campos) sin orden establecido
Acceso por nombre
Fundamentos de la programación: Tipos de datos estructurados
Página 516
Fundamentos de la programación: Tipos de datos estructurados
Página 517
l
r
e
G
o
n
e
r
o
M
o
b
a
P
/
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
l
r
e
G
o
n
e
r
o
M
o
b
a
P
/
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
Estructura secuencial
Cada elemento se encuentra en una posición (índice):
Los índices son enteros positivos
El índice del primer elemento siempre es 0
Los índices se incrementan de uno en uno
A cada elemento se accede a través de su índice:
ventas[4]accede al 5º elemento (contiene el valor 435.00)
Datos de un mismo tipo base:
Datos de un mismo tipo base:
Se usan como cualquier variable
Se usan como cualquier variable
cout << ventas[4];
ventas[4] = 442.75;
328.80 254.62 435.00 164.29
ventas 125.40
76.95
0.00
0
1
2
Acceso directo
3
4
5
6
[]
l
r
e
G
o
n
e
r
o
M
o
b
a
P
/
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
Fundamentos de la programación: Tipos de datos estructurados
Página 518
const int Dias = 7;
typedef double tVentas[Dias];
Declaración de tipos de arrays
const int Dimensión = ...;
typedef tipo_base tNombre[Dimensión];
Ejemplo:
Declaración de variables de tipos array: como cualquier otra
¡NO se inicializan los elementos automáticamente!
¡Es responsabilidad del programador usar índices válidos!
No se pueden copiar arrays directamente (array1 = array2)
Hay que copiarlos elemento a elemento
tVentas ventas;
Fundamentos de la programación: Tipos de datos estructurados
Página 519
l
r
e
G
o
n
e
r
o
M
o
b
a
P
/
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
Procesamiento de arrays
Recorridos
Búsquedas
Ordenación
Arrays: tamaño fijo Bucles de recorrido fijo (for)
etcétera...
Recorrido de arrays con bucles for
tVentas ventas;
double media, total = 0;
...
for (int i = 0; i < Dias; i++) {
total = total + ventas[i];
}
media = total / Dias;
const int Dias = 7;
typedef double tVentas[Dias];
Fundamentos de la programación: Tipos de datos estructurados
Página 520
12.40
10.96
8.43
11.65
13.70
13.41
14.07
0
1
2
3
4
5
6
tVentas ventas;
double media, total = 0;
...
for (int i = 0; i < Dias; i++) {
total = total + ventas[i];
}
i = 0
true
true
false
false
i<Dias
total+=ventas[i]
i++
......
Dias
ventas[0]
ventas[1]
ventas[2]
ventas[3]
ventas[4]
ventas[5]
ventas[6]
media
total
i
Memoria
7
12.40
10.96
8.43
11.65
13.70
13.41
14.07
?
84.62
23.36
31.79
12.40
0.00
43.44
3
2
7
0
4
1
Fundamentos de la programación: Tipos de datos estructurados
Página 521
l
r
e
G
o
n
e
r
o
M
o
b
a
P
/
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
l
r
e
G
o
n
e
r
o
M
o
b
a
P
/
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
l
r
e
G
o
n
e
r
o
M
o
b
a
P
/
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
l
r
e
G
o
n
e
r
o
M
o
b
a
P
/
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
Fundamentos de la programación: Tipos de datos estructurados
Página 522
const int DIM = 10;
typedef int tTabla[DIM];
tTabla i = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Podemos inicializar los elementos de los arrays en la declaración
Asignamosuna serie de valores al array:
Se asignan los valores por su orden:
Si hay menos valores que elementos, los restantes se ponen a 0
i[0] i[1] i[2] i[3] i[4] ... i[9]
5º ... 10º
4º
1º
2º
3º
tTabla i = { 0 }; // Pone todos los elementos a 0
Fundamentos de la programación: Tipos de datos estructurados
Página 523
const int Colores = 3,
typedef enum { rojo, verde, azul } tRGB;
typedef int tColor[Colores];
tColor color;
...
cout << "Cantidad de rojo (0‐255): ";
cin >> color[rojo];
cout << "Cantidad de verde (0‐255): ";
cin >> color[verde];
cout << "Cantidad de azul (0‐255): ";
cin >> color[azul];
Recuerda que internamente se asignan enteros a partir de 0
a los distintos símbolos del enumerado
rojo 0 verde 1 azul 2
Fundamentos de la programación: Tipos de datos estructurados
Página 524
Simulación de paso de parámetro por referencia
Sin poner & en la declaración del parámetro
Los subprogramas reciben la dirección en memoria del array
Las modificaciones del array quedan reflejadas en el argumento
Si inicializa()modifica algún elemento de tabla,
automáticamente queda modificado ese elemento de array
const int Max = 10;
typedef int tTabla[Max];
void inicializa(tTabla tabla); // Sin poner &
inicializa(array);
¡Son el mismo array!
Fundamentos de la programación: Tipos de datos estructurados
Página 525
l
r
e
G
o
n
e
r
o
M
o
b
a
P
/
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
l
r
e
G
o
n
e
r
o
M
o
b
a
P
/
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
const int Dim = 10;
typedef int tTabla[Dim];
void inicializa(tTabla tabla); // no se usa &
void inicializa(tTabla tabla) {
for (int i = 0; i < Dim; i++)
tabla[i] = i;
}
int main() {
tTabla array;
inicializa(array); // array queda modificado
for (int i = 0; i < Dim; i++)
cout << array[i] << " ";
...
0 1 2 3 4 5 6 7 8 9
Fundamentos de la programación: Tipos de datos estructurados
Página 526
¿Cómo evitar que se modifique el array?
Usando el modificador consten la declaración del parámetro:
Un array de constantes
El argumento se tratará como un array de constantes
Si en el subprograma hay alguna instrucción que intente
modificar un elemento del array: error de compilación
void muestra(const tTabla tabla);
const tTabla tabla
void muestra(const tTabla tabla) {
for (int i = 0; i < Dim; i++) {
cout << tabla[i] << " ";
// OK. Se accede, pero no se modifica
}
}
Fundamentos de la programación: Tipos de datos estructurados
Página 527
l
r
e
G
o
n
e
r
o
M
o
b
a
P
/
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
l
r
e
G
o
n
e
r
o
M
o
b
a
P
/
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
l
r
e
G
o
n
e
r
o
M
o
b
a
P
/
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
Fundamentos de la programación: Tipos de datos estructurados
Página 528
const int NUM = 100;
typedef double tLista[NUM]; // Exactamente 100 double
tLista lista;
Listas con un número fijo de elementos
Array con el nº de elementos como dimensión
Recorrido de la lista:
Búsqueda en la lista:
for (int i = 0; i < NUM; i++) {
...
while ((i < NUM) && !encontrado) {
...
Fundamentos de la programación: Tipos de datos estructurados
Página 529
l
r
e
G
o
n
e
r
o
M
o
b
a
P
/
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
Listas con un número variable de elementos
Array con un máximo de elementos + Contador de elementos
Recorrido de la lista:
Búsqueda en la lista:
const int MAX = 100;
typedef double tLista[MAX]; // Hasta 100 elementos
tLista lista;
int contador = 0; // Se incrementa al insertar
for (int i = 0; i < contador; i++) {
...
while ((i < contador) && !encontrado) {
¿Array y contador por separado? Estructuras
...
Fundamentos de la programación: Tipos de datos estructurados
Página 530
Fundamentos de la programación: Tipos de datos estructurados
Página 531
l
r
e
G
o
n
e
r
o
M
o
b
a
P
/
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
l
r
e
G
o
n
e
r
o
M
o
b
a
P
/
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
Arrays de caracteres
"Hola" "Adiós" "Supercalifragilístico" "1234 56 7"
Cadenas: secuencias de caracteres de longitud variable
Variables de cadena: contienen secuencias de caracteres
Se guardan en arrays de caracteres: tamaño máximo (dimensión)
No todas las posiciones del array son relevantes:
Longitud de la cadena: número de caracteres, desde el
primero, que realmente constituyen la cadena:
Longitud actual: 4
H o l a
3
0
12
10
11
13
16
17
18
19
20
14
15
2
5
1
4
6
7
8
9
21
Fundamentos de la programación: Tipos de datos estructurados
Página 532
Longitud de la cadena
3
5
6
1
2
7
8
15
14
17
16
13
11
10
12
A d i ó s
4
0
Longitud: 5
Longitud: 21
Necesidad de saber dónde terminan los caracteres relevantes:
Mantener la longitud de la cadena como dato asociado
Colocar un carácter de terminación al final (centinela)
S u p e r c a l i f r a g i l í s t i c o
0
20
12
10
11
13
16
17
18
19
18
19
20
14
15
2
1
3
4
7
8
5
6
9
9
21
21
A
0
Comentarios de: FP05 - Tipos de datos estructurados (0)
No hay comentarios